<?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>53520</bug_id>
          
          <creation_ts>2011-02-01 12:30:01 -0800</creation_ts>
          <short_desc>Get rid of physical terminology like left/right/top/bottom on IntRect and FloatRect</short_desc>
          <delta_ts>2011-02-02 15:46:41 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Layout and Rendering</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>53613</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Dave Hyatt">hyatt</reporter>
          <assigned_to name="Dave Hyatt">hyatt</assigned_to>
          <cc>abarth</cc>
    
    <cc>buildbot</cc>
    
    <cc>dglazkov</cc>
    
    <cc>eric</cc>
    
    <cc>gustavo.noronha</cc>
    
    <cc>gustavo</cc>
    
    <cc>ossy</cc>
    
    <cc>tonikitoo</cc>
    
    <cc>webkit-ews</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>343421</commentid>
    <comment_count>0</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2011-02-01 12:30:01 -0800</bug_when>
    <thetext>Remove the physical terminology from IntRect and FloatRect.  Now that we have flipped RenderBlocks for vertical-rl and horizontal-bt writing modes, we need to update our terminology to be more accurate.

I&apos;m borrowing a page from AppKit here (which also supports flipped NSViews) and renaming right() and bottom() to maxX() and maxY().  These terms remain accurate even for flipped rectangles.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>343423</commentid>
    <comment_count>1</comment_count>
      <attachid>80802</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2011-02-01 12:32:49 -0800</bug_when>
    <thetext>Created attachment 80802
Step 1: Convert most of WebCore and WebKit without getting rid of the methods yet.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>343424</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-02-01 12:34:54 -0800</bug_when>
    <thetext>Attachment 80802 did not pass style-queue:

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

Source/WebCore/rendering/RenderTableCell.cpp:806:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
Total errors found: 1 in 59 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>343426</commentid>
    <comment_count>3</comment_count>
      <attachid>80803</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2011-02-01 12:36:02 -0800</bug_when>
    <thetext>Created attachment 80803
Step 1: Convert most of WebCore and WebKit without getting rid of the methods yet.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>343429</commentid>
    <comment_count>4</comment_count>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2011-02-01 12:36:56 -0800</bug_when>
    <thetext>Attachment 80802 did not build on gtk:
Build output: http://queues.webkit.org/results/7684691</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>343430</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-02-01 12:38:24 -0800</bug_when>
    <thetext>Attachment 80803 did not pass style-queue:

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

Source/WebCore/rendering/RenderTableCell.cpp:806:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
Total errors found: 1 in 59 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>343433</commentid>
    <comment_count>6</comment_count>
      <attachid>80804</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2011-02-01 12:43:18 -0800</bug_when>
    <thetext>Created attachment 80804
Step 1: Convert most of WebCore and WebKit without getting rid of the methods yet.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>343440</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-02-01 12:47:03 -0800</bug_when>
    <thetext>Attachment 80802 did not build on chromium:
Build output: http://queues.webkit.org/results/7681828</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>343441</commentid>
    <comment_count>8</comment_count>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2011-02-01 12:47:39 -0800</bug_when>
    <thetext>Attachment 80803 did not build on gtk:
Build output: http://queues.webkit.org/results/7685655</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>343442</commentid>
    <comment_count>9</comment_count>
      <attachid>80807</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2011-02-01 12:49:24 -0800</bug_when>
    <thetext>Created attachment 80807
Step 1: Convert most of WebCore and WebKit without getting rid of the methods yet.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>343444</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-02-01 12:50:43 -0800</bug_when>
    <thetext>Attachment 80803 did not build on chromium:
Build output: http://queues.webkit.org/results/7684694</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>343445</commentid>
    <comment_count>11</comment_count>
      <attachid>80807</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2011-02-01 12:54:00 -0800</bug_when>
    <thetext>Comment on attachment 80807
Step 1: Convert most of WebCore and WebKit without getting rid of the methods yet.

r-, still has shiftMinYEdgeTo</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>343446</commentid>
    <comment_count>12</comment_count>
      <attachid>80808</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2011-02-01 12:54:53 -0800</bug_when>
    <thetext>Created attachment 80808
Step 1: Convert most of WebCore and WebKit without getting rid of the methods yet.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>343447</commentid>
    <comment_count>13</comment_count>
      <attachid>80808</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2011-02-01 12:56:57 -0800</bug_when>
    <thetext>Comment on attachment 80808
Step 1: Convert most of WebCore and WebKit without getting rid of the methods yet.

Add changelogs, and watch the build bots.  r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>343448</commentid>
    <comment_count>14</comment_count>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2011-02-01 12:59:13 -0800</bug_when>
    <thetext>Attachment 80803 did not build on qt:
Build output: http://queues.webkit.org/results/7686565</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>343451</commentid>
    <comment_count>15</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-02-01 13:02:15 -0800</bug_when>
    <thetext>Attachment 80804 did not build on chromium:
Build output: http://queues.webkit.org/results/7682757</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>343455</commentid>
    <comment_count>16</comment_count>
    <who name="Collabora GTK+ EWS bot">gustavo.noronha</who>
    <bug_when>2011-02-01 13:04:13 -0800</bug_when>
    <thetext>Attachment 80804 did not build on gtk:
Build output: http://queues.webkit.org/results/7680905</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>343461</commentid>
    <comment_count>17</comment_count>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2011-02-01 13:10:38 -0800</bug_when>
    <thetext>Attachment 80807 did not build on gtk:
Build output: http://queues.webkit.org/results/7685665</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>343462</commentid>
    <comment_count>18</comment_count>
      <attachid>80812</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2011-02-01 13:12:58 -0800</bug_when>
    <thetext>Created attachment 80812
Step 1: Convert most of WebCore and WebKit without getting rid of the methods yet.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>343465</commentid>
    <comment_count>19</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-02-01 13:17:14 -0800</bug_when>
    <thetext>Attachment 80808 did not build on chromium:
Build output: http://queues.webkit.org/results/7680907</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>343466</commentid>
    <comment_count>20</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2011-02-01 13:18:01 -0800</bug_when>
    <thetext>Attachment 80803 did not build on win:
Build output: http://queues.webkit.org/results/7685668</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>343467</commentid>
    <comment_count>21</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2011-02-01 13:22:27 -0800</bug_when>
    <thetext>Attachment 80802 did not build on win:
Build output: http://queues.webkit.org/results/7684706</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>343468</commentid>
    <comment_count>22</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2011-02-01 13:23:47 -0800</bug_when>
    <thetext>Attachment 80804 did not build on win:
Build output: http://queues.webkit.org/results/7687290</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>343469</commentid>
    <comment_count>23</comment_count>
      <attachid>80813</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2011-02-01 13:25:06 -0800</bug_when>
    <thetext>Created attachment 80813
Step 1: Convert most of WebCore and WebKit without getting rid of the methods yet.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>343495</commentid>
    <comment_count>24</comment_count>
      <attachid>80813</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2011-02-01 13:37:38 -0800</bug_when>
    <thetext>Comment on attachment 80813
Step 1: Convert most of WebCore and WebKit without getting rid of the methods yet.

changelog! :)

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>343500</commentid>
    <comment_count>25</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2011-02-01 13:40:04 -0800</bug_when>
    <thetext>Step 1 landed in r77286.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>343503</commentid>
    <comment_count>26</comment_count>
      <attachid>80819</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2011-02-01 13:41:25 -0800</bug_when>
    <thetext>Created attachment 80819
Step 2: Remove the physical accessors.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>343508</commentid>
    <comment_count>27</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-02-01 13:45:43 -0800</bug_when>
    <thetext>Attachment 80812 did not build on chromium:
Build output: http://queues.webkit.org/results/7685675</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>343509</commentid>
    <comment_count>28</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-02-01 13:48:48 -0800</bug_when>
    <thetext>http://trac.webkit.org/changeset/77286 might have broken Qt Linux Release minimal, Qt Linux ARMv5 Release, and Qt Windows 32-bit Release</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>343510</commentid>
    <comment_count>29</comment_count>
      <attachid>80819</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-02-01 13:51:34 -0800</bug_when>
    <thetext>Comment on attachment 80819
Step 2: Remove the physical accessors.

You should wait for the early warning system to tell you if you broke any ports before landing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>343514</commentid>
    <comment_count>30</comment_count>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2011-02-01 13:56:03 -0800</bug_when>
    <thetext>Attachment 80819 did not build on gtk:
Build output: http://queues.webkit.org/results/7687301</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>343516</commentid>
    <comment_count>31</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-02-01 13:57:30 -0800</bug_when>
    <thetext>Attachment 80813 did not build on chromium:
Build output: http://queues.webkit.org/results/7687302</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>343525</commentid>
    <comment_count>32</comment_count>
      <attachid>80823</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2011-02-01 14:05:24 -0800</bug_when>
    <thetext>Created attachment 80823
Step 2: (Reviewed by Darin, just using bots to check for errors) Remove accessors.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>343529</commentid>
    <comment_count>33</comment_count>
    <who name="Collabora GTK+ EWS bot">gustavo.noronha</who>
    <bug_when>2011-02-01 14:12:37 -0800</bug_when>
    <thetext>Attachment 80823 did not build on gtk:
Build output: http://queues.webkit.org/results/7684722</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>343530</commentid>
    <comment_count>34</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-02-01 14:13:03 -0800</bug_when>
    <thetext>Attachment 80819 did not build on chromium:
Build output: http://queues.webkit.org/results/7681858</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>343547</commentid>
    <comment_count>35</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-02-01 14:28:19 -0800</bug_when>
    <thetext>Attachment 80823 did not build on chromium:
Build output: http://queues.webkit.org/results/7680948</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>343553</commentid>
    <comment_count>36</comment_count>
      <attachid>80830</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2011-02-01 14:36:21 -0800</bug_when>
    <thetext>Created attachment 80830
Step 2: (Reviewed by Darin, just using bots to check for errors) Remove accessors.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>343576</commentid>
    <comment_count>37</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-02-01 15:06:18 -0800</bug_when>
    <thetext>Attachment 80830 did not build on chromium:
Build output: http://queues.webkit.org/results/7683744</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>343589</commentid>
    <comment_count>38</comment_count>
      <attachid>80837</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2011-02-01 15:20:41 -0800</bug_when>
    <thetext>Created attachment 80837
Step 2: (Reviewed by Darin, just using bots to check for errors) Remove accessors.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>343598</commentid>
    <comment_count>39</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-02-01 15:36:52 -0800</bug_when>
    <thetext>Attachment 80837 did not build on chromium:
Build output: http://queues.webkit.org/results/7686610</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>343616</commentid>
    <comment_count>40</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2011-02-01 15:53:04 -0800</bug_when>
    <thetext>Attachment 80823 did not build on win:
Build output: http://queues.webkit.org/results/7683761</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>343714</commentid>
    <comment_count>41</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2011-02-01 17:40:45 -0800</bug_when>
    <thetext>Attachment 80837 did not build on win:
Build output: http://queues.webkit.org/results/7683782</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>343722</commentid>
    <comment_count>42</comment_count>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2011-02-01 17:52:55 -0800</bug_when>
    <thetext>Attachment 80837 did not build on gtk:
Build output: http://queues.webkit.org/results/7685725</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>343731</commentid>
    <comment_count>43</comment_count>
      <attachid>80864</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2011-02-01 18:00:36 -0800</bug_when>
    <thetext>Created attachment 80864
Step 2: (Reviewed by Darin, just using bots to check for errors) Remove accessors.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>343741</commentid>
    <comment_count>44</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2011-02-01 18:12:45 -0800</bug_when>
    <thetext>Attachment 80837 did not build on win:
Build output: http://queues.webkit.org/results/7686646</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>343746</commentid>
    <comment_count>45</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-02-01 18:16:20 -0800</bug_when>
    <thetext>Attachment 80864 did not build on chromium:
Build output: http://queues.webkit.org/results/7686650</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>343756</commentid>
    <comment_count>46</comment_count>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2011-02-01 18:26:39 -0800</bug_when>
    <thetext>Attachment 80864 did not build on gtk:
Build output: http://queues.webkit.org/results/7689018</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>343782</commentid>
    <comment_count>47</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2011-02-01 19:22:31 -0800</bug_when>
    <thetext>Attachment 80864 did not build on win:
Build output: http://queues.webkit.org/results/7684808</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>343798</commentid>
    <comment_count>48</comment_count>
      <attachid>80878</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2011-02-01 20:21:52 -0800</bug_when>
    <thetext>Created attachment 80878
Step 2: (Reviewed by Darin, just using bots to check for errors) Remove accessors.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>343804</commentid>
    <comment_count>49</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-02-01 20:37:14 -0800</bug_when>
    <thetext>Attachment 80878 did not build on chromium:
Build output: http://queues.webkit.org/results/7683835</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>343807</commentid>
    <comment_count>50</comment_count>
      <attachid>80880</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2011-02-01 20:40:12 -0800</bug_when>
    <thetext>Created attachment 80880
Step 2: (Reviewed by Darin, just using bots to check for errors) Remove accessors.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>343816</commentid>
    <comment_count>51</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-02-01 20:55:39 -0800</bug_when>
    <thetext>Attachment 80880 did not build on chromium:
Build output: http://queues.webkit.org/results/7682885</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>343823</commentid>
    <comment_count>52</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2011-02-01 21:18:14 -0800</bug_when>
    <thetext>Attachment 80878 did not build on win:
Build output: http://queues.webkit.org/results/7685776</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>343830</commentid>
    <comment_count>53</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2011-02-01 21:27:24 -0800</bug_when>
    <thetext>Attachment 80880 did not build on win:
Build output: http://queues.webkit.org/results/7685778</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>343886</commentid>
    <comment_count>54</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2011-02-01 23:29:05 -0800</bug_when>
    <thetext>http://trac.webkit.org/changeset/77328(In reply to comment #25)
&gt; Step 1 landed in r77286.

Qt buildfix: http://trac.webkit.org/changeset/77291 (by Hyatt)
Chromium buildfix: http://trac.webkit.org/changeset/77292 (by Hyatt)
Qt buildfix: http://trac.webkit.org/changeset/77300 (by Hyatt)
Qt buildfix: http://trac.webkit.org/changeset/77312 (by Hyatt)
Qt buildfix: http://trac.webkit.org/changeset/77316 (by Hyatt)
Qt buildfix: http://trac.webkit.org/changeset/77317 (by Hyatt)
Qt buildfix: http://trac.webkit.org/changeset/77328 (by me)

If you had asked a Qt guy, it would have been easiear ...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>344007</commentid>
    <comment_count>55</comment_count>
      <attachid>80922</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2011-02-02 09:29:24 -0800</bug_when>
    <thetext>Created attachment 80922
Step 2: (Reviewed by Darin, just using bots to check for errors) Remove accessors.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>344045</commentid>
    <comment_count>56</comment_count>
      <attachid>80929</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2011-02-02 10:34:38 -0800</bug_when>
    <thetext>Created attachment 80929
Step 2: (Reviewed by Darin, just using bots to check for errors) Remove accessors.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>344047</commentid>
    <comment_count>57</comment_count>
      <attachid>80930</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2011-02-02 10:36:09 -0800</bug_when>
    <thetext>Created attachment 80930
Step 2: (Reviewed by Darin, just using bots to check for errors) Remove accessors.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>344058</commentid>
    <comment_count>58</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-02-02 10:56:04 -0800</bug_when>
    <thetext>Attachment 80929 did not build on chromium:
Build output: http://queues.webkit.org/results/7685941</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>344062</commentid>
    <comment_count>59</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-02-02 10:59:10 -0800</bug_when>
    <thetext>Attachment 80930 did not build on chromium:
Build output: http://queues.webkit.org/results/7690139</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>344081</commentid>
    <comment_count>60</comment_count>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2011-02-02 11:29:51 -0800</bug_when>
    <thetext>Attachment 80930 did not build on qt:
Build output: http://queues.webkit.org/results/7691050</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>344129</commentid>
    <comment_count>61</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2011-02-02 12:21:06 -0800</bug_when>
    <thetext>Fixed in r77398.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>344325</commentid>
    <comment_count>62</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-02-02 15:46:41 -0800</bug_when>
    <thetext>http://trac.webkit.org/changeset/77405 might have broken GTK Linux 32-bit Release
The following tests are not passing:
editing/selection/find-yensign-and-backslash.html
http/tests/websocket/tests/handshake-fail-by-sub-protocol-mismatch.html</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>80802</attachid>
            <date>2011-02-01 12:32:49 -0800</date>
            <delta_ts>2011-02-01 12:36:02 -0800</delta_ts>
            <desc>Step 1: Convert most of WebCore and WebKit without getting rid of the methods yet.</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>108051</size>
            <attacher name="Dave Hyatt">hyatt</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9i
amVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nl
c3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcAkocmV2aXNpb24gNzcyNjApCisrKyBTb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yNTE5LDcgKzI1MTksNyBAQCBJbnRSZWN0IEFjY2Vzc2liaWxpdHlSZW5kZXJP
YmplY3Q6OmJvdW5kCiAgICAgb3VycmVjdC51bml0ZShyZWN0Mik7CiAgICAgCiAgICAgLy8gaWYg
dGhlIHJlY3RhbmdsZSBzcGFucyBsaW5lcyBhbmQgY29udGFpbnMgbXVsdGlwbGUgdGV4dCBjaGFy
cywgdXNlIHRoZSByYW5nZSdzIGJvdW5kaW5nIGJveCBpbnRlYWQKLSAgICBpZiAocmVjdDEuYm90
dG9tKCkgIT0gcmVjdDIuYm90dG9tKCkpIHsKKyAgICBpZiAocmVjdDEubWF4WSgpICE9IHJlY3Qy
Lm1heFkoKSkgewogICAgICAgICBSZWZQdHI8UmFuZ2U+IGRhdGFSYW5nZSA9IG1ha2VSYW5nZShy
YW5nZS5zdGFydCwgcmFuZ2UuZW5kKTsKICAgICAgICAgSW50UmVjdCBib3VuZGluZ0JveCA9IGRh
dGFSYW5nZS0+Ym91bmRpbmdCb3goKTsKICAgICAgICAgU3RyaW5nIHJhbmdlU3RyaW5nID0gcGxh
aW5UZXh0KGRhdGFSYW5nZS5nZXQoKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L21hYy9BY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlci5tbQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9BY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlci5t
bQkocmV2aXNpb24gNzcyNjApCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9B
Y2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlci5tbQkod29ya2luZyBjb3B5KQpAQCAtMTEyNSw3ICsx
MTI1LDcgQEAgLSAoTlNWYWx1ZSopcG9zaXRpb24KICAgICAgICAgcG9pbnQueSA9IHNjcmVlbkhl
aWdodCAtIChwb2ludC55ICsgcmVtb3RlUG9zaXRpb24ueSArIHJlY3QuaGVpZ2h0KCkgLSBzY3Jv
bGxQb3NpdGlvbi55KTsKICAgICB9IGVsc2UgewogICAgICAgICAvLyBUaGUgQ29jb2EgYWNjZXNz
aWJpbGl0eSBBUEkgd2FudHMgdGhlIGxvd2VyLWxlZnQgY29ybmVyLgotICAgICAgICBwb2ludCA9
IE5TTWFrZVBvaW50KHJlY3QueCgpLCByZWN0LmJvdHRvbSgpKTsKKyAgICAgICAgcG9pbnQgPSBO
U01ha2VQb2ludChyZWN0LngoKSwgcmVjdC5tYXhZKCkpOwogICAgICAgICAKICAgICAgICAgaWYg
KGZyYW1lVmlldykgewogICAgICAgICAgICAgTlNWaWV3KiB2aWV3ID0gZnJhbWVWaWV3LT5kb2N1
bWVudFZpZXcoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9DbGllbnRSZWN0LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0NsaWVudFJlY3QuaAkocmV2aXNpb24gNzcyNjAp
CisrKyBTb3VyY2UvV2ViQ29yZS9kb20vQ2xpZW50UmVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC00
Miw4ICs0Miw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgc3RhdGljIFBhc3NSZWZQ
dHI8Q2xpZW50UmVjdD4gY3JlYXRlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkgeyByZXR1cm4gYWRv
cHRSZWYobmV3IENsaWVudFJlY3QocmVjdCkpOyB9CiAKICAgICAgICAgZmxvYXQgdG9wKCkgY29u
c3QgeyByZXR1cm4gbV9yZWN0LnkoKTsgfQotICAgICAgICBmbG9hdCByaWdodCgpIGNvbnN0IHsg
cmV0dXJuIG1fcmVjdC5yaWdodCgpOyB9Ci0gICAgICAgIGZsb2F0IGJvdHRvbSgpIGNvbnN0IHsg
cmV0dXJuIG1fcmVjdC5ib3R0b20oKTsgfQorICAgICAgICBmbG9hdCByaWdodCgpIGNvbnN0IHsg
cmV0dXJuIG1fcmVjdC5tYXhYKCk7IH0KKyAgICAgICAgZmxvYXQgbWF4WSgpIGNvbnN0IHsgcmV0
dXJuIG1fcmVjdC5tYXhZKCk7IH0KICAgICAgICAgZmxvYXQgbGVmdCgpIGNvbnN0IHsgcmV0dXJu
IG1fcmVjdC54KCk7IH0KICAgICAgICAgZmxvYXQgd2lkdGgoKSBjb25zdCB7IHJldHVybiBtX3Jl
Y3Qud2lkdGgoKTsgfQogICAgICAgICBmbG9hdCBoZWlnaHQoKSBjb25zdCB7IHJldHVybiBtX3Jl
Y3QuaGVpZ2h0KCk7IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1l
bnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1l
bnQuY3BwCShyZXZpc2lvbiA3NzI2MCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZh
c0VsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNDQsMTAgKzM0NCwxMCBAQCBTdHJpbmcg
SFRNTENhbnZhc0VsZW1lbnQ6OnRvRGF0YVVSTChjb25zCiAKIEludFJlY3QgSFRNTENhbnZhc0Vs
ZW1lbnQ6OmNvbnZlcnRMb2dpY2FsVG9EZXZpY2UoY29uc3QgRmxvYXRSZWN0JiBsb2dpY2FsUmVj
dCkgY29uc3QKIHsKLSAgICBmbG9hdCBsZWZ0ID0gZmxvb3JmKGxvZ2ljYWxSZWN0LmxlZnQoKSAq
IG1fcGFnZVNjYWxlRmFjdG9yKTsKLSAgICBmbG9hdCB0b3AgPSBmbG9vcmYobG9naWNhbFJlY3Qu
dG9wKCkgKiBtX3BhZ2VTY2FsZUZhY3Rvcik7Ci0gICAgZmxvYXQgcmlnaHQgPSBjZWlsZihsb2dp
Y2FsUmVjdC5yaWdodCgpICogbV9wYWdlU2NhbGVGYWN0b3IpOwotICAgIGZsb2F0IGJvdHRvbSA9
IGNlaWxmKGxvZ2ljYWxSZWN0LmJvdHRvbSgpICogbV9wYWdlU2NhbGVGYWN0b3IpOworICAgIGZs
b2F0IGxlZnQgPSBmbG9vcmYobG9naWNhbFJlY3QueCgpICogbV9wYWdlU2NhbGVGYWN0b3IpOwor
ICAgIGZsb2F0IHRvcCA9IGZsb29yZihsb2dpY2FsUmVjdC55KCkgKiBtX3BhZ2VTY2FsZUZhY3Rv
cik7CisgICAgZmxvYXQgcmlnaHQgPSBjZWlsZihsb2dpY2FsUmVjdC5tYXhYKCkgKiBtX3BhZ2VT
Y2FsZUZhY3Rvcik7CisgICAgZmxvYXQgYm90dG9tID0gY2VpbGYobG9naWNhbFJlY3QubWF4WSgp
ICogbV9wYWdlU2NhbGVGYWN0b3IpOwogICAgIAogICAgIHJldHVybiBJbnRSZWN0KEludFBvaW50
KGxlZnQsIHRvcCksIGNvbnZlcnRUb1ZhbGlkRGV2aWNlU2l6ZShyaWdodCAtIGxlZnQsIGJvdHRv
bSAtIHRvcCkpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJELmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2Nh
bnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCShyZXZpc2lvbiA3NzI2MCkKKysrIFNv
dXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTExMDUsOCArMTEwNSw4IEBAIHN0YXRpYyBJbnRTaXplIHNpemUoSFRN
TFZpZGVvRWxlbWVudCogdmkKIAogc3RhdGljIGlubGluZSBGbG9hdFJlY3Qgbm9ybWFsaXplUmVj
dChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7Ci0gICAgcmV0dXJuIEZsb2F0UmVjdChtaW4ocmVj
dC54KCksIHJlY3QucmlnaHQoKSksCi0gICAgICAgIG1pbihyZWN0LnkoKSwgcmVjdC5ib3R0b20o
KSksCisgICAgcmV0dXJuIEZsb2F0UmVjdChtaW4ocmVjdC54KCksIHJlY3QubWF4WCgpKSwKKyAg
ICAgICAgbWluKHJlY3QueSgpLCByZWN0Lm1heFkoKSksCiAgICAgICAgIG1heChyZWN0LndpZHRo
KCksIC1yZWN0LndpZHRoKCkpLAogICAgICAgICBtYXgocmVjdC5oZWlnaHQoKSwgLXJlY3QuaGVp
Z2h0KCkpKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JBZ2Vu
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckFn
ZW50LmNwcAkocmV2aXNpb24gNzcyNjApCisrKyBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yQWdlbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjc0LDcgKzEyNzQsNyBAQCB2b2lk
IEluc3BlY3RvckFnZW50OjpkcmF3RWxlbWVudFRpdGxlKEdyCiAgICAgZm9udC51cGRhdGUoMCk7
CiAKICAgICBUZXh0UnVuIG5vZGVUaXRsZVJ1bihub2RlVGl0bGUpOwotICAgIEludFBvaW50IHRp
dGxlQmFzZVBvaW50ID0gYm91bmRpbmdCb3guYm90dG9tTGVmdCgpOworICAgIEludFBvaW50IHRp
dGxlQmFzZVBvaW50ID0gSW50UG9pbnQoYm91bmRpbmdCb3gueCgpLCBib3VuZGluZ0JveC5tYXhZ
KCkgLSAxKTsKICAgICB0aXRsZUJhc2VQb2ludC5tb3ZlKHJlY3RJbmZsYXRlUHgsIHJlY3RJbmZs
YXRlUHgpOwogICAgIEludFJlY3QgdGl0bGVSZWN0ID0gZW5jbG9zaW5nSW50UmVjdChmb250LnNl
bGVjdGlvblJlY3RGb3JUZXh0KG5vZGVUaXRsZVJ1biwgdGl0bGVCYXNlUG9pbnQsIGZvbnRIZWln
aHRQeCkpOwogICAgIHRpdGxlUmVjdC5pbmZsYXRlKHJlY3RJbmZsYXRlUHgpOwpAQCAtMTI4NCwx
OSArMTI4NCwxOSBAQCB2b2lkIEluc3BlY3RvckFnZW50OjpkcmF3RWxlbWVudFRpdGxlKEdyCiAg
ICAgaW50IGR5ID0gYm9yZGVyV2lkdGhQeDsKIAogICAgIC8vIElmIHRoZSB0aXAgc3RpY2tzIGJl
eW9uZCB0aGUgcmlnaHQgb2Ygb3ZlcmxheVJlY3QsIHJpZ2h0LWFsaWduIHRoZSB0aXAgd2l0aCB0
aGUgc2FpZCBib3VuZGFyeS4KLSAgICBpZiAodGl0bGVSZWN0LnJpZ2h0KCkgPiBvdmVybGF5UmVj
dC5yaWdodCgpKQotICAgICAgICBkeCA9IG92ZXJsYXlSZWN0LnJpZ2h0KCkgLSB0aXRsZVJlY3Qu
cmlnaHQoKTsKKyAgICBpZiAodGl0bGVSZWN0Lm1heFgoKSA+IG92ZXJsYXlSZWN0Lm1heFgoKSkK
KyAgICAgICAgZHggPSBvdmVybGF5UmVjdC5tYXhYKCkgLSB0aXRsZVJlY3QubWF4WCgpOwogCiAg
ICAgLy8gSWYgdGhlIHRpcCBzdGlja3MgYmV5b25kIHRoZSBsZWZ0IG9mIG92ZXJsYXlSZWN0LCBs
ZWZ0LWFsaWduIHRoZSB0aXAgd2l0aCB0aGUgc2FpZCBib3VuZGFyeS4KICAgICBpZiAodGl0bGVS
ZWN0LngoKSArIGR4IDwgb3ZlcmxheVJlY3QueCgpKQogICAgICAgICBkeCA9IG92ZXJsYXlSZWN0
LngoKSAtIHRpdGxlUmVjdC54KCkgLSBib3JkZXJXaWR0aFB4OwogCiAgICAgLy8gSWYgdGhlIHRp
cCBzdGlja3MgYmV5b25kIHRoZSBib3R0b20gb2Ygb3ZlcmxheVJlY3QsIHNob3cgdGhlIHRpcCBh
dCB0b3Agb2YgYm91bmRpbmcgYm94LgotICAgIGlmICh0aXRsZVJlY3QuYm90dG9tKCkgPiBvdmVy
bGF5UmVjdC5ib3R0b20oKSkgewotICAgICAgICBkeSA9IGJvdW5kaW5nQm94LnkoKSAtIHRpdGxl
UmVjdC5ib3R0b20oKSAtIGJvcmRlcldpZHRoUHg7CisgICAgaWYgKHRpdGxlUmVjdC5tYXhZKCkg
PiBvdmVybGF5UmVjdC5tYXhZKCkpIHsKKyAgICAgICAgZHkgPSBib3VuZGluZ0JveC55KCkgLSB0
aXRsZVJlY3QubWF4WSgpIC0gYm9yZGVyV2lkdGhQeDsKICAgICAgICAgLy8gSWYgdGhlIHRpcCBz
dGlsbCBzdGlja3MgYmV5b25kIHRoZSBib3R0b20gb2Ygb3ZlcmxheVJlY3QsIGJvdHRvbS1hbGln
biB0aGUgdGlwIHdpdGggdGhlIHNhaWQgYm91bmRhcnkuCi0gICAgICAgIGlmICh0aXRsZVJlY3Qu
Ym90dG9tKCkgKyBkeSA+IG92ZXJsYXlSZWN0LmJvdHRvbSgpKQotICAgICAgICAgICAgZHkgPSBv
dmVybGF5UmVjdC5ib3R0b20oKSAtIHRpdGxlUmVjdC5ib3R0b20oKTsKKyAgICAgICAgaWYgKHRp
dGxlUmVjdC5tYXhZKCkgKyBkeSA+IG92ZXJsYXlSZWN0Lm1heFkoKSkKKyAgICAgICAgICAgIGR5
ID0gb3ZlcmxheVJlY3QubWF4WSgpIC0gdGl0bGVSZWN0Lm1heFkoKTsKICAgICB9CiAKICAgICAv
LyBJZiB0aGUgdGlwIHN0aWNrcyBiZXlvbmQgdGhlIHRvcCBvZiBvdmVybGF5UmVjdCwgc2hvdyB0
aGUgdGlwIGF0IHRvcCBvZiBvdmVybGF5UmVjdC4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2Uv
RE9NV2luZG93LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRv
dy5jcHAJKHJldmlzaW9uIDc3MjYwKQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9ET01XaW5kb3cu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNDIsOCArMzQyLDggQEAgdm9pZCBET01XaW5kb3c6OmFk
anVzdFdpbmRvd1JlY3QoY29uc3QgRgogICAgIHdpbmRvdy5zZXRIZWlnaHQobWluKG1heCgxMDAu
MGYsIHdpbmRvdy5oZWlnaHQoKSksIHNjcmVlbi5oZWlnaHQoKSkpOwogICAgIAogICAgIC8vIENv
bnN0cmFpbiB0aGUgd2luZG93IHBvc2l0aW9uIHRvIHRoZSBzY3JlZW4uCi0gICAgd2luZG93LnNl
dFgobWF4KHNjcmVlbi54KCksIG1pbih3aW5kb3cueCgpLCBzY3JlZW4ucmlnaHQoKSAtIHdpbmRv
dy53aWR0aCgpKSkpOwotICAgIHdpbmRvdy5zZXRZKG1heChzY3JlZW4ueSgpLCBtaW4od2luZG93
LnkoKSwgc2NyZWVuLmJvdHRvbSgpIC0gd2luZG93LmhlaWdodCgpKSkpOworICAgIHdpbmRvdy5z
ZXRYKG1heChzY3JlZW4ueCgpLCBtaW4od2luZG93LngoKSwgc2NyZWVuLm1heFgoKSAtIHdpbmRv
dy53aWR0aCgpKSkpOworICAgIHdpbmRvdy5zZXRZKG1heChzY3JlZW4ueSgpLCBtaW4od2luZG93
LnkoKSwgc2NyZWVuLm1heFkoKSAtIHdpbmRvdy5oZWlnaHQoKSkpKTsKIH0KIAogLy8gRklYTUU6
IFdlIGNhbiByZW1vdmUgdGhpcyBmdW5jdGlvbiBvbmNlIFY4IHNob3dNb2RhbERpYWxvZyBpcyBj
aGFuZ2VkIHRvIHVzZSBET01XaW5kb3cuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0RyYWdD
b250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL0RyYWdDb250
cm9sbGVyLmNwcAkocmV2aXNpb24gNzcyNjApCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL0RyYWdD
b250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjQ0LDkgKzY0NCw5IEBAIHN0YXRpYyBJ
bnRQb2ludCBkcmFnTG9jRm9yREhUTUxEcmFnKGNvbnMKIHN0YXRpYyBJbnRQb2ludCBkcmFnTG9j
Rm9yU2VsZWN0aW9uRHJhZyhGcmFtZSogc3JjKQogewogICAgIEludFJlY3QgZHJhZ2dpbmdSZWN0
ID0gZW5jbG9zaW5nSW50UmVjdChzcmMtPnNlbGVjdGlvbigpLT5ib3VuZHMoKSk7Ci0gICAgaW50
IHhwb3MgPSBkcmFnZ2luZ1JlY3QucmlnaHQoKTsKKyAgICBpbnQgeHBvcyA9IGRyYWdnaW5nUmVj
dC5tYXhYKCk7CiAgICAgeHBvcyA9IGRyYWdnaW5nUmVjdC54KCkgPCB4cG9zID8gZHJhZ2dpbmdS
ZWN0LngoKSA6IHhwb3M7Ci0gICAgaW50IHlwb3MgPSBkcmFnZ2luZ1JlY3QuYm90dG9tKCk7Cisg
ICAgaW50IHlwb3MgPSBkcmFnZ2luZ1JlY3QubWF4WSgpOwogI2lmIFBMQVRGT1JNKE1BQykKICAg
ICAvLyBEZWFsIHdpdGggZmxpcHBlZCBjb29yZGluYXRlcyBvbiBNYWMKICAgICB5cG9zID0gZHJh
Z2dpbmdSZWN0LnkoKSA+IHlwb3MgPyBkcmFnZ2luZ1JlY3QueSgpIDogeXBvczsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAJKHJldmlzaW9uIDc3MjYwKQorKysgU291cmNl
L1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTExLDEy
ICsyMTExLDEyIEBAIGJvb2wgRXZlbnRIYW5kbGVyOjpzZW5kQ29udGV4dE1lbnVFdmVudEYKICAg
ICAgICAgUmVmUHRyPFJhbmdlPiBzZWxlY3Rpb24gPSBzZWxlY3Rpb25Db250cm9sbGVyLT50b05v
cm1hbGl6ZWRSYW5nZSgpOwogICAgICAgICBJbnRSZWN0IGZpcnN0UmVjdCA9IG1fZnJhbWUtPmVk
aXRvcigpLT5maXJzdFJlY3RGb3JSYW5nZShzZWxlY3Rpb24uZ2V0KCkpOwogCi0gICAgICAgIGlu
dCB4ID0gcmlnaHRBbGlnbmVkID8gZmlyc3RSZWN0LnJpZ2h0KCkgOiBmaXJzdFJlY3QueCgpOwot
ICAgICAgICBsb2NhdGlvbiA9IEludFBvaW50KHgsIGZpcnN0UmVjdC5ib3R0b20oKSk7CisgICAg
ICAgIGludCB4ID0gcmlnaHRBbGlnbmVkID8gZmlyc3RSZWN0Lm1heFgoKSA6IGZpcnN0UmVjdC54
KCk7CisgICAgICAgIGxvY2F0aW9uID0gSW50UG9pbnQoeCwgZmlyc3RSZWN0Lm1heFkoKSk7CiAg
ICAgfSBlbHNlIGlmIChmb2N1c2VkTm9kZSkgewogICAgICAgICBSZW5kZXJCb3hNb2RlbE9iamVj
dCogYm94ID0gZm9jdXNlZE5vZGUtPnJlbmRlckJveE1vZGVsT2JqZWN0KCk7CiAgICAgICAgIElu
dFJlY3QgY2xpcHBlZFJlY3QgPSBib3gtPmFic29sdXRlQ2xpcHBlZE92ZXJmbG93UmVjdCgpOwot
ICAgICAgICBsb2NhdGlvbiA9IGNsaXBwZWRSZWN0LmJvdHRvbUxlZnQoKTsKKyAgICAgICAgbG9j
YXRpb24gPSBJbnRQb2ludChjbGlwcGVkUmVjdC54KCksIGNsaXBwZWRSZWN0Lm1heFkoKSAtIDEp
OwogICAgIH0gZWxzZSB7CiAgICAgICAgIGxvY2F0aW9uID0gSW50UG9pbnQoCiAgICAgICAgICAg
ICByaWdodEFsaWduZWQgPyB2aWV3LT5jb250ZW50c1dpZHRoKCkgLSBrQ29udGV4dE1lbnVNYXJn
aW4gOiBrQ29udGV4dE1lbnVNYXJnaW4sCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL1ByaW50
Q29udGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9QcmludENvbnRl
eHQuY3BwCShyZXZpc2lvbiA3NzI2MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvUHJpbnRDb250
ZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM1LDI0ICsxMzUsMjQgQEAgdm9pZCBQcmludENv
bnRleHQ6OmNvbXB1dGVQYWdlUmVjdHNXaXRoUAogICAgIGludCBibG9ja0RpcmVjdGlvbkVuZDsK
ICAgICBpZiAoaXNIb3Jpem9udGFsKSB7CiAgICAgICAgIGlmICh2aWV3LT5zdHlsZSgpLT5pc0Zs
aXBwZWRCbG9ja3NXcml0aW5nTW9kZSgpKSB7Ci0gICAgICAgICAgICBibG9ja0RpcmVjdGlvblN0
YXJ0ID0gZG9jUmVjdC5ib3R0b20oKTsKKyAgICAgICAgICAgIGJsb2NrRGlyZWN0aW9uU3RhcnQg
PSBkb2NSZWN0Lm1heFkoKTsKICAgICAgICAgICAgIGJsb2NrRGlyZWN0aW9uRW5kID0gZG9jUmVj
dC55KCk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBibG9ja0RpcmVjdGlvblN0YXJ0
ID0gZG9jUmVjdC55KCk7Ci0gICAgICAgICAgICBibG9ja0RpcmVjdGlvbkVuZCA9IGRvY1JlY3Qu
Ym90dG9tKCk7CisgICAgICAgICAgICBibG9ja0RpcmVjdGlvbkVuZCA9IGRvY1JlY3QubWF4WSgp
OwogICAgICAgICB9Ci0gICAgICAgIGlubGluZURpcmVjdGlvblN0YXJ0ID0gdmlldy0+c3R5bGUo
KS0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpID8gZG9jUmVjdC54KCkgOiBkb2NSZWN0LnJpZ2h0
KCk7Ci0gICAgICAgIGlubGluZURpcmVjdGlvbkVuZCA9IHZpZXctPnN0eWxlKCktPmlzTGVmdFRv
UmlnaHREaXJlY3Rpb24oKSA/IGRvY1JlY3QucmlnaHQoKSA6IGRvY1JlY3QueCgpOworICAgICAg
ICBpbmxpbmVEaXJlY3Rpb25TdGFydCA9IHZpZXctPnN0eWxlKCktPmlzTGVmdFRvUmlnaHREaXJl
Y3Rpb24oKSA/IGRvY1JlY3QueCgpIDogZG9jUmVjdC5tYXhYKCk7CisgICAgICAgIGlubGluZURp
cmVjdGlvbkVuZCA9IHZpZXctPnN0eWxlKCktPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/IGRv
Y1JlY3QubWF4WCgpIDogZG9jUmVjdC54KCk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgaWYgKHZp
ZXctPnN0eWxlKCktPmlzRmxpcHBlZEJsb2Nrc1dyaXRpbmdNb2RlKCkpIHsKLSAgICAgICAgICAg
IGJsb2NrRGlyZWN0aW9uU3RhcnQgPSBkb2NSZWN0LnJpZ2h0KCk7CisgICAgICAgICAgICBibG9j
a0RpcmVjdGlvblN0YXJ0ID0gZG9jUmVjdC5tYXhYKCk7CiAgICAgICAgICAgICBibG9ja0RpcmVj
dGlvbkVuZCA9IGRvY1JlY3QueCgpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgYmxv
Y2tEaXJlY3Rpb25TdGFydCA9IGRvY1JlY3QueCgpOwotICAgICAgICAgICAgYmxvY2tEaXJlY3Rp
b25FbmQgPSBkb2NSZWN0LnJpZ2h0KCk7CisgICAgICAgICAgICBibG9ja0RpcmVjdGlvbkVuZCA9
IGRvY1JlY3QubWF4WCgpOwogICAgICAgICB9Ci0gICAgICAgIGlubGluZURpcmVjdGlvblN0YXJ0
ID0gdmlldy0+c3R5bGUoKS0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpID8gZG9jUmVjdC55KCkg
OiBkb2NSZWN0LmJvdHRvbSgpOwotICAgICAgICBpbmxpbmVEaXJlY3Rpb25FbmQgPSB2aWV3LT5z
dHlsZSgpLT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyBkb2NSZWN0LmJvdHRvbSgpIDogZG9j
UmVjdC55KCk7CisgICAgICAgIGlubGluZURpcmVjdGlvblN0YXJ0ID0gdmlldy0+c3R5bGUoKS0+
aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpID8gZG9jUmVjdC55KCkgOiBkb2NSZWN0Lm1heFkoKTsK
KyAgICAgICAgaW5saW5lRGlyZWN0aW9uRW5kID0gdmlldy0+c3R5bGUoKS0+aXNMZWZ0VG9SaWdo
dERpcmVjdGlvbigpID8gZG9jUmVjdC5tYXhZKCkgOiBkb2NSZWN0LnkoKTsKICAgICB9CiAKICAg
ICB1bnNpZ25lZCBwYWdlQ291bnQgPSBjZWlsZigoZmxvYXQpZG9jTG9naWNhbEhlaWdodCAvIHBh
Z2VMb2dpY2FsSGVpZ2h0KTsKQEAgLTI3NCw3ICsyNzQsNyBAQCBpbnQgUHJpbnRDb250ZXh0Ojpw
YWdlTnVtYmVyRm9yRWxlbWVudChFCiAgICAgc2l6ZV90IHBhZ2VOdW1iZXIgPSAwOwogICAgIGZv
ciAoOyBwYWdlTnVtYmVyIDwgcHJpbnRDb250ZXh0LnBhZ2VDb3VudCgpOyBwYWdlTnVtYmVyKysp
IHsKICAgICAgICAgY29uc3QgSW50UmVjdCYgcGFnZSA9IHByaW50Q29udGV4dC5wYWdlUmVjdChw
YWdlTnVtYmVyKTsKLSAgICAgICAgaWYgKHBhZ2UueCgpIDw9IGxlZnQgJiYgbGVmdCA8IHBhZ2Uu
cmlnaHQoKSAmJiBwYWdlLnkoKSA8PSB0b3AgJiYgdG9wIDwgcGFnZS5ib3R0b20oKSkKKyAgICAg
ICAgaWYgKHBhZ2UueCgpIDw9IGxlZnQgJiYgbGVmdCA8IHBhZ2UubWF4WCgpICYmIHBhZ2UueSgp
IDw9IHRvcCAmJiB0b3AgPCBwYWdlLm1heFkoKSkKICAgICAgICAgICAgIHJldHVybiBwYWdlTnVt
YmVyOwogICAgIH0KICAgICByZXR1cm4gLTE7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL1Nw
YXRpYWxOYXZpZ2F0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL1Nw
YXRpYWxOYXZpZ2F0aW9uLmNwcAkocmV2aXNpb24gNzcyNjApCisrKyBTb3VyY2UvV2ViQ29yZS9w
YWdlL1NwYXRpYWxOYXZpZ2F0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI3LDcgKzEyNyw3
IEBAIHN0YXRpYyBpbmxpbmUgaW50IG1pZGRsZShGb2N1c0RpcmVjdGlvbiAKIAogc3RhdGljIGlu
bGluZSBpbnQgZW5kKEZvY3VzRGlyZWN0aW9uIGRpcmVjdGlvbiwgY29uc3QgSW50UmVjdCYgcmVj
dCkKIHsKLSAgICByZXR1cm4gaXNIb3Jpem9udGFsTW92ZShkaXJlY3Rpb24pID8gcmVjdC5ib3R0
b20oKSA6IHJlY3QucmlnaHQoKTsKKyAgICByZXR1cm4gaXNIb3Jpem9udGFsTW92ZShkaXJlY3Rp
b24pID8gcmVjdC5tYXhZKCkgOiByZWN0Lm1heFgoKTsKIH0KIAogLy8gVGhpcyBtZXRob2QgY2hl
Y2tzIGlmIHJlY3RzIHxhfCBhbmQgfGJ8IGFyZSBmdWxseSBhbGlnbmVkIGVpdGhlciB2ZXJ0aWNh
bGx5IG9yCkBAIC0xNDQsMTEgKzE0NCwxMSBAQCBzdGF0aWMgYm9vbCBhcmVSZWN0c0Z1bGx5QWxp
Z25lZChGb2N1c0RpCiAgICAgc3dpdGNoIChkaXJlY3Rpb24pIHsKICAgICBjYXNlIEZvY3VzRGly
ZWN0aW9uTGVmdDoKICAgICAgICAgYVN0YXJ0ID0gYS54KCk7Ci0gICAgICAgIGJFbmQgPSBiLnJp
Z2h0KCk7CisgICAgICAgIGJFbmQgPSBiLm1heFgoKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2Fz
ZSBGb2N1c0RpcmVjdGlvblJpZ2h0OgogICAgICAgICBhU3RhcnQgPSBiLngoKTsKLSAgICAgICAg
YkVuZCA9IGEucmlnaHQoKTsKKyAgICAgICAgYkVuZCA9IGEubWF4WCgpOwogICAgICAgICBicmVh
azsKICAgICBjYXNlIEZvY3VzRGlyZWN0aW9uVXA6CiAgICAgICAgIGFTdGFydCA9IGEueSgpOwpA
QCAtMjQ1LDEzICsyNDUsMTMgQEAgc3RhdGljIGJvb2wgYXJlUmVjdHNNb3JlVGhhbkZ1bGxTY3Jl
ZW5BcAogCiAgICAgc3dpdGNoIChkaXJlY3Rpb24pIHsKICAgICBjYXNlIEZvY3VzRGlyZWN0aW9u
TGVmdDoKLSAgICAgICAgcmV0dXJuIGN1clJlY3QueCgpIC0gdGFyZ2V0UmVjdC5yaWdodCgpID4g
dmlld1NpemUud2lkdGgoKTsKKyAgICAgICAgcmV0dXJuIGN1clJlY3QueCgpIC0gdGFyZ2V0UmVj
dC5tYXhYKCkgPiB2aWV3U2l6ZS53aWR0aCgpOwogICAgIGNhc2UgRm9jdXNEaXJlY3Rpb25SaWdo
dDoKLSAgICAgICAgcmV0dXJuIHRhcmdldFJlY3QueCgpIC0gY3VyUmVjdC5yaWdodCgpID4gdmll
d1NpemUud2lkdGgoKTsKKyAgICAgICAgcmV0dXJuIHRhcmdldFJlY3QueCgpIC0gY3VyUmVjdC5t
YXhYKCkgPiB2aWV3U2l6ZS53aWR0aCgpOwogICAgIGNhc2UgRm9jdXNEaXJlY3Rpb25VcDoKLSAg
ICAgICAgcmV0dXJuIGN1clJlY3QueSgpIC0gdGFyZ2V0UmVjdC5ib3R0b20oKSA+IHZpZXdTaXpl
LmhlaWdodCgpOworICAgICAgICByZXR1cm4gY3VyUmVjdC55KCkgLSB0YXJnZXRSZWN0Lm1heFko
KSA+IHZpZXdTaXplLmhlaWdodCgpOwogICAgIGNhc2UgRm9jdXNEaXJlY3Rpb25Eb3duOgotICAg
ICAgICByZXR1cm4gdGFyZ2V0UmVjdC55KCkgLSBjdXJSZWN0LmJvdHRvbSgpID4gdmlld1NpemUu
aGVpZ2h0KCk7CisgICAgICAgIHJldHVybiB0YXJnZXRSZWN0LnkoKSAtIGN1clJlY3QubWF4WSgp
ID4gdmlld1NpemUuaGVpZ2h0KCk7CiAgICAgZGVmYXVsdDoKICAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CiAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtMjYxLDI2ICsyNjEsMjYgQEAgc3Rh
dGljIGJvb2wgYXJlUmVjdHNNb3JlVGhhbkZ1bGxTY3JlZW5BcAogLy8gUmV0dXJuIHRydWUgaWYg
cmVjdCB8YXwgaXMgYmVsb3cgfGJ8LiBGYWxzZSBvdGhlcndpc2UuCiBzdGF0aWMgaW5saW5lIGJv
b2wgYmVsb3coY29uc3QgSW50UmVjdCYgYSwgY29uc3QgSW50UmVjdCYgYikKIHsKLSAgICByZXR1
cm4gYS55KCkgPiBiLmJvdHRvbSgpOworICAgIHJldHVybiBhLnkoKSA+IGIubWF4WSgpOwogfQog
CiAvLyBSZXR1cm4gdHJ1ZSBpZiByZWN0IHxhfCBpcyBvbiB0aGUgcmlnaHQgb2YgfGJ8LiBGYWxz
ZSBvdGhlcndpc2UuCiBzdGF0aWMgaW5saW5lIGJvb2wgcmlnaHRPZihjb25zdCBJbnRSZWN0JiBh
LCBjb25zdCBJbnRSZWN0JiBiKQogewotICAgIHJldHVybiBhLngoKSA+IGIucmlnaHQoKTsKKyAg
ICByZXR1cm4gYS54KCkgPiBiLm1heFgoKTsKIH0KIAogc3RhdGljIGJvb2wgaXNSZWN0SW5EaXJl
Y3Rpb24oRm9jdXNEaXJlY3Rpb24gZGlyZWN0aW9uLCBjb25zdCBJbnRSZWN0JiBjdXJSZWN0LCBj
b25zdCBJbnRSZWN0JiB0YXJnZXRSZWN0KQogewogICAgIHN3aXRjaCAoZGlyZWN0aW9uKSB7CiAg
ICAgY2FzZSBGb2N1c0RpcmVjdGlvbkxlZnQ6Ci0gICAgICAgIHJldHVybiB0YXJnZXRSZWN0LnJp
Z2h0KCkgPD0gY3VyUmVjdC54KCk7CisgICAgICAgIHJldHVybiB0YXJnZXRSZWN0Lm1heFgoKSA8
PSBjdXJSZWN0LngoKTsKICAgICBjYXNlIEZvY3VzRGlyZWN0aW9uUmlnaHQ6Ci0gICAgICAgIHJl
dHVybiB0YXJnZXRSZWN0LngoKSA+PSBjdXJSZWN0LnJpZ2h0KCk7CisgICAgICAgIHJldHVybiB0
YXJnZXRSZWN0LngoKSA+PSBjdXJSZWN0Lm1heFgoKTsKICAgICBjYXNlIEZvY3VzRGlyZWN0aW9u
VXA6Ci0gICAgICAgIHJldHVybiB0YXJnZXRSZWN0LmJvdHRvbSgpIDw9IGN1clJlY3QueSgpOwor
ICAgICAgICByZXR1cm4gdGFyZ2V0UmVjdC5tYXhZKCkgPD0gY3VyUmVjdC55KCk7CiAgICAgY2Fz
ZSBGb2N1c0RpcmVjdGlvbkRvd246Ci0gICAgICAgIHJldHVybiB0YXJnZXRSZWN0LnkoKSA+PSBj
dXJSZWN0LmJvdHRvbSgpOworICAgICAgICByZXR1cm4gdGFyZ2V0UmVjdC55KCkgPj0gY3VyUmVj
dC5tYXhZKCk7CiAgICAgZGVmYXVsdDoKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAg
ICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTU0NCwxOCArNTQ0LDE4IEBAIHZvaWQgZW50cnlBbmRF
eGl0UG9pbnRzRm9yRGlyZWN0aW9uKEZvY3UKICAgICBzd2l0Y2ggKGRpcmVjdGlvbikgewogICAg
IGNhc2UgRm9jdXNEaXJlY3Rpb25MZWZ0OgogICAgICAgICBleGl0UG9pbnQuc2V0WChzdGFydGlu
Z1JlY3QueCgpKTsKLSAgICAgICAgZW50cnlQb2ludC5zZXRYKHBvdGVudGlhbFJlY3QucmlnaHQo
KSk7CisgICAgICAgIGVudHJ5UG9pbnQuc2V0WChwb3RlbnRpYWxSZWN0Lm1heFgoKSk7CiAgICAg
ICAgIGJyZWFrOwogICAgIGNhc2UgRm9jdXNEaXJlY3Rpb25VcDoKICAgICAgICAgZXhpdFBvaW50
LnNldFkoc3RhcnRpbmdSZWN0LnkoKSk7Ci0gICAgICAgIGVudHJ5UG9pbnQuc2V0WShwb3RlbnRp
YWxSZWN0LmJvdHRvbSgpKTsKKyAgICAgICAgZW50cnlQb2ludC5zZXRZKHBvdGVudGlhbFJlY3Qu
bWF4WSgpKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBGb2N1c0RpcmVjdGlvblJpZ2h0Ogot
ICAgICAgICBleGl0UG9pbnQuc2V0WChzdGFydGluZ1JlY3QucmlnaHQoKSk7CisgICAgICAgIGV4
aXRQb2ludC5zZXRYKHN0YXJ0aW5nUmVjdC5tYXhYKCkpOwogICAgICAgICBlbnRyeVBvaW50LnNl
dFgocG90ZW50aWFsUmVjdC54KCkpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEZvY3VzRGly
ZWN0aW9uRG93bjoKLSAgICAgICAgZXhpdFBvaW50LnNldFkoc3RhcnRpbmdSZWN0LmJvdHRvbSgp
KTsKKyAgICAgICAgZXhpdFBvaW50LnNldFkoc3RhcnRpbmdSZWN0Lm1heFkoKSk7CiAgICAgICAg
IGVudHJ5UG9pbnQuc2V0WShwb3RlbnRpYWxSZWN0LnkoKSk7CiAgICAgICAgIGJyZWFrOwogICAg
IGRlZmF1bHQ6CkBAIC01NjcsOSArNTY3LDkgQEAgdm9pZCBlbnRyeUFuZEV4aXRQb2ludHNGb3JE
aXJlY3Rpb24oRm9jdQogICAgIGNhc2UgRm9jdXNEaXJlY3Rpb25SaWdodDoKICAgICAgICAgaWYg
KGJlbG93KHN0YXJ0aW5nUmVjdCwgcG90ZW50aWFsUmVjdCkpIHsKICAgICAgICAgICAgIGV4aXRQ
b2ludC5zZXRZKHN0YXJ0aW5nUmVjdC55KCkpOwotICAgICAgICAgICAgZW50cnlQb2ludC5zZXRZ
KHBvdGVudGlhbFJlY3QuYm90dG9tKCkpOworICAgICAgICAgICAgZW50cnlQb2ludC5zZXRZKHBv
dGVudGlhbFJlY3QubWF4WSgpKTsKICAgICAgICAgfSBlbHNlIGlmIChiZWxvdyhwb3RlbnRpYWxS
ZWN0LCBzdGFydGluZ1JlY3QpKSB7Ci0gICAgICAgICAgICBleGl0UG9pbnQuc2V0WShzdGFydGlu
Z1JlY3QuYm90dG9tKCkpOworICAgICAgICAgICAgZXhpdFBvaW50LnNldFkoc3RhcnRpbmdSZWN0
Lm1heFkoKSk7CiAgICAgICAgICAgICBlbnRyeVBvaW50LnNldFkocG90ZW50aWFsUmVjdC55KCkp
OwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgZXhpdFBvaW50LnNldFkobWF4KHN0YXJ0
aW5nUmVjdC55KCksIHBvdGVudGlhbFJlY3QueSgpKSk7CkBAIC01ODAsOSArNTgwLDkgQEAgdm9p
ZCBlbnRyeUFuZEV4aXRQb2ludHNGb3JEaXJlY3Rpb24oRm9jdQogICAgIGNhc2UgRm9jdXNEaXJl
Y3Rpb25Eb3duOgogICAgICAgICBpZiAocmlnaHRPZihzdGFydGluZ1JlY3QsIHBvdGVudGlhbFJl
Y3QpKSB7CiAgICAgICAgICAgICBleGl0UG9pbnQuc2V0WChzdGFydGluZ1JlY3QueCgpKTsKLSAg
ICAgICAgICAgIGVudHJ5UG9pbnQuc2V0WChwb3RlbnRpYWxSZWN0LnJpZ2h0KCkpOworICAgICAg
ICAgICAgZW50cnlQb2ludC5zZXRYKHBvdGVudGlhbFJlY3QubWF4WCgpKTsKICAgICAgICAgfSBl
bHNlIGlmIChyaWdodE9mKHBvdGVudGlhbFJlY3QsIHN0YXJ0aW5nUmVjdCkpIHsKLSAgICAgICAg
ICAgIGV4aXRQb2ludC5zZXRYKHN0YXJ0aW5nUmVjdC5yaWdodCgpKTsKKyAgICAgICAgICAgIGV4
aXRQb2ludC5zZXRYKHN0YXJ0aW5nUmVjdC5tYXhYKCkpOwogICAgICAgICAgICAgZW50cnlQb2lu
dC5zZXRYKHBvdGVudGlhbFJlY3QueCgpKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAg
IGV4aXRQb2ludC5zZXRYKG1heChzdGFydGluZ1JlY3QueCgpLCBwb3RlbnRpYWxSZWN0LngoKSkp
OwpAQCAtNjc1LDExICs2NzUsMTEgQEAgSW50UmVjdCB2aXJ0dWFsUmVjdEZvckRpcmVjdGlvbihG
b2N1c0RpcgogICAgIEludFJlY3QgdmlydHVhbFN0YXJ0aW5nUmVjdCA9IHN0YXJ0aW5nUmVjdDsK
ICAgICBzd2l0Y2ggKGRpcmVjdGlvbikgewogICAgIGNhc2UgRm9jdXNEaXJlY3Rpb25MZWZ0Ogot
ICAgICAgICB2aXJ0dWFsU3RhcnRpbmdSZWN0LnNldFgodmlydHVhbFN0YXJ0aW5nUmVjdC5yaWdo
dCgpIC0gd2lkdGgpOworICAgICAgICB2aXJ0dWFsU3RhcnRpbmdSZWN0LnNldFgodmlydHVhbFN0
YXJ0aW5nUmVjdC5tYXhYKCkgLSB3aWR0aCk7CiAgICAgICAgIHZpcnR1YWxTdGFydGluZ1JlY3Qu
c2V0V2lkdGgod2lkdGgpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEZvY3VzRGlyZWN0aW9u
VXA6Ci0gICAgICAgIHZpcnR1YWxTdGFydGluZ1JlY3Quc2V0WSh2aXJ0dWFsU3RhcnRpbmdSZWN0
LmJvdHRvbSgpIC0gd2lkdGgpOworICAgICAgICB2aXJ0dWFsU3RhcnRpbmdSZWN0LnNldFkodmly
dHVhbFN0YXJ0aW5nUmVjdC5tYXhZKCkgLSB3aWR0aCk7CiAgICAgICAgIHZpcnR1YWxTdGFydGlu
Z1JlY3Quc2V0SGVpZ2h0KHdpZHRoKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBGb2N1c0Rp
cmVjdGlvblJpZ2h0OgpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9XaW5kb3dGZWF0dXJlcy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9XaW5kb3dGZWF0dXJlcy5jcHAJ
KHJldmlzaW9uIDc3MjYwKQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9XaW5kb3dGZWF0dXJlcy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTE4Niw5ICsxODYsOSBAQCBXaW5kb3dGZWF0dXJlczo6V2lu
ZG93RmVhdHVyZXMoY29uc3QgU3RyCiAgICAgd2lkdGggPSBmbG9hdEZlYXR1cmUoZmVhdHVyZXMs
ICJkaWFsb2d3aWR0aCIsIDEwMCwgc2NyZWVuQXZhaWxhYmxlUmVjdC53aWR0aCgpLCA2MjApOyAv
LyBkZWZhdWx0IGhlcmUgY2FtZSBmcm9tIGZyYW1lIHNpemUgb2YgZGlhbG9nIGluIE1hY0lFCiAg
ICAgaGVpZ2h0ID0gZmxvYXRGZWF0dXJlKGZlYXR1cmVzLCAiZGlhbG9naGVpZ2h0IiwgMTAwLCBz
Y3JlZW5BdmFpbGFibGVSZWN0LmhlaWdodCgpLCA0NTApOyAvLyBkZWZhdWx0IGhlcmUgY2FtZSBm
cm9tIGZyYW1lIHNpemUgb2YgZGlhbG9nIGluIE1hY0lFCiAKLSAgICB4ID0gZmxvYXRGZWF0dXJl
KGZlYXR1cmVzLCAiZGlhbG9nbGVmdCIsIHNjcmVlbkF2YWlsYWJsZVJlY3QueCgpLCBzY3JlZW5B
dmFpbGFibGVSZWN0LnJpZ2h0KCkgLSB3aWR0aCwgLTEpOworICAgIHggPSBmbG9hdEZlYXR1cmUo
ZmVhdHVyZXMsICJkaWFsb2dsZWZ0Iiwgc2NyZWVuQXZhaWxhYmxlUmVjdC54KCksIHNjcmVlbkF2
YWlsYWJsZVJlY3QubWF4WCgpIC0gd2lkdGgsIC0xKTsKICAgICB4U2V0ID0geCA+IDA7Ci0gICAg
eSA9IGZsb2F0RmVhdHVyZShmZWF0dXJlcywgImRpYWxvZ3RvcCIsIHNjcmVlbkF2YWlsYWJsZVJl
Y3QueSgpLCBzY3JlZW5BdmFpbGFibGVSZWN0LmJvdHRvbSgpIC0gaGVpZ2h0LCAtMSk7CisgICAg
eSA9IGZsb2F0RmVhdHVyZShmZWF0dXJlcywgImRpYWxvZ3RvcCIsIHNjcmVlbkF2YWlsYWJsZVJl
Y3QueSgpLCBzY3JlZW5BdmFpbGFibGVSZWN0Lm1heFkoKSAtIGhlaWdodCwgLTEpOwogICAgIHlT
ZXQgPSB5ID4gMDsKIAogICAgIGlmIChib29sRmVhdHVyZShmZWF0dXJlcywgImNlbnRlciIsIHRy
dWUpKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxWaWV3LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxWaWV3LmNwcAkocmV2aXNp
b24gNzcyNjApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxWaWV3LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtOTIyLDcgKzkyMiw3IEBAIHZvaWQgU2Nyb2xsVmlldzo6Y2FsY3VsYXRl
T3ZlcmhhbmdBcmVhc0YKICAgICB9IGVsc2UgaWYgKHNjcm9sbFkoKSA+IGNvbnRlbnRzSGVpZ2h0
KCkgLSB2aXNpYmxlQ29udGVudFJlY3QodHJ1ZSkuaGVpZ2h0KCkpIHsKICAgICAgICAgaW50IGhl
aWdodCA9IHNjcm9sbFkoKSAtIChjb250ZW50c0hlaWdodCgpIC0gdmlzaWJsZUNvbnRlbnRSZWN0
KHRydWUpLmhlaWdodCgpKTsKICAgICAgICAgaG9yaXpvbnRhbE92ZXJoYW5nUmVjdCA9IGZyYW1l
UmVjdCgpOwotICAgICAgICBob3Jpem9udGFsT3ZlcmhhbmdSZWN0LnNldFkoZnJhbWVSZWN0KCku
Ym90dG9tKCkgLSBoZWlnaHQpOworICAgICAgICBob3Jpem9udGFsT3ZlcmhhbmdSZWN0LnNldFko
ZnJhbWVSZWN0KCkubWF4WSgpIC0gaGVpZ2h0KTsKICAgICAgICAgaG9yaXpvbnRhbE92ZXJoYW5n
UmVjdC5zZXRIZWlnaHQoaGVpZ2h0KTsKICAgICB9CiAKQEAgLTkzOCw3ICs5MzgsNyBAQCB2b2lk
IFNjcm9sbFZpZXc6OmNhbGN1bGF0ZU92ZXJoYW5nQXJlYXNGCiAgICAgICAgIGludCB3aWR0aCA9
IHNjcm9sbFgoKSAtIChjb250ZW50c1dpZHRoKCkgLSB2aXNpYmxlQ29udGVudFJlY3QodHJ1ZSku
d2lkdGgoKSk7CiAgICAgICAgIHZlcnRpY2FsT3ZlcmhhbmdSZWN0LnNldFdpZHRoKHdpZHRoKTsK
ICAgICAgICAgdmVydGljYWxPdmVyaGFuZ1JlY3Quc2V0SGVpZ2h0KGZyYW1lUmVjdCgpLmhlaWdo
dCgpIC0gaG9yaXpvbnRhbE92ZXJoYW5nUmVjdC5oZWlnaHQoKSk7Ci0gICAgICAgIHZlcnRpY2Fs
T3ZlcmhhbmdSZWN0LnNldFgoZnJhbWVSZWN0KCkucmlnaHQoKSAtIHdpZHRoKTsKKyAgICAgICAg
dmVydGljYWxPdmVyaGFuZ1JlY3Quc2V0WChmcmFtZVJlY3QoKS5tYXhYKCkgLSB3aWR0aCk7CiAg
ICAgICAgIGlmIChob3Jpem9udGFsT3ZlcmhhbmdSZWN0LnkoKSA9PSBmcmFtZVJlY3QoKS55KCkp
CiAgICAgICAgICAgICB2ZXJ0aWNhbE92ZXJoYW5nUmVjdC5zZXRZKGZyYW1lUmVjdCgpLnkoKSAr
IGhvcml6b250YWxPdmVyaGFuZ1JlY3QuaGVpZ2h0KCkpOwogICAgICAgICBlbHNlCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGJhci5jcHAJKHJldmlzaW9uIDc3MjYwKQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzkz
LDE0ICszOTMsMTQgQEAgdm9pZCBTY3JvbGxiYXI6OnNldEZyYW1lUmVjdChjb25zdCBJbnRSZQog
ICAgICAgICBJbnRSZWN0IHJlc2l6ZXJSZWN0ID0gdmlldy0+Y29udmVydEZyb21Db250YWluaW5n
V2luZG93KHZpZXctPndpbmRvd1Jlc2l6ZXJSZWN0KCkpOwogICAgICAgICBpZiAocmVjdC5pbnRl
cnNlY3RzKHJlc2l6ZXJSZWN0KSkgewogICAgICAgICAgICAgaWYgKG9yaWVudGF0aW9uKCkgPT0g
SG9yaXpvbnRhbFNjcm9sbGJhcikgewotICAgICAgICAgICAgICAgIGludCBvdmVybGFwID0gcmVj
dC5yaWdodCgpIC0gcmVzaXplclJlY3QueCgpOwotICAgICAgICAgICAgICAgIGlmIChvdmVybGFw
ID4gMCAmJiByZXNpemVyUmVjdC5yaWdodCgpID49IHJlY3QucmlnaHQoKSkgeworICAgICAgICAg
ICAgICAgIGludCBvdmVybGFwID0gcmVjdC5tYXhYKCkgLSByZXNpemVyUmVjdC54KCk7CisgICAg
ICAgICAgICAgICAgaWYgKG92ZXJsYXAgPiAwICYmIHJlc2l6ZXJSZWN0Lm1heFgoKSA+PSByZWN0
Lm1heFgoKSkgewogICAgICAgICAgICAgICAgICAgICBhZGp1c3RlZFJlY3Quc2V0V2lkdGgocmVj
dC53aWR0aCgpIC0gb3ZlcmxhcCk7CiAgICAgICAgICAgICAgICAgICAgIG92ZXJsYXBzUmVzaXpl
ciA9IHRydWU7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgICAgICBpbnQgb3ZlcmxhcCA9IHJlY3QuYm90dG9tKCkgLSByZXNpemVyUmVjdC55KCk7
Ci0gICAgICAgICAgICAgICAgaWYgKG92ZXJsYXAgPiAwICYmIHJlc2l6ZXJSZWN0LmJvdHRvbSgp
ID49IHJlY3QuYm90dG9tKCkpIHsKKyAgICAgICAgICAgICAgICBpbnQgb3ZlcmxhcCA9IHJlY3Qu
bWF4WSgpIC0gcmVzaXplclJlY3QueSgpOworICAgICAgICAgICAgICAgIGlmIChvdmVybGFwID4g
MCAmJiByZXNpemVyUmVjdC5tYXhZKCkgPj0gcmVjdC5tYXhZKCkpIHsKICAgICAgICAgICAgICAg
ICAgICAgYWRqdXN0ZWRSZWN0LnNldEhlaWdodChyZWN0LmhlaWdodCgpIC0gb3ZlcmxhcCk7CiAg
ICAgICAgICAgICAgICAgICAgIG92ZXJsYXBzUmVzaXplciA9IHRydWU7CiAgICAgICAgICAgICAg
ICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFyVGhlbWVDb21wb3Np
dGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGJhclRo
ZW1lQ29tcG9zaXRlLmNwcAkocmV2aXNpb24gNzcyNjApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9TY3JvbGxiYXJUaGVtZUNvbXBvc2l0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0OCwx
MSArMjQ4LDExIEBAIHZvaWQgU2Nyb2xsYmFyVGhlbWVDb21wb3NpdGU6OnNwbGl0VHJhY2sKICAg
ICBpZiAoc2Nyb2xsYmFyLT5vcmllbnRhdGlvbigpID09IEhvcml6b250YWxTY3JvbGxiYXIpIHsK
ICAgICAgICAgdGh1bWJSZWN0ID0gSW50UmVjdCh0cmFja1JlY3QueCgpICsgdGh1bWJQb3MsIHRy
YWNrUmVjdC55KCkgKyAodHJhY2tSZWN0LmhlaWdodCgpIC0gdGhpY2tuZXNzKSAvIDIsIHRodW1i
TGVuZ3RoKHNjcm9sbGJhciksIHRoaWNrbmVzcyk7IAogICAgICAgICBiZWZvcmVUaHVtYlJlY3Qg
PSBJbnRSZWN0KHRyYWNrUmVjdC54KCksIHRyYWNrUmVjdC55KCksIHRodW1iUG9zICsgdGh1bWJS
ZWN0LndpZHRoKCkgLyAyLCB0cmFja1JlY3QuaGVpZ2h0KCkpOyAKLSAgICAgICAgYWZ0ZXJUaHVt
YlJlY3QgPSBJbnRSZWN0KHRyYWNrUmVjdC54KCkgKyBiZWZvcmVUaHVtYlJlY3Qud2lkdGgoKSwg
dHJhY2tSZWN0LnkoKSwgdHJhY2tSZWN0LnJpZ2h0KCkgLSBiZWZvcmVUaHVtYlJlY3QucmlnaHQo
KSwgdHJhY2tSZWN0LmhlaWdodCgpKTsKKyAgICAgICAgYWZ0ZXJUaHVtYlJlY3QgPSBJbnRSZWN0
KHRyYWNrUmVjdC54KCkgKyBiZWZvcmVUaHVtYlJlY3Qud2lkdGgoKSwgdHJhY2tSZWN0LnkoKSwg
dHJhY2tSZWN0Lm1heFgoKSAtIGJlZm9yZVRodW1iUmVjdC5tYXhYKCksIHRyYWNrUmVjdC5oZWln
aHQoKSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgdGh1bWJSZWN0ID0gSW50UmVjdCh0cmFja1Jl
Y3QueCgpICsgKHRyYWNrUmVjdC53aWR0aCgpIC0gdGhpY2tuZXNzKSAvIDIsIHRyYWNrUmVjdC55
KCkgKyB0aHVtYlBvcywgdGhpY2tuZXNzLCB0aHVtYkxlbmd0aChzY3JvbGxiYXIpKTsKICAgICAg
ICAgYmVmb3JlVGh1bWJSZWN0ID0gSW50UmVjdCh0cmFja1JlY3QueCgpLCB0cmFja1JlY3QueSgp
LCB0cmFja1JlY3Qud2lkdGgoKSwgdGh1bWJQb3MgKyB0aHVtYlJlY3QuaGVpZ2h0KCkgLyAyKTsg
Ci0gICAgICAgIGFmdGVyVGh1bWJSZWN0ID0gSW50UmVjdCh0cmFja1JlY3QueCgpLCB0cmFja1Jl
Y3QueSgpICsgYmVmb3JlVGh1bWJSZWN0LmhlaWdodCgpLCB0cmFja1JlY3Qud2lkdGgoKSwgdHJh
Y2tSZWN0LmJvdHRvbSgpIC0gYmVmb3JlVGh1bWJSZWN0LmJvdHRvbSgpKTsKKyAgICAgICAgYWZ0
ZXJUaHVtYlJlY3QgPSBJbnRSZWN0KHRyYWNrUmVjdC54KCksIHRyYWNrUmVjdC55KCkgKyBiZWZv
cmVUaHVtYlJlY3QuaGVpZ2h0KCksIHRyYWNrUmVjdC53aWR0aCgpLCB0cmFja1JlY3QubWF4WSgp
IC0gYmVmb3JlVGh1bWJSZWN0Lm1heFkoKSk7CiAgICAgfQogfQogCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFF1YWQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFF1YWQuaAkocmV2aXNpb24gNzcyNjApCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFF1YWQuaAkod29ya2luZyBj
b3B5KQpAQCAtNTQsOSArNTQsOSBAQCBwdWJsaWM6CiAKICAgICBGbG9hdFF1YWQoY29uc3QgRmxv
YXRSZWN0JiBpblJlY3QpCiAgICAgICAgIDogbV9wMShpblJlY3QubG9jYXRpb24oKSkKLSAgICAg
ICAgLCBtX3AyKGluUmVjdC5yaWdodCgpLCBpblJlY3QueSgpKQotICAgICAgICAsIG1fcDMoaW5S
ZWN0LnJpZ2h0KCksIGluUmVjdC5ib3R0b20oKSkKLSAgICAgICAgLCBtX3A0KGluUmVjdC54KCks
IGluUmVjdC5ib3R0b20oKSkKKyAgICAgICAgLCBtX3AyKGluUmVjdC5tYXhYKCksIGluUmVjdC55
KCkpCisgICAgICAgICwgbV9wMyhpblJlY3QubWF4WCgpLCBpblJlY3QubWF4WSgpKQorICAgICAg
ICAsIG1fcDQoaW5SZWN0LngoKSwgaW5SZWN0Lm1heFkoKSkKICAgICB7CiAgICAgfQogCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3QuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UmVjdC5jcHAJKHJl
dmlzaW9uIDc3MjYwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRS
ZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTEsMjIgKzUxLDIyIEBAIGJvb2wgRmxvYXRSZWN0
OjppbnRlcnNlY3RzKGNvbnN0IEZsb2F0UmUKIHsKICAgICAvLyBDaGVja2luZyBlbXB0aW5lc3Mg
aGFuZGxlcyBuZWdhdGl2ZSB3aWR0aHMgYXMgd2VsbCBhcyB6ZXJvLgogICAgIHJldHVybiAhaXNF
bXB0eSgpICYmICFvdGhlci5pc0VtcHR5KCkKLSAgICAgICAgJiYgeCgpIDwgb3RoZXIucmlnaHQo
KSAmJiBvdGhlci54KCkgPCByaWdodCgpCi0gICAgICAgICYmIHkoKSA8IG90aGVyLmJvdHRvbSgp
ICYmIG90aGVyLnkoKSA8IGJvdHRvbSgpOworICAgICAgICAmJiB4KCkgPCBvdGhlci5tYXhYKCkg
JiYgb3RoZXIueCgpIDwgbWF4WCgpCisgICAgICAgICYmIHkoKSA8IG90aGVyLm1heFkoKSAmJiBv
dGhlci55KCkgPCBtYXhZKCk7CiB9CiAKIGJvb2wgRmxvYXRSZWN0Ojpjb250YWlucyhjb25zdCBG
bG9hdFJlY3QmIG90aGVyKSBjb25zdAogewotICAgIHJldHVybiB4KCkgPD0gb3RoZXIueCgpICYm
IHJpZ2h0KCkgPj0gb3RoZXIucmlnaHQoKQotICAgICAgICAmJiB5KCkgPD0gb3RoZXIueSgpICYm
IGJvdHRvbSgpID49IG90aGVyLmJvdHRvbSgpOworICAgIHJldHVybiB4KCkgPD0gb3RoZXIueCgp
ICYmIG1heFgoKSA+PSBvdGhlci5tYXhYKCkKKyAgICAgICAgJiYgeSgpIDw9IG90aGVyLnkoKSAm
JiBtYXhZKCkgPj0gb3RoZXIubWF4WSgpOwogfQogCiB2b2lkIEZsb2F0UmVjdDo6aW50ZXJzZWN0
KGNvbnN0IEZsb2F0UmVjdCYgb3RoZXIpCiB7CiAgICAgZmxvYXQgbCA9IG1heCh4KCksIG90aGVy
LngoKSk7CiAgICAgZmxvYXQgdCA9IG1heCh5KCksIG90aGVyLnkoKSk7Ci0gICAgZmxvYXQgciA9
IG1pbihyaWdodCgpLCBvdGhlci5yaWdodCgpKTsKLSAgICBmbG9hdCBiID0gbWluKGJvdHRvbSgp
LCBvdGhlci5ib3R0b20oKSk7CisgICAgZmxvYXQgciA9IG1pbihtYXhYKCksIG90aGVyLm1heFgo
KSk7CisgICAgZmxvYXQgYiA9IG1pbihtYXhZKCksIG90aGVyLm1heFkoKSk7CiAKICAgICAvLyBS
ZXR1cm4gYSBjbGVhbiBlbXB0eSByZWN0YW5nbGUgZm9yIG5vbi1pbnRlcnNlY3RpbmcgY2FzZXMu
CiAgICAgaWYgKGwgPj0gciB8fCB0ID49IGIpIHsKQEAgLTkxLDggKzkxLDggQEAgdm9pZCBGbG9h
dFJlY3Q6OnVuaXRlKGNvbnN0IEZsb2F0UmVjdCYgbwogCiAgICAgZmxvYXQgbCA9IG1pbih4KCks
IG90aGVyLngoKSk7CiAgICAgZmxvYXQgdCA9IG1pbih5KCksIG90aGVyLnkoKSk7Ci0gICAgZmxv
YXQgciA9IG1heChyaWdodCgpLCBvdGhlci5yaWdodCgpKTsKLSAgICBmbG9hdCBiID0gbWF4KGJv
dHRvbSgpLCBvdGhlci5ib3R0b20oKSk7CisgICAgZmxvYXQgciA9IG1heChtYXhYKCksIG90aGVy
Lm1heFgoKSk7CisgICAgZmxvYXQgYiA9IG1heChtYXhZKCksIG90aGVyLm1heFkoKSk7CiAKICAg
ICBzZXRMb2NhdGlvbkFuZFNpemVGcm9tRWRnZXMobCwgdCwgciwgYik7CiB9CkBAIC0xODAsOCAr
MTgwLDggQEAgSW50UmVjdCBlbmNsb3NpbmdJbnRSZWN0KGNvbnN0IEZsb2F0UmVjdAogewogICAg
IGZsb2F0IGxlZnQgPSBmbG9vcmYocmVjdC54KCkpOwogICAgIGZsb2F0IHRvcCA9IGZsb29yZihy
ZWN0LnkoKSk7Ci0gICAgZmxvYXQgd2lkdGggPSBjZWlsZihyZWN0LnJpZ2h0KCkpIC0gbGVmdDsK
LSAgICBmbG9hdCBoZWlnaHQgPSBjZWlsZihyZWN0LmJvdHRvbSgpKSAtIHRvcDsKKyAgICBmbG9h
dCB3aWR0aCA9IGNlaWxmKHJlY3QubWF4WCgpKSAtIGxlZnQ7CisgICAgZmxvYXQgaGVpZ2h0ID0g
Y2VpbGYocmVjdC5tYXhZKCkpIC0gdG9wOwogICAgIHJldHVybiBJbnRSZWN0KHNhZmVGbG9hdFRv
SW50KGxlZnQpLCBzYWZlRmxvYXRUb0ludCh0b3ApLCAKICAgICAgICAgICAgICAgICAgICBzYWZl
RmxvYXRUb0ludCh3aWR0aCksIHNhZmVGbG9hdFRvSW50KGhlaWdodCkpOwogfQpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRSZWN0LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRSZWN0LmgJKHJldmlzaW9uIDc3
MjYwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRSZWN0LmgJKHdv
cmtpbmcgY29weSkKQEAgLTkwLDYgKzkwLDggQEAgcHVibGljOgogCiAgICAgZmxvYXQgeCgpIGNv
bnN0IHsgcmV0dXJuIG1fbG9jYXRpb24ueCgpOyB9CiAgICAgZmxvYXQgeSgpIGNvbnN0IHsgcmV0
dXJuIG1fbG9jYXRpb24ueSgpOyB9CisgICAgZmxvYXQgbWF4WCgpIGNvbnN0IHsgcmV0dXJuIHgo
KSArIHdpZHRoKCk7IH0KKyAgICBmbG9hdCBtYXhZKCkgY29uc3QgeyByZXR1cm4geSgpICsgaGVp
Z2h0KCk7IH0KICAgICBmbG9hdCB3aWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZS53aWR0aCgp
OyB9CiAgICAgZmxvYXQgaGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gbV9zaXplLmhlaWdodCgpOyB9
CiAKQEAgLTExOSw3ICsxMjEsNyBAQCBwdWJsaWM6CiAgICAgLy8gTm90ZSwgdGhpcyBkb2Vzbid0
IG1hdGNoIHdoYXQgSW50UmVjdDo6Y29udGFpbnMoSW50UG9pbnQmKSBkb2VzOyB0aGUgaW50IHZl
cnNpb24KICAgICAvLyBpcyByZWFsbHkgY2hlY2tpbmcgZm9yIGNvbnRhaW5tZW50IG9mIDF4MSBy
ZWN0LCBidXQgdGhhdCBkb2Vzbid0IG1ha2Ugc2Vuc2Ugd2l0aCBmbG9hdHMuCiAgICAgYm9vbCBj
b250YWlucyhmbG9hdCBweCwgZmxvYXQgcHkpIGNvbnN0Ci0gICAgICAgIHsgcmV0dXJuIHB4ID49
IHgoKSAmJiBweCA8PSByaWdodCgpICYmIHB5ID49IHkoKSAmJiBweSA8PSBib3R0b20oKTsgfQor
ICAgICAgICB7IHJldHVybiBweCA+PSB4KCkgJiYgcHggPD0gbWF4WCgpICYmIHB5ID49IHkoKSAm
JiBweSA8PSBtYXhZKCk7IH0KICAgICBib29sIGNvbnRhaW5zKGNvbnN0IEZsb2F0UG9pbnQmIHBv
aW50KSBjb25zdCB7IHJldHVybiBjb250YWlucyhwb2ludC54KCksIHBvaW50LnkoKSk7IH0KIAog
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbnRSZWN0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbnRSZWN0LmNwcAko
cmV2aXNpb24gNzcyNjApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbnRS
ZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQsMjIgKzQ0LDIyIEBAIGJvb2wgSW50UmVjdDo6
aW50ZXJzZWN0cyhjb25zdCBJbnRSZWN0JiAKIHsKICAgICAvLyBDaGVja2luZyBlbXB0aW5lc3Mg
aGFuZGxlcyBuZWdhdGl2ZSB3aWR0aHMgYXMgd2VsbCBhcyB6ZXJvLgogICAgIHJldHVybiAhaXNF
bXB0eSgpICYmICFvdGhlci5pc0VtcHR5KCkKLSAgICAgICAgJiYgeCgpIDwgb3RoZXIucmlnaHQo
KSAmJiBvdGhlci54KCkgPCByaWdodCgpCi0gICAgICAgICYmIHkoKSA8IG90aGVyLmJvdHRvbSgp
ICYmIG90aGVyLnkoKSA8IGJvdHRvbSgpOworICAgICAgICAmJiB4KCkgPCBvdGhlci5tYXhYKCkg
JiYgb3RoZXIueCgpIDwgbWF4WCgpCisgICAgICAgICYmIHkoKSA8IG90aGVyLm1heFkoKSAmJiBv
dGhlci55KCkgPCBtYXhZKCk7CiB9CiAKIGJvb2wgSW50UmVjdDo6Y29udGFpbnMoY29uc3QgSW50
UmVjdCYgb3RoZXIpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIHgoKSA8PSBvdGhlci54KCkgJiYgcmln
aHQoKSA+PSBvdGhlci5yaWdodCgpCi0gICAgICAgICYmIHkoKSA8PSBvdGhlci55KCkgJiYgYm90
dG9tKCkgPj0gb3RoZXIuYm90dG9tKCk7CisgICAgcmV0dXJuIHgoKSA8PSBvdGhlci54KCkgJiYg
bWF4WCgpID49IG90aGVyLm1heFgoKQorICAgICAgICAmJiB5KCkgPD0gb3RoZXIueSgpICYmIG1h
eFkoKSA+PSBvdGhlci5tYXhZKCk7CiB9CiAKIHZvaWQgSW50UmVjdDo6aW50ZXJzZWN0KGNvbnN0
IEludFJlY3QmIG90aGVyKQogewogICAgIGludCBsID0gbWF4KHgoKSwgb3RoZXIueCgpKTsKICAg
ICBpbnQgdCA9IG1heCh5KCksIG90aGVyLnkoKSk7Ci0gICAgaW50IHIgPSBtaW4ocmlnaHQoKSwg
b3RoZXIucmlnaHQoKSk7Ci0gICAgaW50IGIgPSBtaW4oYm90dG9tKCksIG90aGVyLmJvdHRvbSgp
KTsKKyAgICBpbnQgciA9IG1pbihtYXhYKCksIG90aGVyLm1heFgoKSk7CisgICAgaW50IGIgPSBt
aW4obWF4WSgpLCBvdGhlci5tYXhZKCkpOwogCiAgICAgLy8gUmV0dXJuIGEgY2xlYW4gZW1wdHkg
cmVjdGFuZ2xlIGZvciBub24taW50ZXJzZWN0aW5nIGNhc2VzLgogICAgIGlmIChsID49IHIgfHwg
dCA+PSBiKSB7CkBAIC04Nyw4ICs4Nyw4IEBAIHZvaWQgSW50UmVjdDo6dW5pdGUoY29uc3QgSW50
UmVjdCYgb3RoZXIKIAogICAgIGludCBsID0gbWluKHgoKSwgb3RoZXIueCgpKTsKICAgICBpbnQg
dCA9IG1pbih5KCksIG90aGVyLnkoKSk7Ci0gICAgaW50IHIgPSBtYXgocmlnaHQoKSwgb3RoZXIu
cmlnaHQoKSk7Ci0gICAgaW50IGIgPSBtYXgoYm90dG9tKCksIG90aGVyLmJvdHRvbSgpKTsKKyAg
ICBpbnQgciA9IG1heChtYXhYKCksIG90aGVyLm1heFgoKSk7CisgICAgaW50IGIgPSBtYXgobWF4
WSgpLCBvdGhlci5tYXhZKCkpOwogCiAgICAgbV9sb2NhdGlvbi5zZXRYKGwpOwogICAgIG1fbG9j
YXRpb24uc2V0WSh0KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0lu
dFJlY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9J
bnRSZWN0LmgJKHJldmlzaW9uIDc3MjYwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvSW50UmVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC05MSw2ICs5MSw4IEBAIHB1YmxpYzoK
IAogICAgIGludCB4KCkgY29uc3QgeyByZXR1cm4gbV9sb2NhdGlvbi54KCk7IH0KICAgICBpbnQg
eSgpIGNvbnN0IHsgcmV0dXJuIG1fbG9jYXRpb24ueSgpOyB9CisgICAgaW50IG1heFgoKSBjb25z
dCB7IHJldHVybiB4KCkgKyB3aWR0aCgpOyB9CisgICAgaW50IG1heFkoKSBjb25zdCB7IHJldHVy
biB5KCkgKyBoZWlnaHQoKTsgfQogICAgIGludCB3aWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6
ZS53aWR0aCgpOyB9CiAgICAgaW50IGhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZS5oZWln
aHQoKTsgfQogCkBAIC05OSwxMyArMTAxLDYgQEAgcHVibGljOgogICAgIHZvaWQgc2V0V2lkdGgo
aW50IHdpZHRoKSB7IG1fc2l6ZS5zZXRXaWR0aCh3aWR0aCk7IH0KICAgICB2b2lkIHNldEhlaWdo
dChpbnQgaGVpZ2h0KSB7IG1fc2l6ZS5zZXRIZWlnaHQoaGVpZ2h0KTsgfQogCi0gICAgLy8gQmUg
Y2FyZWZ1bCB3aXRoIHRoZXNlIGZ1bmN0aW9ucy4gIFRoZSBwb2ludCBpcyBjb25zaWRlcmVkIHRv
IGJlIHRvIHRoZSByaWdodCBhbmQgYmVsb3cuICBUaGVzZSBhcmUgbm90Ci0gICAgLy8gc3Vic3Rp
dHV0ZXMgZm9yIHJpZ2h0KCkgYW5kIGJvdHRvbSgpLgotICAgIEludFBvaW50IHRvcExlZnQoKSBj
b25zdCB7IHJldHVybiBtX2xvY2F0aW9uOyB9Ci0gICAgSW50UG9pbnQgdG9wUmlnaHQoKSBjb25z
dCB7IHJldHVybiBJbnRQb2ludChyaWdodCgpIC0gMSwgeSgpKTsgfQotICAgIEludFBvaW50IGJv
dHRvbUxlZnQoKSBjb25zdCB7IHJldHVybiBJbnRQb2ludCh4KCksIGJvdHRvbSgpIC0gMSk7IH0K
LSAgICBJbnRQb2ludCBib3R0b21SaWdodCgpIGNvbnN0IHsgcmV0dXJuIEludFBvaW50KHJpZ2h0
KCkgLSAxLCBib3R0b20oKSAtIDEpOyB9Ci0KICAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJl
dHVybiBtX3NpemUuaXNFbXB0eSgpOyB9CiAKICAgICBpbnQgcmlnaHQoKSBjb25zdCB7IHJldHVy
biB4KCkgKyB3aWR0aCgpOyB9CkBAIC0xMTgsMjYgKzExMywyNiBAQCBwdWJsaWM6CiAgICAgdm9p
ZCBtb3ZlKGNvbnN0IEludFNpemUmIHMpIHsgbV9sb2NhdGlvbiArPSBzOyB9IAogICAgIHZvaWQg
bW92ZShpbnQgZHgsIGludCBkeSkgeyBtX2xvY2F0aW9uLm1vdmUoZHgsIGR5KTsgfSAKICAgICAK
LSAgICB2b2lkIHNoaWZ0TGVmdEVkZ2VUbyhpbnQgZWRnZSkKKyAgICB2b2lkIHNoaWZ0TWluWEVk
Z2VUbyhpbnQgZWRnZSkKICAgICB7CiAgICAgICAgIGludCBkZWx0YSA9IGVkZ2UgLSB4KCk7CiAg
ICAgICAgIHNldFgoZWRnZSk7CiAgICAgICAgIHNldFdpZHRoKHN0ZDo6bWF4KDAsIHdpZHRoKCkg
LSBkZWx0YSkpOwogICAgIH0KLSAgICB2b2lkIHNoaWZ0UmlnaHRFZGdlVG8oaW50IGVkZ2UpCisg
ICAgdm9pZCBzaGlmdE1heFhFZGdlVG8oaW50IGVkZ2UpCiAgICAgewotICAgICAgICBpbnQgZGVs
dGEgPSBlZGdlIC0gcmlnaHQoKTsKKyAgICAgICAgaW50IGRlbHRhID0gZWRnZSAtIG1heFgoKTsK
ICAgICAgICAgc2V0V2lkdGgoc3RkOjptYXgoMCwgd2lkdGgoKSArIGRlbHRhKSk7CiAgICAgfQot
ICAgIHZvaWQgc2hpZnRUb3BFZGdlVG8oaW50IGVkZ2UpCisgICAgdm9pZCBzaGlmdE1pbllFZGdl
VG8oaW50IGVkZ2UpCiAgICAgewogICAgICAgICBpbnQgZGVsdGEgPSBlZGdlIC0geSgpOwogICAg
ICAgICBzZXRZKGVkZ2UpOwogICAgICAgICBzZXRIZWlnaHQoc3RkOjptYXgoMCwgaGVpZ2h0KCkg
LSBkZWx0YSkpOwogICAgIH0KLSAgICB2b2lkIHNoaWZ0Qm90dG9tRWRnZVRvKGludCBlZGdlKQor
ICAgIHZvaWQgc2hpZnRNYXhZRWRnZVRvKGludCBlZGdlKQogICAgIHsKLSAgICAgICAgaW50IGRl
bHRhID0gZWRnZSAtIGJvdHRvbSgpOworICAgICAgICBpbnQgZGVsdGEgPSBlZGdlIC0gbWF4WSgp
OwogICAgICAgICBzZXRIZWlnaHQoc3RkOjptYXgoMCwgaGVpZ2h0KCkgKyBkZWx0YSkpOwogICAg
IH0KIApAQCAtMTQ3LDcgKzE0Miw3IEBAIHB1YmxpYzoKICAgICAvLyBUaGlzIGNoZWNrcyB0byBz
ZWUgaWYgdGhlIHJlY3QgY29udGFpbnMgeCx5IGluIHRoZSB0cmFkaXRpb25hbCBzZW5zZS4KICAg
ICAvLyBFcXVpdmFsZW50IHRvIGNoZWNraW5nIGlmIHRoZSByZWN0IGNvbnRhaW5zIGEgMXgxIHJl
Y3QgYmVsb3cgYW5kIHRvIHRoZSByaWdodCBvZiAocHgscHkpLgogICAgIGJvb2wgY29udGFpbnMo
aW50IHB4LCBpbnQgcHkpIGNvbnN0Ci0gICAgICAgIHsgcmV0dXJuIHB4ID49IHgoKSAmJiBweCA8
IHJpZ2h0KCkgJiYgcHkgPj0geSgpICYmIHB5IDwgYm90dG9tKCk7IH0KKyAgICAgICAgeyByZXR1
cm4gcHggPj0geCgpICYmIHB4IDwgbWF4WCgpICYmIHB5ID49IHkoKSAmJiBweSA8IG1heFkoKTsg
fQogICAgIGJvb2wgY29udGFpbnMoY29uc3QgSW50UG9pbnQmIHBvaW50KSBjb25zdCB7IHJldHVy
biBjb250YWlucyhwb2ludC54KCksIHBvaW50LnkoKSk7IH0KIAogICAgIHZvaWQgaW50ZXJzZWN0
KGNvbnN0IEludFJlY3QmKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L1dpZHRoSXRlcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL1dpZHRoSXRlcmF0b3IuY3BwCShyZXZpc2lvbiA3NzI2MCkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1dpZHRoSXRlcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yNTUsOSArMjU1LDkgQEAgdm9pZCBXaWR0aEl0ZXJhdG9yOjphZHZhbmNlKGludCBvZmZz
ZXQsIAogICAgICAgICBsYXN0Um91bmRpbmdXaWR0aCA9IHdpZHRoIC0gb2xkV2lkdGg7CiAKICAg
ICAgICAgaWYgKG1fYWNjb3VudEZvckdseXBoQm91bmRzKSB7Ci0gICAgICAgICAgICBtX21heEds
eXBoQm91bmRpbmdCb3hZID0gbWF4KG1fbWF4R2x5cGhCb3VuZGluZ0JveFksIGJvdW5kcy5ib3R0
b20oKSk7CisgICAgICAgICAgICBtX21heEdseXBoQm91bmRpbmdCb3hZID0gbWF4KG1fbWF4R2x5
cGhCb3VuZGluZ0JveFksIGJvdW5kcy5tYXhZKCkpOwogICAgICAgICAgICAgbV9taW5HbHlwaEJv
dW5kaW5nQm94WSA9IG1pbihtX21pbkdseXBoQm91bmRpbmdCb3hZLCBib3VuZHMueSgpKTsKLSAg
ICAgICAgICAgIG1fbGFzdEdseXBoT3ZlcmZsb3cgPSBtYXg8ZmxvYXQ+KDAsIGJvdW5kcy5yaWdo
dCgpIC0gd2lkdGgpOworICAgICAgICAgICAgbV9sYXN0R2x5cGhPdmVyZmxvdyA9IG1heDxmbG9h
dD4oMCwgYm91bmRzLm1heFgoKSAtIHdpZHRoKTsKICAgICAgICAgfQogICAgIH0KIApJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBo
aWNzQ29udGV4dENHLmNwcAkocmV2aXNpb24gNzcyNjApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTE2Niw5ICsxNjYsOSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd1JlY3QoY29uc3QgSW50
CiAgICAgICAgICAgICBzZXRDR0ZpbGxDb2xvcihjb250ZXh0LCBzdHJva2VDb2xvcigpLCBzdHJv
a2VDb2xvclNwYWNlKCkpOwogICAgICAgICBDR1JlY3QgcmVjdHNbNF0gPSB7CiAgICAgICAgICAg
ICBGbG9hdFJlY3QocmVjdC54KCksIHJlY3QueSgpLCByZWN0LndpZHRoKCksIDEpLAotICAgICAg
ICAgICAgRmxvYXRSZWN0KHJlY3QueCgpLCByZWN0LmJvdHRvbSgpIC0gMSwgcmVjdC53aWR0aCgp
LCAxKSwKKyAgICAgICAgICAgIEZsb2F0UmVjdChyZWN0LngoKSwgcmVjdC5tYXhZKCkgLSAxLCBy
ZWN0LndpZHRoKCksIDEpLAogICAgICAgICAgICAgRmxvYXRSZWN0KHJlY3QueCgpLCByZWN0Lnko
KSArIDEsIDEsIHJlY3QuaGVpZ2h0KCkgLSAyKSwKLSAgICAgICAgICAgIEZsb2F0UmVjdChyZWN0
LnJpZ2h0KCkgLSAxLCByZWN0LnkoKSArIDEsIDEsIHJlY3QuaGVpZ2h0KCkgLSAyKQorICAgICAg
ICAgICAgRmxvYXRSZWN0KHJlY3QubWF4WCgpIC0gMSwgcmVjdC55KCkgKyAxLCAxLCByZWN0Lmhl
aWdodCgpIC0gMikKICAgICAgICAgfTsKICAgICAgICAgQ0dDb250ZXh0RmlsbFJlY3RzKGNvbnRl
eHQsIHJlY3RzLCA0KTsKICAgICAgICAgaWYgKG9sZEZpbGxDb2xvciAhPSBzdHJva2VDb2xvcigp
KQpAQCAtNTY0LDcgKzU2NCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUGF0aChjb25z
dCBQYXQKICAgICAgICAgICAgICAgICBDR0NvbnRleHRDbGlwKGxheWVyQ29udGV4dCk7CiAKICAg
ICAgICAgICAgIG1fc3RhdGUuZmlsbEdyYWRpZW50LT5wYWludChsYXllckNvbnRleHQpOwotICAg
ICAgICAgICAgQ0dDb250ZXh0RHJhd0xheWVyQXRQb2ludChjb250ZXh0LCBDR1BvaW50TWFrZShy
ZWN0LmxlZnQoKSwgcmVjdC50b3AoKSksIGxheWVyKTsKKyAgICAgICAgICAgIENHQ29udGV4dERy
YXdMYXllckF0UG9pbnQoY29udGV4dCwgQ0dQb2ludE1ha2UocmVjdC54KCksIHJlY3QueSgpKSwg
bGF5ZXIpOwogICAgICAgICAgICAgQ0dMYXllclJlbGVhc2UobGF5ZXIpOwogICAgICAgICB9IGVs
c2UgewogICAgICAgICAgICAgQ0dDb250ZXh0QmVnaW5QYXRoKGNvbnRleHQpOwpAQCAtNjQ2LDcg
KzY0Niw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdChjb25zdCBGbG8KIAogICAg
ICAgICAgICAgQ0dDb250ZXh0Q29uY2F0Q1RNKGxheWVyQ29udGV4dCwgbV9zdGF0ZS5maWxsR3Jh
ZGllbnQtPmdyYWRpZW50U3BhY2VUcmFuc2Zvcm0oKSk7CiAgICAgICAgICAgICBtX3N0YXRlLmZp
bGxHcmFkaWVudC0+cGFpbnQobGF5ZXJDb250ZXh0KTsKLSAgICAgICAgICAgIENHQ29udGV4dERy
YXdMYXllckF0UG9pbnQoY29udGV4dCwgQ0dQb2ludE1ha2UocmVjdC5sZWZ0KCksIHJlY3QudG9w
KCkpLCBsYXllcik7CisgICAgICAgICAgICBDR0NvbnRleHREcmF3TGF5ZXJBdFBvaW50KGNvbnRl
eHQsIENHUG9pbnRNYWtlKHJlY3QueCgpLCByZWN0LnkoKSksIGxheWVyKTsKICAgICAgICAgICAg
IENHTGF5ZXJSZWxlYXNlKGxheWVyKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIENH
Q29udGV4dENsaXBUb1JlY3QoY29udGV4dCwgcmVjdCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHLmNwcAkocmV2aXNp
b24gNzcyNjApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1
ZmZlckNHLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjY3LDcgKzI2Nyw3IEBAIFBhc3NSZWZQdHI8
Qnl0ZUFycmF5PiBnZXRJbWFnZURhdGEoY29uc3QKICAgICBSZWZQdHI8Qnl0ZUFycmF5PiByZXN1
bHQgPSBCeXRlQXJyYXk6OmNyZWF0ZShyZWN0LndpZHRoKCkgKiByZWN0LmhlaWdodCgpICogNCk7
CiAgICAgdW5zaWduZWQgY2hhciogZGF0YSA9IHJlc3VsdC0+ZGF0YSgpOwogCi0gICAgaWYgKHJl
Y3QueCgpIDwgMCB8fCByZWN0LnkoKSA8IDAgfHwgcmVjdC5yaWdodCgpID4gc2l6ZS53aWR0aCgp
IHx8IHJlY3QuYm90dG9tKCkgPiBzaXplLmhlaWdodCgpKQorICAgIGlmIChyZWN0LngoKSA8IDAg
fHwgcmVjdC55KCkgPCAwIHx8IHJlY3QubWF4WCgpID4gc2l6ZS53aWR0aCgpIHx8IHJlY3QubWF4
WSgpID4gc2l6ZS5oZWlnaHQoKSkKICAgICAgICAgbWVtc2V0KGRhdGEsIDAsIHJlc3VsdC0+bGVu
Z3RoKCkpOwogCiAgICAgaW50IG9yaWdpbnggPSByZWN0LngoKTsKQEAgLTI3Niw3ICsyNzYsNyBA
QCBQYXNzUmVmUHRyPEJ5dGVBcnJheT4gZ2V0SW1hZ2VEYXRhKGNvbnN0CiAgICAgICAgIGRlc3R4
ID0gLW9yaWdpbng7CiAgICAgICAgIG9yaWdpbnggPSAwOwogICAgIH0KLSAgICBpbnQgZW5keCA9
IHJlY3QucmlnaHQoKTsKKyAgICBpbnQgZW5keCA9IHJlY3QubWF4WCgpOwogICAgIGlmIChlbmR4
ID4gc2l6ZS53aWR0aCgpKQogICAgICAgICBlbmR4ID0gc2l6ZS53aWR0aCgpOwogICAgIGludCBu
dW1Db2x1bW5zID0gZW5keCAtIG9yaWdpbng7CkBAIC0yODcsNyArMjg3LDcgQEAgUGFzc1JlZlB0
cjxCeXRlQXJyYXk+IGdldEltYWdlRGF0YShjb25zdAogICAgICAgICBkZXN0eSA9IC1vcmlnaW55
OwogICAgICAgICBvcmlnaW55ID0gMDsKICAgICB9Ci0gICAgaW50IGVuZHkgPSByZWN0LmJvdHRv
bSgpOworICAgIGludCBlbmR5ID0gcmVjdC5tYXhZKCk7CiAgICAgaWYgKGVuZHkgPiBzaXplLmhl
aWdodCgpKQogICAgICAgICBlbmR5ID0gc2l6ZS5oZWlnaHQoKTsKICAgICBpbnQgbnVtUm93cyA9
IGVuZHkgLSBvcmlnaW55OwpAQCAtMzc3LDkgKzM3Nyw5IEBAIHZvaWQgcHV0SW1hZ2VEYXRhKEJ5
dGVBcnJheSomIHNvdXJjZSwgY28KICAgICBBU1NFUlQoZGVzdHggPj0gMCk7CiAgICAgQVNTRVJU
KGRlc3R4IDwgc2l6ZS53aWR0aCgpKTsKICAgICBBU1NFUlQob3JpZ2lueCA+PSAwKTsKLSAgICBB
U1NFUlQob3JpZ2lueCA8PSBzb3VyY2VSZWN0LnJpZ2h0KCkpOworICAgIEFTU0VSVChvcmlnaW54
IDw9IHNvdXJjZVJlY3QubWF4WCgpKTsKIAotICAgIGludCBlbmR4ID0gZGVzdFBvaW50LngoKSAr
IHNvdXJjZVJlY3QucmlnaHQoKTsKKyAgICBpbnQgZW5keCA9IGRlc3RQb2ludC54KCkgKyBzb3Vy
Y2VSZWN0Lm1heFgoKTsKICAgICBBU1NFUlQoZW5keCA8PSBzaXplLndpZHRoKCkpOwogCiAgICAg
aW50IG51bUNvbHVtbnMgPSBlbmR4IC0gZGVzdHg7CkBAIC0zODksOSArMzg5LDkgQEAgdm9pZCBw
dXRJbWFnZURhdGEoQnl0ZUFycmF5KiYgc291cmNlLCBjbwogICAgIEFTU0VSVChkZXN0eSA+PSAw
KTsKICAgICBBU1NFUlQoZGVzdHkgPCBzaXplLmhlaWdodCgpKTsKICAgICBBU1NFUlQob3JpZ2lu
eSA+PSAwKTsKLSAgICBBU1NFUlQob3JpZ2lueSA8PSBzb3VyY2VSZWN0LmJvdHRvbSgpKTsKKyAg
ICBBU1NFUlQob3JpZ2lueSA8PSBzb3VyY2VSZWN0Lm1heFkoKSk7CiAKLSAgICBpbnQgZW5keSA9
IGRlc3RQb2ludC55KCkgKyBzb3VyY2VSZWN0LmJvdHRvbSgpOworICAgIGludCBlbmR5ID0gZGVz
dFBvaW50LnkoKSArIHNvdXJjZVJlY3QubWF4WSgpOwogICAgIEFTU0VSVChlbmR5IDw9IHNpemUu
aGVpZ2h0KCkpOwogICAgIGludCBudW1Sb3dzID0gZW5keSAtIGRlc3R5OwogCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUNHLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUNHLmNwcAkocmV2aXNp
b24gNzcyNjApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUNH
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjA0LDcgKzIwNCw3IEBAIHZvaWQgQml0bWFwSW1hZ2U6
OmRyYXcoR3JhcGhpY3NDb250ZXh0KiAKICAgICAgICAgICAgIGFkanVzdGVkRGVzdFJlY3Quc2V0
SGVpZ2h0KHN1YmltYWdlUmVjdC5oZWlnaHQoKSAvIHlTY2FsZSk7CiAKICAgICAgICAgICAgIGlt
YWdlLmFkb3B0Q0YoQ0dJbWFnZUNyZWF0ZVdpdGhJbWFnZUluUmVjdChpbWFnZS5nZXQoKSwgc3Vi
aW1hZ2VSZWN0KSk7Ci0gICAgICAgICAgICBpZiAoY3VyckhlaWdodCA8IHNyY1JlY3QuYm90dG9t
KCkpIHsKKyAgICAgICAgICAgIGlmIChjdXJySGVpZ2h0IDwgc3JjUmVjdC5tYXhZKCkpIHsKICAg
ICAgICAgICAgICAgICBBU1NFUlQoQ0dJbWFnZUdldEhlaWdodChpbWFnZS5nZXQoKSkgPT0gY3Vy
ckhlaWdodCAtIENHUmVjdEludGVncmFsKHNyY1JlY3QpLm9yaWdpbi55KTsKICAgICAgICAgICAg
ICAgICBhZGp1c3RlZERlc3RSZWN0LnNldEhlaWdodChDR0ltYWdlR2V0SGVpZ2h0KGltYWdlLmdl
dCgpKSAvIHlTY2FsZSk7CiAgICAgICAgICAgICB9CkBAIC0yMjQsNyArMjI0LDcgQEAgdm9pZCBC
aXRtYXBJbWFnZTo6ZHJhdyhHcmFwaGljc0NvbnRleHQqIAogCiAgICAgLy8gRmxpcCB0aGUgY29v
cmRzLgogICAgIENHQ29udGV4dFNjYWxlQ1RNKGNvbnRleHQsIDEsIC0xKTsKLSAgICBhZGp1c3Rl
ZERlc3RSZWN0LnNldFkoLWFkanVzdGVkRGVzdFJlY3QuYm90dG9tKCkpOworICAgIGFkanVzdGVk
RGVzdFJlY3Quc2V0WSgtYWRqdXN0ZWREZXN0UmVjdC5tYXhZKCkpOwogCiAgICAgLy8gQWRqdXN0
IHRoZSBjb2xvciBzcGFjZS4KICAgICBpbWFnZSA9IGltYWdlV2l0aENvbG9yU3BhY2UoaW1hZ2Uu
Z2V0KCksIHN0eWxlQ29sb3JTcGFjZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3BwCShyZXZpc2lv
biA3NzI2MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmls
dGVyRWZmZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE5LDcgKzExOSw3IEBAIFBhc3NSZWZQ
dHI8Qnl0ZUFycmF5PiBGaWx0ZXJFZmZlY3Q6OmFzUHIKIGlubGluZSB2b2lkIEZpbHRlckVmZmVj
dDo6Y29weUltYWdlQnl0ZXMoQnl0ZUFycmF5KiBzb3VyY2UsIEJ5dGVBcnJheSogZGVzdGluYXRp
b24sIGNvbnN0IEludFJlY3QmIHJlY3QpCiB7CiAgICAgLy8gQ29weSB0aGUgbmVjZXNzYXJ5IGxp
bmVzLgotICAgIGlmIChyZWN0LngoKSA8IDAgfHwgcmVjdC55KCkgPCAwIHx8IHJlY3QuYm90dG9t
KCkgPiBtX2Fic29sdXRlUGFpbnRSZWN0LndpZHRoKCkgfHwgcmVjdC5ib3R0b20oKSA+IG1fYWJz
b2x1dGVQYWludFJlY3QuaGVpZ2h0KCkpCisgICAgaWYgKHJlY3QueCgpIDwgMCB8fCByZWN0Lnko
KSA8IDAgfHwgcmVjdC5tYXhZKCkgPiBtX2Fic29sdXRlUGFpbnRSZWN0LndpZHRoKCkgfHwgcmVj
dC5tYXhZKCkgPiBtX2Fic29sdXRlUGFpbnRSZWN0LmhlaWdodCgpKQogICAgICAgICBtZW1zZXQo
ZGVzdGluYXRpb24tPmRhdGEoKSwgMCwgZGVzdGluYXRpb24tPmxlbmd0aCgpKTsKIAogICAgIGlu
dCB4T3JpZ2luID0gcmVjdC54KCk7CkBAIC0xMjgsNyArMTI4LDcgQEAgaW5saW5lIHZvaWQgRmls
dGVyRWZmZWN0Ojpjb3B5SW1hZ2VCeXRlcwogICAgICAgICB4RGVzdCA9IC14T3JpZ2luOwogICAg
ICAgICB4T3JpZ2luID0gMDsKICAgICB9Ci0gICAgaW50IHhFbmQgPSByZWN0LnJpZ2h0KCk7Cisg
ICAgaW50IHhFbmQgPSByZWN0Lm1heFgoKTsKICAgICBpZiAoeEVuZCA+IG1fYWJzb2x1dGVQYWlu
dFJlY3Qud2lkdGgoKSkKICAgICAgICAgeEVuZCA9IG1fYWJzb2x1dGVQYWludFJlY3Qud2lkdGgo
KTsKIApAQCAtMTM4LDcgKzEzOCw3IEBAIGlubGluZSB2b2lkIEZpbHRlckVmZmVjdDo6Y29weUlt
YWdlQnl0ZXMKICAgICAgICAgeURlc3QgPSAteU9yaWdpbjsKICAgICAgICAgeU9yaWdpbiA9IDA7
CiAgICAgfQotICAgIGludCB5RW5kID0gcmVjdC5ib3R0b20oKTsKKyAgICBpbnQgeUVuZCA9IHJl
Y3QubWF4WSgpOwogICAgIGlmICh5RW5kID4gbV9hYnNvbHV0ZVBhaW50UmVjdC5oZWlnaHQoKSkK
ICAgICAgICAgeUVuZCA9IG1fYWJzb2x1dGVQYWludFJlY3QuaGVpZ2h0KCk7CiAKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Db21wbGV4VGV4dENvbnRyb2xsZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9D
b21wbGV4VGV4dENvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiA3NzI2MCkKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Db21wbGV4VGV4dENvbnRyb2xsZXIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC01NTMsOSArNTUzLDkgQEAgdm9pZCBDb21wbGV4VGV4dENvbnRyb2xsZXI6
OmFkanVzdEdseXBocwogICAgICAgICAgICAgRmxvYXRSZWN0IGdseXBoQm91bmRzID0gZm9udERh
dGEtPmJvdW5kc0ZvckdseXBoKGdseXBoKTsKICAgICAgICAgICAgIGdseXBoQm91bmRzLm1vdmUo
Z2x5cGhPcmlnaW4ueCwgZ2x5cGhPcmlnaW4ueSk7CiAgICAgICAgICAgICBtX21pbkdseXBoQm91
bmRpbmdCb3hYID0gbWluKG1fbWluR2x5cGhCb3VuZGluZ0JveFgsIGdseXBoQm91bmRzLngoKSk7
Ci0gICAgICAgICAgICBtX21heEdseXBoQm91bmRpbmdCb3hYID0gbWF4KG1fbWF4R2x5cGhCb3Vu
ZGluZ0JveFgsIGdseXBoQm91bmRzLnJpZ2h0KCkpOworICAgICAgICAgICAgbV9tYXhHbHlwaEJv
dW5kaW5nQm94WCA9IG1heChtX21heEdseXBoQm91bmRpbmdCb3hYLCBnbHlwaEJvdW5kcy5tYXhY
KCkpOwogICAgICAgICAgICAgbV9taW5HbHlwaEJvdW5kaW5nQm94WSA9IG1pbihtX21pbkdseXBo
Qm91bmRpbmdCb3hZLCBnbHlwaEJvdW5kcy55KCkpOwotICAgICAgICAgICAgbV9tYXhHbHlwaEJv
dW5kaW5nQm94WSA9IG1heChtX21heEdseXBoQm91bmRpbmdCb3hZLCBnbHlwaEJvdW5kcy5ib3R0
b20oKSk7CisgICAgICAgICAgICBtX21heEdseXBoQm91bmRpbmdCb3hZID0gbWF4KG1fbWF4R2x5
cGhCb3VuZGluZ0JveFksIGdseXBoQm91bmRzLm1heFkoKSk7CiAgICAgICAgICAgICBnbHlwaE9y
aWdpbi54ICs9IGFkdmFuY2Uud2lkdGg7CiAgICAgICAgICAgICBnbHlwaE9yaWdpbi55ICs9IGFk
dmFuY2UuaGVpZ2h0OwogICAgICAgICAgICAgCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9tYWMvU2ltcGxlRm9udERhdGFNYWMubW0KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL1NpbXBsZUZvbnREYXRhTWFjLm1tCShyZXZp
c2lvbiA3NzI2MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9TaW1w
bGVGb250RGF0YU1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtNDc3LDEzICs0NzcsMTMgQEAgRmxv
YXRSZWN0IFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybUJvdW5kcwogI2lmbmRlZiBCVUlMRElOR19P
Tl9USUdFUgogICAgIGJvdW5kaW5nQm94ID0gQ1RGb250R2V0Qm91bmRpbmdSZWN0c0ZvckdseXBo
cyhtX3BsYXRmb3JtRGF0YS5jdEZvbnQoKSwKICAgICAgICAgICAgICAgICAgICAgb3JpZW50YXRp
b24oKSA9PSBWZXJ0aWNhbCA/IGtDVEZvbnRWZXJ0aWNhbE9yaWVudGF0aW9uIDoga0NURm9udEhv
cml6b250YWxPcmllbnRhdGlvbiwgJmdseXBoLCAwLCAxKTsKLSAgICBib3VuZGluZ0JveC5zZXRZ
KC1ib3VuZGluZ0JveC5ib3R0b20oKSk7CisgICAgYm91bmRpbmdCb3guc2V0WSgtYm91bmRpbmdC
b3gubWF4WSgpKTsKICNlbHNlCiAgICAgLy8gRklYTUU6IEN1c3RvbSBmb250cyBkb24ndCBoYXZl
IE5TRm9udHMsIHNvIHRoaXMgZnVuY3Rpb24gZG9lc24ndCBjb21wdXRlIGNvcnJlY3QgYm91bmRz
IGZvciB0aGVzZSBvbiBUaWdlci4KICAgICBpZiAoIW1fcGxhdGZvcm1EYXRhLmZvbnQoKSkKICAg
ICAgICAgcmV0dXJuIGJvdW5kaW5nQm94OwogICAgIGJvdW5kaW5nQm94ID0gW21fcGxhdGZvcm1E
YXRhLmZvbnQoKSBib3VuZGluZ1JlY3RGb3JHbHlwaDpnbHlwaF07Ci0gICAgYm91bmRpbmdCb3gu
c2V0WSgtYm91bmRpbmdCb3guYm90dG9tKCkpOworICAgIGJvdW5kaW5nQm94LnNldFkoLWJvdW5k
aW5nQm94Lm1heFkoKSk7CiAjZW5kaWYKICAgICBpZiAobV9zeW50aGV0aWNCb2xkT2Zmc2V0KQog
ICAgICAgICBib3VuZGluZ0JveC5zZXRXaWR0aChib3VuZGluZ0JveC53aWR0aCgpICsgbV9zeW50
aGV0aWNCb2xkT2Zmc2V0KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3RyYW5zZm9ybXMvQWZmaW5lVHJhbnNmb3JtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL0FmZmluZVRyYW5zZm9ybS5jcHAJKHJl
dmlzaW9uIDc3MjYwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNm
b3Jtcy9BZmZpbmVUcmFuc2Zvcm0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMTYsOSArMzE2LDkg
QEAgRmxvYXRSZWN0IEFmZmluZVRyYW5zZm9ybTo6bWFwUmVjdChjb25zdAogCiAgICAgRmxvYXRR
dWFkIHJlc3VsdDsKICAgICByZXN1bHQuc2V0UDEobWFwUG9pbnQocmVjdC5sb2NhdGlvbigpKSk7
Ci0gICAgcmVzdWx0LnNldFAyKG1hcFBvaW50KEZsb2F0UG9pbnQocmVjdC5yaWdodCgpLCByZWN0
LnkoKSkpKTsKLSAgICByZXN1bHQuc2V0UDMobWFwUG9pbnQoRmxvYXRQb2ludChyZWN0LnJpZ2h0
KCksIHJlY3QuYm90dG9tKCkpKSk7Ci0gICAgcmVzdWx0LnNldFA0KG1hcFBvaW50KEZsb2F0UG9p
bnQocmVjdC54KCksIHJlY3QuYm90dG9tKCkpKSk7CisgICAgcmVzdWx0LnNldFAyKG1hcFBvaW50
KEZsb2F0UG9pbnQocmVjdC5tYXhYKCksIHJlY3QueSgpKSkpOworICAgIHJlc3VsdC5zZXRQMyht
YXBQb2ludChGbG9hdFBvaW50KHJlY3QubWF4WCgpLCByZWN0Lm1heFkoKSkpKTsKKyAgICByZXN1
bHQuc2V0UDQobWFwUG9pbnQoRmxvYXRQb2ludChyZWN0LngoKSwgcmVjdC5tYXhZKCkpKSk7CiAg
ICAgcmV0dXJuIHJlc3VsdC5ib3VuZGluZ0JveCgpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9tYWMvV2lkZ2V0TWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL21hYy9XaWRnZXRNYWMubW0JKHJldmlzaW9uIDc3MjYwKQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbWFjL1dpZGdldE1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMjUyLDcg
KzI1Miw3IEBAIHZvaWQgV2lkZ2V0OjpwYWludChHcmFwaGljc0NvbnRleHQqIHAsIGMKICAgICAg
ICAgSW50UmVjdCBkaXJ0eVJlY3QgPSByOwogICAgICAgICBkaXJ0eVJlY3QubW92ZSgtdHJhbnNm
b3JtT3JpZ2luLngoKSwgLXRyYW5zZm9ybU9yaWdpbi55KCkpOwogICAgICAgICBpZiAoIVt2aWV3
IGlzRmxpcHBlZF0pCi0gICAgICAgICAgICBkaXJ0eVJlY3Quc2V0WShbdmlldyBib3VuZHNdLnNp
emUuaGVpZ2h0IC0gZGlydHlSZWN0LmJvdHRvbSgpKTsKKyAgICAgICAgICAgIGRpcnR5UmVjdC5z
ZXRZKFt2aWV3IGJvdW5kc10uc2l6ZS5oZWlnaHQgLSBkaXJ0eVJlY3QubWF4WSgpKTsKIAogICAg
ICAgICBbdmlldyBkaXNwbGF5UmVjdElnbm9yaW5nT3BhY2l0eTpkaXJ0eVJlY3RdOwogCkBAIC0y
OTYsNyArMjk2LDcgQEAgdm9pZCBXaWRnZXQ6OnBhaW50KEdyYXBoaWNzQ29udGV4dCogcCwgYwog
ICAgICAgICBJbnRSZWN0IGRpcnR5UmVjdCA9IHI7CiAgICAgICAgIGRpcnR5UmVjdC5tb3ZlKC10
cmFuc2Zvcm1PcmlnaW4ueCgpLCAtdHJhbnNmb3JtT3JpZ2luLnkoKSk7CiAgICAgICAgIGlmICgh
W3ZpZXcgaXNGbGlwcGVkXSkKLSAgICAgICAgICAgIGRpcnR5UmVjdC5zZXRZKFt2aWV3IGJvdW5k
c10uc2l6ZS5oZWlnaHQgLSBkaXJ0eVJlY3QuYm90dG9tKCkpOworICAgICAgICAgICAgZGlydHlS
ZWN0LnNldFkoW3ZpZXcgYm91bmRzXS5zaXplLmhlaWdodCAtIGRpcnR5UmVjdC5tYXhZKCkpOwog
CiAgICAgICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKICAgICAgICAgewpJbmRleDog
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUZsb3dCb3guY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVGbG93Qm94LmNwcAkocmV2aXNpb24gNzcy
NjApCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lRmxvd0JveC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTcxOCwxNCArNzE4LDE0IEBAIHZvaWQgSW5saW5lRmxvd0JveDo6YWRkQm94
U2hhZG93VmlzdWFsT3YKICAgICByZW5kZXJlcigpLT5zdHlsZShtX2ZpcnN0TGluZSktPmdldEJv
eFNoYWRvd0Jsb2NrRGlyZWN0aW9uRXh0ZW50KGJveFNoYWRvd0xvZ2ljYWxUb3AsIGJveFNoYWRv
d0xvZ2ljYWxCb3R0b20pOwogICAgIAogICAgIGludCBsb2dpY2FsVG9wVmlzdWFsT3ZlcmZsb3cg
PSBtaW4obG9naWNhbFRvcCgpICsgYm94U2hhZG93TG9naWNhbFRvcCwgbG9naWNhbFZpc3VhbE92
ZXJmbG93LnkoKSk7Ci0gICAgaW50IGxvZ2ljYWxCb3R0b21WaXN1YWxPdmVyZmxvdyA9IG1heChs
b2dpY2FsQm90dG9tKCkgKyBib3hTaGFkb3dMb2dpY2FsQm90dG9tLCBsb2dpY2FsVmlzdWFsT3Zl
cmZsb3cuYm90dG9tKCkpOworICAgIGludCBsb2dpY2FsQm90dG9tVmlzdWFsT3ZlcmZsb3cgPSBt
YXgobG9naWNhbEJvdHRvbSgpICsgYm94U2hhZG93TG9naWNhbEJvdHRvbSwgbG9naWNhbFZpc3Vh
bE92ZXJmbG93Lm1heFkoKSk7CiAgICAgCiAgICAgaW50IGJveFNoYWRvd0xvZ2ljYWxMZWZ0Owog
ICAgIGludCBib3hTaGFkb3dMb2dpY2FsUmlnaHQ7CiAgICAgcmVuZGVyZXIoKS0+c3R5bGUobV9m
aXJzdExpbmUpLT5nZXRCb3hTaGFkb3dJbmxpbmVEaXJlY3Rpb25FeHRlbnQoYm94U2hhZG93TG9n
aWNhbExlZnQsIGJveFNoYWRvd0xvZ2ljYWxSaWdodCk7CiAKICAgICBpbnQgbG9naWNhbExlZnRW
aXN1YWxPdmVyZmxvdyA9IG1pbihsb2dpY2FsTGVmdCgpICsgYm94U2hhZG93TG9naWNhbExlZnQs
IGxvZ2ljYWxWaXN1YWxPdmVyZmxvdy54KCkpOwotICAgIGludCBsb2dpY2FsUmlnaHRWaXN1YWxP
dmVyZmxvdyA9IG1heChsb2dpY2FsUmlnaHQoKSArIGJveFNoYWRvd0xvZ2ljYWxSaWdodCwgbG9n
aWNhbFZpc3VhbE92ZXJmbG93LnJpZ2h0KCkpOworICAgIGludCBsb2dpY2FsUmlnaHRWaXN1YWxP
dmVyZmxvdyA9IG1heChsb2dpY2FsUmlnaHQoKSArIGJveFNoYWRvd0xvZ2ljYWxSaWdodCwgbG9n
aWNhbFZpc3VhbE92ZXJmbG93Lm1heFgoKSk7CiAgICAgCiAgICAgbG9naWNhbFZpc3VhbE92ZXJm
bG93ID0gSW50UmVjdChsb2dpY2FsTGVmdFZpc3VhbE92ZXJmbG93LCBsb2dpY2FsVG9wVmlzdWFs
T3ZlcmZsb3csCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2dpY2FsUmln
aHRWaXN1YWxPdmVyZmxvdyAtIGxvZ2ljYWxMZWZ0VmlzdWFsT3ZlcmZsb3csIGxvZ2ljYWxCb3R0
b21WaXN1YWxPdmVyZmxvdyAtIGxvZ2ljYWxUb3BWaXN1YWxPdmVyZmxvdyk7CkBAIC03ODAsOSAr
NzgwLDkgQEAgdm9pZCBJbmxpbmVGbG93Qm94OjphZGRUZXh0Qm94VmlzdWFsT3ZlcgogICAgIGlu
dCBjaGlsZE92ZXJmbG93TG9naWNhbFJpZ2h0ID0gbWF4KHRleHRTaGFkb3dMb2dpY2FsUmlnaHQg
KyByaWdodEdseXBoT3ZlcmZsb3csIHJpZ2h0R2x5cGhPdmVyZmxvdyk7CiAKICAgICBpbnQgbG9n
aWNhbFRvcFZpc3VhbE92ZXJmbG93ID0gbWluKHRleHRCb3gtPmxvZ2ljYWxUb3AoKSArIGNoaWxk
T3ZlcmZsb3dMb2dpY2FsVG9wLCBsb2dpY2FsVmlzdWFsT3ZlcmZsb3cueSgpKTsKLSAgICBpbnQg
bG9naWNhbEJvdHRvbVZpc3VhbE92ZXJmbG93ID0gbWF4KHRleHRCb3gtPmxvZ2ljYWxCb3R0b20o
KSArIGNoaWxkT3ZlcmZsb3dMb2dpY2FsQm90dG9tLCBsb2dpY2FsVmlzdWFsT3ZlcmZsb3cuYm90
dG9tKCkpOworICAgIGludCBsb2dpY2FsQm90dG9tVmlzdWFsT3ZlcmZsb3cgPSBtYXgodGV4dEJv
eC0+bG9naWNhbEJvdHRvbSgpICsgY2hpbGRPdmVyZmxvd0xvZ2ljYWxCb3R0b20sIGxvZ2ljYWxW
aXN1YWxPdmVyZmxvdy5tYXhZKCkpOwogICAgIGludCBsb2dpY2FsTGVmdFZpc3VhbE92ZXJmbG93
ID0gbWluKHRleHRCb3gtPmxvZ2ljYWxMZWZ0KCkgKyBjaGlsZE92ZXJmbG93TG9naWNhbExlZnQs
IGxvZ2ljYWxWaXN1YWxPdmVyZmxvdy54KCkpOwotICAgIGludCBsb2dpY2FsUmlnaHRWaXN1YWxP
dmVyZmxvdyA9IG1heCh0ZXh0Qm94LT5sb2dpY2FsUmlnaHQoKSArIGNoaWxkT3ZlcmZsb3dMb2dp
Y2FsUmlnaHQsIGxvZ2ljYWxWaXN1YWxPdmVyZmxvdy5yaWdodCgpKTsKKyAgICBpbnQgbG9naWNh
bFJpZ2h0VmlzdWFsT3ZlcmZsb3cgPSBtYXgodGV4dEJveC0+bG9naWNhbFJpZ2h0KCkgKyBjaGls
ZE92ZXJmbG93TG9naWNhbFJpZ2h0LCBsb2dpY2FsVmlzdWFsT3ZlcmZsb3cubWF4WCgpKTsKICAg
ICAKICAgICBsb2dpY2FsVmlzdWFsT3ZlcmZsb3cgPSBJbnRSZWN0KGxvZ2ljYWxMZWZ0VmlzdWFs
T3ZlcmZsb3csIGxvZ2ljYWxUb3BWaXN1YWxPdmVyZmxvdywKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGxvZ2ljYWxSaWdodFZpc3VhbE92ZXJmbG93IC0gbG9naWNhbExlZnRW
aXN1YWxPdmVyZmxvdywgbG9naWNhbEJvdHRvbVZpc3VhbE92ZXJmbG93IC0gbG9naWNhbFRvcFZp
c3VhbE92ZXJmbG93KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0
Qm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4
dEJveC5jcHAJKHJldmlzaW9uIDc3MjYwKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lu
bGluZVRleHRCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjksNyArMTY5LDcgQEAgSW50UmVj
dCBJbmxpbmVUZXh0Qm94OjpzZWxlY3Rpb25SZWN0KGludAogICAgIGludCBsb2dpY2FsV2lkdGgg
PSByLndpZHRoKCk7CiAgICAgaWYgKHIueCgpID4gbV9sb2dpY2FsV2lkdGgpCiAgICAgICAgIGxv
Z2ljYWxXaWR0aCAgPSAwOwotICAgIGVsc2UgaWYgKHIucmlnaHQoKSA+IG1fbG9naWNhbFdpZHRo
KQorICAgIGVsc2UgaWYgKHIubWF4WCgpID4gbV9sb2dpY2FsV2lkdGgpCiAgICAgICAgIGxvZ2lj
YWxXaWR0aCA9IG1fbG9naWNhbFdpZHRoIC0gci54KCk7CiAgICAgCiAgICAgSW50UG9pbnQgdG9w
UG9pbnQgPSBpc0hvcml6b250YWwoKSA/IEludFBvaW50KHR4ICsgbV94ICsgci54KCksIHR5ICsg
c2VsVG9wKSA6IEludFBvaW50KHR4ICsgc2VsVG9wLCB0eSArIG1feSArIHIueCgpKTsKQEAgLTQ0
Miw3ICs0NDIsNyBAQCB2b2lkIElubGluZVRleHRCb3g6OnBhaW50KFBhaW50SW5mbyYgcGFpCiAg
ICAgaW50IGxvZ2ljYWxTdGFydCA9IGxvZ2ljYWxMZWZ0KCkgLSBsb2dpY2FsTGVmdE92ZXJmbG93
ICsgKGlzSG9yaXpvbnRhbCgpID8gdHggOiB0eSk7CiAgICAgaW50IGxvZ2ljYWxFeHRlbnQgPSBs
b2dpY2FsV2lkdGgoKSArIGxvZ2ljYWxMZWZ0T3ZlcmZsb3cgKyBsb2dpY2FsUmlnaHRPdmVyZmxv
dzsKICAgICAKLSAgICBpbnQgcGFpbnRFbmQgPSBpc0hvcml6b250YWwoKSA/IHBhaW50SW5mby5y
ZWN0LnJpZ2h0KCkgOiBwYWludEluZm8ucmVjdC5ib3R0b20oKTsKKyAgICBpbnQgcGFpbnRFbmQg
PSBpc0hvcml6b250YWwoKSA/IHBhaW50SW5mby5yZWN0Lm1heFgoKSA6IHBhaW50SW5mby5yZWN0
Lm1heFkoKTsKICAgICBpbnQgcGFpbnRTdGFydCA9IGlzSG9yaXpvbnRhbCgpID8gcGFpbnRJbmZv
LnJlY3QueCgpIDogcGFpbnRJbmZvLnJlY3QueSgpOwogICAgIAogICAgIGlmIChsb2dpY2FsU3Rh
cnQgPj0gcGFpbnRFbmQgfHwgbG9naWNhbFN0YXJ0ICsgbG9naWNhbEV4dGVudCA8PSBwYWludFN0
YXJ0KQpAQCAtNDkxLDkgKzQ5MSw5IEBAIHZvaWQgSW5saW5lVGV4dEJveDo6cGFpbnQoUGFpbnRJ
bmZvJiBwYWkKICAgICBib29sIHNob3VsZFJvdGF0ZSA9ICFpc0hvcml6b250YWwoKSAmJiAoIWNv
bWJpbmVkVGV4dCB8fCAhY29tYmluZWRUZXh0LT5pc0NvbWJpbmVkKCkpOwogICAgIGlmIChzaG91
bGRSb3RhdGUpIHsKICAgICAgICAgY29udGV4dC0+c2F2ZSgpOwotICAgICAgICBjb250ZXh0LT50
cmFuc2xhdGUoYm94UmVjdC54KCksIGJveFJlY3QuYm90dG9tKCkpOworICAgICAgICBjb250ZXh0
LT50cmFuc2xhdGUoYm94UmVjdC54KCksIGJveFJlY3QubWF4WSgpKTsKICAgICAgICAgY29udGV4
dC0+cm90YXRlKHN0YXRpY19jYXN0PGZsb2F0PihkZWcycmFkKDkwLikpKTsKLSAgICAgICAgY29u
dGV4dC0+dHJhbnNsYXRlKC1ib3hSZWN0LngoKSwgLWJveFJlY3QuYm90dG9tKCkpOworICAgICAg
ICBjb250ZXh0LT50cmFuc2xhdGUoLWJveFJlY3QueCgpLCAtYm94UmVjdC5tYXhZKCkpOwogICAg
IH0KICAgICAKICAgICAKQEAgLTEyMTYsNyArMTIxNiw3IEBAIGludCBJbmxpbmVUZXh0Qm94Ojpw
b3NpdGlvbkZvck9mZnNldChpbnQKICAgICBpbnQgdG8gPSAhaXNMZWZ0VG9SaWdodERpcmVjdGlv
bigpID8gbV9sZW4gOiBvZmZzZXQgLSBtX3N0YXJ0OwogICAgIC8vIEZJWE1FOiBEbyB3ZSBuZWVk
IHRvIGFkZCByaWdodEJlYXJpbmcgaGVyZT8KICAgICByZXR1cm4gZW5jbG9zaW5nSW50UmVjdChm
LnNlbGVjdGlvblJlY3RGb3JUZXh0KFRleHRSdW4odGV4dC0+dGV4dCgpLT5jaGFyYWN0ZXJzKCkg
KyBtX3N0YXJ0LCBtX2xlbiwgdGV4dFJlbmRlcmVyKCktPmFsbG93VGFicygpLCB0ZXh0UG9zKCks
IG1fZXhwYW5zaW9uLCB0cmFpbGluZ0V4cGFuc2lvbkJlaGF2aW9yKCksICFpc0xlZnRUb1JpZ2h0
RGlyZWN0aW9uKCksIG1fZGlyT3ZlcnJpZGUpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgSW50UG9pbnQobG9naWNhbExlZnQoKSwgMCksIDAsIGZy
b20sIHRvKSkucmlnaHQoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEludFBvaW50KGxvZ2ljYWxMZWZ0KCksIDApLCAwLCBmcm9tLCB0bykpLm1h
eFgoKTsKIH0KIAogYm9vbCBJbmxpbmVUZXh0Qm94Ojpjb250YWluc0NhcmV0T2Zmc2V0KGludCBv
ZmZzZXQpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2su
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5j
cHAJKHJldmlzaW9uIDc3MjYwKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJs
b2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTMyNSwxMyArMTMyNSwxMyBAQCB2b2lkIFJlbmRl
ckJsb2NrOjphZGRPdmVyZmxvd0Zyb21DaGlsZHJlCiAgICAgICAgICAgICBJbnRSZWN0IGxhc3RS
ZWN0ID0gY29sdW1uUmVjdEF0KGNvbEluZm8sIGNvbHVtbkNvdW50KGNvbEluZm8pIC0gMSk7CiAg
ICAgICAgICAgICBpZiAoc3R5bGUoKS0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkgewogICAg
ICAgICAgICAgICAgIGludCBvdmVyZmxvd0xlZnQgPSAhc3R5bGUoKS0+aXNMZWZ0VG9SaWdodERp
cmVjdGlvbigpID8gbWluKDAsIGxhc3RSZWN0LngoKSkgOiAwOwotICAgICAgICAgICAgICAgIGlu
dCBvdmVyZmxvd1JpZ2h0ID0gc3R5bGUoKS0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpID8gbWF4
KHdpZHRoKCksIGxhc3RSZWN0LnJpZ2h0KCkpIDogMDsKKyAgICAgICAgICAgICAgICBpbnQgb3Zl
cmZsb3dSaWdodCA9IHN0eWxlKCktPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/IG1heCh3aWR0
aCgpLCBsYXN0UmVjdC5tYXhYKCkpIDogMDsKICAgICAgICAgICAgICAgICBpbnQgb3ZlcmZsb3dI
ZWlnaHQgPSBib3JkZXJCZWZvcmUoKSArIHBhZGRpbmdCZWZvcmUoKSArIGNvbEluZm8tPmNvbHVt
bkhlaWdodCgpOwogICAgICAgICAgICAgICAgIGFkZExheW91dE92ZXJmbG93KEludFJlY3Qob3Zl
cmZsb3dMZWZ0LCAwLCBvdmVyZmxvd1JpZ2h0IC0gb3ZlcmZsb3dMZWZ0LCBvdmVyZmxvd0hlaWdo
dCkpOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBJbnRSZWN0IGxhc3RS
ZWN0ID0gY29sdW1uUmVjdEF0KGNvbEluZm8sIGNvbHVtbkNvdW50KGNvbEluZm8pIC0gMSk7CiAg
ICAgICAgICAgICAgICAgaW50IG92ZXJmbG93VG9wID0gIXN0eWxlKCktPmlzTGVmdFRvUmlnaHRE
aXJlY3Rpb24oKSA/IG1pbigwLCBsYXN0UmVjdC55KCkpIDogMDsKLSAgICAgICAgICAgICAgICBp
bnQgb3ZlcmZsb3dCb3R0b20gPSBzdHlsZSgpLT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyBt
YXgoaGVpZ2h0KCksIGxhc3RSZWN0LmJvdHRvbSgpKSA6IDA7CisgICAgICAgICAgICAgICAgaW50
IG92ZXJmbG93Qm90dG9tID0gc3R5bGUoKS0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpID8gbWF4
KGhlaWdodCgpLCBsYXN0UmVjdC5tYXhZKCkpIDogMDsKICAgICAgICAgICAgICAgICBpbnQgb3Zl
cmZsb3dXaWR0aCA9IGJvcmRlckJlZm9yZSgpICsgcGFkZGluZ0JlZm9yZSgpICsgY29sSW5mby0+
Y29sdW1uSGVpZ2h0KCk7CiAgICAgICAgICAgICAgICAgYWRkTGF5b3V0T3ZlcmZsb3coSW50UmVj
dCgwLCBvdmVyZmxvd1RvcCwgb3ZlcmZsb3dXaWR0aCwgb3ZlcmZsb3dCb3R0b20gLSBvdmVyZmxv
d1RvcCkpOwogICAgICAgICAgICAgfQpAQCAtMjM0NywxNCArMjM0NywxNCBAQCB2b2lkIFJlbmRl
ckJsb2NrOjpwYWludENoaWxkcmVuKFBhaW50SW5mCiAgICAgICAgIGJvb2wgY2hlY2tCZWZvcmVB
bHdheXMgPSAhY2hpbGRyZW5JbmxpbmUoKSAmJiAodXNlUHJpbnRSZWN0ICYmIGNoaWxkLT5zdHls
ZSgpLT5wYWdlQnJlYWtCZWZvcmUoKSA9PSBQQkFMV0FZUyk7CiAgICAgICAgIGlmIChjaGVja0Jl
Zm9yZUFsd2F5cwogICAgICAgICAgICAgJiYgKHR5ICsgY2hpbGQtPnkoKSkgPiBwYWludEluZm8u
cmVjdC55KCkKLSAgICAgICAgICAgICYmICh0eSArIGNoaWxkLT55KCkpIDwgcGFpbnRJbmZvLnJl
Y3QuYm90dG9tKCkpIHsKKyAgICAgICAgICAgICYmICh0eSArIGNoaWxkLT55KCkpIDwgcGFpbnRJ
bmZvLnJlY3QubWF4WSgpKSB7CiAgICAgICAgICAgICB2aWV3KCktPnNldEJlc3RUcnVuY2F0ZWRB
dCh0eSArIGNoaWxkLT55KCksIHRoaXMsIHRydWUpOwogICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICB9CiAKICAgICAgICAgaWYgKCFjaGlsZC0+aXNGbG9hdGluZygpICYmIGNoaWxkLT5pc1Jl
cGxhY2VkKCkgJiYgdXNlUHJpbnRSZWN0ICYmIGNoaWxkLT5oZWlnaHQoKSA8PSByZW5kZXJWaWV3
LT5wcmludFJlY3QoKS5oZWlnaHQoKSkgewogICAgICAgICAgICAgLy8gUGFnaW5hdGUgYmxvY2st
bGV2ZWwgcmVwbGFjZWQgZWxlbWVudHMuCi0gICAgICAgICAgICBpZiAodHkgKyBjaGlsZC0+eSgp
ICsgY2hpbGQtPmhlaWdodCgpID4gcmVuZGVyVmlldy0+cHJpbnRSZWN0KCkuYm90dG9tKCkpIHsK
KyAgICAgICAgICAgIGlmICh0eSArIGNoaWxkLT55KCkgKyBjaGlsZC0+aGVpZ2h0KCkgPiByZW5k
ZXJWaWV3LT5wcmludFJlY3QoKS5tYXhZKCkpIHsKICAgICAgICAgICAgICAgICBpZiAodHkgKyBj
aGlsZC0+eSgpIDwgcmVuZGVyVmlldy0+dHJ1bmNhdGVkQXQoKSkKICAgICAgICAgICAgICAgICAg
ICAgcmVuZGVyVmlldy0+c2V0QmVzdFRydW5jYXRlZEF0KHR5ICsgY2hpbGQtPnkoKSwgY2hpbGQp
OwogICAgICAgICAgICAgICAgIC8vIElmIHdlIHdlcmUgYWJsZSB0byB0cnVuY2F0ZSwgZG9uJ3Qg
cGFpbnQuCkBAIC0yMzcxLDcgKzIzNzEsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjpwYWludENoaWxk
cmVuKFBhaW50SW5mCiAgICAgICAgIGJvb2wgY2hlY2tBZnRlckFsd2F5cyA9ICFjaGlsZHJlbklu
bGluZSgpICYmICh1c2VQcmludFJlY3QgJiYgY2hpbGQtPnN0eWxlKCktPnBhZ2VCcmVha0FmdGVy
KCkgPT0gUEJBTFdBWVMpOwogICAgICAgICBpZiAoY2hlY2tBZnRlckFsd2F5cwogICAgICAgICAg
ICAgJiYgKHR5ICsgY2hpbGQtPnkoKSArIGNoaWxkLT5oZWlnaHQoKSkgPiBwYWludEluZm8ucmVj
dC55KCkKLSAgICAgICAgICAgICYmICh0eSArIGNoaWxkLT55KCkgKyBjaGlsZC0+aGVpZ2h0KCkp
IDwgcGFpbnRJbmZvLnJlY3QuYm90dG9tKCkpIHsKKyAgICAgICAgICAgICYmICh0eSArIGNoaWxk
LT55KCkgKyBjaGlsZC0+aGVpZ2h0KCkpIDwgcGFpbnRJbmZvLnJlY3QubWF4WSgpKSB7CiAgICAg
ICAgICAgICB2aWV3KCktPnNldEJlc3RUcnVuY2F0ZWRBdCh0eSArIGNoaWxkLT55KCkgKyBjaGls
ZC0+aGVpZ2h0KCkgKyBtYXgoMCwgY2hpbGQtPmNvbGxhcHNlZE1hcmdpbkFmdGVyKCkpLCB0aGlz
LCB0cnVlKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQpAQCAtMjUzNyw3ICsyNTM3
LDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6cGFpbnRFbGxpcHNpc0JveGVzKFBhaQogICAgICAgICAv
LyBpbnRlcnNlY3QuCiAgICAgICAgIGludCB5UG9zID0gdHkgKyBmaXJzdExpbmVCb3goKS0+eSgp
OwogICAgICAgICBpbnQgaCA9IGxhc3RMaW5lQm94KCktPnkoKSArIGxhc3RMaW5lQm94KCktPmxv
Z2ljYWxIZWlnaHQoKSAtIGZpcnN0TGluZUJveCgpLT55KCk7Ci0gICAgICAgIGlmICh5UG9zID49
IHBhaW50SW5mby5yZWN0LmJvdHRvbSgpIHx8IHlQb3MgKyBoIDw9IHBhaW50SW5mby5yZWN0Lnko
KSkKKyAgICAgICAgaWYgKHlQb3MgPj0gcGFpbnRJbmZvLnJlY3QubWF4WSgpIHx8IHlQb3MgKyBo
IDw9IHBhaW50SW5mby5yZWN0LnkoKSkKICAgICAgICAgICAgIHJldHVybjsKIAogICAgICAgICAv
LyBTZWUgaWYgb3VyIGJveGVzIGludGVyc2VjdCB3aXRoIHRoZSBkaXJ0eSByZWN0LiAgSWYgc28s
IHRoZW4gd2UgcGFpbnQKQEAgLTI1NDYsNyArMjU0Niw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OnBh
aW50RWxsaXBzaXNCb3hlcyhQYWkKICAgICAgICAgZm9yIChSb290SW5saW5lQm94KiBjdXJyID0g
Zmlyc3RSb290Qm94KCk7IGN1cnI7IGN1cnIgPSBjdXJyLT5uZXh0Um9vdEJveCgpKSB7CiAgICAg
ICAgICAgICB5UG9zID0gdHkgKyBjdXJyLT55KCk7CiAgICAgICAgICAgICBoID0gY3Vyci0+bG9n
aWNhbEhlaWdodCgpOwotICAgICAgICAgICAgaWYgKGN1cnItPmVsbGlwc2lzQm94KCkgJiYgeVBv
cyA8IHBhaW50SW5mby5yZWN0LmJvdHRvbSgpICYmIHlQb3MgKyBoID4gcGFpbnRJbmZvLnJlY3Qu
eSgpKQorICAgICAgICAgICAgaWYgKGN1cnItPmVsbGlwc2lzQm94KCkgJiYgeVBvcyA8IHBhaW50
SW5mby5yZWN0Lm1heFkoKSAmJiB5UG9zICsgaCA+IHBhaW50SW5mby5yZWN0LnkoKSkKICAgICAg
ICAgICAgICAgICBjdXJyLT5wYWludEVsbGlwc2lzQm94KHBhaW50SW5mbywgdHgsIHR5KTsKICAg
ICAgICAgfQogICAgIH0KQEAgLTI4MTYsOCArMjgxNiw4IEBAIEdhcFJlY3RzIFJlbmRlckJsb2Nr
OjppbmxpbmVTZWxlY3Rpb25HYXAKICAgICAgICAgSW50UmVjdCBsb2dpY2FsUmVjdChjdXJyLT5s
b2dpY2FsTGVmdCgpLCBzZWxUb3AsIGN1cnItPmxvZ2ljYWxXaWR0aCgpLCBzZWxUb3AgKyBzZWxI
ZWlnaHQpOwogICAgICAgICBsb2dpY2FsUmVjdC5tb3ZlKHN0eWxlKCktPmlzSG9yaXpvbnRhbFdy
aXRpbmdNb2RlKCkgPyBvZmZzZXRGcm9tUm9vdEJsb2NrIDogSW50U2l6ZShvZmZzZXRGcm9tUm9v
dEJsb2NrLmhlaWdodCgpLCBvZmZzZXRGcm9tUm9vdEJsb2NrLndpZHRoKCkpKTsKICAgICAgICAg
SW50UmVjdCBwaHlzaWNhbFJlY3QgPSByb290QmxvY2stPmxvZ2ljYWxSZWN0VG9QaHlzaWNhbFJl
Y3Qocm9vdEJsb2NrUGh5c2ljYWxQb3NpdGlvbiwgbG9naWNhbFJlY3QpOwotICAgICAgICBpZiAo
IXBhaW50SW5mbyB8fCAoc3R5bGUoKS0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSAmJiBwaHlz
aWNhbFJlY3QueSgpIDwgcGFpbnRJbmZvLT5yZWN0LmJvdHRvbSgpICYmIHBoeXNpY2FsUmVjdC5i
b3R0b20oKSA+IHBhaW50SW5mby0+cmVjdC55KCkpCi0gICAgICAgICAgICB8fCAoIXN0eWxlKCkt
PmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgJiYgcGh5c2ljYWxSZWN0LngoKSA8IHBhaW50SW5m
by0+cmVjdC5yaWdodCgpICYmIHBoeXNpY2FsUmVjdC5yaWdodCgpID4gcGFpbnRJbmZvLT5yZWN0
LngoKSkpCisgICAgICAgIGlmICghcGFpbnRJbmZvIHx8IChzdHlsZSgpLT5pc0hvcml6b250YWxX
cml0aW5nTW9kZSgpICYmIHBoeXNpY2FsUmVjdC55KCkgPCBwYWludEluZm8tPnJlY3QubWF4WSgp
ICYmIHBoeXNpY2FsUmVjdC5tYXhZKCkgPiBwYWludEluZm8tPnJlY3QueSgpKQorICAgICAgICAg
ICAgfHwgKCFzdHlsZSgpLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpICYmIHBoeXNpY2FsUmVj
dC54KCkgPCBwYWludEluZm8tPnJlY3QubWF4WCgpICYmIHBoeXNpY2FsUmVjdC5tYXhYKCkgPiBw
YWludEluZm8tPnJlY3QueCgpKSkKICAgICAgICAgICAgIHJlc3VsdC51bml0ZShjdXJyLT5saW5l
U2VsZWN0aW9uR2FwKHJvb3RCbG9jaywgcm9vdEJsb2NrUGh5c2ljYWxQb3NpdGlvbiwgb2Zmc2V0
RnJvbVJvb3RCbG9jaywgc2VsVG9wLCBzZWxIZWlnaHQsIHBhaW50SW5mbykpOwogCiAgICAgICAg
IGxhc3RTZWxlY3RlZExpbmUgPSBjdXJyOwpAQCAtNDMyMiw3ICs0MzIyLDcgQEAgdm9pZCBSZW5k
ZXJCbG9jazo6YWRqdXN0UG9pbnRUb0NvbHVtbkNvbgogICAgICAgICBJbnRSZWN0IGNvbFJlY3Qg
PSBjb2x1bW5SZWN0QXQoY29sSW5mbywgaSk7CiAgICAgICAgIGlmIChzdHlsZSgpLT5pc0hvcml6
b250YWxXcml0aW5nTW9kZSgpKSB7CiAgICAgICAgICAgICBJbnRSZWN0IGdhcEFuZENvbHVtblJl
Y3QoY29sUmVjdC54KCkgLSBoYWxmQ29sR2FwLCBjb2xSZWN0LnkoKSwgY29sUmVjdC53aWR0aCgp
ICsgY29sR2FwLCBjb2xSZWN0LmhlaWdodCgpKTsKLSAgICAgICAgICAgIGlmIChwb2ludC54KCkg
Pj0gZ2FwQW5kQ29sdW1uUmVjdC54KCkgJiYgcG9pbnQueCgpIDwgZ2FwQW5kQ29sdW1uUmVjdC5y
aWdodCgpKSB7CisgICAgICAgICAgICBpZiAocG9pbnQueCgpID49IGdhcEFuZENvbHVtblJlY3Qu
eCgpICYmIHBvaW50LngoKSA8IGdhcEFuZENvbHVtblJlY3QubWF4WCgpKSB7CiAgICAgICAgICAg
ICAgICAgLy8gRklYTUU6IFRoZSBjbGFtcGluZyB0aGF0IGZvbGxvd3MgaXMgbm90IGNvbXBsZXRl
bHkgcmlnaHQgZm9yIHJpZ2h0LXRvLWxlZnQKICAgICAgICAgICAgICAgICAvLyBjb250ZW50Lgog
ICAgICAgICAgICAgICAgIC8vIENsYW1wIGV2ZXJ5dGhpbmcgYWJvdmUgdGhlIGNvbHVtbiB0byBp
dHMgdG9wIGxlZnQuCkBAIC00MzMwLDcgKzQzMzAsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjphZGp1
c3RQb2ludFRvQ29sdW1uQ29uCiAgICAgICAgICAgICAgICAgICAgIHBvaW50ID0gZ2FwQW5kQ29s
dW1uUmVjdC5sb2NhdGlvbigpOwogICAgICAgICAgICAgICAgIC8vIENsYW1wIGV2ZXJ5dGhpbmcg
YmVsb3cgdGhlIGNvbHVtbiB0byB0aGUgbmV4dCBjb2x1bW4ncyB0b3AgbGVmdC4gSWYgdGhlcmUg
aXMKICAgICAgICAgICAgICAgICAvLyBubyBuZXh0IGNvbHVtbiwgdGhpcyBzdGlsbCBtYXBzIHRv
IGp1c3QgYWZ0ZXIgdGhpcyBjb2x1bW4uCi0gICAgICAgICAgICAgICAgZWxzZSBpZiAocG9pbnQu
eSgpID49IGdhcEFuZENvbHVtblJlY3QuYm90dG9tKCkpIHsKKyAgICAgICAgICAgICAgICBlbHNl
IGlmIChwb2ludC55KCkgPj0gZ2FwQW5kQ29sdW1uUmVjdC5tYXhZKCkpIHsKICAgICAgICAgICAg
ICAgICAgICAgcG9pbnQgPSBnYXBBbmRDb2x1bW5SZWN0LmxvY2F0aW9uKCk7CiAgICAgICAgICAg
ICAgICAgICAgIHBvaW50Lm1vdmUoMCwgZ2FwQW5kQ29sdW1uUmVjdC5oZWlnaHQoKSk7CiAgICAg
ICAgICAgICAgICAgfQpAQCAtNDM0NCw3ICs0MzQ0LDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6YWRq
dXN0UG9pbnRUb0NvbHVtbkNvbgogICAgICAgICAgICAgbG9naWNhbE9mZnNldCArPSBjb2xSZWN0
LmhlaWdodCgpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgSW50UmVjdCBnYXBBbmRD
b2x1bW5SZWN0KGNvbFJlY3QueCgpLCBjb2xSZWN0LnkoKSAtIGhhbGZDb2xHYXAsIGNvbFJlY3Qu
d2lkdGgoKSwgY29sUmVjdC5oZWlnaHQoKSArIGNvbEdhcCk7Ci0gICAgICAgICAgICBpZiAocG9p
bnQueSgpID49IGdhcEFuZENvbHVtblJlY3QueSgpICYmIHBvaW50LnkoKSA8IGdhcEFuZENvbHVt
blJlY3QuYm90dG9tKCkpIHsKKyAgICAgICAgICAgIGlmIChwb2ludC55KCkgPj0gZ2FwQW5kQ29s
dW1uUmVjdC55KCkgJiYgcG9pbnQueSgpIDwgZ2FwQW5kQ29sdW1uUmVjdC5tYXhZKCkpIHsKICAg
ICAgICAgICAgICAgICAvLyBGSVhNRTogVGhlIGNsYW1waW5nIHRoYXQgZm9sbG93cyBpcyBub3Qg
Y29tcGxldGVseSByaWdodCBmb3IgcmlnaHQtdG8tbGVmdAogICAgICAgICAgICAgICAgIC8vIGNv
bnRlbnQuCiAgICAgICAgICAgICAgICAgLy8gQ2xhbXAgZXZlcnl0aGluZyBhYm92ZSB0aGUgY29s
dW1uIHRvIGl0cyB0b3AgbGVmdC4KQEAgLTQzNTIsNyArNDM1Miw3IEBAIHZvaWQgUmVuZGVyQmxv
Y2s6OmFkanVzdFBvaW50VG9Db2x1bW5Db24KICAgICAgICAgICAgICAgICAgICAgcG9pbnQgPSBn
YXBBbmRDb2x1bW5SZWN0LmxvY2F0aW9uKCk7CiAgICAgICAgICAgICAgICAgLy8gQ2xhbXAgZXZl
cnl0aGluZyBiZWxvdyB0aGUgY29sdW1uIHRvIHRoZSBuZXh0IGNvbHVtbidzIHRvcCBsZWZ0LiBJ
ZiB0aGVyZSBpcwogICAgICAgICAgICAgICAgIC8vIG5vIG5leHQgY29sdW1uLCB0aGlzIHN0aWxs
IG1hcHMgdG8ganVzdCBhZnRlciB0aGlzIGNvbHVtbi4KLSAgICAgICAgICAgICAgICBlbHNlIGlm
IChwb2ludC54KCkgPj0gZ2FwQW5kQ29sdW1uUmVjdC5yaWdodCgpKSB7CisgICAgICAgICAgICAg
ICAgZWxzZSBpZiAocG9pbnQueCgpID49IGdhcEFuZENvbHVtblJlY3QubWF4WCgpKSB7CiAgICAg
ICAgICAgICAgICAgICAgIHBvaW50ID0gZ2FwQW5kQ29sdW1uUmVjdC5sb2NhdGlvbigpOwogICAg
ICAgICAgICAgICAgICAgICBwb2ludC5tb3ZlKGdhcEFuZENvbHVtblJlY3Qud2lkdGgoKSwgMCk7
CiAgICAgICAgICAgICAgICAgfQpAQCAtNDQyOSw5ICs0NDI5LDkgQEAgdm9pZCBSZW5kZXJCbG9j
azo6ZmxpcEZvcldyaXRpbmdNb2RlSW5jbAogICAgIGludCBjb2x1bW5Mb2dpY2FsSGVpZ2h0ID0g
Y29sSW5mby0+Y29sdW1uSGVpZ2h0KCk7CiAgICAgaW50IGV4cGFuZGVkTG9naWNhbEhlaWdodCA9
IGJvcmRlckJlZm9yZSgpICsgcGFkZGluZ0JlZm9yZSgpICsgY29sdW1uQ291bnQoY29sSW5mbykg
KiBjb2x1bW5Mb2dpY2FsSGVpZ2h0ICsgYm9yZGVyQWZ0ZXIoKSArIHBhZGRpbmdBZnRlcigpICsg
c2Nyb2xsYmFyTG9naWNhbEhlaWdodCgpOwogICAgIGlmIChzdHlsZSgpLT5pc0hvcml6b250YWxX
cml0aW5nTW9kZSgpKQotICAgICAgICByZWN0LnNldFkoZXhwYW5kZWRMb2dpY2FsSGVpZ2h0IC0g
cmVjdC5ib3R0b20oKSk7CisgICAgICAgIHJlY3Quc2V0WShleHBhbmRlZExvZ2ljYWxIZWlnaHQg
LSByZWN0Lm1heFkoKSk7CiAgICAgZWxzZQotICAgICAgICByZWN0LnNldFgoZXhwYW5kZWRMb2dp
Y2FsSGVpZ2h0IC0gcmVjdC5yaWdodCgpKTsKKyAgICAgICAgcmVjdC5zZXRYKGV4cGFuZGVkTG9n
aWNhbEhlaWdodCAtIHJlY3QubWF4WCgpKTsKIH0KIAogdm9pZCBSZW5kZXJCbG9jazo6YWRqdXN0
Rm9yQ29sdW1ucyhJbnRTaXplJiBvZmZzZXQsIGNvbnN0IEludFBvaW50JiBwb2ludCkgY29uc3QK
QEAgLTQ0NTksMTIgKzQ0NTksMTIgQEAgdm9pZCBSZW5kZXJCbG9jazo6YWRqdXN0Rm9yQ29sdW1u
cyhJbnRTaQogCiAgICAgICAgIC8vIE5vdyB3ZSdyZSBpbiB0aGUgc2FtZSBjb29yZGluYXRlIHNw
YWNlIGFzIHRoZSBwb2ludC4gIFNlZSBpZiBpdCBpcyBpbnNpZGUgdGhlIHJlY3RhbmdsZS4KICAg
ICAgICAgaWYgKHN0eWxlKCktPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpIHsKLSAgICAgICAg
ICAgIGlmIChwb2ludC55KCkgPj0gc2xpY2VSZWN0LnkoKSAmJiBwb2ludC55KCkgPCBzbGljZVJl
Y3QuYm90dG9tKCkpIHsKKyAgICAgICAgICAgIGlmIChwb2ludC55KCkgPj0gc2xpY2VSZWN0Lnko
KSAmJiBwb2ludC55KCkgPCBzbGljZVJlY3QubWF4WSgpKSB7CiAgICAgICAgICAgICAgICAgb2Zm
c2V0LmV4cGFuZChjb2x1bW5SZWN0QXQoY29sSW5mbywgaSkueCgpIC0gbG9naWNhbExlZnQsIC1s
b2dpY2FsT2Zmc2V0KTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAg
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAocG9pbnQueCgpID49IHNsaWNlUmVjdC54
KCkgJiYgcG9pbnQueCgpIDwgc2xpY2VSZWN0LnJpZ2h0KCkpIHsKKyAgICAgICAgICAgIGlmIChw
b2ludC54KCkgPj0gc2xpY2VSZWN0LngoKSAmJiBwb2ludC54KCkgPCBzbGljZVJlY3QubWF4WCgp
KSB7CiAgICAgICAgICAgICAgICAgb2Zmc2V0LmV4cGFuZCgtbG9naWNhbE9mZnNldCwgY29sdW1u
UmVjdEF0KGNvbEluZm8sIGkpLnkoKSAtIGxvZ2ljYWxMZWZ0KTsKICAgICAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
QmxvY2suaAkocmV2aXNpb24gNzcyNjApCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMzk4LDkgKzM5OCw5IEBAIHByaXZhdGU6CiAg
ICAgICAgIHZvaWQgc2V0SXNQbGFjZWQoYm9vbCBwbGFjZWQgPSB0cnVlKSB7IG1faXNQbGFjZWQg
PSBwbGFjZWQ7IH0KIAogICAgICAgICBpbnQgbGVmdCgpIGNvbnN0IHsgQVNTRVJUKGlzUGxhY2Vk
KCkpOyByZXR1cm4gbV9mcmFtZVJlY3QueCgpOyB9Ci0gICAgICAgIGludCByaWdodCgpIGNvbnN0
IHsgQVNTRVJUKGlzUGxhY2VkKCkpOyByZXR1cm4gbV9mcmFtZVJlY3QucmlnaHQoKTsgfQorICAg
ICAgICBpbnQgcmlnaHQoKSBjb25zdCB7IEFTU0VSVChpc1BsYWNlZCgpKTsgcmV0dXJuIG1fZnJh
bWVSZWN0Lm1heFgoKTsgfQogICAgICAgICBpbnQgdG9wKCkgY29uc3QgeyBBU1NFUlQoaXNQbGFj
ZWQoKSk7IHJldHVybiBtX2ZyYW1lUmVjdC55KCk7IH0KLSAgICAgICAgaW50IGJvdHRvbSgpIGNv
bnN0IHsgQVNTRVJUKGlzUGxhY2VkKCkpOyByZXR1cm4gbV9mcmFtZVJlY3QuYm90dG9tKCk7IH0K
KyAgICAgICAgaW50IGJvdHRvbSgpIGNvbnN0IHsgQVNTRVJUKGlzUGxhY2VkKCkpOyByZXR1cm4g
bV9mcmFtZVJlY3QubWF4WSgpOyB9CiAgICAgICAgIGludCB3aWR0aCgpIGNvbnN0IHsgcmV0dXJu
IG1fZnJhbWVSZWN0LndpZHRoKCk7IH0KICAgICAgICAgaW50IGhlaWdodCgpIGNvbnN0IHsgcmV0
dXJuIG1fZnJhbWVSZWN0LmhlaWdodCgpOyB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJCb3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJCb3guY3BwCShyZXZpc2lvbiA3NzI2MCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NDgsMTYgKzU0OCwxNiBAQCBJ
bnRSZWN0IFJlbmRlckJveDo6cmVmbGVjdGVkUmVjdChjb25zdCBJCiAgICAgSW50UmVjdCByZXN1
bHQgPSByOwogICAgIHN3aXRjaCAoc3R5bGUoKS0+Ym94UmVmbGVjdCgpLT5kaXJlY3Rpb24oKSkg
ewogICAgICAgICBjYXNlIFJlZmxlY3Rpb25CZWxvdzoKLSAgICAgICAgICAgIHJlc3VsdC5zZXRZ
KGJveC5ib3R0b20oKSArIHJlZmxlY3Rpb25PZmZzZXQoKSArIChib3guYm90dG9tKCkgLSByLmJv
dHRvbSgpKSk7CisgICAgICAgICAgICByZXN1bHQuc2V0WShib3gubWF4WSgpICsgcmVmbGVjdGlv
bk9mZnNldCgpICsgKGJveC5tYXhZKCkgLSByLm1heFkoKSkpOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIGNhc2UgUmVmbGVjdGlvbkFib3ZlOgotICAgICAgICAgICAgcmVzdWx0LnNldFko
Ym94LnkoKSAtIHJlZmxlY3Rpb25PZmZzZXQoKSAtIGJveC5oZWlnaHQoKSArIChib3guYm90dG9t
KCkgLSByLmJvdHRvbSgpKSk7CisgICAgICAgICAgICByZXN1bHQuc2V0WShib3gueSgpIC0gcmVm
bGVjdGlvbk9mZnNldCgpIC0gYm94LmhlaWdodCgpICsgKGJveC5tYXhZKCkgLSByLm1heFkoKSkp
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgUmVmbGVjdGlvbkxlZnQ6Ci0gICAg
ICAgICAgICByZXN1bHQuc2V0WChib3gueCgpIC0gcmVmbGVjdGlvbk9mZnNldCgpIC0gYm94Lndp
ZHRoKCkgKyAoYm94LnJpZ2h0KCkgLSByLnJpZ2h0KCkpKTsKKyAgICAgICAgICAgIHJlc3VsdC5z
ZXRYKGJveC54KCkgLSByZWZsZWN0aW9uT2Zmc2V0KCkgLSBib3gud2lkdGgoKSArIChib3gubWF4
WCgpIC0gci5tYXhYKCkpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFJlZmxl
Y3Rpb25SaWdodDoKLSAgICAgICAgICAgIHJlc3VsdC5zZXRYKGJveC5yaWdodCgpICsgcmVmbGVj
dGlvbk9mZnNldCgpICsgKGJveC5yaWdodCgpIC0gci5yaWdodCgpKSk7CisgICAgICAgICAgICBy
ZXN1bHQuc2V0WChib3gubWF4WCgpICsgcmVmbGVjdGlvbk9mZnNldCgpICsgKGJveC5tYXhYKCkg
LSByLm1heFgoKSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIHJldHVybiByZXN1
bHQ7CkBAIC0yOTg3LDcgKzI5ODcsNyBAQCBJbnRSZWN0IFJlbmRlckJveDo6bG9jYWxDYXJldFJl
Y3QoSW5saW5lCiAgICAgICAgIHJlY3Quc2V0SGVpZ2h0KGZvbnRIZWlnaHQpOwogCiAgICAgaWYg
KGV4dHJhV2lkdGhUb0VuZE9mTGluZSkKLSAgICAgICAgKmV4dHJhV2lkdGhUb0VuZE9mTGluZSA9
IHgoKSArIHdpZHRoKCkgLSByZWN0LnJpZ2h0KCk7CisgICAgICAgICpleHRyYVdpZHRoVG9FbmRP
ZkxpbmUgPSB4KCkgKyB3aWR0aCgpIC0gcmVjdC5tYXhYKCk7CiAKICAgICAvLyBNb3ZlIHRvIGxv
Y2FsIGNvb3JkcwogICAgIHJlY3QubW92ZSgteCgpLCAteSgpKTsKQEAgLTMxMDgsOSArMzEwOCw5
IEBAIHZvaWQgUmVuZGVyQm94OjphZGRTaGFkb3dPdmVyZmxvdygpCiAgICAgc3R5bGUoKS0+Z2V0
Qm94U2hhZG93RXh0ZW50KHNoYWRvd1RvcCwgc2hhZG93UmlnaHQsIHNoYWRvd0JvdHRvbSwgc2hh
ZG93TGVmdCk7CiAgICAgSW50UmVjdCBib3JkZXJCb3ggPSBib3JkZXJCb3hSZWN0KCk7CiAgICAg
aW50IG92ZXJmbG93TGVmdCA9IGJvcmRlckJveC54KCkgKyBzaGFkb3dMZWZ0OwotICAgIGludCBv
dmVyZmxvd1JpZ2h0ID0gYm9yZGVyQm94LnJpZ2h0KCkgKyBzaGFkb3dSaWdodDsKKyAgICBpbnQg
b3ZlcmZsb3dSaWdodCA9IGJvcmRlckJveC5tYXhYKCkgKyBzaGFkb3dSaWdodDsKICAgICBpbnQg
b3ZlcmZsb3dUb3AgPSBib3JkZXJCb3gueSgpICsgc2hhZG93VG9wOwotICAgIGludCBvdmVyZmxv
d0JvdHRvbSA9IGJvcmRlckJveC5ib3R0b20oKSArIHNoYWRvd0JvdHRvbTsKKyAgICBpbnQgb3Zl
cmZsb3dCb3R0b20gPSBib3JkZXJCb3gubWF4WSgpICsgc2hhZG93Qm90dG9tOwogICAgIGFkZFZp
c3VhbE92ZXJmbG93KEludFJlY3Qob3ZlcmZsb3dMZWZ0LCBvdmVyZmxvd1RvcCwgb3ZlcmZsb3dS
aWdodCAtIG92ZXJmbG93TGVmdCwgb3ZlcmZsb3dCb3R0b20gLSBvdmVyZmxvd1RvcCkpOwogfQog
CkBAIC0zMTQ5LDEzICszMTQ5LDEzIEBAIHZvaWQgUmVuZGVyQm94OjphZGRMYXlvdXRPdmVyZmxv
dyhjb25zdCAKICAgICAgICAgYm9vbCBoYXNMZWZ0T3ZlcmZsb3cgPSAhc3R5bGUoKS0+aXNMZWZ0
VG9SaWdodERpcmVjdGlvbigpICYmIHN0eWxlKCktPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCk7
CiAgICAgICAgIAogICAgICAgICBpZiAoIWhhc1RvcE92ZXJmbG93KQotICAgICAgICAgICAgb3Zl
cmZsb3dSZWN0LnNoaWZ0VG9wRWRnZVRvKG1heChvdmVyZmxvd1JlY3QueSgpLCBjbGllbnRCb3gu
eSgpKSk7CisgICAgICAgICAgICBvdmVyZmxvd1JlY3Quc2hpZnRNaW5ZRWRnZVRvKG1heChvdmVy
Zmxvd1JlY3QueSgpLCBjbGllbnRCb3gueSgpKSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAg
IG92ZXJmbG93UmVjdC5zaGlmdEJvdHRvbUVkZ2VUbyhtaW4ob3ZlcmZsb3dSZWN0LmJvdHRvbSgp
LCBjbGllbnRCb3guYm90dG9tKCkpKTsKKyAgICAgICAgICAgIG92ZXJmbG93UmVjdC5zaGlmdE1h
eFlFZGdlVG8obWluKG92ZXJmbG93UmVjdC5tYXhZKCksIGNsaWVudEJveC5tYXhZKCkpKTsKICAg
ICAgICAgaWYgKCFoYXNMZWZ0T3ZlcmZsb3cpCi0gICAgICAgICAgICBvdmVyZmxvd1JlY3Quc2hp
ZnRMZWZ0RWRnZVRvKG1heChvdmVyZmxvd1JlY3QueCgpLCBjbGllbnRCb3gueCgpKSk7CisgICAg
ICAgICAgICBvdmVyZmxvd1JlY3Quc2hpZnRNaW5YRWRnZVRvKG1heChvdmVyZmxvd1JlY3QueCgp
LCBjbGllbnRCb3gueCgpKSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIG92ZXJmbG93UmVj
dC5zaGlmdFJpZ2h0RWRnZVRvKG1pbihvdmVyZmxvd1JlY3QucmlnaHQoKSwgY2xpZW50Qm94LnJp
Z2h0KCkpKTsKKyAgICAgICAgICAgIG92ZXJmbG93UmVjdC5zaGlmdE1heFhFZGdlVG8obWluKG92
ZXJmbG93UmVjdC5tYXhYKCksIGNsaWVudEJveC5tYXhYKCkpKTsKICAgICAgICAgCiAgICAgICAg
IC8vIE5vdyByZS10ZXN0IHdpdGggdGhlIGFkanVzdGVkIHJlY3RhbmdsZSBhbmQgc2VlIGlmIGl0
IGhhcyBiZWNvbWUgdW5yZWFjaGFibGUgb3IgZnVsbHkKICAgICAgICAgLy8gY29udGFpbmVkLgpA
QCAtMzI0NCw5ICszMjQ0LDkgQEAgSW50UmVjdCBSZW5kZXJCb3g6OnZpc3VhbE92ZXJmbG93UmVj
dEZvcgogICAgIC8vIFdlIGFyZSBwdXR0aW5nIG91cnNlbHZlcyBpbnRvIG91ciBwYXJlbnQncyBj
b29yZGluYXRlIHNwYWNlLiAgSWYgdGhlcmUgaXMgYSBmbGlwcGVkIGJsb2NrIG1pc21hdGNoCiAg
ICAgLy8gaW4gYSBwYXJ0aWN1bGFyIGF4aXMsIHRoZW4gd2UgaGF2ZSB0byBmbGlwIHRoZSByZWN0
IGFsb25nIHRoYXQgYXhpcy4KICAgICBpZiAoc3R5bGUoKS0+d3JpdGluZ01vZGUoKSA9PSBSaWdo
dFRvTGVmdFdyaXRpbmdNb2RlIHx8IHBhcmVudFN0eWxlLT53cml0aW5nTW9kZSgpID09IFJpZ2h0
VG9MZWZ0V3JpdGluZ01vZGUpCi0gICAgICAgIHJlY3Quc2V0WCh3aWR0aCgpIC0gcmVjdC5yaWdo
dCgpKTsKKyAgICAgICAgcmVjdC5zZXRYKHdpZHRoKCkgLSByZWN0Lm1heFgoKSk7CiAgICAgZWxz
ZSBpZiAoc3R5bGUoKS0+d3JpdGluZ01vZGUoKSA9PSBCb3R0b21Ub1RvcFdyaXRpbmdNb2RlIHx8
IHBhcmVudFN0eWxlLT53cml0aW5nTW9kZSgpID09IEJvdHRvbVRvVG9wV3JpdGluZ01vZGUpCi0g
ICAgICAgIHJlY3Quc2V0WShoZWlnaHQoKSAtIHJlY3QuYm90dG9tKCkpOworICAgICAgICByZWN0
LnNldFkoaGVpZ2h0KCkgLSByZWN0Lm1heFkoKSk7CiAKICAgICByZXR1cm4gcmVjdDsKIH0KQEAg
LTMyOTAsOSArMzI5MCw5IEBAIEludFJlY3QgUmVuZGVyQm94OjpsYXlvdXRPdmVyZmxvd1JlY3RG
b3IKICAgICAvLyBXZSBhcmUgcHV0dGluZyBvdXJzZWx2ZXMgaW50byBvdXIgcGFyZW50J3MgY29v
cmRpbmF0ZSBzcGFjZS4gIElmIHRoZXJlIGlzIGEgZmxpcHBlZCBibG9jayBtaXNtYXRjaAogICAg
IC8vIGluIGEgcGFydGljdWxhciBheGlzLCB0aGVuIHdlIGhhdmUgdG8gZmxpcCB0aGUgcmVjdCBh
bG9uZyB0aGF0IGF4aXMuCiAgICAgaWYgKHN0eWxlKCktPndyaXRpbmdNb2RlKCkgPT0gUmlnaHRU
b0xlZnRXcml0aW5nTW9kZSB8fCBwYXJlbnRTdHlsZS0+d3JpdGluZ01vZGUoKSA9PSBSaWdodFRv
TGVmdFdyaXRpbmdNb2RlKQotICAgICAgICByZWN0LnNldFgod2lkdGgoKSAtIHJlY3QucmlnaHQo
KSk7CisgICAgICAgIHJlY3Quc2V0WCh3aWR0aCgpIC0gcmVjdC5tYXhYKCkpOwogICAgIGVsc2Ug
aWYgKHN0eWxlKCktPndyaXRpbmdNb2RlKCkgPT0gQm90dG9tVG9Ub3BXcml0aW5nTW9kZSB8fCBw
YXJlbnRTdHlsZS0+d3JpdGluZ01vZGUoKSA9PSBCb3R0b21Ub1RvcFdyaXRpbmdNb2RlKQotICAg
ICAgICByZWN0LnNldFkoaGVpZ2h0KCkgLSByZWN0LmJvdHRvbSgpKTsKKyAgICAgICAgcmVjdC5z
ZXRZKGhlaWdodCgpIC0gcmVjdC5tYXhZKCkpOwogCiAgICAgcmV0dXJuIHJlY3Q7CiB9CkBAIC0z
MzE1LDkgKzMzMTUsOSBAQCB2b2lkIFJlbmRlckJveDo6ZmxpcEZvcldyaXRpbmdNb2RlKEludFJl
CiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChzdHlsZSgpLT5pc0hvcml6b250YWxXcml0aW5n
TW9kZSgpKQotICAgICAgICByZWN0LnNldFkoaGVpZ2h0KCkgLSByZWN0LmJvdHRvbSgpKTsKKyAg
ICAgICAgcmVjdC5zZXRZKGhlaWdodCgpIC0gcmVjdC5tYXhZKCkpOwogICAgIGVsc2UKLSAgICAg
ICAgcmVjdC5zZXRYKHdpZHRoKCkgLSByZWN0LnJpZ2h0KCkpOworICAgICAgICByZWN0LnNldFgo
d2lkdGgoKSAtIHJlY3QubWF4WCgpKTsKIH0KIAogaW50IFJlbmRlckJveDo6ZmxpcEZvcldyaXRp
bmdNb2RlKGludCBwb3NpdGlvbikgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJGcmFtZVNldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckZyYW1lU2V0LmNwcAkocmV2aXNpb24gNzcyNjApCisrKyBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyRnJhbWVTZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05Myw4ICs5
Myw4IEBAIHZvaWQgUmVuZGVyRnJhbWVTZXQ6OnBhaW50Q29sdW1uQm9yZGVyKGMKICAgICAvLyBO
b3cgc3Ryb2tlIHRoZSBlZGdlcyBidXQgb25seSBpZiB3ZSBoYXZlIGVub3VnaCByb29tIHRvIHBh
aW50IGJvdGggZWRnZXMgd2l0aCBhIGxpdHRsZQogICAgIC8vIGJpdCBvZiB0aGUgZmlsbCBjb2xv
ciBzaG93aW5nIHRocm91Z2guCiAgICAgaWYgKGJvcmRlclJlY3Qud2lkdGgoKSA+PSAzKSB7Ci0g
ICAgICAgIGNvbnRleHQtPmZpbGxSZWN0KEludFJlY3QoYm9yZGVyUmVjdC50b3BMZWZ0KCksIElu
dFNpemUoMSwgaGVpZ2h0KCkpKSwgYm9yZGVyU3RhcnRFZGdlQ29sb3IoKSwgY29sb3JTcGFjZSk7
Ci0gICAgICAgIGNvbnRleHQtPmZpbGxSZWN0KEludFJlY3QoYm9yZGVyUmVjdC50b3BSaWdodCgp
LCBJbnRTaXplKDEsIGhlaWdodCgpKSksIGJvcmRlckVuZEVkZ2VDb2xvcigpLCBjb2xvclNwYWNl
KTsKKyAgICAgICAgY29udGV4dC0+ZmlsbFJlY3QoSW50UmVjdChib3JkZXJSZWN0LmxvY2F0aW9u
KCksIEludFNpemUoMSwgaGVpZ2h0KCkpKSwgYm9yZGVyU3RhcnRFZGdlQ29sb3IoKSwgY29sb3JT
cGFjZSk7CisgICAgICAgIGNvbnRleHQtPmZpbGxSZWN0KEludFJlY3QoSW50UG9pbnQoYm9yZGVy
UmVjdC5tYXhYKCkgLSAxLCBib3JkZXJSZWN0LnkoKSksIEludFNpemUoMSwgaGVpZ2h0KCkpKSwg
Ym9yZGVyRW5kRWRnZUNvbG9yKCksIGNvbG9yU3BhY2UpOwogICAgIH0KIH0KIApAQCAtMTEzLDgg
KzExMyw4IEBAIHZvaWQgUmVuZGVyRnJhbWVTZXQ6OnBhaW50Um93Qm9yZGVyKGNvbnMKICAgICAv
LyBOb3cgc3Ryb2tlIHRoZSBlZGdlcyBidXQgb25seSBpZiB3ZSBoYXZlIGVub3VnaCByb29tIHRv
IHBhaW50IGJvdGggZWRnZXMgd2l0aCBhIGxpdHRsZQogICAgIC8vIGJpdCBvZiB0aGUgZmlsbCBj
b2xvciBzaG93aW5nIHRocm91Z2guCiAgICAgaWYgKGJvcmRlclJlY3QuaGVpZ2h0KCkgPj0gMykg
ewotICAgICAgICBjb250ZXh0LT5maWxsUmVjdChJbnRSZWN0KGJvcmRlclJlY3QudG9wTGVmdCgp
LCBJbnRTaXplKHdpZHRoKCksIDEpKSwgYm9yZGVyU3RhcnRFZGdlQ29sb3IoKSwgY29sb3JTcGFj
ZSk7Ci0gICAgICAgIGNvbnRleHQtPmZpbGxSZWN0KEludFJlY3QoYm9yZGVyUmVjdC5ib3R0b21M
ZWZ0KCksIEludFNpemUod2lkdGgoKSwgMSkpLCBib3JkZXJFbmRFZGdlQ29sb3IoKSwgY29sb3JT
cGFjZSk7CisgICAgICAgIGNvbnRleHQtPmZpbGxSZWN0KEludFJlY3QoYm9yZGVyUmVjdC5sb2Nh
dGlvbigpLCBJbnRTaXplKHdpZHRoKCksIDEpKSwgYm9yZGVyU3RhcnRFZGdlQ29sb3IoKSwgY29s
b3JTcGFjZSk7CisgICAgICAgIGNvbnRleHQtPmZpbGxSZWN0KEludFJlY3QoSW50UG9pbnQoYm9y
ZGVyUmVjdC54KCksIGJvcmRlclJlY3QubWF4WSgpIC0gMSksIEludFNpemUod2lkdGgoKSwgMSkp
LCBib3JkZXJFbmRFZGdlQ29sb3IoKSwgY29sb3JTcGFjZSk7CiAgICAgfQogfQogCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmNwcAkocmV2aXNpb24gNzcyNjAp
CisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTAzNywzMCArMTAzNywzMCBAQCB2b2lkIFJlbmRlcklubGluZTo6cGFpbnRPdXRs
aW5lRm9yTGluZShHCiAKICAgICBpbnQgdCA9IHR5ICsgdGhpc2xpbmUueSgpIC0gb2Zmc2V0Owog
ICAgIGludCBsID0gdHggKyB0aGlzbGluZS54KCkgLSBvZmZzZXQ7Ci0gICAgaW50IGIgPSB0eSAr
IHRoaXNsaW5lLmJvdHRvbSgpICsgb2Zmc2V0OwotICAgIGludCByID0gdHggKyB0aGlzbGluZS5y
aWdodCgpICsgb2Zmc2V0OworICAgIGludCBiID0gdHkgKyB0aGlzbGluZS5tYXhZKCkgKyBvZmZz
ZXQ7CisgICAgaW50IHIgPSB0eCArIHRoaXNsaW5lLm1heFgoKSArIG9mZnNldDsKICAgICAKICAg
ICAvLyBsZWZ0IGVkZ2UKICAgICBkcmF3TGluZUZvckJveFNpZGUoZ3JhcGhpY3NDb250ZXh0LAog
ICAgICAgICAgICAgICAgbCAtIG93LAotICAgICAgICAgICAgICAgdCAtIChsYXN0bGluZS5pc0Vt
cHR5KCkgfHwgdGhpc2xpbmUueCgpIDwgbGFzdGxpbmUueCgpIHx8IChsYXN0bGluZS5yaWdodCgp
IC0gMSkgPD0gdGhpc2xpbmUueCgpID8gb3cgOiAwKSwKKyAgICAgICAgICAgICAgIHQgLSAobGFz
dGxpbmUuaXNFbXB0eSgpIHx8IHRoaXNsaW5lLngoKSA8IGxhc3RsaW5lLngoKSB8fCAobGFzdGxp
bmUubWF4WCgpIC0gMSkgPD0gdGhpc2xpbmUueCgpID8gb3cgOiAwKSwKICAgICAgICAgICAgICAg
IGwsCi0gICAgICAgICAgICAgICBiICsgKG5leHRsaW5lLmlzRW1wdHkoKSB8fCB0aGlzbGluZS54
KCkgPD0gbmV4dGxpbmUueCgpIHx8IChuZXh0bGluZS5yaWdodCgpIC0gMSkgPD0gdGhpc2xpbmUu
eCgpID8gb3cgOiAwKSwKKyAgICAgICAgICAgICAgIGIgKyAobmV4dGxpbmUuaXNFbXB0eSgpIHx8
IHRoaXNsaW5lLngoKSA8PSBuZXh0bGluZS54KCkgfHwgKG5leHRsaW5lLm1heFgoKSAtIDEpIDw9
IHRoaXNsaW5lLngoKSA/IG93IDogMCksCiAgICAgICAgICAgICAgICBCU0xlZnQsCiAgICAgICAg
ICAgICAgICBvYywgb3MsCi0gICAgICAgICAgICAgICAobGFzdGxpbmUuaXNFbXB0eSgpIHx8IHRo
aXNsaW5lLngoKSA8IGxhc3RsaW5lLngoKSB8fCAobGFzdGxpbmUucmlnaHQoKSAtIDEpIDw9IHRo
aXNsaW5lLngoKSA/IG93IDogLW93KSwKLSAgICAgICAgICAgICAgIChuZXh0bGluZS5pc0VtcHR5
KCkgfHwgdGhpc2xpbmUueCgpIDw9IG5leHRsaW5lLngoKSB8fCAobmV4dGxpbmUucmlnaHQoKSAt
IDEpIDw9IHRoaXNsaW5lLngoKSA/IG93IDogLW93KSk7CisgICAgICAgICAgICAgICAobGFzdGxp
bmUuaXNFbXB0eSgpIHx8IHRoaXNsaW5lLngoKSA8IGxhc3RsaW5lLngoKSB8fCAobGFzdGxpbmUu
bWF4WCgpIC0gMSkgPD0gdGhpc2xpbmUueCgpID8gb3cgOiAtb3cpLAorICAgICAgICAgICAgICAg
KG5leHRsaW5lLmlzRW1wdHkoKSB8fCB0aGlzbGluZS54KCkgPD0gbmV4dGxpbmUueCgpIHx8IChu
ZXh0bGluZS5tYXhYKCkgLSAxKSA8PSB0aGlzbGluZS54KCkgPyBvdyA6IC1vdykpOwogICAgIAog
ICAgIC8vIHJpZ2h0IGVkZ2UKICAgICBkcmF3TGluZUZvckJveFNpZGUoZ3JhcGhpY3NDb250ZXh0
LAogICAgICAgICAgICAgICAgciwKLSAgICAgICAgICAgICAgIHQgLSAobGFzdGxpbmUuaXNFbXB0
eSgpIHx8IGxhc3RsaW5lLnJpZ2h0KCkgPCB0aGlzbGluZS5yaWdodCgpIHx8ICh0aGlzbGluZS5y
aWdodCgpIC0gMSkgPD0gbGFzdGxpbmUueCgpID8gb3cgOiAwKSwKKyAgICAgICAgICAgICAgIHQg
LSAobGFzdGxpbmUuaXNFbXB0eSgpIHx8IGxhc3RsaW5lLm1heFgoKSA8IHRoaXNsaW5lLm1heFgo
KSB8fCAodGhpc2xpbmUubWF4WCgpIC0gMSkgPD0gbGFzdGxpbmUueCgpID8gb3cgOiAwKSwKICAg
ICAgICAgICAgICAgIHIgKyBvdywKLSAgICAgICAgICAgICAgIGIgKyAobmV4dGxpbmUuaXNFbXB0
eSgpIHx8IG5leHRsaW5lLnJpZ2h0KCkgPD0gdGhpc2xpbmUucmlnaHQoKSB8fCAodGhpc2xpbmUu
cmlnaHQoKSAtIDEpIDw9IG5leHRsaW5lLngoKSA/IG93IDogMCksCisgICAgICAgICAgICAgICBi
ICsgKG5leHRsaW5lLmlzRW1wdHkoKSB8fCBuZXh0bGluZS5tYXhYKCkgPD0gdGhpc2xpbmUubWF4
WCgpIHx8ICh0aGlzbGluZS5tYXhYKCkgLSAxKSA8PSBuZXh0bGluZS54KCkgPyBvdyA6IDApLAog
ICAgICAgICAgICAgICAgQlNSaWdodCwKICAgICAgICAgICAgICAgIG9jLCBvcywKLSAgICAgICAg
ICAgICAgIChsYXN0bGluZS5pc0VtcHR5KCkgfHwgbGFzdGxpbmUucmlnaHQoKSA8IHRoaXNsaW5l
LnJpZ2h0KCkgfHwgKHRoaXNsaW5lLnJpZ2h0KCkgLSAxKSA8PSBsYXN0bGluZS54KCkgPyBvdyA6
IC1vdyksCi0gICAgICAgICAgICAgICAobmV4dGxpbmUuaXNFbXB0eSgpIHx8IG5leHRsaW5lLnJp
Z2h0KCkgPD0gdGhpc2xpbmUucmlnaHQoKSB8fCAodGhpc2xpbmUucmlnaHQoKSAtIDEpIDw9IG5l
eHRsaW5lLngoKSA/IG93IDogLW93KSk7CisgICAgICAgICAgICAgICAobGFzdGxpbmUuaXNFbXB0
eSgpIHx8IGxhc3RsaW5lLm1heFgoKSA8IHRoaXNsaW5lLm1heFgoKSB8fCAodGhpc2xpbmUubWF4
WCgpIC0gMSkgPD0gbGFzdGxpbmUueCgpID8gb3cgOiAtb3cpLAorICAgICAgICAgICAgICAgKG5l
eHRsaW5lLmlzRW1wdHkoKSB8fCBuZXh0bGluZS5tYXhYKCkgPD0gdGhpc2xpbmUubWF4WCgpIHx8
ICh0aGlzbGluZS5tYXhYKCkgLSAxKSA8PSBuZXh0bGluZS54KCkgPyBvdyA6IC1vdykpOwogICAg
IC8vIHVwcGVyIGVkZ2UKICAgICBpZiAodGhpc2xpbmUueCgpIDwgbGFzdGxpbmUueCgpKQogICAg
ICAgICBkcmF3TGluZUZvckJveFNpZGUoZ3JhcGhpY3NDb250ZXh0LApAQCAtMTA3MiwxNCArMTA3
MiwxNCBAQCB2b2lkIFJlbmRlcklubGluZTo6cGFpbnRPdXRsaW5lRm9yTGluZShHCiAgICAgICAg
ICAgICAgICAgICAgb3csCiAgICAgICAgICAgICAgICAgICAgKCFsYXN0bGluZS5pc0VtcHR5KCkg
JiYgdHggKyBsYXN0bGluZS54KCkgKyAxIDwgciArIG93KSA/IC1vdyA6IG93KTsKICAgICAKLSAg
ICBpZiAobGFzdGxpbmUucmlnaHQoKSA8IHRoaXNsaW5lLnJpZ2h0KCkpCisgICAgaWYgKGxhc3Rs
aW5lLm1heFgoKSA8IHRoaXNsaW5lLm1heFgoKSkKICAgICAgICAgZHJhd0xpbmVGb3JCb3hTaWRl
KGdyYXBoaWNzQ29udGV4dCwKLSAgICAgICAgICAgICAgICAgICBtYXgobGFzdGxpbmUuaXNFbXB0
eSgpID8gLTEwMDAwMDAgOiB0eCArIGxhc3RsaW5lLnJpZ2h0KCksIGwgLSBvdyksCisgICAgICAg
ICAgICAgICAgICAgbWF4KGxhc3RsaW5lLmlzRW1wdHkoKSA/IC0xMDAwMDAwIDogdHggKyBsYXN0
bGluZS5tYXhYKCksIGwgLSBvdyksCiAgICAgICAgICAgICAgICAgICAgdCAtIG93LAogICAgICAg
ICAgICAgICAgICAgIHIgKyBvdywKICAgICAgICAgICAgICAgICAgICB0ICwKICAgICAgICAgICAg
ICAgICAgICBCU1RvcCwgb2MsIG9zLAotICAgICAgICAgICAgICAgICAgICghbGFzdGxpbmUuaXNF
bXB0eSgpICYmIGwgLSBvdyA8IHR4ICsgbGFzdGxpbmUucmlnaHQoKSkgPyAtb3cgOiBvdywKKyAg
ICAgICAgICAgICAgICAgICAoIWxhc3RsaW5lLmlzRW1wdHkoKSAmJiBsIC0gb3cgPCB0eCArIGxh
c3RsaW5lLm1heFgoKSkgPyAtb3cgOiBvdywKICAgICAgICAgICAgICAgICAgICBvdyk7CiAgICAg
CiAgICAgLy8gbG93ZXIgZWRnZQpAQCAtMTA5MywxNCArMTA5MywxNCBAQCB2b2lkIFJlbmRlcklu
bGluZTo6cGFpbnRPdXRsaW5lRm9yTGluZShHCiAgICAgICAgICAgICAgICAgICAgb3csCiAgICAg
ICAgICAgICAgICAgICAgKCFuZXh0bGluZS5pc0VtcHR5KCkgJiYgdHggKyBuZXh0bGluZS54KCkg
KyAxIDwgciArIG93KSA/IC1vdyA6IG93KTsKICAgICAKLSAgICBpZiAobmV4dGxpbmUucmlnaHQo
KSA8IHRoaXNsaW5lLnJpZ2h0KCkpCisgICAgaWYgKG5leHRsaW5lLm1heFgoKSA8IHRoaXNsaW5l
Lm1heFgoKSkKICAgICAgICAgZHJhd0xpbmVGb3JCb3hTaWRlKGdyYXBoaWNzQ29udGV4dCwKLSAg
ICAgICAgICAgICAgICAgICBtYXgoIW5leHRsaW5lLmlzRW1wdHkoKSA/IHR4ICsgbmV4dGxpbmUu
cmlnaHQoKSA6IC0xMDAwMDAwLCBsIC0gb3cpLAorICAgICAgICAgICAgICAgICAgIG1heCghbmV4
dGxpbmUuaXNFbXB0eSgpID8gdHggKyBuZXh0bGluZS5tYXhYKCkgOiAtMTAwMDAwMCwgbCAtIG93
KSwKICAgICAgICAgICAgICAgICAgICBiLAogICAgICAgICAgICAgICAgICAgIHIgKyBvdywKICAg
ICAgICAgICAgICAgICAgICBiICsgb3csCiAgICAgICAgICAgICAgICAgICAgQlNCb3R0b20sIG9j
LCBvcywKLSAgICAgICAgICAgICAgICAgICAoIW5leHRsaW5lLmlzRW1wdHkoKSAmJiBsIC0gb3cg
PCB0eCArIG5leHRsaW5lLnJpZ2h0KCkpID8gLW93IDogb3csCisgICAgICAgICAgICAgICAgICAg
KCFuZXh0bGluZS5pc0VtcHR5KCkgJiYgbCAtIG93IDwgdHggKyBuZXh0bGluZS5tYXhYKCkpID8g
LW93IDogb3csCiAgICAgICAgICAgICAgICAgICAgb3cpOwogfQogCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAJKHJldmlzaW9uIDc3MjYwKQorKysgU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTUx
Niw3ICsxNTE2LDcgQEAgSW50UmVjdCBSZW5kZXJMYXllcjo6Z2V0UmVjdFRvRXhwb3NlKGNvbgog
ICAgICAgICBzY3JvbGxYID0gU2Nyb2xsQWxpZ25tZW50OjpnZXRIaWRkZW5CZWhhdmlvcihhbGln
blgpOwogICAgIC8vIElmIHdlJ3JlIHRyeWluZyB0byBhbGlnbiB0byB0aGUgY2xvc2VzdCBlZGdl
LCBhbmQgdGhlIGV4cG9zZVJlY3QgaXMgZnVydGhlciByaWdodAogICAgIC8vIHRoYW4gdGhlIHZp
c2libGVSZWN0LCBhbmQgbm90IGJpZ2dlciB0aGFuIHRoZSB2aXNpYmxlIGFyZWEsIHRoZW4gYWxp
Z24gd2l0aCB0aGUgcmlnaHQuCi0gICAgaWYgKHNjcm9sbFggPT0gYWxpZ25Ub0Nsb3Nlc3RFZGdl
ICYmIGV4cG9zZVJlY3QucmlnaHQoKSA+IHZpc2libGVSZWN0LnJpZ2h0KCkgJiYgZXhwb3NlUmVj
dC53aWR0aCgpIDwgdmlzaWJsZVJlY3Qud2lkdGgoKSkKKyAgICBpZiAoc2Nyb2xsWCA9PSBhbGln
blRvQ2xvc2VzdEVkZ2UgJiYgZXhwb3NlUmVjdC5tYXhYKCkgPiB2aXNpYmxlUmVjdC5tYXhYKCkg
JiYgZXhwb3NlUmVjdC53aWR0aCgpIDwgdmlzaWJsZVJlY3Qud2lkdGgoKSkKICAgICAgICAgc2Ny
b2xsWCA9IGFsaWduUmlnaHQ7CiAKICAgICAvLyBHaXZlbiB0aGUgWCBiZWhhdmlvciwgY29tcHV0
ZSB0aGUgWCBjb29yZGluYXRlLgpAQCAtMTUyNCw3ICsxNTI0LDcgQEAgSW50UmVjdCBSZW5kZXJM
YXllcjo6Z2V0UmVjdFRvRXhwb3NlKGNvbgogICAgIGlmIChzY3JvbGxYID09IG5vU2Nyb2xsKSAK
ICAgICAgICAgeCA9IHZpc2libGVSZWN0LngoKTsKICAgICBlbHNlIGlmIChzY3JvbGxYID09IGFs
aWduUmlnaHQpCi0gICAgICAgIHggPSBleHBvc2VSZWN0LnJpZ2h0KCkgLSB2aXNpYmxlUmVjdC53
aWR0aCgpOworICAgICAgICB4ID0gZXhwb3NlUmVjdC5tYXhYKCkgLSB2aXNpYmxlUmVjdC53aWR0
aCgpOwogICAgIGVsc2UgaWYgKHNjcm9sbFggPT0gYWxpZ25DZW50ZXIpCiAgICAgICAgIHggPSBl
eHBvc2VSZWN0LngoKSArIChleHBvc2VSZWN0LndpZHRoKCkgLSB2aXNpYmxlUmVjdC53aWR0aCgp
KSAvIDI7CiAgICAgZWxzZQpAQCAtMTU0OSw3ICsxNTQ5LDcgQEAgSW50UmVjdCBSZW5kZXJMYXll
cjo6Z2V0UmVjdFRvRXhwb3NlKGNvbgogICAgICAgICBzY3JvbGxZID0gU2Nyb2xsQWxpZ25tZW50
OjpnZXRIaWRkZW5CZWhhdmlvcihhbGlnblkpOwogICAgIC8vIElmIHdlJ3JlIHRyeWluZyB0byBh
bGlnbiB0byB0aGUgY2xvc2VzdCBlZGdlLCBhbmQgdGhlIGV4cG9zZVJlY3QgaXMgZnVydGhlciBk
b3duCiAgICAgLy8gdGhhbiB0aGUgdmlzaWJsZVJlY3QsIGFuZCBub3QgYmlnZ2VyIHRoYW4gdGhl
IHZpc2libGUgYXJlYSwgdGhlbiBhbGlnbiB3aXRoIHRoZSBib3R0b20uCi0gICAgaWYgKHNjcm9s
bFkgPT0gYWxpZ25Ub0Nsb3Nlc3RFZGdlICYmIGV4cG9zZVJlY3QuYm90dG9tKCkgPiB2aXNpYmxl
UmVjdC5ib3R0b20oKSAmJiBleHBvc2VSZWN0LmhlaWdodCgpIDwgdmlzaWJsZVJlY3QuaGVpZ2h0
KCkpCisgICAgaWYgKHNjcm9sbFkgPT0gYWxpZ25Ub0Nsb3Nlc3RFZGdlICYmIGV4cG9zZVJlY3Qu
bWF4WSgpID4gdmlzaWJsZVJlY3QubWF4WSgpICYmIGV4cG9zZVJlY3QuaGVpZ2h0KCkgPCB2aXNp
YmxlUmVjdC5oZWlnaHQoKSkKICAgICAgICAgc2Nyb2xsWSA9IGFsaWduQm90dG9tOwogCiAgICAg
Ly8gR2l2ZW4gdGhlIFkgYmVoYXZpb3IsIGNvbXB1dGUgdGhlIFkgY29vcmRpbmF0ZS4KQEAgLTE1
NTcsNyArMTU1Nyw3IEBAIEludFJlY3QgUmVuZGVyTGF5ZXI6OmdldFJlY3RUb0V4cG9zZShjb24K
ICAgICBpZiAoc2Nyb2xsWSA9PSBub1Njcm9sbCkgCiAgICAgICAgIHkgPSB2aXNpYmxlUmVjdC55
KCk7CiAgICAgZWxzZSBpZiAoc2Nyb2xsWSA9PSBhbGlnbkJvdHRvbSkKLSAgICAgICAgeSA9IGV4
cG9zZVJlY3QuYm90dG9tKCkgLSB2aXNpYmxlUmVjdC5oZWlnaHQoKTsKKyAgICAgICAgeSA9IGV4
cG9zZVJlY3QubWF4WSgpIC0gdmlzaWJsZVJlY3QuaGVpZ2h0KCk7CiAgICAgZWxzZSBpZiAoc2Ny
b2xsWSA9PSBhbGlnbkNlbnRlcikKICAgICAgICAgeSA9IGV4cG9zZVJlY3QueSgpICsgKGV4cG9z
ZVJlY3QuaGVpZ2h0KCkgLSB2aXNpYmxlUmVjdC5oZWlnaHQoKSkgLyAyOwogICAgIGVsc2UKQEAg
LTE2OTQsOCArMTY5NCw4IEBAIHN0YXRpYyBJbnRSZWN0IGNvcm5lclJlY3QoY29uc3QgUmVuZGVy
TGEKICAgICAgICAgaG9yaXpvbnRhbFRoaWNrbmVzcyA9IGxheWVyLT52ZXJ0aWNhbFNjcm9sbGJh
cigpLT53aWR0aCgpOwogICAgICAgICB2ZXJ0aWNhbFRoaWNrbmVzcyA9IGxheWVyLT5ob3Jpem9u
dGFsU2Nyb2xsYmFyKCktPmhlaWdodCgpOwogICAgIH0KLSAgICByZXR1cm4gSW50UmVjdChib3Vu
ZHMucmlnaHQoKSAtIGhvcml6b250YWxUaGlja25lc3MgLSBsYXllci0+cmVuZGVyZXIoKS0+c3R5
bGUoKS0+Ym9yZGVyUmlnaHRXaWR0aCgpLCAKLSAgICAgICAgICAgICAgICAgICBib3VuZHMuYm90
dG9tKCkgLSB2ZXJ0aWNhbFRoaWNrbmVzcyAtIGxheWVyLT5yZW5kZXJlcigpLT5zdHlsZSgpLT5i
b3JkZXJCb3R0b21XaWR0aCgpLAorICAgIHJldHVybiBJbnRSZWN0KGJvdW5kcy5tYXhYKCkgLSBo
b3Jpem9udGFsVGhpY2tuZXNzIC0gbGF5ZXItPnJlbmRlcmVyKCktPnN0eWxlKCktPmJvcmRlclJp
Z2h0V2lkdGgoKSwgCisgICAgICAgICAgICAgICAgICAgYm91bmRzLm1heFkoKSAtIHZlcnRpY2Fs
VGhpY2tuZXNzIC0gbGF5ZXItPnJlbmRlcmVyKCktPnN0eWxlKCktPmJvcmRlckJvdHRvbVdpZHRo
KCksCiAgICAgICAgICAgICAgICAgICAgaG9yaXpvbnRhbFRoaWNrbmVzcywgdmVydGljYWxUaGlj
a25lc3MpOwogfQogCkBAIC0xOTExLDE0ICsxOTExLDE0IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnBv
c2l0aW9uT3ZlcmZsb3dDb250cm8KICAgICBJbnRSZWN0IHNjcm9sbENvcm5lcihzY3JvbGxDb3Ju
ZXJSZWN0KHRoaXMsIGJvcmRlckJveCkpOwogICAgIEludFJlY3QgYWJzQm91bmRzKGJvcmRlckJv
eC54KCkgKyB0eCwgYm9yZGVyQm94LnkoKSArIHR5LCBib3JkZXJCb3gud2lkdGgoKSwgYm9yZGVy
Qm94LmhlaWdodCgpKTsKICAgICBpZiAobV92QmFyKQotICAgICAgICBtX3ZCYXItPnNldEZyYW1l
UmVjdChJbnRSZWN0KGFic0JvdW5kcy5yaWdodCgpIC0gYm94LT5ib3JkZXJSaWdodCgpIC0gbV92
QmFyLT53aWR0aCgpLAorICAgICAgICBtX3ZCYXItPnNldEZyYW1lUmVjdChJbnRSZWN0KGFic0Jv
dW5kcy5tYXhYKCkgLSBib3gtPmJvcmRlclJpZ2h0KCkgLSBtX3ZCYXItPndpZHRoKCksCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWJzQm91bmRzLnkoKSArIGJveC0+Ym9y
ZGVyVG9wKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV92QmFyLT53
aWR0aCgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFic0JvdW5kcy5o
ZWlnaHQoKSAtIChib3gtPmJvcmRlclRvcCgpICsgYm94LT5ib3JkZXJCb3R0b20oKSkgLSBzY3Jv
bGxDb3JuZXIuaGVpZ2h0KCkpKTsKIAogICAgIGlmIChtX2hCYXIpCiAgICAgICAgIG1faEJhci0+
c2V0RnJhbWVSZWN0KEludFJlY3QoYWJzQm91bmRzLngoKSArIGJveC0+Ym9yZGVyTGVmdCgpLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFic0JvdW5kcy5ib3R0b20oKSAt
IGJveC0+Ym9yZGVyQm90dG9tKCkgLSBtX2hCYXItPmhlaWdodCgpLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGFic0JvdW5kcy5tYXhZKCkgLSBib3gtPmJvcmRlckJvdHRv
bSgpIC0gbV9oQmFyLT5oZWlnaHQoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBhYnNCb3VuZHMud2lkdGgoKSAtIChib3gtPmJvcmRlckxlZnQoKSArIGJveC0+Ym9yZGVy
UmlnaHQoKSkgLSBzY3JvbGxDb3JuZXIud2lkdGgoKSwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBtX2hCYXItPmhlaWdodCgpKSk7CiAgICAgCkBAIC0xOTU1LDcgKzE5NTUs
NyBAQCBpbnQgUmVuZGVyTGF5ZXI6Om92ZXJmbG93Qm90dG9tKCkgY29uc3QKICAgICBSZW5kZXJC
b3gqIGJveCA9IHJlbmRlckJveCgpOwogICAgIEludFJlY3Qgb3ZlcmZsb3dSZWN0KGJveC0+bGF5
b3V0T3ZlcmZsb3dSZWN0KCkpOwogICAgIGJveC0+ZmxpcEZvcldyaXRpbmdNb2RlKG92ZXJmbG93
UmVjdCk7Ci0gICAgcmV0dXJuIG92ZXJmbG93UmVjdC5ib3R0b20oKTsKKyAgICByZXR1cm4gb3Zl
cmZsb3dSZWN0Lm1heFkoKTsKIH0KIAogaW50IFJlbmRlckxheWVyOjpvdmVyZmxvd0xlZnQoKSBj
b25zdApAQCAtMTk3MSw3ICsxOTcxLDcgQEAgaW50IFJlbmRlckxheWVyOjpvdmVyZmxvd1JpZ2h0
KCkgY29uc3QKICAgICBSZW5kZXJCb3gqIGJveCA9IHJlbmRlckJveCgpOwogICAgIEludFJlY3Qg
b3ZlcmZsb3dSZWN0KGJveC0+bGF5b3V0T3ZlcmZsb3dSZWN0KCkpOwogICAgIGJveC0+ZmxpcEZv
cldyaXRpbmdNb2RlKG92ZXJmbG93UmVjdCk7Ci0gICAgcmV0dXJuIG92ZXJmbG93UmVjdC5yaWdo
dCgpOworICAgIHJldHVybiBvdmVyZmxvd1JlY3QubWF4WCgpOwogfQogCiB2b2lkIFJlbmRlckxh
eWVyOjpjb21wdXRlU2Nyb2xsRGltZW5zaW9ucyhib29sKiBuZWVkSEJhciwgYm9vbCogbmVlZFZC
YXIpCkBAIC0yMTk3LDcgKzIxOTcsNyBAQCB2b2lkIFJlbmRlckxheWVyOjpwYWludFJlc2l6ZXIo
R3JhcGhpY3NDCiAKICAgICAvLyBQYWludCB0aGUgcmVzaXplciBjb250cm9sLgogICAgIERFRklO
RV9TVEFUSUNfTE9DQUwoUmVmUHRyPEltYWdlPiwgcmVzaXplQ29ybmVySW1hZ2UsIChJbWFnZTo6
bG9hZFBsYXRmb3JtUmVzb3VyY2UoInRleHRBcmVhUmVzaXplQ29ybmVyIikpKTsKLSAgICBJbnRQ
b2ludCBpbWFnZVBvaW50KGFic1JlY3QucmlnaHQoKSAtIHJlc2l6ZUNvcm5lckltYWdlLT53aWR0
aCgpLCBhYnNSZWN0LmJvdHRvbSgpIC0gcmVzaXplQ29ybmVySW1hZ2UtPmhlaWdodCgpKTsKKyAg
ICBJbnRQb2ludCBpbWFnZVBvaW50KGFic1JlY3QubWF4WCgpIC0gcmVzaXplQ29ybmVySW1hZ2Ut
PndpZHRoKCksIGFic1JlY3QubWF4WSgpIC0gcmVzaXplQ29ybmVySW1hZ2UtPmhlaWdodCgpKTsK
ICAgICBjb250ZXh0LT5kcmF3SW1hZ2UocmVzaXplQ29ybmVySW1hZ2UuZ2V0KCksIGJveC0+c3R5
bGUoKS0+Y29sb3JTcGFjZSgpLCBpbWFnZVBvaW50KTsKIAogICAgIC8vIERyYXcgYSBmcmFtZSBh
cm91bmQgdGhlIHJlc2l6ZXIgKDFweCBncmV5IGxpbmUpIGlmIHRoZXJlIGFyZSBhbnkgc2Nyb2xs
YmFycyBwcmVzZW50LgpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpbmVC
b3hMaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
TGluZUJveExpc3QuY3BwCShyZXZpc2lvbiA3NzI2MCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJMaW5lQm94TGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2MCwxMSArMTYw
LDExIEBAIGJvb2wgUmVuZGVyTGluZUJveExpc3Q6OnJhbmdlSW50ZXJzZWN0c1IKICAgICAKICAg
ICBpZiAocmVuZGVyZXItPnN0eWxlKCktPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpIHsKICAg
ICAgICAgcGh5c2ljYWxTdGFydCArPSB0eTsKLSAgICAgICAgaWYgKHBoeXNpY2FsU3RhcnQgPj0g
cmVjdC5ib3R0b20oKSB8fCBwaHlzaWNhbFN0YXJ0ICsgcGh5c2ljYWxFeHRlbnQgPD0gcmVjdC55
KCkpCisgICAgICAgIGlmIChwaHlzaWNhbFN0YXJ0ID49IHJlY3QubWF4WSgpIHx8IHBoeXNpY2Fs
U3RhcnQgKyBwaHlzaWNhbEV4dGVudCA8PSByZWN0LnkoKSkKICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICB9IGVsc2UgewogICAgICAgICBwaHlzaWNhbFN0YXJ0ICs9IHR4OwotICAgICAg
ICBpZiAocGh5c2ljYWxTdGFydCA+PSByZWN0LnJpZ2h0KCkgfHwgcGh5c2ljYWxTdGFydCArIHBo
eXNpY2FsRXh0ZW50IDw9IHJlY3QueCgpKQorICAgICAgICBpZiAocGh5c2ljYWxTdGFydCA+PSBy
ZWN0Lm1heFgoKSB8fCBwaHlzaWNhbFN0YXJ0ICsgcGh5c2ljYWxFeHRlbnQgPD0gcmVjdC54KCkp
CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIApAQCAtMjM5LDExICsyMzks
MTEgQEAgdm9pZCBSZW5kZXJMaW5lQm94TGlzdDo6cGFpbnQoUmVuZGVyQm94TQogICAgICAgICAg
ICAgICAgIGJvdHRvbUZvclBhZ2luYXRpb25DaGVjayA9IG1heChib3R0b21Gb3JQYWdpbmF0aW9u
Q2hlY2ssIGN1cnItPnJvb3QoKS0+bGluZUJvdHRvbSgpKTsKICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIGlmIChib3R0b21Gb3JQYWdpbmF0aW9uQ2hlY2sgLSB0b3BGb3JQYWdpbmF0aW9uQ2hl
Y2sgPD0gdi0+cHJpbnRSZWN0KCkuaGVpZ2h0KCkpIHsKLSAgICAgICAgICAgICAgICBpZiAodHkg
KyBib3R0b21Gb3JQYWdpbmF0aW9uQ2hlY2sgPiB2LT5wcmludFJlY3QoKS5ib3R0b20oKSkgewor
ICAgICAgICAgICAgICAgIGlmICh0eSArIGJvdHRvbUZvclBhZ2luYXRpb25DaGVjayA+IHYtPnBy
aW50UmVjdCgpLm1heFkoKSkgewogICAgICAgICAgICAgICAgICAgICBpZiAoUm9vdElubGluZUJv
eCogbmV4dFJvb3RCb3ggPSBjdXJyLT5yb290KCktPm5leHRSb290Qm94KCkpCiAgICAgICAgICAg
ICAgICAgICAgICAgICBib3R0b21Gb3JQYWdpbmF0aW9uQ2hlY2sgPSBtaW4oYm90dG9tRm9yUGFn
aW5hdGlvbkNoZWNrLCBtaW4obmV4dFJvb3RCb3gtPnRvcFZpc3VhbE92ZXJmbG93KCksIG5leHRS
b290Qm94LT5saW5lVG9wKCkpKTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
aWYgKHR5ICsgYm90dG9tRm9yUGFnaW5hdGlvbkNoZWNrID4gdi0+cHJpbnRSZWN0KCkuYm90dG9t
KCkpIHsKKyAgICAgICAgICAgICAgICBpZiAodHkgKyBib3R0b21Gb3JQYWdpbmF0aW9uQ2hlY2sg
PiB2LT5wcmludFJlY3QoKS5tYXhZKCkpIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKHR5ICsg
dG9wRm9yUGFnaW5hdGlvbkNoZWNrIDwgdi0+dHJ1bmNhdGVkQXQoKSkKICAgICAgICAgICAgICAg
ICAgICAgICAgIHYtPnNldEJlc3RUcnVuY2F0ZWRBdCh0eSArIHRvcEZvclBhZ2luYXRpb25DaGVj
aywgcmVuZGVyZXIpOwogICAgICAgICAgICAgICAgICAgICAvLyBJZiB3ZSB3ZXJlIGFibGUgdG8g
dHJ1bmNhdGUsIGRvbid0IHBhaW50LgpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckxpc3RJdGVtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTGlzdEl0ZW0uY3BwCShyZXZpc2lvbiA3NzI2MCkKKysrIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJMaXN0SXRlbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5NywxMiArMjk3
LDEyIEBAIHZvaWQgUmVuZGVyTGlzdEl0ZW06OnBvc2l0aW9uTGlzdE1hcmtlcigKICAgICAgICAg
ICAgIGZvciAoSW5saW5lRmxvd0JveCogYm94ID0gbV9tYXJrZXItPmlubGluZUJveFdyYXBwZXIo
KS0+cGFyZW50KCk7IGJveDsgYm94ID0gYm94LT5wYXJlbnQoKSkgewogICAgICAgICAgICAgICAg
IEludFJlY3QgbmV3TG9naWNhbFZpc3VhbE92ZXJmbG93UmVjdCA9IGJveC0+bG9naWNhbFZpc3Vh
bE92ZXJmbG93UmVjdCgpOwogICAgICAgICAgICAgICAgIEludFJlY3QgbmV3TG9naWNhbExheW91
dE92ZXJmbG93UmVjdCA9IGJveC0+bG9naWNhbExheW91dE92ZXJmbG93UmVjdCgpOwotICAgICAg
ICAgICAgICAgIGlmIChtYXJrZXJMb2dpY2FsTGVmdCArIG1fbWFya2VyLT5sb2dpY2FsV2lkdGgo
KSA+IG5ld0xvZ2ljYWxWaXN1YWxPdmVyZmxvd1JlY3QucmlnaHQoKSAmJiAhaGl0U2VsZlBhaW50
aW5nTGF5ZXIpIHsKKyAgICAgICAgICAgICAgICBpZiAobWFya2VyTG9naWNhbExlZnQgKyBtX21h
cmtlci0+bG9naWNhbFdpZHRoKCkgPiBuZXdMb2dpY2FsVmlzdWFsT3ZlcmZsb3dSZWN0Lm1heFgo
KSAmJiAhaGl0U2VsZlBhaW50aW5nTGF5ZXIpIHsKICAgICAgICAgICAgICAgICAgICAgbmV3TG9n
aWNhbFZpc3VhbE92ZXJmbG93UmVjdC5zZXRXaWR0aChtYXJrZXJMb2dpY2FsTGVmdCArIG1fbWFy
a2VyLT5sb2dpY2FsV2lkdGgoKSAtIGJveC0+bG9naWNhbExlZnRWaXN1YWxPdmVyZmxvdygpKTsK
ICAgICAgICAgICAgICAgICAgICAgaWYgKGJveCA9PSByb290KQogICAgICAgICAgICAgICAgICAg
ICAgICAgYWRqdXN0T3ZlcmZsb3cgPSB0cnVlOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICBpZiAobWFya2VyTG9naWNhbExlZnQgKyBtX21hcmtlci0+bG9naWNhbFdpZHRoKCkg
PiBuZXdMb2dpY2FsTGF5b3V0T3ZlcmZsb3dSZWN0LnJpZ2h0KCkpIHsKKyAgICAgICAgICAgICAg
ICBpZiAobWFya2VyTG9naWNhbExlZnQgKyBtX21hcmtlci0+bG9naWNhbFdpZHRoKCkgPiBuZXdM
b2dpY2FsTGF5b3V0T3ZlcmZsb3dSZWN0Lm1heFgoKSkgewogICAgICAgICAgICAgICAgICAgICBu
ZXdMb2dpY2FsTGF5b3V0T3ZlcmZsb3dSZWN0LnNldFdpZHRoKG1hcmtlckxvZ2ljYWxMZWZ0ICsg
bV9tYXJrZXItPmxvZ2ljYWxXaWR0aCgpIC0gYm94LT5sb2dpY2FsTGVmdExheW91dE92ZXJmbG93
KCkpOwogICAgICAgICAgICAgICAgICAgICBpZiAoYm94ID09IHJvb3QpCiAgICAgICAgICAgICAg
ICAgICAgICAgICBhZGp1c3RPdmVyZmxvdyA9IHRydWU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyTGlzdE1hcmtlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckxpc3RNYXJrZXIuY3BwCShyZXZpc2lvbiA3NzI2MCkKKysrIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0TWFya2VyLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTI2MCw5ICsxMjYwLDkgQEAgdm9pZCBSZW5kZXJMaXN0TWFya2VyOjpwYWludChQYWlu
dEluZm8mIAogICAgICAgICBtYXJrZXIgPSBtYXJrZXIudHJhbnNwb3NlZFJlY3QoKTsKICAgICAg
ICAgbWFya2VyLm1vdmUoYm94LngoKSwgYm94LnkoKSAtIGxvZ2ljYWxIZWlnaHQoKSk7CiAgICAg
ICAgIGNvbnRleHQtPnNhdmUoKTsKLSAgICAgICAgY29udGV4dC0+dHJhbnNsYXRlKG1hcmtlci54
KCksIG1hcmtlci5ib3R0b20oKSk7CisgICAgICAgIGNvbnRleHQtPnRyYW5zbGF0ZShtYXJrZXIu
eCgpLCBtYXJrZXIubWF4WSgpKTsKICAgICAgICAgY29udGV4dC0+cm90YXRlKHN0YXRpY19jYXN0
PGZsb2F0PihkZWcycmFkKDkwLikpKTsKLSAgICAgICAgY29udGV4dC0+dHJhbnNsYXRlKC1tYXJr
ZXIueCgpLCAtbWFya2VyLmJvdHRvbSgpKTsKKyAgICAgICAgY29udGV4dC0+dHJhbnNsYXRlKC1t
YXJrZXIueCgpLCAtbWFya2VyLm1heFkoKSk7CiAgICAgfQogCiAgICAgSW50UG9pbnQgdGV4dE9y
aWdpbiA9IEludFBvaW50KG1hcmtlci54KCksIG1hcmtlci55KCkgKyBzdHlsZSgpLT5mb250TWV0
cmljcygpLmFzY2VudCgpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJP
YmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJP
YmplY3QuY3BwCShyZXZpc2lvbiA3NzI2MCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzc4LDExICsxMzc4LDExIEBAIGJv
b2wgUmVuZGVyT2JqZWN0OjpyZXBhaW50QWZ0ZXJMYXlvdXRJZk4KICAgICBlbHNlIGlmIChkZWx0
YUxlZnQgPCAwKQogICAgICAgICByZXBhaW50VXNpbmdDb250YWluZXIocmVwYWludENvbnRhaW5l
ciwgSW50UmVjdChuZXdCb3VuZHMueCgpLCBuZXdCb3VuZHMueSgpLCAtZGVsdGFMZWZ0LCBuZXdC
b3VuZHMuaGVpZ2h0KCkpKTsKIAotICAgIGludCBkZWx0YVJpZ2h0ID0gbmV3Qm91bmRzLnJpZ2h0
KCkgLSBvbGRCb3VuZHMucmlnaHQoKTsKKyAgICBpbnQgZGVsdGFSaWdodCA9IG5ld0JvdW5kcy5t
YXhYKCkgLSBvbGRCb3VuZHMubWF4WCgpOwogICAgIGlmIChkZWx0YVJpZ2h0ID4gMCkKLSAgICAg
ICAgcmVwYWludFVzaW5nQ29udGFpbmVyKHJlcGFpbnRDb250YWluZXIsIEludFJlY3Qob2xkQm91
bmRzLnJpZ2h0KCksIG5ld0JvdW5kcy55KCksIGRlbHRhUmlnaHQsIG5ld0JvdW5kcy5oZWlnaHQo
KSkpOworICAgICAgICByZXBhaW50VXNpbmdDb250YWluZXIocmVwYWludENvbnRhaW5lciwgSW50
UmVjdChvbGRCb3VuZHMubWF4WCgpLCBuZXdCb3VuZHMueSgpLCBkZWx0YVJpZ2h0LCBuZXdCb3Vu
ZHMuaGVpZ2h0KCkpKTsKICAgICBlbHNlIGlmIChkZWx0YVJpZ2h0IDwgMCkKLSAgICAgICAgcmVw
YWludFVzaW5nQ29udGFpbmVyKHJlcGFpbnRDb250YWluZXIsIEludFJlY3QobmV3Qm91bmRzLnJp
Z2h0KCksIG9sZEJvdW5kcy55KCksIC1kZWx0YVJpZ2h0LCBvbGRCb3VuZHMuaGVpZ2h0KCkpKTsK
KyAgICAgICAgcmVwYWludFVzaW5nQ29udGFpbmVyKHJlcGFpbnRDb250YWluZXIsIEludFJlY3Qo
bmV3Qm91bmRzLm1heFgoKSwgb2xkQm91bmRzLnkoKSwgLWRlbHRhUmlnaHQsIG9sZEJvdW5kcy5o
ZWlnaHQoKSkpOwogCiAgICAgaW50IGRlbHRhVG9wID0gbmV3Qm91bmRzLnkoKSAtIG9sZEJvdW5k
cy55KCk7CiAgICAgaWYgKGRlbHRhVG9wID4gMCkKQEAgLTEzOTAsMTEgKzEzOTAsMTEgQEAgYm9v
bCBSZW5kZXJPYmplY3Q6OnJlcGFpbnRBZnRlckxheW91dElmTgogICAgIGVsc2UgaWYgKGRlbHRh
VG9wIDwgMCkKICAgICAgICAgcmVwYWludFVzaW5nQ29udGFpbmVyKHJlcGFpbnRDb250YWluZXIs
IEludFJlY3QobmV3Qm91bmRzLngoKSwgbmV3Qm91bmRzLnkoKSwgbmV3Qm91bmRzLndpZHRoKCks
IC1kZWx0YVRvcCkpOwogCi0gICAgaW50IGRlbHRhQm90dG9tID0gbmV3Qm91bmRzLmJvdHRvbSgp
IC0gb2xkQm91bmRzLmJvdHRvbSgpOworICAgIGludCBkZWx0YUJvdHRvbSA9IG5ld0JvdW5kcy5t
YXhZKCkgLSBvbGRCb3VuZHMubWF4WSgpOwogICAgIGlmIChkZWx0YUJvdHRvbSA+IDApCi0gICAg
ICAgIHJlcGFpbnRVc2luZ0NvbnRhaW5lcihyZXBhaW50Q29udGFpbmVyLCBJbnRSZWN0KG5ld0Jv
dW5kcy54KCksIG9sZEJvdW5kcy5ib3R0b20oKSwgbmV3Qm91bmRzLndpZHRoKCksIGRlbHRhQm90
dG9tKSk7CisgICAgICAgIHJlcGFpbnRVc2luZ0NvbnRhaW5lcihyZXBhaW50Q29udGFpbmVyLCBJ
bnRSZWN0KG5ld0JvdW5kcy54KCksIG9sZEJvdW5kcy5tYXhZKCksIG5ld0JvdW5kcy53aWR0aCgp
LCBkZWx0YUJvdHRvbSkpOwogICAgIGVsc2UgaWYgKGRlbHRhQm90dG9tIDwgMCkKLSAgICAgICAg
cmVwYWludFVzaW5nQ29udGFpbmVyKHJlcGFpbnRDb250YWluZXIsIEludFJlY3Qob2xkQm91bmRz
LngoKSwgbmV3Qm91bmRzLmJvdHRvbSgpLCBvbGRCb3VuZHMud2lkdGgoKSwgLWRlbHRhQm90dG9t
KSk7CisgICAgICAgIHJlcGFpbnRVc2luZ0NvbnRhaW5lcihyZXBhaW50Q29udGFpbmVyLCBJbnRS
ZWN0KG9sZEJvdW5kcy54KCksIG5ld0JvdW5kcy5tYXhZKCksIG9sZEJvdW5kcy53aWR0aCgpLCAt
ZGVsdGFCb3R0b20pKTsKIAogICAgIGlmIChuZXdPdXRsaW5lQm94ID09IG9sZE91dGxpbmVCb3gp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTE0MTYsNyArMTQxNiw3IEBAIGJvb2wgUmVuZGVy
T2JqZWN0OjpyZXBhaW50QWZ0ZXJMYXlvdXRJZk4KICAgICAgICAgICAgIG5ld091dGxpbmVCb3gu
eSgpLAogICAgICAgICAgICAgd2lkdGggKyBib3JkZXJXaWR0aCwKICAgICAgICAgICAgIG1heChu
ZXdPdXRsaW5lQm94LmhlaWdodCgpLCBvbGRPdXRsaW5lQm94LmhlaWdodCgpKSk7Ci0gICAgICAg
IGludCByaWdodCA9IG1pbihuZXdCb3VuZHMucmlnaHQoKSwgb2xkQm91bmRzLnJpZ2h0KCkpOwor
ICAgICAgICBpbnQgcmlnaHQgPSBtaW4obmV3Qm91bmRzLm1heFgoKSwgb2xkQm91bmRzLm1heFgo
KSk7CiAgICAgICAgIGlmIChyaWdodFJlY3QueCgpIDwgcmlnaHQpIHsKICAgICAgICAgICAgIHJp
Z2h0UmVjdC5zZXRXaWR0aChtaW4ocmlnaHRSZWN0LndpZHRoKCksIHJpZ2h0IC0gcmlnaHRSZWN0
LngoKSkpOwogICAgICAgICAgICAgcmVwYWludFVzaW5nQ29udGFpbmVyKHJlcGFpbnRDb250YWlu
ZXIsIHJpZ2h0UmVjdCk7CkBAIC0xNDMyLDEwICsxNDMyLDEwIEBAIGJvb2wgUmVuZGVyT2JqZWN0
OjpyZXBhaW50QWZ0ZXJMYXlvdXRJZk4KICAgICAgICAgaW50IGJveEhlaWdodCA9IGlzQm94KCkg
PyB0b1JlbmRlckJveCh0aGlzKS0+aGVpZ2h0KCkgOiAwOwogICAgICAgICBpbnQgYm9yZGVySGVp
Z2h0ID0gbWF4KC1vdXRsaW5lU3R5bGUtPm91dGxpbmVPZmZzZXQoKSwgbWF4KGJvcmRlckJvdHRv
bSwgbWF4KHN0eWxlKCktPmJvcmRlckJvdHRvbUxlZnRSYWRpdXMoKS5oZWlnaHQoKS5jYWxjVmFs
dWUoYm94SGVpZ2h0KSwgc3R5bGUoKS0+Ym9yZGVyQm90dG9tUmlnaHRSYWRpdXMoKS5oZWlnaHQo
KS5jYWxjVmFsdWUoYm94SGVpZ2h0KSkpKSArIG1heChvdywgc2hhZG93Qm90dG9tKTsKICAgICAg
ICAgSW50UmVjdCBib3R0b21SZWN0KG5ld091dGxpbmVCb3gueCgpLAotICAgICAgICAgICAgbWlu
KG5ld091dGxpbmVCb3guYm90dG9tKCksIG9sZE91dGxpbmVCb3guYm90dG9tKCkpIC0gYm9yZGVy
SGVpZ2h0LAorICAgICAgICAgICAgbWluKG5ld091dGxpbmVCb3gubWF4WSgpLCBvbGRPdXRsaW5l
Qm94Lm1heFkoKSkgLSBib3JkZXJIZWlnaHQsCiAgICAgICAgICAgICBtYXgobmV3T3V0bGluZUJv
eC53aWR0aCgpLCBvbGRPdXRsaW5lQm94LndpZHRoKCkpLAogICAgICAgICAgICAgaGVpZ2h0ICsg
Ym9yZGVySGVpZ2h0KTsKLSAgICAgICAgaW50IGJvdHRvbSA9IG1pbihuZXdCb3VuZHMuYm90dG9t
KCksIG9sZEJvdW5kcy5ib3R0b20oKSk7CisgICAgICAgIGludCBib3R0b20gPSBtaW4obmV3Qm91
bmRzLm1heFkoKSwgb2xkQm91bmRzLm1heFkoKSk7CiAgICAgICAgIGlmIChib3R0b21SZWN0Lnko
KSA8IGJvdHRvbSkgewogICAgICAgICAgICAgYm90dG9tUmVjdC5zZXRIZWlnaHQobWluKGJvdHRv
bVJlY3QuaGVpZ2h0KCksIGJvdHRvbSAtIGJvdHRvbVJlY3QueSgpKSk7CiAgICAgICAgICAgICBy
ZXBhaW50VXNpbmdDb250YWluZXIocmVwYWludENvbnRhaW5lciwgYm90dG9tUmVjdCk7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT3ZlcmZsb3cuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT3ZlcmZsb3cuaAkocmV2aXNpb24gNzcy
NjApCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT3ZlcmZsb3cuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNDIsMTMgKzQyLDEzIEBAIGNsYXNzIFJlbmRlck92ZXJmbG93IHsKIHB1Ymxp
YzoKICAgICBSZW5kZXJPdmVyZmxvdyhjb25zdCBJbnRSZWN0JiBsYXlvdXRSZWN0LCBjb25zdCBJ
bnRSZWN0JiB2aXN1YWxSZWN0KSAKICAgICAgICAgOiBtX3RvcExheW91dE92ZXJmbG93KGxheW91
dFJlY3QueSgpKQotICAgICAgICAsIG1fYm90dG9tTGF5b3V0T3ZlcmZsb3cobGF5b3V0UmVjdC5i
b3R0b20oKSkKKyAgICAgICAgLCBtX2JvdHRvbUxheW91dE92ZXJmbG93KGxheW91dFJlY3QubWF4
WSgpKQogICAgICAgICAsIG1fbGVmdExheW91dE92ZXJmbG93KGxheW91dFJlY3QueCgpKQotICAg
ICAgICAsIG1fcmlnaHRMYXlvdXRPdmVyZmxvdyhsYXlvdXRSZWN0LnJpZ2h0KCkpCisgICAgICAg
ICwgbV9yaWdodExheW91dE92ZXJmbG93KGxheW91dFJlY3QubWF4WCgpKQogICAgICAgICAsIG1f
dG9wVmlzdWFsT3ZlcmZsb3codmlzdWFsUmVjdC55KCkpCi0gICAgICAgICwgbV9ib3R0b21WaXN1
YWxPdmVyZmxvdyh2aXN1YWxSZWN0LmJvdHRvbSgpKQorICAgICAgICAsIG1fYm90dG9tVmlzdWFs
T3ZlcmZsb3codmlzdWFsUmVjdC5tYXhZKCkpCiAgICAgICAgICwgbV9sZWZ0VmlzdWFsT3ZlcmZs
b3codmlzdWFsUmVjdC54KCkpCi0gICAgICAgICwgbV9yaWdodFZpc3VhbE92ZXJmbG93KHZpc3Vh
bFJlY3QucmlnaHQoKSkKKyAgICAgICAgLCBtX3JpZ2h0VmlzdWFsT3ZlcmZsb3codmlzdWFsUmVj
dC5tYXhYKCkpCiAgICAgewogICAgIH0KICAgIApAQCAtMTIyLDQxICsxMjIsNDEgQEAgaW5saW5l
IHZvaWQgUmVuZGVyT3ZlcmZsb3c6Om1vdmUoaW50IGR4LAogaW5saW5lIHZvaWQgUmVuZGVyT3Zl
cmZsb3c6OmFkZExheW91dE92ZXJmbG93KGNvbnN0IEludFJlY3QmIHJlY3QpCiB7CiAgICAgbV90
b3BMYXlvdXRPdmVyZmxvdyA9IHN0ZDo6bWluKHJlY3QueSgpLCBtX3RvcExheW91dE92ZXJmbG93
KTsKLSAgICBtX2JvdHRvbUxheW91dE92ZXJmbG93ID0gc3RkOjptYXgocmVjdC5ib3R0b20oKSwg
bV9ib3R0b21MYXlvdXRPdmVyZmxvdyk7CisgICAgbV9ib3R0b21MYXlvdXRPdmVyZmxvdyA9IHN0
ZDo6bWF4KHJlY3QubWF4WSgpLCBtX2JvdHRvbUxheW91dE92ZXJmbG93KTsKICAgICBtX2xlZnRM
YXlvdXRPdmVyZmxvdyA9IHN0ZDo6bWluKHJlY3QueCgpLCBtX2xlZnRMYXlvdXRPdmVyZmxvdyk7
Ci0gICAgbV9yaWdodExheW91dE92ZXJmbG93ID0gc3RkOjptYXgocmVjdC5yaWdodCgpLCBtX3Jp
Z2h0TGF5b3V0T3ZlcmZsb3cpOworICAgIG1fcmlnaHRMYXlvdXRPdmVyZmxvdyA9IHN0ZDo6bWF4
KHJlY3QubWF4WCgpLCBtX3JpZ2h0TGF5b3V0T3ZlcmZsb3cpOwogfQogCiBpbmxpbmUgdm9pZCBS
ZW5kZXJPdmVyZmxvdzo6YWRkVmlzdWFsT3ZlcmZsb3coY29uc3QgSW50UmVjdCYgcmVjdCkKIHsK
ICAgICBtX3RvcFZpc3VhbE92ZXJmbG93ID0gc3RkOjptaW4ocmVjdC55KCksIG1fdG9wVmlzdWFs
T3ZlcmZsb3cpOwotICAgIG1fYm90dG9tVmlzdWFsT3ZlcmZsb3cgPSBzdGQ6Om1heChyZWN0LmJv
dHRvbSgpLCBtX2JvdHRvbVZpc3VhbE92ZXJmbG93KTsKKyAgICBtX2JvdHRvbVZpc3VhbE92ZXJm
bG93ID0gc3RkOjptYXgocmVjdC5tYXhZKCksIG1fYm90dG9tVmlzdWFsT3ZlcmZsb3cpOwogICAg
IG1fbGVmdFZpc3VhbE92ZXJmbG93ID0gc3RkOjptaW4ocmVjdC54KCksIG1fbGVmdFZpc3VhbE92
ZXJmbG93KTsKLSAgICBtX3JpZ2h0VmlzdWFsT3ZlcmZsb3cgPSBzdGQ6Om1heChyZWN0LnJpZ2h0
KCksIG1fcmlnaHRWaXN1YWxPdmVyZmxvdyk7CisgICAgbV9yaWdodFZpc3VhbE92ZXJmbG93ID0g
c3RkOjptYXgocmVjdC5tYXhYKCksIG1fcmlnaHRWaXN1YWxPdmVyZmxvdyk7CiB9CiAKIGlubGlu
ZSB2b2lkIFJlbmRlck92ZXJmbG93OjpzZXRMYXlvdXRPdmVyZmxvdyhjb25zdCBJbnRSZWN0JiBy
ZWN0KQogewogICAgIG1fdG9wTGF5b3V0T3ZlcmZsb3cgPSByZWN0LnkoKTsKLSAgICBtX2JvdHRv
bUxheW91dE92ZXJmbG93ID0gcmVjdC5ib3R0b20oKTsKKyAgICBtX2JvdHRvbUxheW91dE92ZXJm
bG93ID0gcmVjdC5tYXhZKCk7CiAgICAgbV9sZWZ0TGF5b3V0T3ZlcmZsb3cgPSByZWN0LngoKTsK
LSAgICBtX3JpZ2h0TGF5b3V0T3ZlcmZsb3cgPSByZWN0LnJpZ2h0KCk7CisgICAgbV9yaWdodExh
eW91dE92ZXJmbG93ID0gcmVjdC5tYXhYKCk7CiB9CiAKIGlubGluZSB2b2lkIFJlbmRlck92ZXJm
bG93OjpzZXRWaXN1YWxPdmVyZmxvdyhjb25zdCBJbnRSZWN0JiByZWN0KQogewogICAgIG1fdG9w
VmlzdWFsT3ZlcmZsb3cgPSByZWN0LnkoKTsKLSAgICBtX2JvdHRvbVZpc3VhbE92ZXJmbG93ID0g
cmVjdC5ib3R0b20oKTsKKyAgICBtX2JvdHRvbVZpc3VhbE92ZXJmbG93ID0gcmVjdC5tYXhZKCk7
CiAgICAgbV9sZWZ0VmlzdWFsT3ZlcmZsb3cgPSByZWN0LngoKTsKLSAgICBtX3JpZ2h0VmlzdWFs
T3ZlcmZsb3cgPSByZWN0LnJpZ2h0KCk7CisgICAgbV9yaWdodFZpc3VhbE92ZXJmbG93ID0gcmVj
dC5tYXhYKCk7CiB9CiAKIGlubGluZSB2b2lkIFJlbmRlck92ZXJmbG93OjpyZXNldExheW91dE92
ZXJmbG93KGNvbnN0IEludFJlY3QmIHJlY3QpCiB7CiAgICAgbV90b3BMYXlvdXRPdmVyZmxvdyA9
IHJlY3QueSgpOwotICAgIG1fYm90dG9tTGF5b3V0T3ZlcmZsb3cgPSByZWN0LmJvdHRvbSgpOwor
ICAgIG1fYm90dG9tTGF5b3V0T3ZlcmZsb3cgPSByZWN0Lm1heFkoKTsKICAgICBtX2xlZnRMYXlv
dXRPdmVyZmxvdyA9IHJlY3QueCgpOwotICAgIG1fcmlnaHRMYXlvdXRPdmVyZmxvdyA9IHJlY3Qu
cmlnaHQoKTsKKyAgICBtX3JpZ2h0TGF5b3V0T3ZlcmZsb3cgPSByZWN0Lm1heFgoKTsKIH0KIAog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclJlcGxhY2VkLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyUmVwbGFjZWQuY3BwCShyZXZpc2lvbiA3NzI2MCkKKysrIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJSZXBsYWNlZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4Miw5ICsxODIs
OSBAQCBib29sIFJlbmRlclJlcGxhY2VkOjpzaG91bGRQYWludChQYWludEluCiAgICAgfQogICAg
IAogICAgIGludCBvcyA9IDIgKiBtYXhpbWFsT3V0bGluZVNpemUocGFpbnRJbmZvLnBoYXNlKTsK
LSAgICBpZiAoY3VycmVudFRYICsgbGVmdFZpc3VhbE92ZXJmbG93KCkgPj0gcGFpbnRJbmZvLnJl
Y3QucmlnaHQoKSArIG9zIHx8IGN1cnJlbnRUWCArIHJpZ2h0VmlzdWFsT3ZlcmZsb3coKSA8PSBw
YWludEluZm8ucmVjdC54KCkgLSBvcykKKyAgICBpZiAoY3VycmVudFRYICsgbGVmdFZpc3VhbE92
ZXJmbG93KCkgPj0gcGFpbnRJbmZvLnJlY3QubWF4WCgpICsgb3MgfHwgY3VycmVudFRYICsgcmln
aHRWaXN1YWxPdmVyZmxvdygpIDw9IHBhaW50SW5mby5yZWN0LngoKSAtIG9zKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgaWYgKHRvcCA+PSBwYWludEluZm8ucmVjdC5ib3R0b20oKSArIG9z
IHx8IGJvdHRvbSA8PSBwYWludEluZm8ucmVjdC55KCkgLSBvcykKKyAgICBpZiAodG9wID49IHBh
aW50SW5mby5yZWN0Lm1heFkoKSArIG9zIHx8IGJvdHRvbSA8PSBwYWludEluZm8ucmVjdC55KCkg
LSBvcykKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgcmV0dXJuIHRydWU7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU2Nyb2xsYmFyVGhlbWUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTY3JvbGxiYXJUaGVtZS5jcHAJ
KHJldmlzaW9uIDc3MjYwKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNjcm9s
bGJhclRoZW1lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTgsMTAgKzk4LDEwIEBAIEludFJlY3Qg
UmVuZGVyU2Nyb2xsYmFyVGhlbWU6OmNvbnN0cmFpblQKICAgICBJbnRSZWN0IHJlc3VsdCA9IHJl
Y3Q7CiAgICAgaWYgKHNjcm9sbGJhci0+b3JpZW50YXRpb24oKSA9PSBIb3Jpem9udGFsU2Nyb2xs
YmFyKSB7CiAgICAgICAgIHJlc3VsdC5zZXRYKGJhY2tSZWN0LngoKSk7Ci0gICAgICAgIHJlc3Vs
dC5zZXRXaWR0aChmb3J3YXJkUmVjdC5yaWdodCgpIC0gYmFja1JlY3QueCgpKTsKKyAgICAgICAg
cmVzdWx0LnNldFdpZHRoKGZvcndhcmRSZWN0Lm1heFgoKSAtIGJhY2tSZWN0LngoKSk7CiAgICAg
fSBlbHNlIHsKICAgICAgICAgcmVzdWx0LnNldFkoYmFja1JlY3QueSgpKTsKLSAgICAgICAgcmVz
dWx0LnNldEhlaWdodChmb3J3YXJkUmVjdC5ib3R0b20oKSAtIGJhY2tSZWN0LnkoKSk7CisgICAg
ICAgIHJlc3VsdC5zZXRIZWlnaHQoZm9yd2FyZFJlY3QubWF4WSgpIC0gYmFja1JlY3QueSgpKTsK
ICAgICB9CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUYWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRhYmxlLmNwcAkocmV2aXNpb24gNzcyNjApCisrKyBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVGFibGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NTQsOSArNDU0LDkg
QEAgdm9pZCBSZW5kZXJUYWJsZTo6cGFpbnQoUGFpbnRJbmZvJiBwYWludAogICAgIFBhaW50UGhh
c2UgcGFpbnRQaGFzZSA9IHBhaW50SW5mby5waGFzZTsKIAogICAgIGludCBvcyA9IDIgKiBtYXhp
bWFsT3V0bGluZVNpemUocGFpbnRQaGFzZSk7Ci0gICAgaWYgKHR5ICsgdG9wVmlzdWFsT3ZlcmZs
b3coKSA+PSBwYWludEluZm8ucmVjdC5ib3R0b20oKSArIG9zIHx8IHR5ICsgYm90dG9tVmlzdWFs
T3ZlcmZsb3coKSA8PSBwYWludEluZm8ucmVjdC55KCkgLSBvcykKKyAgICBpZiAodHkgKyB0b3BW
aXN1YWxPdmVyZmxvdygpID49IHBhaW50SW5mby5yZWN0Lm1heFkoKSArIG9zIHx8IHR5ICsgYm90
dG9tVmlzdWFsT3ZlcmZsb3coKSA8PSBwYWludEluZm8ucmVjdC55KCkgLSBvcykKICAgICAgICAg
cmV0dXJuOwotICAgIGlmICh0eCArIGxlZnRWaXN1YWxPdmVyZmxvdygpID49IHBhaW50SW5mby5y
ZWN0LnJpZ2h0KCkgKyBvcyB8fCB0eCArIHJpZ2h0VmlzdWFsT3ZlcmZsb3coKSA8PSBwYWludElu
Zm8ucmVjdC54KCkgLSBvcykKKyAgICBpZiAodHggKyBsZWZ0VmlzdWFsT3ZlcmZsb3coKSA+PSBw
YWludEluZm8ucmVjdC5tYXhYKCkgKyBvcyB8fCB0eCArIHJpZ2h0VmlzdWFsT3ZlcmZsb3coKSA8
PSBwYWludEluZm8ucmVjdC54KCkgLSBvcykKICAgICAgICAgcmV0dXJuOwogCiAgICAgYm9vbCBw
dXNoZWRDbGlwID0gcHVzaENvbnRlbnRzQ2xpcChwYWludEluZm8sIHR4LCB0eSk7ICAgIApJbmRl
eDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlQ2VsbC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlQ2VsbC5jcHAJKHJldmlz
aW9uIDc3MjYwKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlQ2VsbC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTgwMyw3ICs4MDMsNyBAQCB2b2lkIFJlbmRlclRhYmxlQ2Vs
bDo6cGFpbnQoUGFpbnRJbmZvJiBwCiAgICAgICAgIHR4ICs9IHgoKTsKICAgICAgICAgdHkgKz0g
eSgpOwogICAgICAgICBpbnQgb3MgPSAyICogbWF4aW1hbE91dGxpbmVTaXplKHBhaW50SW5mby5w
aGFzZSk7Ci0gICAgICAgIGlmICh0eSAtIHRhYmxlKCktPm91dGVyQm9yZGVyVG9wKCkgPCBwYWlu
dEluZm8ucmVjdC5ib3R0b20oKSArIG9zICYmCisgICAgICAgIGlmICh0eSAtIHRhYmxlKCktPm91
dGVyQm9yZGVyVG9wKCkgPCBwYWludEluZm8ucmVjdC5tYXhZKCkgKyBvcyAmJgogICAgICAgICAg
ICAgdHkgKyBoZWlnaHQoKSArIHRhYmxlKCktPm91dGVyQm9yZGVyQm90dG9tKCkgPiBwYWludElu
Zm8ucmVjdC55KCkgLSBvcykKICAgICAgICAgICAgIHBhaW50Q29sbGFwc2VkQm9yZGVyKHBhaW50
SW5mby5jb250ZXh0LCB0eCwgdHksIHdpZHRoKCksIGhlaWdodCgpKTsKICAgICAgICAgcmV0dXJu
OwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlv
bi5jcHAJKHJldmlzaW9uIDc3MjYwKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRhYmxlU2VjdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk2NCw5ICs5NjQsOSBAQCB2b2lk
IFJlbmRlclRhYmxlU2VjdGlvbjo6cGFpbnRPYmplY3QoUGFpCiAgICAgbG9jYWxSZXBhaW50UmVj
dC5tb3ZlKC10eCwgLXR5KTsKICAgICBpZiAoc3R5bGUoKS0+aXNGbGlwcGVkQmxvY2tzV3JpdGlu
Z01vZGUoKSkgewogICAgICAgICBpZiAoc3R5bGUoKS0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUo
KSkKLSAgICAgICAgICAgIGxvY2FsUmVwYWludFJlY3Quc2V0WShoZWlnaHQoKSAtIGxvY2FsUmVw
YWludFJlY3QuYm90dG9tKCkpOworICAgICAgICAgICAgbG9jYWxSZXBhaW50UmVjdC5zZXRZKGhl
aWdodCgpIC0gbG9jYWxSZXBhaW50UmVjdC5tYXhZKCkpOwogICAgICAgICBlbHNlCi0gICAgICAg
ICAgICBsb2NhbFJlcGFpbnRSZWN0LnNldFgod2lkdGgoKSAtIGxvY2FsUmVwYWludFJlY3Qucmln
aHQoKSk7CisgICAgICAgICAgICBsb2NhbFJlcGFpbnRSZWN0LnNldFgod2lkdGgoKSAtIGxvY2Fs
UmVwYWludFJlY3QubWF4WCgpKTsKICAgICB9CiAKICAgICAvLyBJZiBzb21lIGNlbGwgb3ZlcmZs
b3dzLCBqdXN0IHBhaW50IGFsbCBvZiB0aGVtLgpAQCAtOTgxLDcgKzk4MSw3IEBAIHZvaWQgUmVu
ZGVyVGFibGVTZWN0aW9uOjpwYWludE9iamVjdChQYWkKICAgICAgICAgaWYgKHN0YXJ0cm93ID09
IG1fcm93UG9zLnNpemUoKSB8fCAoc3RhcnRyb3cgPiAwICYmIChtX3Jvd1Bvc1tzdGFydHJvd10g
PiAgYmVmb3JlKSkpCiAgICAgICAgICAgLS1zdGFydHJvdzsKIAotICAgICAgICBpbnQgYWZ0ZXIg
PSAoc3R5bGUoKS0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IGxvY2FsUmVwYWludFJlY3Qu
Ym90dG9tKCkgOiBsb2NhbFJlcGFpbnRSZWN0LnJpZ2h0KCkpICsgb3M7CisgICAgICAgIGludCBh
ZnRlciA9IChzdHlsZSgpLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gbG9jYWxSZXBhaW50
UmVjdC5tYXhZKCkgOiBsb2NhbFJlcGFpbnRSZWN0Lm1heFgoKSkgKyBvczsKICAgICAgICAgZW5k
cm93ID0gc3RkOjpsb3dlcl9ib3VuZChtX3Jvd1Bvcy5iZWdpbigpLCBtX3Jvd1Bvcy5lbmQoKSwg
YWZ0ZXIpIC0gbV9yb3dQb3MuYmVnaW4oKTsKICAgICAgICAgaWYgKGVuZHJvdyA9PSBtX3Jvd1Bv
cy5zaXplKCkpCiAgICAgICAgICAgLS1lbmRyb3c7CkBAIC0xMDAwLDcgKzEwMDAsNyBAQCB2b2lk
IFJlbmRlclRhYmxlU2VjdGlvbjo6cGFpbnRPYmplY3QoUGFpCiAgICAgICAgIGlmICgoc3RhcnRj
b2wgPT0gY29sdW1uUG9zLnNpemUoKSkgfHwgKHN0YXJ0Y29sID4gMCAmJiAoY29sdW1uUG9zW3N0
YXJ0Y29sXSA+IHN0YXJ0KSkpCiAgICAgICAgICAgICAtLXN0YXJ0Y29sOwogCi0gICAgICAgIGlu
dCBlbmQgPSAoc3R5bGUoKS0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IGxvY2FsUmVwYWlu
dFJlY3QucmlnaHQoKSA6IGxvY2FsUmVwYWludFJlY3QuYm90dG9tKCkpICsgb3M7CisgICAgICAg
IGludCBlbmQgPSAoc3R5bGUoKS0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IGxvY2FsUmVw
YWludFJlY3QubWF4WCgpIDogbG9jYWxSZXBhaW50UmVjdC5tYXhZKCkpICsgb3M7CiAgICAgICAg
IGVuZGNvbCA9IHN0ZDo6bG93ZXJfYm91bmQoY29sdW1uUG9zLmJlZ2luKCksIGNvbHVtblBvcy5l
bmQoKSwgZW5kKSAtIGNvbHVtblBvcy5iZWdpbigpOwogICAgICAgICBpZiAoZW5kY29sID09IGNv
bHVtblBvcy5zaXplKCkpCiAgICAgICAgICAgICAtLWVuZGNvbDsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHAJKHJldmlzaW9uIDc3MjYwKQorKysgU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNDgsOSAr
MzQ4LDkgQEAgdm9pZCBSZW5kZXJUZXh0OjphYnNvbHV0ZVF1YWRzKFZlY3RvcjxGbAogICAgICAg
ICBJbnRSZWN0IGVsbGlwc2lzUmVjdCA9IChvcHRpb24gPT0gQ2xpcFRvRWxsaXBzaXMpID8gZWxs
aXBzaXNSZWN0Rm9yQm94KGJveCwgMCwgdGV4dExlbmd0aCgpKSA6IEludFJlY3QoKTsKICAgICAg
ICAgaWYgKCFlbGxpcHNpc1JlY3QuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICBpZiAoc3R5bGUo
KS0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkKLSAgICAgICAgICAgICAgICBib3VuZGFyaWVz
LnNldFdpZHRoKGVsbGlwc2lzUmVjdC5yaWdodCgpIC0gYm91bmRhcmllcy54KCkpOworICAgICAg
ICAgICAgICAgIGJvdW5kYXJpZXMuc2V0V2lkdGgoZWxsaXBzaXNSZWN0Lm1heFgoKSAtIGJvdW5k
YXJpZXMueCgpKTsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBib3VuZGFyaWVz
LnNldEhlaWdodChlbGxpcHNpc1JlY3QuYm90dG9tKCkgLSBib3VuZGFyaWVzLnkoKSk7CisgICAg
ICAgICAgICAgICAgYm91bmRhcmllcy5zZXRIZWlnaHQoZWxsaXBzaXNSZWN0Lm1heFkoKSAtIGJv
dW5kYXJpZXMueSgpKTsKICAgICAgICAgfQogICAgICAgICBxdWFkcy5hcHBlbmQobG9jYWxUb0Fi
c29sdXRlUXVhZChGbG9hdFJlY3QoYm91bmRhcmllcykpKTsKICAgICB9CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVM
aW5lLmNwcAkocmV2aXNpb24gNzcyNjApCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzkzLDcgKzM5
Myw3IEBAIHZvaWQgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpmb3J3YXIKICNlbmRpZgog
CiAgICAgRmxvYXRQb2ludCBsb2NhbFBvaW50ID0gaW5uZXJUZXh0UmVuZGVyZXItPmFic29sdXRl
VG9Mb2NhbChzdGF0aWNfY2FzdDxNb3VzZUV2ZW50Kj4oZXZlbnQpLT5hYnNvbHV0ZUxvY2F0aW9u
KCksIGZhbHNlLCB0cnVlKTsKLSAgICBpbnQgdGV4dFJpZ2h0ID0gaW5uZXJUZXh0UmVuZGVyZXIt
PmJvcmRlckJveFJlY3QoKS5yaWdodCgpOworICAgIGludCB0ZXh0UmlnaHQgPSBpbm5lclRleHRS
ZW5kZXJlci0+Ym9yZGVyQm94UmVjdCgpLm1heFgoKTsKIAogICAgIGlmIChtX3Jlc3VsdHNCdXR0
b24gJiYgbG9jYWxQb2ludC54KCkgPCBpbm5lclRleHRSZW5kZXJlci0+Ym9yZGVyQm94UmVjdCgp
LngoKSkKICAgICAgICAgbV9yZXN1bHRzQnV0dG9uLT5kZWZhdWx0RXZlbnRIYW5kbGVyKGV2ZW50
KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5tbQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMubW0JKHJl
dmlzaW9uIDc3MjYwKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFj
Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xMDQxLDIwICsxMDQxLDIwIEBAIHZvaWQgUmVuZGVyVGhl
bWVNYWM6OnBhaW50TWVudUxpc3RCdXR0b24KICAgICBGbG9hdFJlY3QgdG9wR3JhZGllbnQoci54
KCksIHIueSgpLCByLndpZHRoKCksIHIuaGVpZ2h0KCkgLyAyLjBmKTsKICAgICBzdHJ1Y3QgQ0dG
dW5jdGlvbkNhbGxiYWNrcyB0b3BDYWxsYmFja3MgPSB7IDAsIFRvcEdyYWRpZW50SW50ZXJwb2xh
dGUsIE5VTEwgfTsKICAgICBSZXRhaW5QdHI8Q0dGdW5jdGlvblJlZj4gdG9wRnVuY3Rpb24oQWRv
cHRDRiwgQ0dGdW5jdGlvbkNyZWF0ZShOVUxMLCAxLCBOVUxMLCA0LCBOVUxMLCAmdG9wQ2FsbGJh
Y2tzKSk7Ci0gICAgUmV0YWluUHRyPENHU2hhZGluZ1JlZj4gdG9wU2hhZGluZyhBZG9wdENGLCBD
R1NoYWRpbmdDcmVhdGVBeGlhbChjc3BhY2UsIENHUG9pbnRNYWtlKHRvcEdyYWRpZW50LngoKSwg
dG9wR3JhZGllbnQueSgpKSwgQ0dQb2ludE1ha2UodG9wR3JhZGllbnQueCgpLCB0b3BHcmFkaWVu
dC5ib3R0b20oKSksIHRvcEZ1bmN0aW9uLmdldCgpLCBmYWxzZSwgZmFsc2UpKTsKKyAgICBSZXRh
aW5QdHI8Q0dTaGFkaW5nUmVmPiB0b3BTaGFkaW5nKEFkb3B0Q0YsIENHU2hhZGluZ0NyZWF0ZUF4
aWFsKGNzcGFjZSwgQ0dQb2ludE1ha2UodG9wR3JhZGllbnQueCgpLCB0b3BHcmFkaWVudC55KCkp
LCBDR1BvaW50TWFrZSh0b3BHcmFkaWVudC54KCksIHRvcEdyYWRpZW50Lm1heFkoKSksIHRvcEZ1
bmN0aW9uLmdldCgpLCBmYWxzZSwgZmFsc2UpKTsKIAogICAgIEZsb2F0UmVjdCBib3R0b21HcmFk
aWVudChyLngoKSArIHJhZGl1cywgci55KCkgKyByLmhlaWdodCgpIC8gMi4wZiwgci53aWR0aCgp
IC0gMi4wZiAqIHJhZGl1cywgci5oZWlnaHQoKSAvIDIuMGYpOwogICAgIHN0cnVjdCBDR0Z1bmN0
aW9uQ2FsbGJhY2tzIGJvdHRvbUNhbGxiYWNrcyA9IHsgMCwgQm90dG9tR3JhZGllbnRJbnRlcnBv
bGF0ZSwgTlVMTCB9OwogICAgIFJldGFpblB0cjxDR0Z1bmN0aW9uUmVmPiBib3R0b21GdW5jdGlv
bihBZG9wdENGLCBDR0Z1bmN0aW9uQ3JlYXRlKE5VTEwsIDEsIE5VTEwsIDQsIE5VTEwsICZib3R0
b21DYWxsYmFja3MpKTsKLSAgICBSZXRhaW5QdHI8Q0dTaGFkaW5nUmVmPiBib3R0b21TaGFkaW5n
KEFkb3B0Q0YsIENHU2hhZGluZ0NyZWF0ZUF4aWFsKGNzcGFjZSwgQ0dQb2ludE1ha2UoYm90dG9t
R3JhZGllbnQueCgpLCAgYm90dG9tR3JhZGllbnQueSgpKSwgQ0dQb2ludE1ha2UoYm90dG9tR3Jh
ZGllbnQueCgpLCBib3R0b21HcmFkaWVudC5ib3R0b20oKSksIGJvdHRvbUZ1bmN0aW9uLmdldCgp
LCBmYWxzZSwgZmFsc2UpKTsKKyAgICBSZXRhaW5QdHI8Q0dTaGFkaW5nUmVmPiBib3R0b21TaGFk
aW5nKEFkb3B0Q0YsIENHU2hhZGluZ0NyZWF0ZUF4aWFsKGNzcGFjZSwgQ0dQb2ludE1ha2UoYm90
dG9tR3JhZGllbnQueCgpLCAgYm90dG9tR3JhZGllbnQueSgpKSwgQ0dQb2ludE1ha2UoYm90dG9t
R3JhZGllbnQueCgpLCBib3R0b21HcmFkaWVudC5tYXhZKCkpLCBib3R0b21GdW5jdGlvbi5nZXQo
KSwgZmFsc2UsIGZhbHNlKSk7CiAKICAgICBzdHJ1Y3QgQ0dGdW5jdGlvbkNhbGxiYWNrcyBtYWlu
Q2FsbGJhY2tzID0geyAwLCBNYWluR3JhZGllbnRJbnRlcnBvbGF0ZSwgTlVMTCB9OwogICAgIFJl
dGFpblB0cjxDR0Z1bmN0aW9uUmVmPiBtYWluRnVuY3Rpb24oQWRvcHRDRiwgQ0dGdW5jdGlvbkNy
ZWF0ZShOVUxMLCAxLCBOVUxMLCA0LCBOVUxMLCAmbWFpbkNhbGxiYWNrcykpOwotICAgIFJldGFp
blB0cjxDR1NoYWRpbmdSZWY+IG1haW5TaGFkaW5nKEFkb3B0Q0YsIENHU2hhZGluZ0NyZWF0ZUF4
aWFsKGNzcGFjZSwgQ0dQb2ludE1ha2Uoci54KCksICByLnkoKSksIENHUG9pbnRNYWtlKHIueCgp
LCByLmJvdHRvbSgpKSwgbWFpbkZ1bmN0aW9uLmdldCgpLCBmYWxzZSwgZmFsc2UpKTsKKyAgICBS
ZXRhaW5QdHI8Q0dTaGFkaW5nUmVmPiBtYWluU2hhZGluZyhBZG9wdENGLCBDR1NoYWRpbmdDcmVh
dGVBeGlhbChjc3BhY2UsIENHUG9pbnRNYWtlKHIueCgpLCAgci55KCkpLCBDR1BvaW50TWFrZShy
LngoKSwgci5tYXhZKCkpLCBtYWluRnVuY3Rpb24uZ2V0KCksIGZhbHNlLCBmYWxzZSkpOwogCiAg
ICAgUmV0YWluUHRyPENHU2hhZGluZ1JlZj4gbGVmdFNoYWRpbmcoQWRvcHRDRiwgQ0dTaGFkaW5n
Q3JlYXRlQXhpYWwoY3NwYWNlLCBDR1BvaW50TWFrZShyLngoKSwgIHIueSgpKSwgQ0dQb2ludE1h
a2Uoci54KCkgKyByYWRpdXMsIHIueSgpKSwgbWFpbkZ1bmN0aW9uLmdldCgpLCBmYWxzZSwgZmFs
c2UpKTsKIAotICAgIFJldGFpblB0cjxDR1NoYWRpbmdSZWY+IHJpZ2h0U2hhZGluZyhBZG9wdENG
LCBDR1NoYWRpbmdDcmVhdGVBeGlhbChjc3BhY2UsIENHUG9pbnRNYWtlKHIucmlnaHQoKSwgIHIu
eSgpKSwgQ0dQb2ludE1ha2Uoci5yaWdodCgpIC0gcmFkaXVzLCByLnkoKSksIG1haW5GdW5jdGlv
bi5nZXQoKSwgZmFsc2UsIGZhbHNlKSk7CisgICAgUmV0YWluUHRyPENHU2hhZGluZ1JlZj4gcmln
aHRTaGFkaW5nKEFkb3B0Q0YsIENHU2hhZGluZ0NyZWF0ZUF4aWFsKGNzcGFjZSwgQ0dQb2ludE1h
a2Uoci5tYXhYKCksICByLnkoKSksIENHUG9pbnRNYWtlKHIubWF4WCgpIC0gcmFkaXVzLCByLnko
KSksIG1haW5GdW5jdGlvbi5nZXQoKSwgZmFsc2UsIGZhbHNlKSk7CiAgICAgcGFpbnRJbmZvLmNv
bnRleHQtPnNhdmUoKTsKICAgICBDR0NvbnRleHRDbGlwVG9SZWN0KGNvbnRleHQsIHIpOwogICAg
IHBhaW50SW5mby5jb250ZXh0LT5hZGRSb3VuZGVkUmVjdENsaXAoYm9yZGVyKTsKQEAgLTEwOTks
NyArMTA5OSw3IEBAIGJvb2wgUmVuZGVyVGhlbWVNYWM6OnBhaW50TWVudUxpc3RCdXR0b24KICAg
ICBmbG9hdCBjZW50ZXJZID0gYm91bmRzLnkoKSArIGJvdW5kcy5oZWlnaHQoKSAvIDIuMGY7CiAg
ICAgZmxvYXQgYXJyb3dIZWlnaHQgPSBiYXNlQXJyb3dIZWlnaHQgKiBmb250U2NhbGU7CiAgICAg
ZmxvYXQgYXJyb3dXaWR0aCA9IGJhc2VBcnJvd1dpZHRoICogZm9udFNjYWxlOwotICAgIGZsb2F0
IGxlZnRFZGdlID0gYm91bmRzLnJpZ2h0KCkgLSBhcnJvd1BhZGRpbmdSaWdodCAqIG8tPnN0eWxl
KCktPmVmZmVjdGl2ZVpvb20oKSAtIGFycm93V2lkdGg7CisgICAgZmxvYXQgbGVmdEVkZ2UgPSBi
b3VuZHMubWF4WCgpIC0gYXJyb3dQYWRkaW5nUmlnaHQgKiBvLT5zdHlsZSgpLT5lZmZlY3RpdmVa
b29tKCkgLSBhcnJvd1dpZHRoOwogICAgIGZsb2F0IHNwYWNlQmV0d2VlbkFycm93cyA9IGJhc2VT
cGFjZUJldHdlZW5BcnJvd3MgKiBmb250U2NhbGU7CiAKICAgICBpZiAoYm91bmRzLndpZHRoKCkg
PCBhcnJvd1dpZHRoICsgYXJyb3dQYWRkaW5nTGVmdCAqIG8tPnN0eWxlKCktPmVmZmVjdGl2ZVpv
b20oKSkKQEAgLTExMzgsMTEgKzExMzgsMTEgQEAgYm9vbCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRN
ZW51TGlzdEJ1dHRvbgogICAgIHBhaW50SW5mby5jb250ZXh0LT5zZXRTdHJva2VTdHlsZShTb2xp
ZFN0cm9rZSk7CiAgICAgcGFpbnRJbmZvLmNvbnRleHQtPnNldFN0cm9rZUNvbG9yKGxlZnRTZXBh
cmF0b3JDb2xvciwgQ29sb3JTcGFjZURldmljZVJHQik7CiAgICAgcGFpbnRJbmZvLmNvbnRleHQt
PmRyYXdMaW5lKEludFBvaW50KGxlZnRFZGdlT2ZTZXBhcmF0b3IsIGJvdW5kcy55KCkpLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRQb2ludChsZWZ0RWRnZU9mU2VwYXJhdG9y
LCBib3VuZHMuYm90dG9tKCkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW50
UG9pbnQobGVmdEVkZ2VPZlNlcGFyYXRvciwgYm91bmRzLm1heFkoKSkpOwogCiAgICAgcGFpbnRJ
bmZvLmNvbnRleHQtPnNldFN0cm9rZUNvbG9yKHJpZ2h0U2VwYXJhdG9yQ29sb3IsIENvbG9yU3Bh
Y2VEZXZpY2VSR0IpOwogICAgIHBhaW50SW5mby5jb250ZXh0LT5kcmF3TGluZShJbnRQb2ludChs
ZWZ0RWRnZU9mU2VwYXJhdG9yICsgc2VwYXJhdG9yU3BhY2UsIGJvdW5kcy55KCkpLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRQb2ludChsZWZ0RWRnZU9mU2VwYXJhdG9yICsg
c2VwYXJhdG9yU3BhY2UsIGJvdW5kcy5ib3R0b20oKSkpOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBJbnRQb2ludChsZWZ0RWRnZU9mU2VwYXJhdG9yICsgc2VwYXJhdG9yU3BhY2Us
IGJvdW5kcy5tYXhZKCkpKTsKIAogICAgIHBhaW50SW5mby5jb250ZXh0LT5yZXN0b3JlKCk7CiAg
ICAgcmV0dXJuIGZhbHNlOwpAQCAtMTI5Myw5ICsxMjkzLDkgQEAgYm9vbCBSZW5kZXJUaGVtZU1h
Yzo6cGFpbnRTbGlkZXJUcmFjayhSZQogICAgIFJldGFpblB0cjxDR0Z1bmN0aW9uUmVmPiBtYWlu
RnVuY3Rpb24oQWRvcHRDRiwgQ0dGdW5jdGlvbkNyZWF0ZShOVUxMLCAxLCBOVUxMLCA0LCBOVUxM
LCAmbWFpbkNhbGxiYWNrcykpOwogICAgIFJldGFpblB0cjxDR1NoYWRpbmdSZWY+IG1haW5TaGFk
aW5nOwogICAgIGlmIChvLT5zdHlsZSgpLT5hcHBlYXJhbmNlKCkgPT0gU2xpZGVyVmVydGljYWxQ
YXJ0KQotICAgICAgICBtYWluU2hhZGluZy5hZG9wdENGKENHU2hhZGluZ0NyZWF0ZUF4aWFsKGNz
cGFjZSwgQ0dQb2ludE1ha2UoYm91bmRzLngoKSwgIGJvdW5kcy5ib3R0b20oKSksIENHUG9pbnRN
YWtlKGJvdW5kcy5yaWdodCgpLCBib3VuZHMuYm90dG9tKCkpLCBtYWluRnVuY3Rpb24uZ2V0KCks
IGZhbHNlLCBmYWxzZSkpOworICAgICAgICBtYWluU2hhZGluZy5hZG9wdENGKENHU2hhZGluZ0Ny
ZWF0ZUF4aWFsKGNzcGFjZSwgQ0dQb2ludE1ha2UoYm91bmRzLngoKSwgIGJvdW5kcy5tYXhZKCkp
LCBDR1BvaW50TWFrZShib3VuZHMubWF4WCgpLCBib3VuZHMubWF4WSgpKSwgbWFpbkZ1bmN0aW9u
LmdldCgpLCBmYWxzZSwgZmFsc2UpKTsKICAgICBlbHNlCi0gICAgICAgIG1haW5TaGFkaW5nLmFk
b3B0Q0YoQ0dTaGFkaW5nQ3JlYXRlQXhpYWwoY3NwYWNlLCBDR1BvaW50TWFrZShib3VuZHMueCgp
LCAgYm91bmRzLnkoKSksIENHUG9pbnRNYWtlKGJvdW5kcy54KCksIGJvdW5kcy5ib3R0b20oKSks
IG1haW5GdW5jdGlvbi5nZXQoKSwgZmFsc2UsIGZhbHNlKSk7CisgICAgICAgIG1haW5TaGFkaW5n
LmFkb3B0Q0YoQ0dTaGFkaW5nQ3JlYXRlQXhpYWwoY3NwYWNlLCBDR1BvaW50TWFrZShib3VuZHMu
eCgpLCAgYm91bmRzLnkoKSksIENHUG9pbnRNYWtlKGJvdW5kcy54KCksIGJvdW5kcy5tYXhZKCkp
LCBtYWluRnVuY3Rpb24uZ2V0KCksIGZhbHNlLCBmYWxzZSkpOwogCiAgICAgSW50U2l6ZSByYWRp
dXModHJhY2tSYWRpdXMsIHRyYWNrUmFkaXVzKTsKICAgICBwYWludEluZm8uY29udGV4dC0+YWRk
Um91bmRlZFJlY3RDbGlwKFJvdW5kZWRJbnRSZWN0KGJvdW5kcywgcmFkaXVzLCByYWRpdXMsIHJh
ZGl1cywgcmFkaXVzKSk7CkBAIC0xNDk0LDcgKzE0OTQsNyBAQCBib29sIFJlbmRlclRoZW1lTWFj
OjpwYWludFNlYXJjaEZpZWxkQ2FuCiAgICAgLy8gVGFrZSBjYXJlIG9mIGNhc2VzIHdoZXJlIHRo
ZSBjYW5jZWwgYnV0dG9uIHdhcyBub3QgYWxpZ25lZCB3aXRoIHRoZSByaWdodCBib3JkZXIgb2Yg
dGhlIGlucHV0IGVsZW1lbnQgKGZvciBlLmcuCiAgICAgLy8gd2hlbiBzcGVlY2ggaW5wdXQgaXMg
ZW5hYmxlZCBmb3IgdGhlIGlucHV0IGVsZW1lbnQuCiAgICAgSW50UmVjdCBhYnNCb3VuZGluZ0Jv
eCA9IGlucHV0LT5yZW5kZXJlcigpLT5hYnNvbHV0ZUJvdW5kaW5nQm94UmVjdCgpOwotICAgIGlu
dCBhYnNSaWdodCA9IGFic0JvdW5kaW5nQm94LngoKSArIGFic0JvdW5kaW5nQm94LndpZHRoKCkg
LSBpbnB1dC0+cmVuZGVyQm94KCktPnBhZGRpbmdSaWdodCgpIC0gaW5wdXQtPnJlbmRlckJveCgp
LT5ib3JkZXJSaWdodCgpOworICAgIGludCBhYnNSaWdodCA9IGFic0JvdW5kaW5nQm94LngoKSAr
IGFic0JvdW5kaW5nQm94LndpZHRoKCkgLSBpbnB1dC0+cmVuZGVyQm94KCktPnBhZGRpbmdtYXhY
KCkgLSBpbnB1dC0+cmVuZGVyQm94KCktPmJvcmRlcm1heFgoKTsKICAgICBpbnQgc3BhY2VUb1Jp
Z2h0T2ZDYW5jZWxCdXR0b24gPSBhYnNSaWdodCAtIChyLngoKSArIHIud2lkdGgoKSk7CiAgICAg
bG9jYWxCb3VuZHMuc2V0WChsb2NhbEJvdW5kcy54KCkgLSBzcGFjZVRvUmlnaHRPZkNhbmNlbEJ1
dHRvbik7CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5j
cHAJKHJldmlzaW9uIDc3MjYwKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZp
ZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMDQsOSArMzA0LDkgQEAgdm9pZCBSZW5kZXJWaWV3
Ojpjb21wdXRlUmVjdEZvclJlcGFpbnQoUgogICAgICAgICAvLyBXZSBoYXZlIHRvIGZsaXAgYnkg
aGFuZCBzaW5jZSB0aGUgdmlldydzIGxvZ2ljYWwgaGVpZ2h0IGhhcyBub3QgYmVlbiBkZXRlcm1p
bmVkLiAgV2UKICAgICAgICAgLy8gY2FuIHVzZSB0aGUgdmlld3BvcnQgd2lkdGggYW5kIGhlaWdo
dC4KICAgICAgICAgaWYgKHN0eWxlKCktPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpCi0gICAg
ICAgICAgICByZWN0LnNldFkodmlld0hlaWdodCgpIC0gcmVjdC5ib3R0b20oKSk7CisgICAgICAg
ICAgICByZWN0LnNldFkodmlld0hlaWdodCgpIC0gcmVjdC5tYXhZKCkpOwogICAgICAgICBlbHNl
Ci0gICAgICAgICAgICByZWN0LnNldFgodmlld1dpZHRoKCkgLSByZWN0LnJpZ2h0KCkpOworICAg
ICAgICAgICAgcmVjdC5zZXRYKHZpZXdXaWR0aCgpIC0gcmVjdC5tYXhYKCkpOwogICAgIH0KIAog
ICAgIGlmIChmaXhlZCAmJiBtX2ZyYW1lVmlldykKQEAgLTY2NCw3ICs2NjQsNyBAQCBpbnQgUmVu
ZGVyVmlldzo6ZG9jQm90dG9tKCkgY29uc3QKICAgICBmbGlwRm9yV3JpdGluZ01vZGUob3ZlcmZs
b3dSZWN0KTsKICAgICBpZiAoaGFzVHJhbnNmb3JtKCkpCiAgICAgICAgIG92ZXJmbG93UmVjdCA9
IGxheWVyKCktPmN1cnJlbnRUcmFuc2Zvcm0oKS5tYXBSZWN0KG92ZXJmbG93UmVjdCk7Ci0gICAg
cmV0dXJuIG92ZXJmbG93UmVjdC5ib3R0b20oKTsKKyAgICByZXR1cm4gb3ZlcmZsb3dSZWN0Lm1h
eFkoKTsKIH0KIAogaW50IFJlbmRlclZpZXc6OmRvY0xlZnQoKSBjb25zdApAQCAtNjgyLDcgKzY4
Miw3IEBAIGludCBSZW5kZXJWaWV3Ojpkb2NSaWdodCgpIGNvbnN0CiAgICAgZmxpcEZvcldyaXRp
bmdNb2RlKG92ZXJmbG93UmVjdCk7CiAgICAgaWYgKGhhc1RyYW5zZm9ybSgpKQogICAgICAgICBv
dmVyZmxvd1JlY3QgPSBsYXllcigpLT5jdXJyZW50VHJhbnNmb3JtKCkubWFwUmVjdChvdmVyZmxv
d1JlY3QpOwotICAgIHJldHVybiBvdmVyZmxvd1JlY3QucmlnaHQoKTsKKyAgICByZXR1cm4gb3Zl
cmZsb3dSZWN0Lm1heFgoKTsKIH0KIAogaW50IFJlbmRlclZpZXc6OnZpZXdIZWlnaHQoKSBjb25z
dApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jvb3RJbmxpbmVCb3guY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Sb290SW5saW5lQm94LmNwcAkocmV2
aXNpb24gNzcyNjApCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUm9vdElubGluZUJveC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTU0NCwxNCArNTQ0LDE0IEBAIEludFJlY3QgUm9vdElubGlu
ZUJveDo6cGFkZGVkTGF5b3V0T3ZlcmYKICAgICAKICAgICBpZiAoaXNIb3Jpem9udGFsKCkpIHsK
ICAgICAgICAgaWYgKGlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSkKLSAgICAgICAgICAgIGxpbmVM
YXlvdXRPdmVyZmxvdy5zaGlmdFJpZ2h0RWRnZVRvKG1heChsaW5lTGF5b3V0T3ZlcmZsb3cucmln
aHQoKSwgbG9naWNhbFJpZ2h0KCkgKyBlbmRQYWRkaW5nKSk7CisgICAgICAgICAgICBsaW5lTGF5
b3V0T3ZlcmZsb3cuc2hpZnRNYXhYRWRnZVRvKG1heChsaW5lTGF5b3V0T3ZlcmZsb3cubWF4WCgp
LCBsb2dpY2FsUmlnaHQoKSArIGVuZFBhZGRpbmcpKTsKICAgICAgICAgZWxzZQotICAgICAgICAg
ICAgbGluZUxheW91dE92ZXJmbG93LnNoaWZ0TGVmdEVkZ2VUbyhtaW4obGluZUxheW91dE92ZXJm
bG93LngoKSwgbG9naWNhbExlZnQoKSAtIGVuZFBhZGRpbmcpKTsKKyAgICAgICAgICAgIGxpbmVM
YXlvdXRPdmVyZmxvdy5zaGlmdE1pblhFZGdlVG8obWluKGxpbmVMYXlvdXRPdmVyZmxvdy54KCks
IGxvZ2ljYWxMZWZ0KCkgLSBlbmRQYWRkaW5nKSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgaWYg
KGlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSkKLSAgICAgICAgICAgIGxpbmVMYXlvdXRPdmVyZmxv
dy5zaGlmdEJvdHRvbUVkZ2VUbyhtYXgobGluZUxheW91dE92ZXJmbG93LmJvdHRvbSgpLCBsb2dp
Y2FsUmlnaHQoKSArIGVuZFBhZGRpbmcpKTsKKyAgICAgICAgICAgIGxpbmVMYXlvdXRPdmVyZmxv
dy5zaGlmdE1heFlFZGdlVG8obWF4KGxpbmVMYXlvdXRPdmVyZmxvdy5tYXhZKCksIGxvZ2ljYWxS
aWdodCgpICsgZW5kUGFkZGluZykpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBsaW5lTGF5
b3V0T3ZlcmZsb3cuc2hpZnRUb3BFZGdlVG8obWluKGxpbmVMYXlvdXRPdmVyZmxvdy55KCksIGxv
Z2ljYWxSaWdodCgpIC0gZW5kUGFkZGluZykpOworICAgICAgICAgICAgbGluZUxheW91dE92ZXJm
bG93LnNoaWZ0TWluWUVkZ2VUbyhtaW4obGluZUxheW91dE92ZXJmbG93LnkoKSwgbG9naWNhbFJp
Z2h0KCkgLSBlbmRQYWRkaW5nKSk7CiAgICAgfQogICAgIAogICAgIHJldHVybiBsaW5lTGF5b3V0
T3ZlcmZsb3c7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0lu
bGluZVRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHSW5saW5lVGV4dC5jcHAJKHJldmlzaW9uIDc3MjYwKQorKysgU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdJbmxpbmVUZXh0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTAzLDEyICsxMDMsMTIgQEAgSW50UmVjdCBSZW5kZXJTVkdJbmxpbmVUZXh0Ojpsb2NhbENh
cmV0UgogICAgIC8vIFVzZSB0aGUgZWRnZSBvZiB0aGUgc2VsZWN0aW9uIHJlY3QgdG8gZGV0ZXJt
aW5lIHRoZSBjYXJldCByZWN0LgogICAgIGlmIChzdGF0aWNfY2FzdDx1bnNpZ25lZD4oY2FyZXRP
ZmZzZXQpIDwgdGV4dEJveC0+c3RhcnQoKSArIHRleHRCb3gtPmxlbigpKSB7CiAgICAgICAgIElu
dFJlY3QgcmVjdCA9IHRleHRCb3gtPnNlbGVjdGlvblJlY3QoMCwgMCwgY2FyZXRPZmZzZXQsIGNh
cmV0T2Zmc2V0ICsgMSk7Ci0gICAgICAgIGludCB4ID0gYm94LT5pc0xlZnRUb1JpZ2h0RGlyZWN0
aW9uKCkgPyByZWN0LngoKSA6IHJlY3QucmlnaHQoKTsKKyAgICAgICAgaW50IHggPSBib3gtPmlz
TGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/IHJlY3QueCgpIDogcmVjdC5tYXhYKCk7CiAgICAgICAg
IHJldHVybiBJbnRSZWN0KHgsIHJlY3QueSgpLCBjYXJldFdpZHRoLCByZWN0LmhlaWdodCgpKTsK
ICAgICB9CiAKICAgICBJbnRSZWN0IHJlY3QgPSB0ZXh0Qm94LT5zZWxlY3Rpb25SZWN0KDAsIDAs
IGNhcmV0T2Zmc2V0IC0gMSwgY2FyZXRPZmZzZXQpOwotICAgIGludCB4ID0gYm94LT5pc0xlZnRU
b1JpZ2h0RGlyZWN0aW9uKCkgPyByZWN0LnJpZ2h0KCkgOiByZWN0LngoKTsKKyAgICBpbnQgeCA9
IGJveC0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpID8gcmVjdC5tYXhYKCkgOiByZWN0LngoKTsK
ICAgICByZXR1cm4gSW50UmVjdCh4LCByZWN0LnkoKSwgY2FyZXRXaWR0aCwgcmVjdC5oZWlnaHQo
KSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL1JlZ2lvbi5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdDIvUGxhdGZvcm0vUmVnaW9uLmNwcAkocmV2aXNpb24gNzcy
NjApCisrKyBTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9SZWdpb24uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC03Myw4ICs3Myw4IEBAIFJlZ2lvbjo6U2hhcGU6OlNoYXBlKGNvbnN0IEludFJlY3QmIHJl
Y3QKIHsKICAgICBhcHBlbmRTcGFuKHJlY3QueSgpKTsKICAgICBhcHBlbmRTZWdtZW50KHJlY3Qu
eCgpKTsKLSAgICBhcHBlbmRTZWdtZW50KHJlY3QucmlnaHQoKSk7Ci0gICAgYXBwZW5kU3Bhbihy
ZWN0LmJvdHRvbSgpKTsKKyAgICBhcHBlbmRTZWdtZW50KHJlY3QubWF4WCgpKTsKKyAgICBhcHBl
bmRTcGFuKHJlY3QubWF4WSgpKTsKIH0KIAogdm9pZCBSZWdpb246OlNoYXBlOjphcHBlbmRTcGFu
KGludCB5KQpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0ZpbmRJbmRpY2F0b3IuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9GaW5kSW5kaWNhdG9yLmNw
cAkocmV2aXNpb24gNzcyNjApCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvRmluZEluZGlj
YXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1Nyw3ICsxNTcsNyBAQCB2b2lkIEZpbmRJbmRp
Y2F0b3I6OmRyYXcoR3JhcGhpY3NDb250ZXh0CiAgICAgICAgIGdyYXBoaWNzQ29udGV4dC5zYXZl
KCk7CiAgICAgICAgIEZsb2F0UmVjdCBpbm5lclBhdGhSZWN0ID0gaW5mbGF0ZVJlY3QodGV4dFJl
Y3QsIGhvcml6b250YWxQYWRkaW5nSW5zaWRlTGlnaHRCb3JkZXIsIHZlcnRpY2FsUGFkZGluZ0lu
c2lkZUxpZ2h0Qm9yZGVyKTsKICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LmNsaXAocGF0aFdpdGhS
b3VuZGVkUmVjdChpbm5lclBhdGhSZWN0LCBjb3JuZXJSYWRpdXMpKTsKLSAgICAgICAgUmVmUHRy
PEdyYWRpZW50PiBncmFkaWVudCA9IEdyYWRpZW50OjpjcmVhdGUoRmxvYXRQb2ludChpbm5lclBh
dGhSZWN0LngoKSwgaW5uZXJQYXRoUmVjdC55KCkpLCBGbG9hdFBvaW50KGlubmVyUGF0aFJlY3Qu
eCgpLCBpbm5lclBhdGhSZWN0LmJvdHRvbSgpKSk7CisgICAgICAgIFJlZlB0cjxHcmFkaWVudD4g
Z3JhZGllbnQgPSBHcmFkaWVudDo6Y3JlYXRlKEZsb2F0UG9pbnQoaW5uZXJQYXRoUmVjdC54KCks
IGlubmVyUGF0aFJlY3QueSgpKSwgRmxvYXRQb2ludChpbm5lclBhdGhSZWN0LngoKSwgaW5uZXJQ
YXRoUmVjdC5tYXhZKCkpKTsKICAgICAgICAgZ3JhZGllbnQtPmFkZENvbG9yU3RvcCgwLCBncmFk
aWVudExpZ2h0Q29sb3IoKSk7CiAgICAgICAgIGdyYWRpZW50LT5hZGRDb2xvclN0b3AoMSwgZ3Jh
ZGllbnREYXJrQ29sb3IoKSk7CiAgICAgICAgIGdyYXBoaWNzQ29udGV4dC5zZXRGaWxsR3JhZGll
bnQoZ3JhZGllbnQpOwpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvV0tQ
cmludGluZ1ZpZXcubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9tYWMvV0tQcmludGluZ1ZpZXcubW0JKHJldmlzaW9uIDc3MjYwKQorKysgU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9tYWMvV0tQcmludGluZ1ZpZXcubW0JKHdvcmtpbmcgY29weSkKQEAg
LTIzMyw4ICsyMzMsOCBAQCBzdGF0aWMgdm9pZCBwYWdlRGlkQ29tcHV0ZVBhZ2VSZWN0cyhjb25z
CiAKICAgICAgICAgY29uc3QgSW50UmVjdCYgbGFzdFByaW50aW5nUGFnZVJlY3QgPSB2aWV3LT5f
cHJpbnRpbmdQYWdlUmVjdHNbdmlldy0+X3ByaW50aW5nUGFnZVJlY3RzLnNpemUoKSAtIDFdOwog
ICAgICAgICBOU1JlY3QgbmV3RnJhbWVTaXplID0gTlNNYWtlUmVjdCgwLCAwLCAKLSAgICAgICAg
ICAgIGNlaWwobGFzdFByaW50aW5nUGFnZVJlY3QucmlnaHQoKSAqIHZpZXctPl90b3RhbFNjYWxl
RmFjdG9yRm9yUHJpbnRpbmcpLCAKLSAgICAgICAgICAgIGNlaWwobGFzdFByaW50aW5nUGFnZVJl
Y3QuYm90dG9tKCkgKiB2aWV3LT5fdG90YWxTY2FsZUZhY3RvckZvclByaW50aW5nKSk7CisgICAg
ICAgICAgICBjZWlsKGxhc3RQcmludGluZ1BhZ2VSZWN0Lm1heFgoKSAqIHZpZXctPl90b3RhbFNj
YWxlRmFjdG9yRm9yUHJpbnRpbmcpLCAKKyAgICAgICAgICAgIGNlaWwobGFzdFByaW50aW5nUGFn
ZVJlY3QubWF4WSgpICogdmlldy0+X3RvdGFsU2NhbGVGYWN0b3JGb3JQcmludGluZykpOwogICAg
ICAgICBMT0coVmlldywgIldLUHJpbnRpbmdWaWV3IHNldHRpbmcgZnJhbWUgc2l6ZSB0byB4OiVn
IHk6JWcgd2lkdGg6JWcgaGVpZ2h0OiVnIiwgbmV3RnJhbWVTaXplLm9yaWdpbi54LCBuZXdGcmFt
ZVNpemUub3JpZ2luLnksIG5ld0ZyYW1lU2l6ZS5zaXplLndpZHRoLCBuZXdGcmFtZVNpemUuc2l6
ZS5oZWlnaHQpOwogICAgICAgICBbdmlldyBzZXRGcmFtZTpuZXdGcmFtZVNpemVdOwogCkluZGV4
OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL0NodW5rZWRVcGRhdGVEcmF3aW5nQXJlYVBy
b3h5TWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvQ2h1
bmtlZFVwZGF0ZURyYXdpbmdBcmVhUHJveHlNYWMubW0JKHJldmlzaW9uIDc3MjYwKQorKysgU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9DaHVua2VkVXBkYXRlRHJhd2luZ0FyZWFQcm94eU1h
Yy5tbQkod29ya2luZyBjb3B5KQpAQCAtOTcsNyArOTcsNyBAQCB2b2lkIENodW5rZWRVcGRhdGVE
cmF3aW5nQXJlYVByb3h5OjpkcmF3CiAKICAgICAvLyBGbGlwIHRoZSBkZXN0aW5hdGlvbi4KICAg
ICBDR0NvbnRleHRTY2FsZUNUTShtX2JpdG1hcENvbnRleHQuZ2V0KCksIDEsIC0xKTsKLSAgICBD
R0NvbnRleHRUcmFuc2xhdGVDVE0obV9iaXRtYXBDb250ZXh0LmdldCgpLCAwLCAtKHVwZGF0ZUNo
dW5rUmVjdC55KCkgKyB1cGRhdGVDaHVua1JlY3QuYm90dG9tKCkpKTsKKyAgICBDR0NvbnRleHRU
cmFuc2xhdGVDVE0obV9iaXRtYXBDb250ZXh0LmdldCgpLCAwLCAtKHVwZGF0ZUNodW5rUmVjdC55
KCkgKyB1cGRhdGVDaHVua1JlY3QubWF4WSgpKSk7CiAKICAgICBDR0NvbnRleHREcmF3SW1hZ2Uo
bV9iaXRtYXBDb250ZXh0LmdldCgpLCB1cGRhdGVDaHVua1JlY3QsIGltYWdlLmdldCgpKTsKIApJ
bmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL05ldHNjYXBl
UGx1Z2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdp
bnMvTmV0c2NhcGUvTmV0c2NhcGVQbHVnaW4uY3BwCShyZXZpc2lvbiA3NzI2MCkKKysrIFNvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9OZXRzY2FwZVBsdWdpbi5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTM1Miw4ICszNTIsOCBAQCB2b2lkIE5ldHNjYXBlUGx1Z2luOjpj
YWxsU2V0V2luZG93KCkKICAgICBtX25wV2luZG93LmhlaWdodCA9IG1fZnJhbWVSZWN0LmhlaWdo
dCgpOwogICAgIG1fbnBXaW5kb3cuY2xpcFJlY3QudG9wID0gbV9jbGlwUmVjdC55KCk7CiAgICAg
bV9ucFdpbmRvdy5jbGlwUmVjdC5sZWZ0ID0gbV9jbGlwUmVjdC54KCk7Ci0gICAgbV9ucFdpbmRv
dy5jbGlwUmVjdC5ib3R0b20gPSBtX2NsaXBSZWN0LmJvdHRvbSgpOwotICAgIG1fbnBXaW5kb3cu
Y2xpcFJlY3QucmlnaHQgPSBtX2NsaXBSZWN0LnJpZ2h0KCk7CisgICAgbV9ucFdpbmRvdy5jbGlw
UmVjdC5ib3R0b20gPSBtX2NsaXBSZWN0Lm1heFkoKTsKKyAgICBtX25wV2luZG93LmNsaXBSZWN0
LnJpZ2h0ID0gbV9jbGlwUmVjdC5tYXhYKCk7CiAKICAgICBOUFBfU2V0V2luZG93KCZtX25wV2lu
ZG93KTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViSFRNTFZpZXcubW0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJIVE1MVmlldy5tbQko
cmV2aXNpb24gNzcyNjApCisrKyBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkhUTUxWaWV3
Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zMTIsNyArMzEyLDcgQEAgc3RhdGljIHZvaWQgc2V0TmVl
ZHNEaXNwbGF5SW5SZWN0KE5TVmlldwogICAgIE5TUmVjdCBpbnZhbGlkUmVjdEluV2ViRnJhbWVW
aWV3Q29vcmRpbmF0ZXMgPSBbZW5jbG9zaW5nV2ViRnJhbWVWaWV3IGNvbnZlcnRSZWN0OmludmFs
aWRSZWN0IGZyb21WaWV3OnNlbGZdOwogICAgIEludFJlY3QgaW52YWxpZFJlY3RJbkZyYW1lVmll
d0Nvb3JkaW5hdGVzKGludmFsaWRSZWN0SW5XZWJGcmFtZVZpZXdDb29yZGluYXRlcyk7CiAgICAg
aWYgKCFbZW5jbG9zaW5nV2ViRnJhbWVWaWV3IGlzRmxpcHBlZF0pCi0gICAgICAgIGludmFsaWRS
ZWN0SW5GcmFtZVZpZXdDb29yZGluYXRlcy5zZXRZKGZyYW1lVmlldy0+ZnJhbWVSZWN0KCkuc2l6
ZSgpLmhlaWdodCgpIC0gaW52YWxpZFJlY3RJbkZyYW1lVmlld0Nvb3JkaW5hdGVzLmJvdHRvbSgp
KTsKKyAgICAgICAgaW52YWxpZFJlY3RJbkZyYW1lVmlld0Nvb3JkaW5hdGVzLnNldFkoZnJhbWVW
aWV3LT5mcmFtZVJlY3QoKS5zaXplKCkuaGVpZ2h0KCkgLSBpbnZhbGlkUmVjdEluRnJhbWVWaWV3
Q29vcmRpbmF0ZXMubWF4WSgpKTsKIAogICAgIGZyYW1lVmlldy0+aW52YWxpZGF0ZVJlY3QoaW52
YWxpZFJlY3RJbkZyYW1lVmlld0Nvb3JkaW5hdGVzKTsKIH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>80803</attachid>
            <date>2011-02-01 12:36:02 -0800</date>
            <delta_ts>2011-02-01 12:43:18 -0800</delta_ts>
            <desc>Step 1: Convert most of WebCore and WebKit without getting rid of the methods yet.</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>108053</size>
            <attacher name="Dave Hyatt">hyatt</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9i
amVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nl
c3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcAkocmV2aXNpb24gNzcyNjApCisrKyBTb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yNTE5LDcgKzI1MTksNyBAQCBJbnRSZWN0IEFjY2Vzc2liaWxpdHlSZW5kZXJP
YmplY3Q6OmJvdW5kCiAgICAgb3VycmVjdC51bml0ZShyZWN0Mik7CiAgICAgCiAgICAgLy8gaWYg
dGhlIHJlY3RhbmdsZSBzcGFucyBsaW5lcyBhbmQgY29udGFpbnMgbXVsdGlwbGUgdGV4dCBjaGFy
cywgdXNlIHRoZSByYW5nZSdzIGJvdW5kaW5nIGJveCBpbnRlYWQKLSAgICBpZiAocmVjdDEuYm90
dG9tKCkgIT0gcmVjdDIuYm90dG9tKCkpIHsKKyAgICBpZiAocmVjdDEubWF4WSgpICE9IHJlY3Qy
Lm1heFkoKSkgewogICAgICAgICBSZWZQdHI8UmFuZ2U+IGRhdGFSYW5nZSA9IG1ha2VSYW5nZShy
YW5nZS5zdGFydCwgcmFuZ2UuZW5kKTsKICAgICAgICAgSW50UmVjdCBib3VuZGluZ0JveCA9IGRh
dGFSYW5nZS0+Ym91bmRpbmdCb3goKTsKICAgICAgICAgU3RyaW5nIHJhbmdlU3RyaW5nID0gcGxh
aW5UZXh0KGRhdGFSYW5nZS5nZXQoKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L21hYy9BY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlci5tbQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9BY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlci5t
bQkocmV2aXNpb24gNzcyNjApCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9B
Y2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlci5tbQkod29ya2luZyBjb3B5KQpAQCAtMTEyNSw3ICsx
MTI1LDcgQEAgLSAoTlNWYWx1ZSopcG9zaXRpb24KICAgICAgICAgcG9pbnQueSA9IHNjcmVlbkhl
aWdodCAtIChwb2ludC55ICsgcmVtb3RlUG9zaXRpb24ueSArIHJlY3QuaGVpZ2h0KCkgLSBzY3Jv
bGxQb3NpdGlvbi55KTsKICAgICB9IGVsc2UgewogICAgICAgICAvLyBUaGUgQ29jb2EgYWNjZXNz
aWJpbGl0eSBBUEkgd2FudHMgdGhlIGxvd2VyLWxlZnQgY29ybmVyLgotICAgICAgICBwb2ludCA9
IE5TTWFrZVBvaW50KHJlY3QueCgpLCByZWN0LmJvdHRvbSgpKTsKKyAgICAgICAgcG9pbnQgPSBO
U01ha2VQb2ludChyZWN0LngoKSwgcmVjdC5tYXhZKCkpOwogICAgICAgICAKICAgICAgICAgaWYg
KGZyYW1lVmlldykgewogICAgICAgICAgICAgTlNWaWV3KiB2aWV3ID0gZnJhbWVWaWV3LT5kb2N1
bWVudFZpZXcoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9DbGllbnRSZWN0LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0NsaWVudFJlY3QuaAkocmV2aXNpb24gNzcyNjAp
CisrKyBTb3VyY2UvV2ViQ29yZS9kb20vQ2xpZW50UmVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC00
Miw4ICs0Miw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgc3RhdGljIFBhc3NSZWZQ
dHI8Q2xpZW50UmVjdD4gY3JlYXRlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkgeyByZXR1cm4gYWRv
cHRSZWYobmV3IENsaWVudFJlY3QocmVjdCkpOyB9CiAKICAgICAgICAgZmxvYXQgdG9wKCkgY29u
c3QgeyByZXR1cm4gbV9yZWN0LnkoKTsgfQotICAgICAgICBmbG9hdCByaWdodCgpIGNvbnN0IHsg
cmV0dXJuIG1fcmVjdC5yaWdodCgpOyB9Ci0gICAgICAgIGZsb2F0IGJvdHRvbSgpIGNvbnN0IHsg
cmV0dXJuIG1fcmVjdC5ib3R0b20oKTsgfQorICAgICAgICBmbG9hdCByaWdodCgpIGNvbnN0IHsg
cmV0dXJuIG1fcmVjdC5tYXhYKCk7IH0KKyAgICAgICAgZmxvYXQgYm90dG9tKCkgY29uc3QgeyBy
ZXR1cm4gbV9yZWN0Lm1heFkoKTsgfQogICAgICAgICBmbG9hdCBsZWZ0KCkgY29uc3QgeyByZXR1
cm4gbV9yZWN0LngoKTsgfQogICAgICAgICBmbG9hdCB3aWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1f
cmVjdC53aWR0aCgpOyB9CiAgICAgICAgIGZsb2F0IGhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIG1f
cmVjdC5oZWlnaHQoKTsgfQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxl
bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxl
bWVudC5jcHAJKHJldmlzaW9uIDc3MjYwKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2Fu
dmFzRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0NCwxMCArMzQ0LDEwIEBAIFN0cmlu
ZyBIVE1MQ2FudmFzRWxlbWVudDo6dG9EYXRhVVJMKGNvbnMKIAogSW50UmVjdCBIVE1MQ2FudmFz
RWxlbWVudDo6Y29udmVydExvZ2ljYWxUb0RldmljZShjb25zdCBGbG9hdFJlY3QmIGxvZ2ljYWxS
ZWN0KSBjb25zdAogewotICAgIGZsb2F0IGxlZnQgPSBmbG9vcmYobG9naWNhbFJlY3QubGVmdCgp
ICogbV9wYWdlU2NhbGVGYWN0b3IpOwotICAgIGZsb2F0IHRvcCA9IGZsb29yZihsb2dpY2FsUmVj
dC50b3AoKSAqIG1fcGFnZVNjYWxlRmFjdG9yKTsKLSAgICBmbG9hdCByaWdodCA9IGNlaWxmKGxv
Z2ljYWxSZWN0LnJpZ2h0KCkgKiBtX3BhZ2VTY2FsZUZhY3Rvcik7Ci0gICAgZmxvYXQgYm90dG9t
ID0gY2VpbGYobG9naWNhbFJlY3QuYm90dG9tKCkgKiBtX3BhZ2VTY2FsZUZhY3Rvcik7CisgICAg
ZmxvYXQgbGVmdCA9IGZsb29yZihsb2dpY2FsUmVjdC54KCkgKiBtX3BhZ2VTY2FsZUZhY3Rvcik7
CisgICAgZmxvYXQgdG9wID0gZmxvb3JmKGxvZ2ljYWxSZWN0LnkoKSAqIG1fcGFnZVNjYWxlRmFj
dG9yKTsKKyAgICBmbG9hdCByaWdodCA9IGNlaWxmKGxvZ2ljYWxSZWN0Lm1heFgoKSAqIG1fcGFn
ZVNjYWxlRmFjdG9yKTsKKyAgICBmbG9hdCBib3R0b20gPSBjZWlsZihsb2dpY2FsUmVjdC5tYXhZ
KCkgKiBtX3BhZ2VTY2FsZUZhY3Rvcik7CiAgICAgCiAgICAgcmV0dXJuIEludFJlY3QoSW50UG9p
bnQobGVmdCwgdG9wKSwgY29udmVydFRvVmFsaWREZXZpY2VTaXplKHJpZ2h0IC0gbGVmdCwgYm90
dG9tIC0gdG9wKSk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwv
Y2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAJKHJldmlzaW9uIDc3MjYwKQorKysg
U291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTEwNSw4ICsxMTA1LDggQEAgc3RhdGljIEludFNpemUgc2l6ZShI
VE1MVmlkZW9FbGVtZW50KiB2aQogCiBzdGF0aWMgaW5saW5lIEZsb2F0UmVjdCBub3JtYWxpemVS
ZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKLSAgICByZXR1cm4gRmxvYXRSZWN0KG1pbihy
ZWN0LngoKSwgcmVjdC5yaWdodCgpKSwKLSAgICAgICAgbWluKHJlY3QueSgpLCByZWN0LmJvdHRv
bSgpKSwKKyAgICByZXR1cm4gRmxvYXRSZWN0KG1pbihyZWN0LngoKSwgcmVjdC5tYXhYKCkpLAor
ICAgICAgICBtaW4ocmVjdC55KCksIHJlY3QubWF4WSgpKSwKICAgICAgICAgbWF4KHJlY3Qud2lk
dGgoKSwgLXJlY3Qud2lkdGgoKSksCiAgICAgICAgIG1heChyZWN0LmhlaWdodCgpLCAtcmVjdC5o
ZWlnaHQoKSkpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckFn
ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
QWdlbnQuY3BwCShyZXZpc2lvbiA3NzI2MCkKKysrIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JBZ2VudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyNzQsNyArMTI3NCw3IEBAIHZv
aWQgSW5zcGVjdG9yQWdlbnQ6OmRyYXdFbGVtZW50VGl0bGUoR3IKICAgICBmb250LnVwZGF0ZSgw
KTsKIAogICAgIFRleHRSdW4gbm9kZVRpdGxlUnVuKG5vZGVUaXRsZSk7Ci0gICAgSW50UG9pbnQg
dGl0bGVCYXNlUG9pbnQgPSBib3VuZGluZ0JveC5ib3R0b21MZWZ0KCk7CisgICAgSW50UG9pbnQg
dGl0bGVCYXNlUG9pbnQgPSBJbnRQb2ludChib3VuZGluZ0JveC54KCksIGJvdW5kaW5nQm94Lm1h
eFkoKSAtIDEpOwogICAgIHRpdGxlQmFzZVBvaW50Lm1vdmUocmVjdEluZmxhdGVQeCwgcmVjdElu
ZmxhdGVQeCk7CiAgICAgSW50UmVjdCB0aXRsZVJlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KGZvbnQu
c2VsZWN0aW9uUmVjdEZvclRleHQobm9kZVRpdGxlUnVuLCB0aXRsZUJhc2VQb2ludCwgZm9udEhl
aWdodFB4KSk7CiAgICAgdGl0bGVSZWN0LmluZmxhdGUocmVjdEluZmxhdGVQeCk7CkBAIC0xMjg0
LDE5ICsxMjg0LDE5IEBAIHZvaWQgSW5zcGVjdG9yQWdlbnQ6OmRyYXdFbGVtZW50VGl0bGUoR3IK
ICAgICBpbnQgZHkgPSBib3JkZXJXaWR0aFB4OwogCiAgICAgLy8gSWYgdGhlIHRpcCBzdGlja3Mg
YmV5b25kIHRoZSByaWdodCBvZiBvdmVybGF5UmVjdCwgcmlnaHQtYWxpZ24gdGhlIHRpcCB3aXRo
IHRoZSBzYWlkIGJvdW5kYXJ5LgotICAgIGlmICh0aXRsZVJlY3QucmlnaHQoKSA+IG92ZXJsYXlS
ZWN0LnJpZ2h0KCkpCi0gICAgICAgIGR4ID0gb3ZlcmxheVJlY3QucmlnaHQoKSAtIHRpdGxlUmVj
dC5yaWdodCgpOworICAgIGlmICh0aXRsZVJlY3QubWF4WCgpID4gb3ZlcmxheVJlY3QubWF4WCgp
KQorICAgICAgICBkeCA9IG92ZXJsYXlSZWN0Lm1heFgoKSAtIHRpdGxlUmVjdC5tYXhYKCk7CiAK
ICAgICAvLyBJZiB0aGUgdGlwIHN0aWNrcyBiZXlvbmQgdGhlIGxlZnQgb2Ygb3ZlcmxheVJlY3Qs
IGxlZnQtYWxpZ24gdGhlIHRpcCB3aXRoIHRoZSBzYWlkIGJvdW5kYXJ5LgogICAgIGlmICh0aXRs
ZVJlY3QueCgpICsgZHggPCBvdmVybGF5UmVjdC54KCkpCiAgICAgICAgIGR4ID0gb3ZlcmxheVJl
Y3QueCgpIC0gdGl0bGVSZWN0LngoKSAtIGJvcmRlcldpZHRoUHg7CiAKICAgICAvLyBJZiB0aGUg
dGlwIHN0aWNrcyBiZXlvbmQgdGhlIGJvdHRvbSBvZiBvdmVybGF5UmVjdCwgc2hvdyB0aGUgdGlw
IGF0IHRvcCBvZiBib3VuZGluZyBib3guCi0gICAgaWYgKHRpdGxlUmVjdC5ib3R0b20oKSA+IG92
ZXJsYXlSZWN0LmJvdHRvbSgpKSB7Ci0gICAgICAgIGR5ID0gYm91bmRpbmdCb3gueSgpIC0gdGl0
bGVSZWN0LmJvdHRvbSgpIC0gYm9yZGVyV2lkdGhQeDsKKyAgICBpZiAodGl0bGVSZWN0Lm1heFko
KSA+IG92ZXJsYXlSZWN0Lm1heFkoKSkgeworICAgICAgICBkeSA9IGJvdW5kaW5nQm94LnkoKSAt
IHRpdGxlUmVjdC5tYXhZKCkgLSBib3JkZXJXaWR0aFB4OwogICAgICAgICAvLyBJZiB0aGUgdGlw
IHN0aWxsIHN0aWNrcyBiZXlvbmQgdGhlIGJvdHRvbSBvZiBvdmVybGF5UmVjdCwgYm90dG9tLWFs
aWduIHRoZSB0aXAgd2l0aCB0aGUgc2FpZCBib3VuZGFyeS4KLSAgICAgICAgaWYgKHRpdGxlUmVj
dC5ib3R0b20oKSArIGR5ID4gb3ZlcmxheVJlY3QuYm90dG9tKCkpCi0gICAgICAgICAgICBkeSA9
IG92ZXJsYXlSZWN0LmJvdHRvbSgpIC0gdGl0bGVSZWN0LmJvdHRvbSgpOworICAgICAgICBpZiAo
dGl0bGVSZWN0Lm1heFkoKSArIGR5ID4gb3ZlcmxheVJlY3QubWF4WSgpKQorICAgICAgICAgICAg
ZHkgPSBvdmVybGF5UmVjdC5tYXhZKCkgLSB0aXRsZVJlY3QubWF4WSgpOwogICAgIH0KIAogICAg
IC8vIElmIHRoZSB0aXAgc3RpY2tzIGJleW9uZCB0aGUgdG9wIG9mIG92ZXJsYXlSZWN0LCBzaG93
IHRoZSB0aXAgYXQgdG9wIG9mIG92ZXJsYXlSZWN0LgpJbmRleDogU291cmNlL1dlYkNvcmUvcGFn
ZS9ET01XaW5kb3cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2lu
ZG93LmNwcAkocmV2aXNpb24gNzcyNjApCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRv
dy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0Miw4ICszNDIsOCBAQCB2b2lkIERPTVdpbmRvdzo6
YWRqdXN0V2luZG93UmVjdChjb25zdCBGCiAgICAgd2luZG93LnNldEhlaWdodChtaW4obWF4KDEw
MC4wZiwgd2luZG93LmhlaWdodCgpKSwgc2NyZWVuLmhlaWdodCgpKSk7CiAgICAgCiAgICAgLy8g
Q29uc3RyYWluIHRoZSB3aW5kb3cgcG9zaXRpb24gdG8gdGhlIHNjcmVlbi4KLSAgICB3aW5kb3cu
c2V0WChtYXgoc2NyZWVuLngoKSwgbWluKHdpbmRvdy54KCksIHNjcmVlbi5yaWdodCgpIC0gd2lu
ZG93LndpZHRoKCkpKSk7Ci0gICAgd2luZG93LnNldFkobWF4KHNjcmVlbi55KCksIG1pbih3aW5k
b3cueSgpLCBzY3JlZW4uYm90dG9tKCkgLSB3aW5kb3cuaGVpZ2h0KCkpKSk7CisgICAgd2luZG93
LnNldFgobWF4KHNjcmVlbi54KCksIG1pbih3aW5kb3cueCgpLCBzY3JlZW4ubWF4WCgpIC0gd2lu
ZG93LndpZHRoKCkpKSk7CisgICAgd2luZG93LnNldFkobWF4KHNjcmVlbi55KCksIG1pbih3aW5k
b3cueSgpLCBzY3JlZW4ubWF4WSgpIC0gd2luZG93LmhlaWdodCgpKSkpOwogfQogCiAvLyBGSVhN
RTogV2UgY2FuIHJlbW92ZSB0aGlzIGZ1bmN0aW9uIG9uY2UgVjggc2hvd01vZGFsRGlhbG9nIGlz
IGNoYW5nZWQgdG8gdXNlIERPTVdpbmRvdy4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvRHJh
Z0NvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRHJhZ0Nv
bnRyb2xsZXIuY3BwCShyZXZpc2lvbiA3NzI2MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRHJh
Z0NvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NDQsOSArNjQ0LDkgQEAgc3RhdGlj
IEludFBvaW50IGRyYWdMb2NGb3JESFRNTERyYWcoY29ucwogc3RhdGljIEludFBvaW50IGRyYWdM
b2NGb3JTZWxlY3Rpb25EcmFnKEZyYW1lKiBzcmMpCiB7CiAgICAgSW50UmVjdCBkcmFnZ2luZ1Jl
Y3QgPSBlbmNsb3NpbmdJbnRSZWN0KHNyYy0+c2VsZWN0aW9uKCktPmJvdW5kcygpKTsKLSAgICBp
bnQgeHBvcyA9IGRyYWdnaW5nUmVjdC5yaWdodCgpOworICAgIGludCB4cG9zID0gZHJhZ2dpbmdS
ZWN0Lm1heFgoKTsKICAgICB4cG9zID0gZHJhZ2dpbmdSZWN0LngoKSA8IHhwb3MgPyBkcmFnZ2lu
Z1JlY3QueCgpIDogeHBvczsKLSAgICBpbnQgeXBvcyA9IGRyYWdnaW5nUmVjdC5ib3R0b20oKTsK
KyAgICBpbnQgeXBvcyA9IGRyYWdnaW5nUmVjdC5tYXhZKCk7CiAjaWYgUExBVEZPUk0oTUFDKQog
ICAgIC8vIERlYWwgd2l0aCBmbGlwcGVkIGNvb3JkaW5hdGVzIG9uIE1hYwogICAgIHlwb3MgPSBk
cmFnZ2luZ1JlY3QueSgpID4geXBvcyA/IGRyYWdnaW5nUmVjdC55KCkgOiB5cG9zOwpJbmRleDog
U291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAkocmV2aXNpb24gNzcyNjApCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxMTEs
MTIgKzIxMTEsMTIgQEAgYm9vbCBFdmVudEhhbmRsZXI6OnNlbmRDb250ZXh0TWVudUV2ZW50Rgog
ICAgICAgICBSZWZQdHI8UmFuZ2U+IHNlbGVjdGlvbiA9IHNlbGVjdGlvbkNvbnRyb2xsZXItPnRv
Tm9ybWFsaXplZFJhbmdlKCk7CiAgICAgICAgIEludFJlY3QgZmlyc3RSZWN0ID0gbV9mcmFtZS0+
ZWRpdG9yKCktPmZpcnN0UmVjdEZvclJhbmdlKHNlbGVjdGlvbi5nZXQoKSk7CiAKLSAgICAgICAg
aW50IHggPSByaWdodEFsaWduZWQgPyBmaXJzdFJlY3QucmlnaHQoKSA6IGZpcnN0UmVjdC54KCk7
Ci0gICAgICAgIGxvY2F0aW9uID0gSW50UG9pbnQoeCwgZmlyc3RSZWN0LmJvdHRvbSgpKTsKKyAg
ICAgICAgaW50IHggPSByaWdodEFsaWduZWQgPyBmaXJzdFJlY3QubWF4WCgpIDogZmlyc3RSZWN0
LngoKTsKKyAgICAgICAgbG9jYXRpb24gPSBJbnRQb2ludCh4LCBmaXJzdFJlY3QubWF4WSgpKTsK
ICAgICB9IGVsc2UgaWYgKGZvY3VzZWROb2RlKSB7CiAgICAgICAgIFJlbmRlckJveE1vZGVsT2Jq
ZWN0KiBib3ggPSBmb2N1c2VkTm9kZS0+cmVuZGVyQm94TW9kZWxPYmplY3QoKTsKICAgICAgICAg
SW50UmVjdCBjbGlwcGVkUmVjdCA9IGJveC0+YWJzb2x1dGVDbGlwcGVkT3ZlcmZsb3dSZWN0KCk7
Ci0gICAgICAgIGxvY2F0aW9uID0gY2xpcHBlZFJlY3QuYm90dG9tTGVmdCgpOworICAgICAgICBs
b2NhdGlvbiA9IEludFBvaW50KGNsaXBwZWRSZWN0LngoKSwgY2xpcHBlZFJlY3QubWF4WSgpIC0g
MSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgbG9jYXRpb24gPSBJbnRQb2ludCgKICAgICAgICAg
ICAgIHJpZ2h0QWxpZ25lZCA/IHZpZXctPmNvbnRlbnRzV2lkdGgoKSAtIGtDb250ZXh0TWVudU1h
cmdpbiA6IGtDb250ZXh0TWVudU1hcmdpbiwKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvUHJp
bnRDb250ZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL1ByaW50Q29u
dGV4dC5jcHAJKHJldmlzaW9uIDc3MjYwKQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9QcmludENv
bnRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzUsMjQgKzEzNSwyNCBAQCB2b2lkIFByaW50
Q29udGV4dDo6Y29tcHV0ZVBhZ2VSZWN0c1dpdGhQCiAgICAgaW50IGJsb2NrRGlyZWN0aW9uRW5k
OwogICAgIGlmIChpc0hvcml6b250YWwpIHsKICAgICAgICAgaWYgKHZpZXctPnN0eWxlKCktPmlz
RmxpcHBlZEJsb2Nrc1dyaXRpbmdNb2RlKCkpIHsKLSAgICAgICAgICAgIGJsb2NrRGlyZWN0aW9u
U3RhcnQgPSBkb2NSZWN0LmJvdHRvbSgpOworICAgICAgICAgICAgYmxvY2tEaXJlY3Rpb25TdGFy
dCA9IGRvY1JlY3QubWF4WSgpOwogICAgICAgICAgICAgYmxvY2tEaXJlY3Rpb25FbmQgPSBkb2NS
ZWN0LnkoKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGJsb2NrRGlyZWN0aW9uU3Rh
cnQgPSBkb2NSZWN0LnkoKTsKLSAgICAgICAgICAgIGJsb2NrRGlyZWN0aW9uRW5kID0gZG9jUmVj
dC5ib3R0b20oKTsKKyAgICAgICAgICAgIGJsb2NrRGlyZWN0aW9uRW5kID0gZG9jUmVjdC5tYXhZ
KCk7CiAgICAgICAgIH0KLSAgICAgICAgaW5saW5lRGlyZWN0aW9uU3RhcnQgPSB2aWV3LT5zdHls
ZSgpLT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyBkb2NSZWN0LngoKSA6IGRvY1JlY3Qucmln
aHQoKTsKLSAgICAgICAgaW5saW5lRGlyZWN0aW9uRW5kID0gdmlldy0+c3R5bGUoKS0+aXNMZWZ0
VG9SaWdodERpcmVjdGlvbigpID8gZG9jUmVjdC5yaWdodCgpIDogZG9jUmVjdC54KCk7CisgICAg
ICAgIGlubGluZURpcmVjdGlvblN0YXJ0ID0gdmlldy0+c3R5bGUoKS0+aXNMZWZ0VG9SaWdodERp
cmVjdGlvbigpID8gZG9jUmVjdC54KCkgOiBkb2NSZWN0Lm1heFgoKTsKKyAgICAgICAgaW5saW5l
RGlyZWN0aW9uRW5kID0gdmlldy0+c3R5bGUoKS0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpID8g
ZG9jUmVjdC5tYXhYKCkgOiBkb2NSZWN0LngoKTsKICAgICB9IGVsc2UgewogICAgICAgICBpZiAo
dmlldy0+c3R5bGUoKS0+aXNGbGlwcGVkQmxvY2tzV3JpdGluZ01vZGUoKSkgewotICAgICAgICAg
ICAgYmxvY2tEaXJlY3Rpb25TdGFydCA9IGRvY1JlY3QucmlnaHQoKTsKKyAgICAgICAgICAgIGJs
b2NrRGlyZWN0aW9uU3RhcnQgPSBkb2NSZWN0Lm1heFgoKTsKICAgICAgICAgICAgIGJsb2NrRGly
ZWN0aW9uRW5kID0gZG9jUmVjdC54KCk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBi
bG9ja0RpcmVjdGlvblN0YXJ0ID0gZG9jUmVjdC54KCk7Ci0gICAgICAgICAgICBibG9ja0RpcmVj
dGlvbkVuZCA9IGRvY1JlY3QucmlnaHQoKTsKKyAgICAgICAgICAgIGJsb2NrRGlyZWN0aW9uRW5k
ID0gZG9jUmVjdC5tYXhYKCk7CiAgICAgICAgIH0KLSAgICAgICAgaW5saW5lRGlyZWN0aW9uU3Rh
cnQgPSB2aWV3LT5zdHlsZSgpLT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyBkb2NSZWN0Lnko
KSA6IGRvY1JlY3QuYm90dG9tKCk7Ci0gICAgICAgIGlubGluZURpcmVjdGlvbkVuZCA9IHZpZXct
PnN0eWxlKCktPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/IGRvY1JlY3QuYm90dG9tKCkgOiBk
b2NSZWN0LnkoKTsKKyAgICAgICAgaW5saW5lRGlyZWN0aW9uU3RhcnQgPSB2aWV3LT5zdHlsZSgp
LT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyBkb2NSZWN0LnkoKSA6IGRvY1JlY3QubWF4WSgp
OworICAgICAgICBpbmxpbmVEaXJlY3Rpb25FbmQgPSB2aWV3LT5zdHlsZSgpLT5pc0xlZnRUb1Jp
Z2h0RGlyZWN0aW9uKCkgPyBkb2NSZWN0Lm1heFkoKSA6IGRvY1JlY3QueSgpOwogICAgIH0KIAog
ICAgIHVuc2lnbmVkIHBhZ2VDb3VudCA9IGNlaWxmKChmbG9hdClkb2NMb2dpY2FsSGVpZ2h0IC8g
cGFnZUxvZ2ljYWxIZWlnaHQpOwpAQCAtMjc0LDcgKzI3NCw3IEBAIGludCBQcmludENvbnRleHQ6
OnBhZ2VOdW1iZXJGb3JFbGVtZW50KEUKICAgICBzaXplX3QgcGFnZU51bWJlciA9IDA7CiAgICAg
Zm9yICg7IHBhZ2VOdW1iZXIgPCBwcmludENvbnRleHQucGFnZUNvdW50KCk7IHBhZ2VOdW1iZXIr
KykgewogICAgICAgICBjb25zdCBJbnRSZWN0JiBwYWdlID0gcHJpbnRDb250ZXh0LnBhZ2VSZWN0
KHBhZ2VOdW1iZXIpOwotICAgICAgICBpZiAocGFnZS54KCkgPD0gbGVmdCAmJiBsZWZ0IDwgcGFn
ZS5yaWdodCgpICYmIHBhZ2UueSgpIDw9IHRvcCAmJiB0b3AgPCBwYWdlLmJvdHRvbSgpKQorICAg
ICAgICBpZiAocGFnZS54KCkgPD0gbGVmdCAmJiBsZWZ0IDwgcGFnZS5tYXhYKCkgJiYgcGFnZS55
KCkgPD0gdG9wICYmIHRvcCA8IHBhZ2UubWF4WSgpKQogICAgICAgICAgICAgcmV0dXJuIHBhZ2VO
dW1iZXI7CiAgICAgfQogICAgIHJldHVybiAtMTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2Uv
U3BhdGlhbE5hdmlnYXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2Uv
U3BhdGlhbE5hdmlnYXRpb24uY3BwCShyZXZpc2lvbiA3NzI2MCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BhZ2UvU3BhdGlhbE5hdmlnYXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjcsNyArMTI3
LDcgQEAgc3RhdGljIGlubGluZSBpbnQgbWlkZGxlKEZvY3VzRGlyZWN0aW9uIAogCiBzdGF0aWMg
aW5saW5lIGludCBlbmQoRm9jdXNEaXJlY3Rpb24gZGlyZWN0aW9uLCBjb25zdCBJbnRSZWN0JiBy
ZWN0KQogewotICAgIHJldHVybiBpc0hvcml6b250YWxNb3ZlKGRpcmVjdGlvbikgPyByZWN0LmJv
dHRvbSgpIDogcmVjdC5yaWdodCgpOworICAgIHJldHVybiBpc0hvcml6b250YWxNb3ZlKGRpcmVj
dGlvbikgPyByZWN0Lm1heFkoKSA6IHJlY3QubWF4WCgpOwogfQogCiAvLyBUaGlzIG1ldGhvZCBj
aGVja3MgaWYgcmVjdHMgfGF8IGFuZCB8YnwgYXJlIGZ1bGx5IGFsaWduZWQgZWl0aGVyIHZlcnRp
Y2FsbHkgb3IKQEAgLTE0NCwxMSArMTQ0LDExIEBAIHN0YXRpYyBib29sIGFyZVJlY3RzRnVsbHlB
bGlnbmVkKEZvY3VzRGkKICAgICBzd2l0Y2ggKGRpcmVjdGlvbikgewogICAgIGNhc2UgRm9jdXNE
aXJlY3Rpb25MZWZ0OgogICAgICAgICBhU3RhcnQgPSBhLngoKTsKLSAgICAgICAgYkVuZCA9IGIu
cmlnaHQoKTsKKyAgICAgICAgYkVuZCA9IGIubWF4WCgpOwogICAgICAgICBicmVhazsKICAgICBj
YXNlIEZvY3VzRGlyZWN0aW9uUmlnaHQ6CiAgICAgICAgIGFTdGFydCA9IGIueCgpOwotICAgICAg
ICBiRW5kID0gYS5yaWdodCgpOworICAgICAgICBiRW5kID0gYS5tYXhYKCk7CiAgICAgICAgIGJy
ZWFrOwogICAgIGNhc2UgRm9jdXNEaXJlY3Rpb25VcDoKICAgICAgICAgYVN0YXJ0ID0gYS55KCk7
CkBAIC0yNDUsMTMgKzI0NSwxMyBAQCBzdGF0aWMgYm9vbCBhcmVSZWN0c01vcmVUaGFuRnVsbFNj
cmVlbkFwCiAKICAgICBzd2l0Y2ggKGRpcmVjdGlvbikgewogICAgIGNhc2UgRm9jdXNEaXJlY3Rp
b25MZWZ0OgotICAgICAgICByZXR1cm4gY3VyUmVjdC54KCkgLSB0YXJnZXRSZWN0LnJpZ2h0KCkg
PiB2aWV3U2l6ZS53aWR0aCgpOworICAgICAgICByZXR1cm4gY3VyUmVjdC54KCkgLSB0YXJnZXRS
ZWN0Lm1heFgoKSA+IHZpZXdTaXplLndpZHRoKCk7CiAgICAgY2FzZSBGb2N1c0RpcmVjdGlvblJp
Z2h0OgotICAgICAgICByZXR1cm4gdGFyZ2V0UmVjdC54KCkgLSBjdXJSZWN0LnJpZ2h0KCkgPiB2
aWV3U2l6ZS53aWR0aCgpOworICAgICAgICByZXR1cm4gdGFyZ2V0UmVjdC54KCkgLSBjdXJSZWN0
Lm1heFgoKSA+IHZpZXdTaXplLndpZHRoKCk7CiAgICAgY2FzZSBGb2N1c0RpcmVjdGlvblVwOgot
ICAgICAgICByZXR1cm4gY3VyUmVjdC55KCkgLSB0YXJnZXRSZWN0LmJvdHRvbSgpID4gdmlld1Np
emUuaGVpZ2h0KCk7CisgICAgICAgIHJldHVybiBjdXJSZWN0LnkoKSAtIHRhcmdldFJlY3QubWF4
WSgpID4gdmlld1NpemUuaGVpZ2h0KCk7CiAgICAgY2FzZSBGb2N1c0RpcmVjdGlvbkRvd246Ci0g
ICAgICAgIHJldHVybiB0YXJnZXRSZWN0LnkoKSAtIGN1clJlY3QuYm90dG9tKCkgPiB2aWV3U2l6
ZS5oZWlnaHQoKTsKKyAgICAgICAgcmV0dXJuIHRhcmdldFJlY3QueSgpIC0gY3VyUmVjdC5tYXhZ
KCkgPiB2aWV3U2l6ZS5oZWlnaHQoKTsKICAgICBkZWZhdWx0OgogICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0yNjEsMjYgKzI2MSwyNiBAQCBz
dGF0aWMgYm9vbCBhcmVSZWN0c01vcmVUaGFuRnVsbFNjcmVlbkFwCiAvLyBSZXR1cm4gdHJ1ZSBp
ZiByZWN0IHxhfCBpcyBiZWxvdyB8YnwuIEZhbHNlIG90aGVyd2lzZS4KIHN0YXRpYyBpbmxpbmUg
Ym9vbCBiZWxvdyhjb25zdCBJbnRSZWN0JiBhLCBjb25zdCBJbnRSZWN0JiBiKQogewotICAgIHJl
dHVybiBhLnkoKSA+IGIuYm90dG9tKCk7CisgICAgcmV0dXJuIGEueSgpID4gYi5tYXhZKCk7CiB9
CiAKIC8vIFJldHVybiB0cnVlIGlmIHJlY3QgfGF8IGlzIG9uIHRoZSByaWdodCBvZiB8YnwuIEZh
bHNlIG90aGVyd2lzZS4KIHN0YXRpYyBpbmxpbmUgYm9vbCByaWdodE9mKGNvbnN0IEludFJlY3Qm
IGEsIGNvbnN0IEludFJlY3QmIGIpCiB7Ci0gICAgcmV0dXJuIGEueCgpID4gYi5yaWdodCgpOwor
ICAgIHJldHVybiBhLngoKSA+IGIubWF4WCgpOwogfQogCiBzdGF0aWMgYm9vbCBpc1JlY3RJbkRp
cmVjdGlvbihGb2N1c0RpcmVjdGlvbiBkaXJlY3Rpb24sIGNvbnN0IEludFJlY3QmIGN1clJlY3Qs
IGNvbnN0IEludFJlY3QmIHRhcmdldFJlY3QpCiB7CiAgICAgc3dpdGNoIChkaXJlY3Rpb24pIHsK
ICAgICBjYXNlIEZvY3VzRGlyZWN0aW9uTGVmdDoKLSAgICAgICAgcmV0dXJuIHRhcmdldFJlY3Qu
cmlnaHQoKSA8PSBjdXJSZWN0LngoKTsKKyAgICAgICAgcmV0dXJuIHRhcmdldFJlY3QubWF4WCgp
IDw9IGN1clJlY3QueCgpOwogICAgIGNhc2UgRm9jdXNEaXJlY3Rpb25SaWdodDoKLSAgICAgICAg
cmV0dXJuIHRhcmdldFJlY3QueCgpID49IGN1clJlY3QucmlnaHQoKTsKKyAgICAgICAgcmV0dXJu
IHRhcmdldFJlY3QueCgpID49IGN1clJlY3QubWF4WCgpOwogICAgIGNhc2UgRm9jdXNEaXJlY3Rp
b25VcDoKLSAgICAgICAgcmV0dXJuIHRhcmdldFJlY3QuYm90dG9tKCkgPD0gY3VyUmVjdC55KCk7
CisgICAgICAgIHJldHVybiB0YXJnZXRSZWN0Lm1heFkoKSA8PSBjdXJSZWN0LnkoKTsKICAgICBj
YXNlIEZvY3VzRGlyZWN0aW9uRG93bjoKLSAgICAgICAgcmV0dXJuIHRhcmdldFJlY3QueSgpID49
IGN1clJlY3QuYm90dG9tKCk7CisgICAgICAgIHJldHVybiB0YXJnZXRSZWN0LnkoKSA+PSBjdXJS
ZWN0Lm1heFkoKTsKICAgICBkZWZhdWx0OgogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNTQ0LDE4ICs1NDQsMTggQEAgdm9pZCBlbnRyeUFu
ZEV4aXRQb2ludHNGb3JEaXJlY3Rpb24oRm9jdQogICAgIHN3aXRjaCAoZGlyZWN0aW9uKSB7CiAg
ICAgY2FzZSBGb2N1c0RpcmVjdGlvbkxlZnQ6CiAgICAgICAgIGV4aXRQb2ludC5zZXRYKHN0YXJ0
aW5nUmVjdC54KCkpOwotICAgICAgICBlbnRyeVBvaW50LnNldFgocG90ZW50aWFsUmVjdC5yaWdo
dCgpKTsKKyAgICAgICAgZW50cnlQb2ludC5zZXRYKHBvdGVudGlhbFJlY3QubWF4WCgpKTsKICAg
ICAgICAgYnJlYWs7CiAgICAgY2FzZSBGb2N1c0RpcmVjdGlvblVwOgogICAgICAgICBleGl0UG9p
bnQuc2V0WShzdGFydGluZ1JlY3QueSgpKTsKLSAgICAgICAgZW50cnlQb2ludC5zZXRZKHBvdGVu
dGlhbFJlY3QuYm90dG9tKCkpOworICAgICAgICBlbnRyeVBvaW50LnNldFkocG90ZW50aWFsUmVj
dC5tYXhZKCkpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEZvY3VzRGlyZWN0aW9uUmlnaHQ6
Ci0gICAgICAgIGV4aXRQb2ludC5zZXRYKHN0YXJ0aW5nUmVjdC5yaWdodCgpKTsKKyAgICAgICAg
ZXhpdFBvaW50LnNldFgoc3RhcnRpbmdSZWN0Lm1heFgoKSk7CiAgICAgICAgIGVudHJ5UG9pbnQu
c2V0WChwb3RlbnRpYWxSZWN0LngoKSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgRm9jdXNE
aXJlY3Rpb25Eb3duOgotICAgICAgICBleGl0UG9pbnQuc2V0WShzdGFydGluZ1JlY3QuYm90dG9t
KCkpOworICAgICAgICBleGl0UG9pbnQuc2V0WShzdGFydGluZ1JlY3QubWF4WSgpKTsKICAgICAg
ICAgZW50cnlQb2ludC5zZXRZKHBvdGVudGlhbFJlY3QueSgpKTsKICAgICAgICAgYnJlYWs7CiAg
ICAgZGVmYXVsdDoKQEAgLTU2Nyw5ICs1NjcsOSBAQCB2b2lkIGVudHJ5QW5kRXhpdFBvaW50c0Zv
ckRpcmVjdGlvbihGb2N1CiAgICAgY2FzZSBGb2N1c0RpcmVjdGlvblJpZ2h0OgogICAgICAgICBp
ZiAoYmVsb3coc3RhcnRpbmdSZWN0LCBwb3RlbnRpYWxSZWN0KSkgewogICAgICAgICAgICAgZXhp
dFBvaW50LnNldFkoc3RhcnRpbmdSZWN0LnkoKSk7Ci0gICAgICAgICAgICBlbnRyeVBvaW50LnNl
dFkocG90ZW50aWFsUmVjdC5ib3R0b20oKSk7CisgICAgICAgICAgICBlbnRyeVBvaW50LnNldFko
cG90ZW50aWFsUmVjdC5tYXhZKCkpOwogICAgICAgICB9IGVsc2UgaWYgKGJlbG93KHBvdGVudGlh
bFJlY3QsIHN0YXJ0aW5nUmVjdCkpIHsKLSAgICAgICAgICAgIGV4aXRQb2ludC5zZXRZKHN0YXJ0
aW5nUmVjdC5ib3R0b20oKSk7CisgICAgICAgICAgICBleGl0UG9pbnQuc2V0WShzdGFydGluZ1Jl
Y3QubWF4WSgpKTsKICAgICAgICAgICAgIGVudHJ5UG9pbnQuc2V0WShwb3RlbnRpYWxSZWN0Lnko
KSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBleGl0UG9pbnQuc2V0WShtYXgoc3Rh
cnRpbmdSZWN0LnkoKSwgcG90ZW50aWFsUmVjdC55KCkpKTsKQEAgLTU4MCw5ICs1ODAsOSBAQCB2
b2lkIGVudHJ5QW5kRXhpdFBvaW50c0ZvckRpcmVjdGlvbihGb2N1CiAgICAgY2FzZSBGb2N1c0Rp
cmVjdGlvbkRvd246CiAgICAgICAgIGlmIChyaWdodE9mKHN0YXJ0aW5nUmVjdCwgcG90ZW50aWFs
UmVjdCkpIHsKICAgICAgICAgICAgIGV4aXRQb2ludC5zZXRYKHN0YXJ0aW5nUmVjdC54KCkpOwot
ICAgICAgICAgICAgZW50cnlQb2ludC5zZXRYKHBvdGVudGlhbFJlY3QucmlnaHQoKSk7CisgICAg
ICAgICAgICBlbnRyeVBvaW50LnNldFgocG90ZW50aWFsUmVjdC5tYXhYKCkpOwogICAgICAgICB9
IGVsc2UgaWYgKHJpZ2h0T2YocG90ZW50aWFsUmVjdCwgc3RhcnRpbmdSZWN0KSkgewotICAgICAg
ICAgICAgZXhpdFBvaW50LnNldFgoc3RhcnRpbmdSZWN0LnJpZ2h0KCkpOworICAgICAgICAgICAg
ZXhpdFBvaW50LnNldFgoc3RhcnRpbmdSZWN0Lm1heFgoKSk7CiAgICAgICAgICAgICBlbnRyeVBv
aW50LnNldFgocG90ZW50aWFsUmVjdC54KCkpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAg
ICAgZXhpdFBvaW50LnNldFgobWF4KHN0YXJ0aW5nUmVjdC54KCksIHBvdGVudGlhbFJlY3QueCgp
KSk7CkBAIC02NzUsMTEgKzY3NSwxMSBAQCBJbnRSZWN0IHZpcnR1YWxSZWN0Rm9yRGlyZWN0aW9u
KEZvY3VzRGlyCiAgICAgSW50UmVjdCB2aXJ0dWFsU3RhcnRpbmdSZWN0ID0gc3RhcnRpbmdSZWN0
OwogICAgIHN3aXRjaCAoZGlyZWN0aW9uKSB7CiAgICAgY2FzZSBGb2N1c0RpcmVjdGlvbkxlZnQ6
Ci0gICAgICAgIHZpcnR1YWxTdGFydGluZ1JlY3Quc2V0WCh2aXJ0dWFsU3RhcnRpbmdSZWN0LnJp
Z2h0KCkgLSB3aWR0aCk7CisgICAgICAgIHZpcnR1YWxTdGFydGluZ1JlY3Quc2V0WCh2aXJ0dWFs
U3RhcnRpbmdSZWN0Lm1heFgoKSAtIHdpZHRoKTsKICAgICAgICAgdmlydHVhbFN0YXJ0aW5nUmVj
dC5zZXRXaWR0aCh3aWR0aCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgRm9jdXNEaXJlY3Rp
b25VcDoKLSAgICAgICAgdmlydHVhbFN0YXJ0aW5nUmVjdC5zZXRZKHZpcnR1YWxTdGFydGluZ1Jl
Y3QuYm90dG9tKCkgLSB3aWR0aCk7CisgICAgICAgIHZpcnR1YWxTdGFydGluZ1JlY3Quc2V0WSh2
aXJ0dWFsU3RhcnRpbmdSZWN0Lm1heFkoKSAtIHdpZHRoKTsKICAgICAgICAgdmlydHVhbFN0YXJ0
aW5nUmVjdC5zZXRIZWlnaHQod2lkdGgpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEZvY3Vz
RGlyZWN0aW9uUmlnaHQ6CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL1dpbmRvd0ZlYXR1cmVz
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL1dpbmRvd0ZlYXR1cmVzLmNw
cAkocmV2aXNpb24gNzcyNjApCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL1dpbmRvd0ZlYXR1cmVz
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTg2LDkgKzE4Niw5IEBAIFdpbmRvd0ZlYXR1cmVzOjpX
aW5kb3dGZWF0dXJlcyhjb25zdCBTdHIKICAgICB3aWR0aCA9IGZsb2F0RmVhdHVyZShmZWF0dXJl
cywgImRpYWxvZ3dpZHRoIiwgMTAwLCBzY3JlZW5BdmFpbGFibGVSZWN0LndpZHRoKCksIDYyMCk7
IC8vIGRlZmF1bHQgaGVyZSBjYW1lIGZyb20gZnJhbWUgc2l6ZSBvZiBkaWFsb2cgaW4gTWFjSUUK
ICAgICBoZWlnaHQgPSBmbG9hdEZlYXR1cmUoZmVhdHVyZXMsICJkaWFsb2doZWlnaHQiLCAxMDAs
IHNjcmVlbkF2YWlsYWJsZVJlY3QuaGVpZ2h0KCksIDQ1MCk7IC8vIGRlZmF1bHQgaGVyZSBjYW1l
IGZyb20gZnJhbWUgc2l6ZSBvZiBkaWFsb2cgaW4gTWFjSUUKIAotICAgIHggPSBmbG9hdEZlYXR1
cmUoZmVhdHVyZXMsICJkaWFsb2dsZWZ0Iiwgc2NyZWVuQXZhaWxhYmxlUmVjdC54KCksIHNjcmVl
bkF2YWlsYWJsZVJlY3QucmlnaHQoKSAtIHdpZHRoLCAtMSk7CisgICAgeCA9IGZsb2F0RmVhdHVy
ZShmZWF0dXJlcywgImRpYWxvZ2xlZnQiLCBzY3JlZW5BdmFpbGFibGVSZWN0LngoKSwgc2NyZWVu
QXZhaWxhYmxlUmVjdC5tYXhYKCkgLSB3aWR0aCwgLTEpOwogICAgIHhTZXQgPSB4ID4gMDsKLSAg
ICB5ID0gZmxvYXRGZWF0dXJlKGZlYXR1cmVzLCAiZGlhbG9ndG9wIiwgc2NyZWVuQXZhaWxhYmxl
UmVjdC55KCksIHNjcmVlbkF2YWlsYWJsZVJlY3QuYm90dG9tKCkgLSBoZWlnaHQsIC0xKTsKKyAg
ICB5ID0gZmxvYXRGZWF0dXJlKGZlYXR1cmVzLCAiZGlhbG9ndG9wIiwgc2NyZWVuQXZhaWxhYmxl
UmVjdC55KCksIHNjcmVlbkF2YWlsYWJsZVJlY3QubWF4WSgpIC0gaGVpZ2h0LCAtMSk7CiAgICAg
eVNldCA9IHkgPiAwOwogCiAgICAgaWYgKGJvb2xGZWF0dXJlKGZlYXR1cmVzLCAiY2VudGVyIiwg
dHJ1ZSkpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbFZpZXcuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbFZpZXcuY3BwCShyZXZp
c2lvbiA3NzI2MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbFZpZXcuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC05MjIsNyArOTIyLDcgQEAgdm9pZCBTY3JvbGxWaWV3OjpjYWxjdWxh
dGVPdmVyaGFuZ0FyZWFzRgogICAgIH0gZWxzZSBpZiAoc2Nyb2xsWSgpID4gY29udGVudHNIZWln
aHQoKSAtIHZpc2libGVDb250ZW50UmVjdCh0cnVlKS5oZWlnaHQoKSkgewogICAgICAgICBpbnQg
aGVpZ2h0ID0gc2Nyb2xsWSgpIC0gKGNvbnRlbnRzSGVpZ2h0KCkgLSB2aXNpYmxlQ29udGVudFJl
Y3QodHJ1ZSkuaGVpZ2h0KCkpOwogICAgICAgICBob3Jpem9udGFsT3ZlcmhhbmdSZWN0ID0gZnJh
bWVSZWN0KCk7Ci0gICAgICAgIGhvcml6b250YWxPdmVyaGFuZ1JlY3Quc2V0WShmcmFtZVJlY3Qo
KS5ib3R0b20oKSAtIGhlaWdodCk7CisgICAgICAgIGhvcml6b250YWxPdmVyaGFuZ1JlY3Quc2V0
WShmcmFtZVJlY3QoKS5tYXhZKCkgLSBoZWlnaHQpOwogICAgICAgICBob3Jpem9udGFsT3Zlcmhh
bmdSZWN0LnNldEhlaWdodChoZWlnaHQpOwogICAgIH0KIApAQCAtOTM4LDcgKzkzOCw3IEBAIHZv
aWQgU2Nyb2xsVmlldzo6Y2FsY3VsYXRlT3ZlcmhhbmdBcmVhc0YKICAgICAgICAgaW50IHdpZHRo
ID0gc2Nyb2xsWCgpIC0gKGNvbnRlbnRzV2lkdGgoKSAtIHZpc2libGVDb250ZW50UmVjdCh0cnVl
KS53aWR0aCgpKTsKICAgICAgICAgdmVydGljYWxPdmVyaGFuZ1JlY3Quc2V0V2lkdGgod2lkdGgp
OwogICAgICAgICB2ZXJ0aWNhbE92ZXJoYW5nUmVjdC5zZXRIZWlnaHQoZnJhbWVSZWN0KCkuaGVp
Z2h0KCkgLSBob3Jpem9udGFsT3ZlcmhhbmdSZWN0LmhlaWdodCgpKTsKLSAgICAgICAgdmVydGlj
YWxPdmVyaGFuZ1JlY3Quc2V0WChmcmFtZVJlY3QoKS5yaWdodCgpIC0gd2lkdGgpOworICAgICAg
ICB2ZXJ0aWNhbE92ZXJoYW5nUmVjdC5zZXRYKGZyYW1lUmVjdCgpLm1heFgoKSAtIHdpZHRoKTsK
ICAgICAgICAgaWYgKGhvcml6b250YWxPdmVyaGFuZ1JlY3QueSgpID09IGZyYW1lUmVjdCgpLnko
KSkKICAgICAgICAgICAgIHZlcnRpY2FsT3ZlcmhhbmdSZWN0LnNldFkoZnJhbWVSZWN0KCkueSgp
ICsgaG9yaXpvbnRhbE92ZXJoYW5nUmVjdC5oZWlnaHQoKSk7CiAgICAgICAgIGVsc2UKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGJhci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFyLmNwcAkocmV2aXNpb24gNzcyNjApCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
OTMsMTQgKzM5MywxNCBAQCB2b2lkIFNjcm9sbGJhcjo6c2V0RnJhbWVSZWN0KGNvbnN0IEludFJl
CiAgICAgICAgIEludFJlY3QgcmVzaXplclJlY3QgPSB2aWV3LT5jb252ZXJ0RnJvbUNvbnRhaW5p
bmdXaW5kb3codmlldy0+d2luZG93UmVzaXplclJlY3QoKSk7CiAgICAgICAgIGlmIChyZWN0Lmlu
dGVyc2VjdHMocmVzaXplclJlY3QpKSB7CiAgICAgICAgICAgICBpZiAob3JpZW50YXRpb24oKSA9
PSBIb3Jpem9udGFsU2Nyb2xsYmFyKSB7Ci0gICAgICAgICAgICAgICAgaW50IG92ZXJsYXAgPSBy
ZWN0LnJpZ2h0KCkgLSByZXNpemVyUmVjdC54KCk7Ci0gICAgICAgICAgICAgICAgaWYgKG92ZXJs
YXAgPiAwICYmIHJlc2l6ZXJSZWN0LnJpZ2h0KCkgPj0gcmVjdC5yaWdodCgpKSB7CisgICAgICAg
ICAgICAgICAgaW50IG92ZXJsYXAgPSByZWN0Lm1heFgoKSAtIHJlc2l6ZXJSZWN0LngoKTsKKyAg
ICAgICAgICAgICAgICBpZiAob3ZlcmxhcCA+IDAgJiYgcmVzaXplclJlY3QubWF4WCgpID49IHJl
Y3QubWF4WCgpKSB7CiAgICAgICAgICAgICAgICAgICAgIGFkanVzdGVkUmVjdC5zZXRXaWR0aChy
ZWN0LndpZHRoKCkgLSBvdmVybGFwKTsKICAgICAgICAgICAgICAgICAgICAgb3ZlcmxhcHNSZXNp
emVyID0gdHJ1ZTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgICAgIGludCBvdmVybGFwID0gcmVjdC5ib3R0b20oKSAtIHJlc2l6ZXJSZWN0Lnko
KTsKLSAgICAgICAgICAgICAgICBpZiAob3ZlcmxhcCA+IDAgJiYgcmVzaXplclJlY3QuYm90dG9t
KCkgPj0gcmVjdC5ib3R0b20oKSkgeworICAgICAgICAgICAgICAgIGludCBvdmVybGFwID0gcmVj
dC5tYXhZKCkgLSByZXNpemVyUmVjdC55KCk7CisgICAgICAgICAgICAgICAgaWYgKG92ZXJsYXAg
PiAwICYmIHJlc2l6ZXJSZWN0Lm1heFkoKSA+PSByZWN0Lm1heFkoKSkgewogICAgICAgICAgICAg
ICAgICAgICBhZGp1c3RlZFJlY3Quc2V0SGVpZ2h0KHJlY3QuaGVpZ2h0KCkgLSBvdmVybGFwKTsK
ICAgICAgICAgICAgICAgICAgICAgb3ZlcmxhcHNSZXNpemVyID0gdHJ1ZTsKICAgICAgICAgICAg
ICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXJUaGVtZUNvbXBv
c2l0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFy
VGhlbWVDb21wb3NpdGUuY3BwCShyZXZpc2lvbiA3NzI2MCkKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL1Njcm9sbGJhclRoZW1lQ29tcG9zaXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQ4
LDExICsyNDgsMTEgQEAgdm9pZCBTY3JvbGxiYXJUaGVtZUNvbXBvc2l0ZTo6c3BsaXRUcmFjawog
ICAgIGlmIChzY3JvbGxiYXItPm9yaWVudGF0aW9uKCkgPT0gSG9yaXpvbnRhbFNjcm9sbGJhcikg
ewogICAgICAgICB0aHVtYlJlY3QgPSBJbnRSZWN0KHRyYWNrUmVjdC54KCkgKyB0aHVtYlBvcywg
dHJhY2tSZWN0LnkoKSArICh0cmFja1JlY3QuaGVpZ2h0KCkgLSB0aGlja25lc3MpIC8gMiwgdGh1
bWJMZW5ndGgoc2Nyb2xsYmFyKSwgdGhpY2tuZXNzKTsgCiAgICAgICAgIGJlZm9yZVRodW1iUmVj
dCA9IEludFJlY3QodHJhY2tSZWN0LngoKSwgdHJhY2tSZWN0LnkoKSwgdGh1bWJQb3MgKyB0aHVt
YlJlY3Qud2lkdGgoKSAvIDIsIHRyYWNrUmVjdC5oZWlnaHQoKSk7IAotICAgICAgICBhZnRlclRo
dW1iUmVjdCA9IEludFJlY3QodHJhY2tSZWN0LngoKSArIGJlZm9yZVRodW1iUmVjdC53aWR0aCgp
LCB0cmFja1JlY3QueSgpLCB0cmFja1JlY3QucmlnaHQoKSAtIGJlZm9yZVRodW1iUmVjdC5yaWdo
dCgpLCB0cmFja1JlY3QuaGVpZ2h0KCkpOworICAgICAgICBhZnRlclRodW1iUmVjdCA9IEludFJl
Y3QodHJhY2tSZWN0LngoKSArIGJlZm9yZVRodW1iUmVjdC53aWR0aCgpLCB0cmFja1JlY3QueSgp
LCB0cmFja1JlY3QubWF4WCgpIC0gYmVmb3JlVGh1bWJSZWN0Lm1heFgoKSwgdHJhY2tSZWN0Lmhl
aWdodCgpKTsKICAgICB9IGVsc2UgewogICAgICAgICB0aHVtYlJlY3QgPSBJbnRSZWN0KHRyYWNr
UmVjdC54KCkgKyAodHJhY2tSZWN0LndpZHRoKCkgLSB0aGlja25lc3MpIC8gMiwgdHJhY2tSZWN0
LnkoKSArIHRodW1iUG9zLCB0aGlja25lc3MsIHRodW1iTGVuZ3RoKHNjcm9sbGJhcikpOwogICAg
ICAgICBiZWZvcmVUaHVtYlJlY3QgPSBJbnRSZWN0KHRyYWNrUmVjdC54KCksIHRyYWNrUmVjdC55
KCksIHRyYWNrUmVjdC53aWR0aCgpLCB0aHVtYlBvcyArIHRodW1iUmVjdC5oZWlnaHQoKSAvIDIp
OyAKLSAgICAgICAgYWZ0ZXJUaHVtYlJlY3QgPSBJbnRSZWN0KHRyYWNrUmVjdC54KCksIHRyYWNr
UmVjdC55KCkgKyBiZWZvcmVUaHVtYlJlY3QuaGVpZ2h0KCksIHRyYWNrUmVjdC53aWR0aCgpLCB0
cmFja1JlY3QuYm90dG9tKCkgLSBiZWZvcmVUaHVtYlJlY3QuYm90dG9tKCkpOworICAgICAgICBh
ZnRlclRodW1iUmVjdCA9IEludFJlY3QodHJhY2tSZWN0LngoKSwgdHJhY2tSZWN0LnkoKSArIGJl
Zm9yZVRodW1iUmVjdC5oZWlnaHQoKSwgdHJhY2tSZWN0LndpZHRoKCksIHRyYWNrUmVjdC5tYXhZ
KCkgLSBiZWZvcmVUaHVtYlJlY3QubWF4WSgpKTsKICAgICB9CiB9CiAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UXVhZC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UXVhZC5oCShyZXZpc2lvbiA3NzI2MCkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UXVhZC5oCSh3b3JraW5n
IGNvcHkpCkBAIC01NCw5ICs1NCw5IEBAIHB1YmxpYzoKIAogICAgIEZsb2F0UXVhZChjb25zdCBG
bG9hdFJlY3QmIGluUmVjdCkKICAgICAgICAgOiBtX3AxKGluUmVjdC5sb2NhdGlvbigpKQotICAg
ICAgICAsIG1fcDIoaW5SZWN0LnJpZ2h0KCksIGluUmVjdC55KCkpCi0gICAgICAgICwgbV9wMyhp
blJlY3QucmlnaHQoKSwgaW5SZWN0LmJvdHRvbSgpKQotICAgICAgICAsIG1fcDQoaW5SZWN0Lngo
KSwgaW5SZWN0LmJvdHRvbSgpKQorICAgICAgICAsIG1fcDIoaW5SZWN0Lm1heFgoKSwgaW5SZWN0
LnkoKSkKKyAgICAgICAgLCBtX3AzKGluUmVjdC5tYXhYKCksIGluUmVjdC5tYXhZKCkpCisgICAg
ICAgICwgbV9wNChpblJlY3QueCgpLCBpblJlY3QubWF4WSgpKQogICAgIHsKICAgICB9CiAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UmVjdC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRSZWN0LmNwcAko
cmV2aXNpb24gNzcyNjApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9h
dFJlY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MSwyMiArNTEsMjIgQEAgYm9vbCBGbG9hdFJl
Y3Q6OmludGVyc2VjdHMoY29uc3QgRmxvYXRSZQogewogICAgIC8vIENoZWNraW5nIGVtcHRpbmVz
cyBoYW5kbGVzIG5lZ2F0aXZlIHdpZHRocyBhcyB3ZWxsIGFzIHplcm8uCiAgICAgcmV0dXJuICFp
c0VtcHR5KCkgJiYgIW90aGVyLmlzRW1wdHkoKQotICAgICAgICAmJiB4KCkgPCBvdGhlci5yaWdo
dCgpICYmIG90aGVyLngoKSA8IHJpZ2h0KCkKLSAgICAgICAgJiYgeSgpIDwgb3RoZXIuYm90dG9t
KCkgJiYgb3RoZXIueSgpIDwgYm90dG9tKCk7CisgICAgICAgICYmIHgoKSA8IG90aGVyLm1heFgo
KSAmJiBvdGhlci54KCkgPCBtYXhYKCkKKyAgICAgICAgJiYgeSgpIDwgb3RoZXIubWF4WSgpICYm
IG90aGVyLnkoKSA8IG1heFkoKTsKIH0KIAogYm9vbCBGbG9hdFJlY3Q6OmNvbnRhaW5zKGNvbnN0
IEZsb2F0UmVjdCYgb3RoZXIpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIHgoKSA8PSBvdGhlci54KCkg
JiYgcmlnaHQoKSA+PSBvdGhlci5yaWdodCgpCi0gICAgICAgICYmIHkoKSA8PSBvdGhlci55KCkg
JiYgYm90dG9tKCkgPj0gb3RoZXIuYm90dG9tKCk7CisgICAgcmV0dXJuIHgoKSA8PSBvdGhlci54
KCkgJiYgbWF4WCgpID49IG90aGVyLm1heFgoKQorICAgICAgICAmJiB5KCkgPD0gb3RoZXIueSgp
ICYmIG1heFkoKSA+PSBvdGhlci5tYXhZKCk7CiB9CiAKIHZvaWQgRmxvYXRSZWN0OjppbnRlcnNl
Y3QoY29uc3QgRmxvYXRSZWN0JiBvdGhlcikKIHsKICAgICBmbG9hdCBsID0gbWF4KHgoKSwgb3Ro
ZXIueCgpKTsKICAgICBmbG9hdCB0ID0gbWF4KHkoKSwgb3RoZXIueSgpKTsKLSAgICBmbG9hdCBy
ID0gbWluKHJpZ2h0KCksIG90aGVyLnJpZ2h0KCkpOwotICAgIGZsb2F0IGIgPSBtaW4oYm90dG9t
KCksIG90aGVyLmJvdHRvbSgpKTsKKyAgICBmbG9hdCByID0gbWluKG1heFgoKSwgb3RoZXIubWF4
WCgpKTsKKyAgICBmbG9hdCBiID0gbWluKG1heFkoKSwgb3RoZXIubWF4WSgpKTsKIAogICAgIC8v
IFJldHVybiBhIGNsZWFuIGVtcHR5IHJlY3RhbmdsZSBmb3Igbm9uLWludGVyc2VjdGluZyBjYXNl
cy4KICAgICBpZiAobCA+PSByIHx8IHQgPj0gYikgewpAQCAtOTEsOCArOTEsOCBAQCB2b2lkIEZs
b2F0UmVjdDo6dW5pdGUoY29uc3QgRmxvYXRSZWN0JiBvCiAKICAgICBmbG9hdCBsID0gbWluKHgo
KSwgb3RoZXIueCgpKTsKICAgICBmbG9hdCB0ID0gbWluKHkoKSwgb3RoZXIueSgpKTsKLSAgICBm
bG9hdCByID0gbWF4KHJpZ2h0KCksIG90aGVyLnJpZ2h0KCkpOwotICAgIGZsb2F0IGIgPSBtYXgo
Ym90dG9tKCksIG90aGVyLmJvdHRvbSgpKTsKKyAgICBmbG9hdCByID0gbWF4KG1heFgoKSwgb3Ro
ZXIubWF4WCgpKTsKKyAgICBmbG9hdCBiID0gbWF4KG1heFkoKSwgb3RoZXIubWF4WSgpKTsKIAog
ICAgIHNldExvY2F0aW9uQW5kU2l6ZUZyb21FZGdlcyhsLCB0LCByLCBiKTsKIH0KQEAgLTE4MCw4
ICsxODAsOCBAQCBJbnRSZWN0IGVuY2xvc2luZ0ludFJlY3QoY29uc3QgRmxvYXRSZWN0CiB7CiAg
ICAgZmxvYXQgbGVmdCA9IGZsb29yZihyZWN0LngoKSk7CiAgICAgZmxvYXQgdG9wID0gZmxvb3Jm
KHJlY3QueSgpKTsKLSAgICBmbG9hdCB3aWR0aCA9IGNlaWxmKHJlY3QucmlnaHQoKSkgLSBsZWZ0
OwotICAgIGZsb2F0IGhlaWdodCA9IGNlaWxmKHJlY3QuYm90dG9tKCkpIC0gdG9wOworICAgIGZs
b2F0IHdpZHRoID0gY2VpbGYocmVjdC5tYXhYKCkpIC0gbGVmdDsKKyAgICBmbG9hdCBoZWlnaHQg
PSBjZWlsZihyZWN0Lm1heFkoKSkgLSB0b3A7CiAgICAgcmV0dXJuIEludFJlY3Qoc2FmZUZsb2F0
VG9JbnQobGVmdCksIHNhZmVGbG9hdFRvSW50KHRvcCksIAogICAgICAgICAgICAgICAgICAgIHNh
ZmVGbG9hdFRvSW50KHdpZHRoKSwgc2FmZUZsb2F0VG9JbnQoaGVpZ2h0KSk7CiB9CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3QuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3QuaAkocmV2aXNpb24g
NzcyNjApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3QuaAko
d29ya2luZyBjb3B5KQpAQCAtOTAsNiArOTAsOCBAQCBwdWJsaWM6CiAKICAgICBmbG9hdCB4KCkg
Y29uc3QgeyByZXR1cm4gbV9sb2NhdGlvbi54KCk7IH0KICAgICBmbG9hdCB5KCkgY29uc3QgeyBy
ZXR1cm4gbV9sb2NhdGlvbi55KCk7IH0KKyAgICBmbG9hdCBtYXhYKCkgY29uc3QgeyByZXR1cm4g
eCgpICsgd2lkdGgoKTsgfQorICAgIGZsb2F0IG1heFkoKSBjb25zdCB7IHJldHVybiB5KCkgKyBo
ZWlnaHQoKTsgfQogICAgIGZsb2F0IHdpZHRoKCkgY29uc3QgeyByZXR1cm4gbV9zaXplLndpZHRo
KCk7IH0KICAgICBmbG9hdCBoZWlnaHQoKSBjb25zdCB7IHJldHVybiBtX3NpemUuaGVpZ2h0KCk7
IH0KIApAQCAtMTE5LDcgKzEyMSw3IEBAIHB1YmxpYzoKICAgICAvLyBOb3RlLCB0aGlzIGRvZXNu
J3QgbWF0Y2ggd2hhdCBJbnRSZWN0Ojpjb250YWlucyhJbnRQb2ludCYpIGRvZXM7IHRoZSBpbnQg
dmVyc2lvbgogICAgIC8vIGlzIHJlYWxseSBjaGVja2luZyBmb3IgY29udGFpbm1lbnQgb2YgMXgx
IHJlY3QsIGJ1dCB0aGF0IGRvZXNuJ3QgbWFrZSBzZW5zZSB3aXRoIGZsb2F0cy4KICAgICBib29s
IGNvbnRhaW5zKGZsb2F0IHB4LCBmbG9hdCBweSkgY29uc3QKLSAgICAgICAgeyByZXR1cm4gcHgg
Pj0geCgpICYmIHB4IDw9IHJpZ2h0KCkgJiYgcHkgPj0geSgpICYmIHB5IDw9IGJvdHRvbSgpOyB9
CisgICAgICAgIHsgcmV0dXJuIHB4ID49IHgoKSAmJiBweCA8PSBtYXhYKCkgJiYgcHkgPj0geSgp
ICYmIHB5IDw9IG1heFkoKTsgfQogICAgIGJvb2wgY29udGFpbnMoY29uc3QgRmxvYXRQb2ludCYg
cG9pbnQpIGNvbnN0IHsgcmV0dXJuIGNvbnRhaW5zKHBvaW50LngoKSwgcG9pbnQueSgpKTsgfQog
CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ludFJlY3QuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ludFJlY3QuY3Bw
CShyZXZpc2lvbiA3NzI2MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0lu
dFJlY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NCwyMiArNDQsMjIgQEAgYm9vbCBJbnRSZWN0
OjppbnRlcnNlY3RzKGNvbnN0IEludFJlY3QmIAogewogICAgIC8vIENoZWNraW5nIGVtcHRpbmVz
cyBoYW5kbGVzIG5lZ2F0aXZlIHdpZHRocyBhcyB3ZWxsIGFzIHplcm8uCiAgICAgcmV0dXJuICFp
c0VtcHR5KCkgJiYgIW90aGVyLmlzRW1wdHkoKQotICAgICAgICAmJiB4KCkgPCBvdGhlci5yaWdo
dCgpICYmIG90aGVyLngoKSA8IHJpZ2h0KCkKLSAgICAgICAgJiYgeSgpIDwgb3RoZXIuYm90dG9t
KCkgJiYgb3RoZXIueSgpIDwgYm90dG9tKCk7CisgICAgICAgICYmIHgoKSA8IG90aGVyLm1heFgo
KSAmJiBvdGhlci54KCkgPCBtYXhYKCkKKyAgICAgICAgJiYgeSgpIDwgb3RoZXIubWF4WSgpICYm
IG90aGVyLnkoKSA8IG1heFkoKTsKIH0KIAogYm9vbCBJbnRSZWN0Ojpjb250YWlucyhjb25zdCBJ
bnRSZWN0JiBvdGhlcikgY29uc3QKIHsKLSAgICByZXR1cm4geCgpIDw9IG90aGVyLngoKSAmJiBy
aWdodCgpID49IG90aGVyLnJpZ2h0KCkKLSAgICAgICAgJiYgeSgpIDw9IG90aGVyLnkoKSAmJiBi
b3R0b20oKSA+PSBvdGhlci5ib3R0b20oKTsKKyAgICByZXR1cm4geCgpIDw9IG90aGVyLngoKSAm
JiBtYXhYKCkgPj0gb3RoZXIubWF4WCgpCisgICAgICAgICYmIHkoKSA8PSBvdGhlci55KCkgJiYg
bWF4WSgpID49IG90aGVyLm1heFkoKTsKIH0KIAogdm9pZCBJbnRSZWN0OjppbnRlcnNlY3QoY29u
c3QgSW50UmVjdCYgb3RoZXIpCiB7CiAgICAgaW50IGwgPSBtYXgoeCgpLCBvdGhlci54KCkpOwog
ICAgIGludCB0ID0gbWF4KHkoKSwgb3RoZXIueSgpKTsKLSAgICBpbnQgciA9IG1pbihyaWdodCgp
LCBvdGhlci5yaWdodCgpKTsKLSAgICBpbnQgYiA9IG1pbihib3R0b20oKSwgb3RoZXIuYm90dG9t
KCkpOworICAgIGludCByID0gbWluKG1heFgoKSwgb3RoZXIubWF4WCgpKTsKKyAgICBpbnQgYiA9
IG1pbihtYXhZKCksIG90aGVyLm1heFkoKSk7CiAKICAgICAvLyBSZXR1cm4gYSBjbGVhbiBlbXB0
eSByZWN0YW5nbGUgZm9yIG5vbi1pbnRlcnNlY3RpbmcgY2FzZXMuCiAgICAgaWYgKGwgPj0gciB8
fCB0ID49IGIpIHsKQEAgLTg3LDggKzg3LDggQEAgdm9pZCBJbnRSZWN0Ojp1bml0ZShjb25zdCBJ
bnRSZWN0JiBvdGhlcgogCiAgICAgaW50IGwgPSBtaW4oeCgpLCBvdGhlci54KCkpOwogICAgIGlu
dCB0ID0gbWluKHkoKSwgb3RoZXIueSgpKTsKLSAgICBpbnQgciA9IG1heChyaWdodCgpLCBvdGhl
ci5yaWdodCgpKTsKLSAgICBpbnQgYiA9IG1heChib3R0b20oKSwgb3RoZXIuYm90dG9tKCkpOwor
ICAgIGludCByID0gbWF4KG1heFgoKSwgb3RoZXIubWF4WCgpKTsKKyAgICBpbnQgYiA9IG1heCht
YXhZKCksIG90aGVyLm1heFkoKSk7CiAKICAgICBtX2xvY2F0aW9uLnNldFgobCk7CiAgICAgbV9s
b2NhdGlvbi5zZXRZKHQpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
SW50UmVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0ludFJlY3QuaAkocmV2aXNpb24gNzcyNjApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9JbnRSZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTkxLDYgKzkxLDggQEAgcHVibGlj
OgogCiAgICAgaW50IHgoKSBjb25zdCB7IHJldHVybiBtX2xvY2F0aW9uLngoKTsgfQogICAgIGlu
dCB5KCkgY29uc3QgeyByZXR1cm4gbV9sb2NhdGlvbi55KCk7IH0KKyAgICBpbnQgbWF4WCgpIGNv
bnN0IHsgcmV0dXJuIHgoKSArIHdpZHRoKCk7IH0KKyAgICBpbnQgbWF4WSgpIGNvbnN0IHsgcmV0
dXJuIHkoKSArIGhlaWdodCgpOyB9CiAgICAgaW50IHdpZHRoKCkgY29uc3QgeyByZXR1cm4gbV9z
aXplLndpZHRoKCk7IH0KICAgICBpbnQgaGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gbV9zaXplLmhl
aWdodCgpOyB9CiAKQEAgLTk5LDEzICsxMDEsNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRXaWR0
aChpbnQgd2lkdGgpIHsgbV9zaXplLnNldFdpZHRoKHdpZHRoKTsgfQogICAgIHZvaWQgc2V0SGVp
Z2h0KGludCBoZWlnaHQpIHsgbV9zaXplLnNldEhlaWdodChoZWlnaHQpOyB9CiAKLSAgICAvLyBC
ZSBjYXJlZnVsIHdpdGggdGhlc2UgZnVuY3Rpb25zLiAgVGhlIHBvaW50IGlzIGNvbnNpZGVyZWQg
dG8gYmUgdG8gdGhlIHJpZ2h0IGFuZCBiZWxvdy4gIFRoZXNlIGFyZSBub3QKLSAgICAvLyBzdWJz
dGl0dXRlcyBmb3IgcmlnaHQoKSBhbmQgYm90dG9tKCkuCi0gICAgSW50UG9pbnQgdG9wTGVmdCgp
IGNvbnN0IHsgcmV0dXJuIG1fbG9jYXRpb247IH0KLSAgICBJbnRQb2ludCB0b3BSaWdodCgpIGNv
bnN0IHsgcmV0dXJuIEludFBvaW50KHJpZ2h0KCkgLSAxLCB5KCkpOyB9Ci0gICAgSW50UG9pbnQg
Ym90dG9tTGVmdCgpIGNvbnN0IHsgcmV0dXJuIEludFBvaW50KHgoKSwgYm90dG9tKCkgLSAxKTsg
fQotICAgIEludFBvaW50IGJvdHRvbVJpZ2h0KCkgY29uc3QgeyByZXR1cm4gSW50UG9pbnQocmln
aHQoKSAtIDEsIGJvdHRvbSgpIC0gMSk7IH0KLQogICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsg
cmV0dXJuIG1fc2l6ZS5pc0VtcHR5KCk7IH0KIAogICAgIGludCByaWdodCgpIGNvbnN0IHsgcmV0
dXJuIHgoKSArIHdpZHRoKCk7IH0KQEAgLTExOCwyNiArMTEzLDI2IEBAIHB1YmxpYzoKICAgICB2
b2lkIG1vdmUoY29uc3QgSW50U2l6ZSYgcykgeyBtX2xvY2F0aW9uICs9IHM7IH0gCiAgICAgdm9p
ZCBtb3ZlKGludCBkeCwgaW50IGR5KSB7IG1fbG9jYXRpb24ubW92ZShkeCwgZHkpOyB9IAogICAg
IAotICAgIHZvaWQgc2hpZnRMZWZ0RWRnZVRvKGludCBlZGdlKQorICAgIHZvaWQgc2hpZnRNaW5Y
RWRnZVRvKGludCBlZGdlKQogICAgIHsKICAgICAgICAgaW50IGRlbHRhID0gZWRnZSAtIHgoKTsK
ICAgICAgICAgc2V0WChlZGdlKTsKICAgICAgICAgc2V0V2lkdGgoc3RkOjptYXgoMCwgd2lkdGgo
KSAtIGRlbHRhKSk7CiAgICAgfQotICAgIHZvaWQgc2hpZnRSaWdodEVkZ2VUbyhpbnQgZWRnZSkK
KyAgICB2b2lkIHNoaWZ0TWF4WEVkZ2VUbyhpbnQgZWRnZSkKICAgICB7Ci0gICAgICAgIGludCBk
ZWx0YSA9IGVkZ2UgLSByaWdodCgpOworICAgICAgICBpbnQgZGVsdGEgPSBlZGdlIC0gbWF4WCgp
OwogICAgICAgICBzZXRXaWR0aChzdGQ6Om1heCgwLCB3aWR0aCgpICsgZGVsdGEpKTsKICAgICB9
Ci0gICAgdm9pZCBzaGlmdFRvcEVkZ2VUbyhpbnQgZWRnZSkKKyAgICB2b2lkIHNoaWZ0TWluWUVk
Z2VUbyhpbnQgZWRnZSkKICAgICB7CiAgICAgICAgIGludCBkZWx0YSA9IGVkZ2UgLSB5KCk7CiAg
ICAgICAgIHNldFkoZWRnZSk7CiAgICAgICAgIHNldEhlaWdodChzdGQ6Om1heCgwLCBoZWlnaHQo
KSAtIGRlbHRhKSk7CiAgICAgfQotICAgIHZvaWQgc2hpZnRCb3R0b21FZGdlVG8oaW50IGVkZ2Up
CisgICAgdm9pZCBzaGlmdE1heFlFZGdlVG8oaW50IGVkZ2UpCiAgICAgewotICAgICAgICBpbnQg
ZGVsdGEgPSBlZGdlIC0gYm90dG9tKCk7CisgICAgICAgIGludCBkZWx0YSA9IGVkZ2UgLSBtYXhZ
KCk7CiAgICAgICAgIHNldEhlaWdodChzdGQ6Om1heCgwLCBoZWlnaHQoKSArIGRlbHRhKSk7CiAg
ICAgfQogCkBAIC0xNDcsNyArMTQyLDcgQEAgcHVibGljOgogICAgIC8vIFRoaXMgY2hlY2tzIHRv
IHNlZSBpZiB0aGUgcmVjdCBjb250YWlucyB4LHkgaW4gdGhlIHRyYWRpdGlvbmFsIHNlbnNlLgog
ICAgIC8vIEVxdWl2YWxlbnQgdG8gY2hlY2tpbmcgaWYgdGhlIHJlY3QgY29udGFpbnMgYSAxeDEg
cmVjdCBiZWxvdyBhbmQgdG8gdGhlIHJpZ2h0IG9mIChweCxweSkuCiAgICAgYm9vbCBjb250YWlu
cyhpbnQgcHgsIGludCBweSkgY29uc3QKLSAgICAgICAgeyByZXR1cm4gcHggPj0geCgpICYmIHB4
IDwgcmlnaHQoKSAmJiBweSA+PSB5KCkgJiYgcHkgPCBib3R0b20oKTsgfQorICAgICAgICB7IHJl
dHVybiBweCA+PSB4KCkgJiYgcHggPCBtYXhYKCkgJiYgcHkgPj0geSgpICYmIHB5IDwgbWF4WSgp
OyB9CiAgICAgYm9vbCBjb250YWlucyhjb25zdCBJbnRQb2ludCYgcG9pbnQpIGNvbnN0IHsgcmV0
dXJuIGNvbnRhaW5zKHBvaW50LngoKSwgcG9pbnQueSgpKTsgfQogCiAgICAgdm9pZCBpbnRlcnNl
Y3QoY29uc3QgSW50UmVjdCYpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvV2lkdGhJdGVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvV2lkdGhJdGVyYXRvci5jcHAJKHJldmlzaW9uIDc3MjYwKQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvV2lkdGhJdGVyYXRvci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI1NSw5ICsyNTUsOSBAQCB2b2lkIFdpZHRoSXRlcmF0b3I6OmFkdmFuY2UoaW50IG9m
ZnNldCwgCiAgICAgICAgIGxhc3RSb3VuZGluZ1dpZHRoID0gd2lkdGggLSBvbGRXaWR0aDsKIAog
ICAgICAgICBpZiAobV9hY2NvdW50Rm9yR2x5cGhCb3VuZHMpIHsKLSAgICAgICAgICAgIG1fbWF4
R2x5cGhCb3VuZGluZ0JveFkgPSBtYXgobV9tYXhHbHlwaEJvdW5kaW5nQm94WSwgYm91bmRzLmJv
dHRvbSgpKTsKKyAgICAgICAgICAgIG1fbWF4R2x5cGhCb3VuZGluZ0JveFkgPSBtYXgobV9tYXhH
bHlwaEJvdW5kaW5nQm94WSwgYm91bmRzLm1heFkoKSk7CiAgICAgICAgICAgICBtX21pbkdseXBo
Qm91bmRpbmdCb3hZID0gbWluKG1fbWluR2x5cGhCb3VuZGluZ0JveFksIGJvdW5kcy55KCkpOwot
ICAgICAgICAgICAgbV9sYXN0R2x5cGhPdmVyZmxvdyA9IG1heDxmbG9hdD4oMCwgYm91bmRzLnJp
Z2h0KCkgLSB3aWR0aCk7CisgICAgICAgICAgICBtX2xhc3RHbHlwaE92ZXJmbG93ID0gbWF4PGZs
b2F0PigwLCBib3VuZHMubWF4WCgpIC0gd2lkdGgpOwogICAgICAgICB9CiAgICAgfQogCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3Jh
cGhpY3NDb250ZXh0Q0cuY3BwCShyZXZpc2lvbiA3NzI2MCkKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTY2LDkgKzE2Niw5IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3UmVjdChjb25zdCBJ
bnQKICAgICAgICAgICAgIHNldENHRmlsbENvbG9yKGNvbnRleHQsIHN0cm9rZUNvbG9yKCksIHN0
cm9rZUNvbG9yU3BhY2UoKSk7CiAgICAgICAgIENHUmVjdCByZWN0c1s0XSA9IHsKICAgICAgICAg
ICAgIEZsb2F0UmVjdChyZWN0LngoKSwgcmVjdC55KCksIHJlY3Qud2lkdGgoKSwgMSksCi0gICAg
ICAgICAgICBGbG9hdFJlY3QocmVjdC54KCksIHJlY3QuYm90dG9tKCkgLSAxLCByZWN0LndpZHRo
KCksIDEpLAorICAgICAgICAgICAgRmxvYXRSZWN0KHJlY3QueCgpLCByZWN0Lm1heFkoKSAtIDEs
IHJlY3Qud2lkdGgoKSwgMSksCiAgICAgICAgICAgICBGbG9hdFJlY3QocmVjdC54KCksIHJlY3Qu
eSgpICsgMSwgMSwgcmVjdC5oZWlnaHQoKSAtIDIpLAotICAgICAgICAgICAgRmxvYXRSZWN0KHJl
Y3QucmlnaHQoKSAtIDEsIHJlY3QueSgpICsgMSwgMSwgcmVjdC5oZWlnaHQoKSAtIDIpCisgICAg
ICAgICAgICBGbG9hdFJlY3QocmVjdC5tYXhYKCkgLSAxLCByZWN0LnkoKSArIDEsIDEsIHJlY3Qu
aGVpZ2h0KCkgLSAyKQogICAgICAgICB9OwogICAgICAgICBDR0NvbnRleHRGaWxsUmVjdHMoY29u
dGV4dCwgcmVjdHMsIDQpOwogICAgICAgICBpZiAob2xkRmlsbENvbG9yICE9IHN0cm9rZUNvbG9y
KCkpCkBAIC01NjQsNyArNTY0LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxQYXRoKGNv
bnN0IFBhdAogICAgICAgICAgICAgICAgIENHQ29udGV4dENsaXAobGF5ZXJDb250ZXh0KTsKIAog
ICAgICAgICAgICAgbV9zdGF0ZS5maWxsR3JhZGllbnQtPnBhaW50KGxheWVyQ29udGV4dCk7Ci0g
ICAgICAgICAgICBDR0NvbnRleHREcmF3TGF5ZXJBdFBvaW50KGNvbnRleHQsIENHUG9pbnRNYWtl
KHJlY3QubGVmdCgpLCByZWN0LnRvcCgpKSwgbGF5ZXIpOworICAgICAgICAgICAgQ0dDb250ZXh0
RHJhd0xheWVyQXRQb2ludChjb250ZXh0LCBDR1BvaW50TWFrZShyZWN0LngoKSwgcmVjdC55KCkp
LCBsYXllcik7CiAgICAgICAgICAgICBDR0xheWVyUmVsZWFzZShsYXllcik7CiAgICAgICAgIH0g
ZWxzZSB7CiAgICAgICAgICAgICBDR0NvbnRleHRCZWdpblBhdGgoY29udGV4dCk7CkBAIC02NDYs
NyArNjQ2LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KGNvbnN0IEZsbwogCiAg
ICAgICAgICAgICBDR0NvbnRleHRDb25jYXRDVE0obGF5ZXJDb250ZXh0LCBtX3N0YXRlLmZpbGxH
cmFkaWVudC0+Z3JhZGllbnRTcGFjZVRyYW5zZm9ybSgpKTsKICAgICAgICAgICAgIG1fc3RhdGUu
ZmlsbEdyYWRpZW50LT5wYWludChsYXllckNvbnRleHQpOwotICAgICAgICAgICAgQ0dDb250ZXh0
RHJhd0xheWVyQXRQb2ludChjb250ZXh0LCBDR1BvaW50TWFrZShyZWN0LmxlZnQoKSwgcmVjdC50
b3AoKSksIGxheWVyKTsKKyAgICAgICAgICAgIENHQ29udGV4dERyYXdMYXllckF0UG9pbnQoY29u
dGV4dCwgQ0dQb2ludE1ha2UocmVjdC54KCksIHJlY3QueSgpKSwgbGF5ZXIpOwogICAgICAgICAg
ICAgQ0dMYXllclJlbGVhc2UobGF5ZXIpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAg
Q0dDb250ZXh0Q2xpcFRvUmVjdChjb250ZXh0LCByZWN0KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0cuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0cuY3BwCShyZXZp
c2lvbiA3NzI2MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdl
QnVmZmVyQ0cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNjcsNyArMjY3LDcgQEAgUGFzc1JlZlB0
cjxCeXRlQXJyYXk+IGdldEltYWdlRGF0YShjb25zdAogICAgIFJlZlB0cjxCeXRlQXJyYXk+IHJl
c3VsdCA9IEJ5dGVBcnJheTo6Y3JlYXRlKHJlY3Qud2lkdGgoKSAqIHJlY3QuaGVpZ2h0KCkgKiA0
KTsKICAgICB1bnNpZ25lZCBjaGFyKiBkYXRhID0gcmVzdWx0LT5kYXRhKCk7CiAKLSAgICBpZiAo
cmVjdC54KCkgPCAwIHx8IHJlY3QueSgpIDwgMCB8fCByZWN0LnJpZ2h0KCkgPiBzaXplLndpZHRo
KCkgfHwgcmVjdC5ib3R0b20oKSA+IHNpemUuaGVpZ2h0KCkpCisgICAgaWYgKHJlY3QueCgpIDwg
MCB8fCByZWN0LnkoKSA8IDAgfHwgcmVjdC5tYXhYKCkgPiBzaXplLndpZHRoKCkgfHwgcmVjdC5t
YXhZKCkgPiBzaXplLmhlaWdodCgpKQogICAgICAgICBtZW1zZXQoZGF0YSwgMCwgcmVzdWx0LT5s
ZW5ndGgoKSk7CiAKICAgICBpbnQgb3JpZ2lueCA9IHJlY3QueCgpOwpAQCAtMjc2LDcgKzI3Niw3
IEBAIFBhc3NSZWZQdHI8Qnl0ZUFycmF5PiBnZXRJbWFnZURhdGEoY29uc3QKICAgICAgICAgZGVz
dHggPSAtb3JpZ2lueDsKICAgICAgICAgb3JpZ2lueCA9IDA7CiAgICAgfQotICAgIGludCBlbmR4
ID0gcmVjdC5yaWdodCgpOworICAgIGludCBlbmR4ID0gcmVjdC5tYXhYKCk7CiAgICAgaWYgKGVu
ZHggPiBzaXplLndpZHRoKCkpCiAgICAgICAgIGVuZHggPSBzaXplLndpZHRoKCk7CiAgICAgaW50
IG51bUNvbHVtbnMgPSBlbmR4IC0gb3JpZ2lueDsKQEAgLTI4Nyw3ICsyODcsNyBAQCBQYXNzUmVm
UHRyPEJ5dGVBcnJheT4gZ2V0SW1hZ2VEYXRhKGNvbnN0CiAgICAgICAgIGRlc3R5ID0gLW9yaWdp
bnk7CiAgICAgICAgIG9yaWdpbnkgPSAwOwogICAgIH0KLSAgICBpbnQgZW5keSA9IHJlY3QuYm90
dG9tKCk7CisgICAgaW50IGVuZHkgPSByZWN0Lm1heFkoKTsKICAgICBpZiAoZW5keSA+IHNpemUu
aGVpZ2h0KCkpCiAgICAgICAgIGVuZHkgPSBzaXplLmhlaWdodCgpOwogICAgIGludCBudW1Sb3dz
ID0gZW5keSAtIG9yaWdpbnk7CkBAIC0zNzcsOSArMzc3LDkgQEAgdm9pZCBwdXRJbWFnZURhdGEo
Qnl0ZUFycmF5KiYgc291cmNlLCBjbwogICAgIEFTU0VSVChkZXN0eCA+PSAwKTsKICAgICBBU1NF
UlQoZGVzdHggPCBzaXplLndpZHRoKCkpOwogICAgIEFTU0VSVChvcmlnaW54ID49IDApOwotICAg
IEFTU0VSVChvcmlnaW54IDw9IHNvdXJjZVJlY3QucmlnaHQoKSk7CisgICAgQVNTRVJUKG9yaWdp
bnggPD0gc291cmNlUmVjdC5tYXhYKCkpOwogCi0gICAgaW50IGVuZHggPSBkZXN0UG9pbnQueCgp
ICsgc291cmNlUmVjdC5yaWdodCgpOworICAgIGludCBlbmR4ID0gZGVzdFBvaW50LngoKSArIHNv
dXJjZVJlY3QubWF4WCgpOwogICAgIEFTU0VSVChlbmR4IDw9IHNpemUud2lkdGgoKSk7CiAKICAg
ICBpbnQgbnVtQ29sdW1ucyA9IGVuZHggLSBkZXN0eDsKQEAgLTM4OSw5ICszODksOSBAQCB2b2lk
IHB1dEltYWdlRGF0YShCeXRlQXJyYXkqJiBzb3VyY2UsIGNvCiAgICAgQVNTRVJUKGRlc3R5ID49
IDApOwogICAgIEFTU0VSVChkZXN0eSA8IHNpemUuaGVpZ2h0KCkpOwogICAgIEFTU0VSVChvcmln
aW55ID49IDApOwotICAgIEFTU0VSVChvcmlnaW55IDw9IHNvdXJjZVJlY3QuYm90dG9tKCkpOwor
ICAgIEFTU0VSVChvcmlnaW55IDw9IHNvdXJjZVJlY3QubWF4WSgpKTsKIAotICAgIGludCBlbmR5
ID0gZGVzdFBvaW50LnkoKSArIHNvdXJjZVJlY3QuYm90dG9tKCk7CisgICAgaW50IGVuZHkgPSBk
ZXN0UG9pbnQueSgpICsgc291cmNlUmVjdC5tYXhZKCk7CiAgICAgQVNTRVJUKGVuZHkgPD0gc2l6
ZS5oZWlnaHQoKSk7CiAgICAgaW50IG51bVJvd3MgPSBlbmR5IC0gZGVzdHk7CiAKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQ0cuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQ0cuY3BwCShyZXZp
c2lvbiA3NzI2MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdl
Q0cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDQsNyArMjA0LDcgQEAgdm9pZCBCaXRtYXBJbWFn
ZTo6ZHJhdyhHcmFwaGljc0NvbnRleHQqIAogICAgICAgICAgICAgYWRqdXN0ZWREZXN0UmVjdC5z
ZXRIZWlnaHQoc3ViaW1hZ2VSZWN0LmhlaWdodCgpIC8geVNjYWxlKTsKIAogICAgICAgICAgICAg
aW1hZ2UuYWRvcHRDRihDR0ltYWdlQ3JlYXRlV2l0aEltYWdlSW5SZWN0KGltYWdlLmdldCgpLCBz
dWJpbWFnZVJlY3QpKTsKLSAgICAgICAgICAgIGlmIChjdXJySGVpZ2h0IDwgc3JjUmVjdC5ib3R0
b20oKSkgeworICAgICAgICAgICAgaWYgKGN1cnJIZWlnaHQgPCBzcmNSZWN0Lm1heFkoKSkgewog
ICAgICAgICAgICAgICAgIEFTU0VSVChDR0ltYWdlR2V0SGVpZ2h0KGltYWdlLmdldCgpKSA9PSBj
dXJySGVpZ2h0IC0gQ0dSZWN0SW50ZWdyYWwoc3JjUmVjdCkub3JpZ2luLnkpOwogICAgICAgICAg
ICAgICAgIGFkanVzdGVkRGVzdFJlY3Quc2V0SGVpZ2h0KENHSW1hZ2VHZXRIZWlnaHQoaW1hZ2Uu
Z2V0KCkpIC8geVNjYWxlKTsKICAgICAgICAgICAgIH0KQEAgLTIyNCw3ICsyMjQsNyBAQCB2b2lk
IEJpdG1hcEltYWdlOjpkcmF3KEdyYXBoaWNzQ29udGV4dCogCiAKICAgICAvLyBGbGlwIHRoZSBj
b29yZHMuCiAgICAgQ0dDb250ZXh0U2NhbGVDVE0oY29udGV4dCwgMSwgLTEpOwotICAgIGFkanVz
dGVkRGVzdFJlY3Quc2V0WSgtYWRqdXN0ZWREZXN0UmVjdC5ib3R0b20oKSk7CisgICAgYWRqdXN0
ZWREZXN0UmVjdC5zZXRZKC1hZGp1c3RlZERlc3RSZWN0Lm1heFkoKSk7CiAKICAgICAvLyBBZGp1
c3QgdGhlIGNvbG9yIHNwYWNlLgogICAgIGltYWdlID0gaW1hZ2VXaXRoQ29sb3JTcGFjZShpbWFn
ZS5nZXQoKSwgc3R5bGVDb2xvclNwYWNlKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHAJKHJldmlz
aW9uIDc3MjYwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
aWx0ZXJFZmZlY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTksNyArMTE5LDcgQEAgUGFzc1Jl
ZlB0cjxCeXRlQXJyYXk+IEZpbHRlckVmZmVjdDo6YXNQcgogaW5saW5lIHZvaWQgRmlsdGVyRWZm
ZWN0Ojpjb3B5SW1hZ2VCeXRlcyhCeXRlQXJyYXkqIHNvdXJjZSwgQnl0ZUFycmF5KiBkZXN0aW5h
dGlvbiwgY29uc3QgSW50UmVjdCYgcmVjdCkKIHsKICAgICAvLyBDb3B5IHRoZSBuZWNlc3Nhcnkg
bGluZXMuCi0gICAgaWYgKHJlY3QueCgpIDwgMCB8fCByZWN0LnkoKSA8IDAgfHwgcmVjdC5ib3R0
b20oKSA+IG1fYWJzb2x1dGVQYWludFJlY3Qud2lkdGgoKSB8fCByZWN0LmJvdHRvbSgpID4gbV9h
YnNvbHV0ZVBhaW50UmVjdC5oZWlnaHQoKSkKKyAgICBpZiAocmVjdC54KCkgPCAwIHx8IHJlY3Qu
eSgpIDwgMCB8fCByZWN0Lm1heFkoKSA+IG1fYWJzb2x1dGVQYWludFJlY3Qud2lkdGgoKSB8fCBy
ZWN0Lm1heFkoKSA+IG1fYWJzb2x1dGVQYWludFJlY3QuaGVpZ2h0KCkpCiAgICAgICAgIG1lbXNl
dChkZXN0aW5hdGlvbi0+ZGF0YSgpLCAwLCBkZXN0aW5hdGlvbi0+bGVuZ3RoKCkpOwogCiAgICAg
aW50IHhPcmlnaW4gPSByZWN0LngoKTsKQEAgLTEyOCw3ICsxMjgsNyBAQCBpbmxpbmUgdm9pZCBG
aWx0ZXJFZmZlY3Q6OmNvcHlJbWFnZUJ5dGVzCiAgICAgICAgIHhEZXN0ID0gLXhPcmlnaW47CiAg
ICAgICAgIHhPcmlnaW4gPSAwOwogICAgIH0KLSAgICBpbnQgeEVuZCA9IHJlY3QucmlnaHQoKTsK
KyAgICBpbnQgeEVuZCA9IHJlY3QubWF4WCgpOwogICAgIGlmICh4RW5kID4gbV9hYnNvbHV0ZVBh
aW50UmVjdC53aWR0aCgpKQogICAgICAgICB4RW5kID0gbV9hYnNvbHV0ZVBhaW50UmVjdC53aWR0
aCgpOwogCkBAIC0xMzgsNyArMTM4LDcgQEAgaW5saW5lIHZvaWQgRmlsdGVyRWZmZWN0Ojpjb3B5
SW1hZ2VCeXRlcwogICAgICAgICB5RGVzdCA9IC15T3JpZ2luOwogICAgICAgICB5T3JpZ2luID0g
MDsKICAgICB9Ci0gICAgaW50IHlFbmQgPSByZWN0LmJvdHRvbSgpOworICAgIGludCB5RW5kID0g
cmVjdC5tYXhZKCk7CiAgICAgaWYgKHlFbmQgPiBtX2Fic29sdXRlUGFpbnRSZWN0LmhlaWdodCgp
KQogICAgICAgICB5RW5kID0gbV9hYnNvbHV0ZVBhaW50UmVjdC5oZWlnaHQoKTsKIApJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbXBsZXhUZXh0Q29udHJvbGxl
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFj
L0NvbXBsZXhUZXh0Q29udHJvbGxlci5jcHAJKHJldmlzaW9uIDc3MjYwKQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbXBsZXhUZXh0Q29udHJvbGxlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTU1Myw5ICs1NTMsOSBAQCB2b2lkIENvbXBsZXhUZXh0Q29udHJvbGxl
cjo6YWRqdXN0R2x5cGhzCiAgICAgICAgICAgICBGbG9hdFJlY3QgZ2x5cGhCb3VuZHMgPSBmb250
RGF0YS0+Ym91bmRzRm9yR2x5cGgoZ2x5cGgpOwogICAgICAgICAgICAgZ2x5cGhCb3VuZHMubW92
ZShnbHlwaE9yaWdpbi54LCBnbHlwaE9yaWdpbi55KTsKICAgICAgICAgICAgIG1fbWluR2x5cGhC
b3VuZGluZ0JveFggPSBtaW4obV9taW5HbHlwaEJvdW5kaW5nQm94WCwgZ2x5cGhCb3VuZHMueCgp
KTsKLSAgICAgICAgICAgIG1fbWF4R2x5cGhCb3VuZGluZ0JveFggPSBtYXgobV9tYXhHbHlwaEJv
dW5kaW5nQm94WCwgZ2x5cGhCb3VuZHMucmlnaHQoKSk7CisgICAgICAgICAgICBtX21heEdseXBo
Qm91bmRpbmdCb3hYID0gbWF4KG1fbWF4R2x5cGhCb3VuZGluZ0JveFgsIGdseXBoQm91bmRzLm1h
eFgoKSk7CiAgICAgICAgICAgICBtX21pbkdseXBoQm91bmRpbmdCb3hZID0gbWluKG1fbWluR2x5
cGhCb3VuZGluZ0JveFksIGdseXBoQm91bmRzLnkoKSk7Ci0gICAgICAgICAgICBtX21heEdseXBo
Qm91bmRpbmdCb3hZID0gbWF4KG1fbWF4R2x5cGhCb3VuZGluZ0JveFksIGdseXBoQm91bmRzLmJv
dHRvbSgpKTsKKyAgICAgICAgICAgIG1fbWF4R2x5cGhCb3VuZGluZ0JveFkgPSBtYXgobV9tYXhH
bHlwaEJvdW5kaW5nQm94WSwgZ2x5cGhCb3VuZHMubWF4WSgpKTsKICAgICAgICAgICAgIGdseXBo
T3JpZ2luLnggKz0gYWR2YW5jZS53aWR0aDsKICAgICAgICAgICAgIGdseXBoT3JpZ2luLnkgKz0g
YWR2YW5jZS5oZWlnaHQ7CiAgICAgICAgICAgICAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL21hYy9TaW1wbGVGb250RGF0YU1hYy5tbQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvU2ltcGxlRm9udERhdGFNYWMubW0JKHJl
dmlzaW9uIDc3MjYwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL1Np
bXBsZUZvbnREYXRhTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC00NzcsMTMgKzQ3NywxMyBAQCBG
bG9hdFJlY3QgU2ltcGxlRm9udERhdGE6OnBsYXRmb3JtQm91bmRzCiAjaWZuZGVmIEJVSUxESU5H
X09OX1RJR0VSCiAgICAgYm91bmRpbmdCb3ggPSBDVEZvbnRHZXRCb3VuZGluZ1JlY3RzRm9yR2x5
cGhzKG1fcGxhdGZvcm1EYXRhLmN0Rm9udCgpLAogICAgICAgICAgICAgICAgICAgICBvcmllbnRh
dGlvbigpID09IFZlcnRpY2FsID8ga0NURm9udFZlcnRpY2FsT3JpZW50YXRpb24gOiBrQ1RGb250
SG9yaXpvbnRhbE9yaWVudGF0aW9uLCAmZ2x5cGgsIDAsIDEpOwotICAgIGJvdW5kaW5nQm94LnNl
dFkoLWJvdW5kaW5nQm94LmJvdHRvbSgpKTsKKyAgICBib3VuZGluZ0JveC5zZXRZKC1ib3VuZGlu
Z0JveC5tYXhZKCkpOwogI2Vsc2UKICAgICAvLyBGSVhNRTogQ3VzdG9tIGZvbnRzIGRvbid0IGhh
dmUgTlNGb250cywgc28gdGhpcyBmdW5jdGlvbiBkb2Vzbid0IGNvbXB1dGUgY29ycmVjdCBib3Vu
ZHMgZm9yIHRoZXNlIG9uIFRpZ2VyLgogICAgIGlmICghbV9wbGF0Zm9ybURhdGEuZm9udCgpKQog
ICAgICAgICByZXR1cm4gYm91bmRpbmdCb3g7CiAgICAgYm91bmRpbmdCb3ggPSBbbV9wbGF0Zm9y
bURhdGEuZm9udCgpIGJvdW5kaW5nUmVjdEZvckdseXBoOmdseXBoXTsKLSAgICBib3VuZGluZ0Jv
eC5zZXRZKC1ib3VuZGluZ0JveC5ib3R0b20oKSk7CisgICAgYm91bmRpbmdCb3guc2V0WSgtYm91
bmRpbmdCb3gubWF4WSgpKTsKICNlbmRpZgogICAgIGlmIChtX3N5bnRoZXRpY0JvbGRPZmZzZXQp
CiAgICAgICAgIGJvdW5kaW5nQm94LnNldFdpZHRoKGJvdW5kaW5nQm94LndpZHRoKCkgKyBtX3N5
bnRoZXRpY0JvbGRPZmZzZXQpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvdHJhbnNmb3Jtcy9BZmZpbmVUcmFuc2Zvcm0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvQWZmaW5lVHJhbnNmb3JtLmNwcAko
cmV2aXNpb24gNzcyNjApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFu
c2Zvcm1zL0FmZmluZVRyYW5zZm9ybS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxNiw5ICszMTYs
OSBAQCBGbG9hdFJlY3QgQWZmaW5lVHJhbnNmb3JtOjptYXBSZWN0KGNvbnN0CiAKICAgICBGbG9h
dFF1YWQgcmVzdWx0OwogICAgIHJlc3VsdC5zZXRQMShtYXBQb2ludChyZWN0LmxvY2F0aW9uKCkp
KTsKLSAgICByZXN1bHQuc2V0UDIobWFwUG9pbnQoRmxvYXRQb2ludChyZWN0LnJpZ2h0KCksIHJl
Y3QueSgpKSkpOwotICAgIHJlc3VsdC5zZXRQMyhtYXBQb2ludChGbG9hdFBvaW50KHJlY3Qucmln
aHQoKSwgcmVjdC5ib3R0b20oKSkpKTsKLSAgICByZXN1bHQuc2V0UDQobWFwUG9pbnQoRmxvYXRQ
b2ludChyZWN0LngoKSwgcmVjdC5ib3R0b20oKSkpKTsKKyAgICByZXN1bHQuc2V0UDIobWFwUG9p
bnQoRmxvYXRQb2ludChyZWN0Lm1heFgoKSwgcmVjdC55KCkpKSk7CisgICAgcmVzdWx0LnNldFAz
KG1hcFBvaW50KEZsb2F0UG9pbnQocmVjdC5tYXhYKCksIHJlY3QubWF4WSgpKSkpOworICAgIHJl
c3VsdC5zZXRQNChtYXBQb2ludChGbG9hdFBvaW50KHJlY3QueCgpLCByZWN0Lm1heFkoKSkpKTsK
ICAgICByZXR1cm4gcmVzdWx0LmJvdW5kaW5nQm94KCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL21hYy9XaWRnZXRNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbWFjL1dpZGdldE1hYy5tbQkocmV2aXNpb24gNzcyNjApCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2lkZ2V0TWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yNTIs
NyArMjUyLDcgQEAgdm9pZCBXaWRnZXQ6OnBhaW50KEdyYXBoaWNzQ29udGV4dCogcCwgYwogICAg
ICAgICBJbnRSZWN0IGRpcnR5UmVjdCA9IHI7CiAgICAgICAgIGRpcnR5UmVjdC5tb3ZlKC10cmFu
c2Zvcm1PcmlnaW4ueCgpLCAtdHJhbnNmb3JtT3JpZ2luLnkoKSk7CiAgICAgICAgIGlmICghW3Zp
ZXcgaXNGbGlwcGVkXSkKLSAgICAgICAgICAgIGRpcnR5UmVjdC5zZXRZKFt2aWV3IGJvdW5kc10u
c2l6ZS5oZWlnaHQgLSBkaXJ0eVJlY3QuYm90dG9tKCkpOworICAgICAgICAgICAgZGlydHlSZWN0
LnNldFkoW3ZpZXcgYm91bmRzXS5zaXplLmhlaWdodCAtIGRpcnR5UmVjdC5tYXhZKCkpOwogCiAg
ICAgICAgIFt2aWV3IGRpc3BsYXlSZWN0SWdub3JpbmdPcGFjaXR5OmRpcnR5UmVjdF07CiAKQEAg
LTI5Niw3ICsyOTYsNyBAQCB2b2lkIFdpZGdldDo6cGFpbnQoR3JhcGhpY3NDb250ZXh0KiBwLCBj
CiAgICAgICAgIEludFJlY3QgZGlydHlSZWN0ID0gcjsKICAgICAgICAgZGlydHlSZWN0Lm1vdmUo
LXRyYW5zZm9ybU9yaWdpbi54KCksIC10cmFuc2Zvcm1PcmlnaW4ueSgpKTsKICAgICAgICAgaWYg
KCFbdmlldyBpc0ZsaXBwZWRdKQotICAgICAgICAgICAgZGlydHlSZWN0LnNldFkoW3ZpZXcgYm91
bmRzXS5zaXplLmhlaWdodCAtIGRpcnR5UmVjdC5ib3R0b20oKSk7CisgICAgICAgICAgICBkaXJ0
eVJlY3Quc2V0WShbdmlldyBib3VuZHNdLnNpemUuaGVpZ2h0IC0gZGlydHlSZWN0Lm1heFkoKSk7
CiAKICAgICAgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOwogICAgICAgICB7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lRmxvd0JveC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUZsb3dCb3guY3BwCShyZXZpc2lvbiA3
NzI2MCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVGbG93Qm94LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNzE4LDE0ICs3MTgsMTQgQEAgdm9pZCBJbmxpbmVGbG93Qm94OjphZGRC
b3hTaGFkb3dWaXN1YWxPdgogICAgIHJlbmRlcmVyKCktPnN0eWxlKG1fZmlyc3RMaW5lKS0+Z2V0
Qm94U2hhZG93QmxvY2tEaXJlY3Rpb25FeHRlbnQoYm94U2hhZG93TG9naWNhbFRvcCwgYm94U2hh
ZG93TG9naWNhbEJvdHRvbSk7CiAgICAgCiAgICAgaW50IGxvZ2ljYWxUb3BWaXN1YWxPdmVyZmxv
dyA9IG1pbihsb2dpY2FsVG9wKCkgKyBib3hTaGFkb3dMb2dpY2FsVG9wLCBsb2dpY2FsVmlzdWFs
T3ZlcmZsb3cueSgpKTsKLSAgICBpbnQgbG9naWNhbEJvdHRvbVZpc3VhbE92ZXJmbG93ID0gbWF4
KGxvZ2ljYWxCb3R0b20oKSArIGJveFNoYWRvd0xvZ2ljYWxCb3R0b20sIGxvZ2ljYWxWaXN1YWxP
dmVyZmxvdy5ib3R0b20oKSk7CisgICAgaW50IGxvZ2ljYWxCb3R0b21WaXN1YWxPdmVyZmxvdyA9
IG1heChsb2dpY2FsQm90dG9tKCkgKyBib3hTaGFkb3dMb2dpY2FsQm90dG9tLCBsb2dpY2FsVmlz
dWFsT3ZlcmZsb3cubWF4WSgpKTsKICAgICAKICAgICBpbnQgYm94U2hhZG93TG9naWNhbExlZnQ7
CiAgICAgaW50IGJveFNoYWRvd0xvZ2ljYWxSaWdodDsKICAgICByZW5kZXJlcigpLT5zdHlsZSht
X2ZpcnN0TGluZSktPmdldEJveFNoYWRvd0lubGluZURpcmVjdGlvbkV4dGVudChib3hTaGFkb3dM
b2dpY2FsTGVmdCwgYm94U2hhZG93TG9naWNhbFJpZ2h0KTsKIAogICAgIGludCBsb2dpY2FsTGVm
dFZpc3VhbE92ZXJmbG93ID0gbWluKGxvZ2ljYWxMZWZ0KCkgKyBib3hTaGFkb3dMb2dpY2FsTGVm
dCwgbG9naWNhbFZpc3VhbE92ZXJmbG93LngoKSk7Ci0gICAgaW50IGxvZ2ljYWxSaWdodFZpc3Vh
bE92ZXJmbG93ID0gbWF4KGxvZ2ljYWxSaWdodCgpICsgYm94U2hhZG93TG9naWNhbFJpZ2h0LCBs
b2dpY2FsVmlzdWFsT3ZlcmZsb3cucmlnaHQoKSk7CisgICAgaW50IGxvZ2ljYWxSaWdodFZpc3Vh
bE92ZXJmbG93ID0gbWF4KGxvZ2ljYWxSaWdodCgpICsgYm94U2hhZG93TG9naWNhbFJpZ2h0LCBs
b2dpY2FsVmlzdWFsT3ZlcmZsb3cubWF4WCgpKTsKICAgICAKICAgICBsb2dpY2FsVmlzdWFsT3Zl
cmZsb3cgPSBJbnRSZWN0KGxvZ2ljYWxMZWZ0VmlzdWFsT3ZlcmZsb3csIGxvZ2ljYWxUb3BWaXN1
YWxPdmVyZmxvdywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2ljYWxS
aWdodFZpc3VhbE92ZXJmbG93IC0gbG9naWNhbExlZnRWaXN1YWxPdmVyZmxvdywgbG9naWNhbEJv
dHRvbVZpc3VhbE92ZXJmbG93IC0gbG9naWNhbFRvcFZpc3VhbE92ZXJmbG93KTsKQEAgLTc4MCw5
ICs3ODAsOSBAQCB2b2lkIElubGluZUZsb3dCb3g6OmFkZFRleHRCb3hWaXN1YWxPdmVyCiAgICAg
aW50IGNoaWxkT3ZlcmZsb3dMb2dpY2FsUmlnaHQgPSBtYXgodGV4dFNoYWRvd0xvZ2ljYWxSaWdo
dCArIHJpZ2h0R2x5cGhPdmVyZmxvdywgcmlnaHRHbHlwaE92ZXJmbG93KTsKIAogICAgIGludCBs
b2dpY2FsVG9wVmlzdWFsT3ZlcmZsb3cgPSBtaW4odGV4dEJveC0+bG9naWNhbFRvcCgpICsgY2hp
bGRPdmVyZmxvd0xvZ2ljYWxUb3AsIGxvZ2ljYWxWaXN1YWxPdmVyZmxvdy55KCkpOwotICAgIGlu
dCBsb2dpY2FsQm90dG9tVmlzdWFsT3ZlcmZsb3cgPSBtYXgodGV4dEJveC0+bG9naWNhbEJvdHRv
bSgpICsgY2hpbGRPdmVyZmxvd0xvZ2ljYWxCb3R0b20sIGxvZ2ljYWxWaXN1YWxPdmVyZmxvdy5i
b3R0b20oKSk7CisgICAgaW50IGxvZ2ljYWxCb3R0b21WaXN1YWxPdmVyZmxvdyA9IG1heCh0ZXh0
Qm94LT5sb2dpY2FsQm90dG9tKCkgKyBjaGlsZE92ZXJmbG93TG9naWNhbEJvdHRvbSwgbG9naWNh
bFZpc3VhbE92ZXJmbG93Lm1heFkoKSk7CiAgICAgaW50IGxvZ2ljYWxMZWZ0VmlzdWFsT3ZlcmZs
b3cgPSBtaW4odGV4dEJveC0+bG9naWNhbExlZnQoKSArIGNoaWxkT3ZlcmZsb3dMb2dpY2FsTGVm
dCwgbG9naWNhbFZpc3VhbE92ZXJmbG93LngoKSk7Ci0gICAgaW50IGxvZ2ljYWxSaWdodFZpc3Vh
bE92ZXJmbG93ID0gbWF4KHRleHRCb3gtPmxvZ2ljYWxSaWdodCgpICsgY2hpbGRPdmVyZmxvd0xv
Z2ljYWxSaWdodCwgbG9naWNhbFZpc3VhbE92ZXJmbG93LnJpZ2h0KCkpOworICAgIGludCBsb2dp
Y2FsUmlnaHRWaXN1YWxPdmVyZmxvdyA9IG1heCh0ZXh0Qm94LT5sb2dpY2FsUmlnaHQoKSArIGNo
aWxkT3ZlcmZsb3dMb2dpY2FsUmlnaHQsIGxvZ2ljYWxWaXN1YWxPdmVyZmxvdy5tYXhYKCkpOwog
ICAgIAogICAgIGxvZ2ljYWxWaXN1YWxPdmVyZmxvdyA9IEludFJlY3QobG9naWNhbExlZnRWaXN1
YWxPdmVyZmxvdywgbG9naWNhbFRvcFZpc3VhbE92ZXJmbG93LAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbG9naWNhbFJpZ2h0VmlzdWFsT3ZlcmZsb3cgLSBsb2dpY2FsTGVm
dFZpc3VhbE92ZXJmbG93LCBsb2dpY2FsQm90dG9tVmlzdWFsT3ZlcmZsb3cgLSBsb2dpY2FsVG9w
VmlzdWFsT3ZlcmZsb3cpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRl
eHRCb3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVU
ZXh0Qm94LmNwcAkocmV2aXNpb24gNzcyNjApCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
SW5saW5lVGV4dEJveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2OSw3ICsxNjksNyBAQCBJbnRS
ZWN0IElubGluZVRleHRCb3g6OnNlbGVjdGlvblJlY3QoaW50CiAgICAgaW50IGxvZ2ljYWxXaWR0
aCA9IHIud2lkdGgoKTsKICAgICBpZiAoci54KCkgPiBtX2xvZ2ljYWxXaWR0aCkKICAgICAgICAg
bG9naWNhbFdpZHRoICA9IDA7Ci0gICAgZWxzZSBpZiAoci5yaWdodCgpID4gbV9sb2dpY2FsV2lk
dGgpCisgICAgZWxzZSBpZiAoci5tYXhYKCkgPiBtX2xvZ2ljYWxXaWR0aCkKICAgICAgICAgbG9n
aWNhbFdpZHRoID0gbV9sb2dpY2FsV2lkdGggLSByLngoKTsKICAgICAKICAgICBJbnRQb2ludCB0
b3BQb2ludCA9IGlzSG9yaXpvbnRhbCgpID8gSW50UG9pbnQodHggKyBtX3ggKyByLngoKSwgdHkg
KyBzZWxUb3ApIDogSW50UG9pbnQodHggKyBzZWxUb3AsIHR5ICsgbV95ICsgci54KCkpOwpAQCAt
NDQyLDcgKzQ0Miw3IEBAIHZvaWQgSW5saW5lVGV4dEJveDo6cGFpbnQoUGFpbnRJbmZvJiBwYWkK
ICAgICBpbnQgbG9naWNhbFN0YXJ0ID0gbG9naWNhbExlZnQoKSAtIGxvZ2ljYWxMZWZ0T3ZlcmZs
b3cgKyAoaXNIb3Jpem9udGFsKCkgPyB0eCA6IHR5KTsKICAgICBpbnQgbG9naWNhbEV4dGVudCA9
IGxvZ2ljYWxXaWR0aCgpICsgbG9naWNhbExlZnRPdmVyZmxvdyArIGxvZ2ljYWxSaWdodE92ZXJm
bG93OwogICAgIAotICAgIGludCBwYWludEVuZCA9IGlzSG9yaXpvbnRhbCgpID8gcGFpbnRJbmZv
LnJlY3QucmlnaHQoKSA6IHBhaW50SW5mby5yZWN0LmJvdHRvbSgpOworICAgIGludCBwYWludEVu
ZCA9IGlzSG9yaXpvbnRhbCgpID8gcGFpbnRJbmZvLnJlY3QubWF4WCgpIDogcGFpbnRJbmZvLnJl
Y3QubWF4WSgpOwogICAgIGludCBwYWludFN0YXJ0ID0gaXNIb3Jpem9udGFsKCkgPyBwYWludElu
Zm8ucmVjdC54KCkgOiBwYWludEluZm8ucmVjdC55KCk7CiAgICAgCiAgICAgaWYgKGxvZ2ljYWxT
dGFydCA+PSBwYWludEVuZCB8fCBsb2dpY2FsU3RhcnQgKyBsb2dpY2FsRXh0ZW50IDw9IHBhaW50
U3RhcnQpCkBAIC00OTEsOSArNDkxLDkgQEAgdm9pZCBJbmxpbmVUZXh0Qm94OjpwYWludChQYWlu
dEluZm8mIHBhaQogICAgIGJvb2wgc2hvdWxkUm90YXRlID0gIWlzSG9yaXpvbnRhbCgpICYmICgh
Y29tYmluZWRUZXh0IHx8ICFjb21iaW5lZFRleHQtPmlzQ29tYmluZWQoKSk7CiAgICAgaWYgKHNo
b3VsZFJvdGF0ZSkgewogICAgICAgICBjb250ZXh0LT5zYXZlKCk7Ci0gICAgICAgIGNvbnRleHQt
PnRyYW5zbGF0ZShib3hSZWN0LngoKSwgYm94UmVjdC5ib3R0b20oKSk7CisgICAgICAgIGNvbnRl
eHQtPnRyYW5zbGF0ZShib3hSZWN0LngoKSwgYm94UmVjdC5tYXhZKCkpOwogICAgICAgICBjb250
ZXh0LT5yb3RhdGUoc3RhdGljX2Nhc3Q8ZmxvYXQ+KGRlZzJyYWQoOTAuKSkpOwotICAgICAgICBj
b250ZXh0LT50cmFuc2xhdGUoLWJveFJlY3QueCgpLCAtYm94UmVjdC5ib3R0b20oKSk7CisgICAg
ICAgIGNvbnRleHQtPnRyYW5zbGF0ZSgtYm94UmVjdC54KCksIC1ib3hSZWN0Lm1heFkoKSk7CiAg
ICAgfQogICAgIAogICAgIApAQCAtMTIxNiw3ICsxMjE2LDcgQEAgaW50IElubGluZVRleHRCb3g6
OnBvc2l0aW9uRm9yT2Zmc2V0KGludAogICAgIGludCB0byA9ICFpc0xlZnRUb1JpZ2h0RGlyZWN0
aW9uKCkgPyBtX2xlbiA6IG9mZnNldCAtIG1fc3RhcnQ7CiAgICAgLy8gRklYTUU6IERvIHdlIG5l
ZWQgdG8gYWRkIHJpZ2h0QmVhcmluZyBoZXJlPwogICAgIHJldHVybiBlbmNsb3NpbmdJbnRSZWN0
KGYuc2VsZWN0aW9uUmVjdEZvclRleHQoVGV4dFJ1bih0ZXh0LT50ZXh0KCktPmNoYXJhY3RlcnMo
KSArIG1fc3RhcnQsIG1fbGVuLCB0ZXh0UmVuZGVyZXIoKS0+YWxsb3dUYWJzKCksIHRleHRQb3Mo
KSwgbV9leHBhbnNpb24sIHRyYWlsaW5nRXhwYW5zaW9uQmVoYXZpb3IoKSwgIWlzTGVmdFRvUmln
aHREaXJlY3Rpb24oKSwgbV9kaXJPdmVycmlkZSksCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRQb2ludChsb2dpY2FsTGVmdCgpLCAwKSwgMCwg
ZnJvbSwgdG8pKS5yaWdodCgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgSW50UG9pbnQobG9naWNhbExlZnQoKSwgMCksIDAsIGZyb20sIHRvKSku
bWF4WCgpOwogfQogCiBib29sIElubGluZVRleHRCb3g6OmNvbnRhaW5zQ2FyZXRPZmZzZXQoaW50
IG9mZnNldCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9j
ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2Nr
LmNwcAkocmV2aXNpb24gNzcyNjApCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
QmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzI1LDEzICsxMzI1LDEzIEBAIHZvaWQgUmVu
ZGVyQmxvY2s6OmFkZE92ZXJmbG93RnJvbUNoaWxkcmUKICAgICAgICAgICAgIEludFJlY3QgbGFz
dFJlY3QgPSBjb2x1bW5SZWN0QXQoY29sSW5mbywgY29sdW1uQ291bnQoY29sSW5mbykgLSAxKTsK
ICAgICAgICAgICAgIGlmIChzdHlsZSgpLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpKSB7CiAg
ICAgICAgICAgICAgICAgaW50IG92ZXJmbG93TGVmdCA9ICFzdHlsZSgpLT5pc0xlZnRUb1JpZ2h0
RGlyZWN0aW9uKCkgPyBtaW4oMCwgbGFzdFJlY3QueCgpKSA6IDA7Ci0gICAgICAgICAgICAgICAg
aW50IG92ZXJmbG93UmlnaHQgPSBzdHlsZSgpLT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyBt
YXgod2lkdGgoKSwgbGFzdFJlY3QucmlnaHQoKSkgOiAwOworICAgICAgICAgICAgICAgIGludCBv
dmVyZmxvd1JpZ2h0ID0gc3R5bGUoKS0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpID8gbWF4KHdp
ZHRoKCksIGxhc3RSZWN0Lm1heFgoKSkgOiAwOwogICAgICAgICAgICAgICAgIGludCBvdmVyZmxv
d0hlaWdodCA9IGJvcmRlckJlZm9yZSgpICsgcGFkZGluZ0JlZm9yZSgpICsgY29sSW5mby0+Y29s
dW1uSGVpZ2h0KCk7CiAgICAgICAgICAgICAgICAgYWRkTGF5b3V0T3ZlcmZsb3coSW50UmVjdChv
dmVyZmxvd0xlZnQsIDAsIG92ZXJmbG93UmlnaHQgLSBvdmVyZmxvd0xlZnQsIG92ZXJmbG93SGVp
Z2h0KSk7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIEludFJlY3QgbGFz
dFJlY3QgPSBjb2x1bW5SZWN0QXQoY29sSW5mbywgY29sdW1uQ291bnQoY29sSW5mbykgLSAxKTsK
ICAgICAgICAgICAgICAgICBpbnQgb3ZlcmZsb3dUb3AgPSAhc3R5bGUoKS0+aXNMZWZ0VG9SaWdo
dERpcmVjdGlvbigpID8gbWluKDAsIGxhc3RSZWN0LnkoKSkgOiAwOwotICAgICAgICAgICAgICAg
IGludCBvdmVyZmxvd0JvdHRvbSA9IHN0eWxlKCktPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/
IG1heChoZWlnaHQoKSwgbGFzdFJlY3QuYm90dG9tKCkpIDogMDsKKyAgICAgICAgICAgICAgICBp
bnQgb3ZlcmZsb3dCb3R0b20gPSBzdHlsZSgpLT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyBt
YXgoaGVpZ2h0KCksIGxhc3RSZWN0Lm1heFkoKSkgOiAwOwogICAgICAgICAgICAgICAgIGludCBv
dmVyZmxvd1dpZHRoID0gYm9yZGVyQmVmb3JlKCkgKyBwYWRkaW5nQmVmb3JlKCkgKyBjb2xJbmZv
LT5jb2x1bW5IZWlnaHQoKTsKICAgICAgICAgICAgICAgICBhZGRMYXlvdXRPdmVyZmxvdyhJbnRS
ZWN0KDAsIG92ZXJmbG93VG9wLCBvdmVyZmxvd1dpZHRoLCBvdmVyZmxvd0JvdHRvbSAtIG92ZXJm
bG93VG9wKSk7CiAgICAgICAgICAgICB9CkBAIC0yMzQ3LDE0ICsyMzQ3LDE0IEBAIHZvaWQgUmVu
ZGVyQmxvY2s6OnBhaW50Q2hpbGRyZW4oUGFpbnRJbmYKICAgICAgICAgYm9vbCBjaGVja0JlZm9y
ZUFsd2F5cyA9ICFjaGlsZHJlbklubGluZSgpICYmICh1c2VQcmludFJlY3QgJiYgY2hpbGQtPnN0
eWxlKCktPnBhZ2VCcmVha0JlZm9yZSgpID09IFBCQUxXQVlTKTsKICAgICAgICAgaWYgKGNoZWNr
QmVmb3JlQWx3YXlzCiAgICAgICAgICAgICAmJiAodHkgKyBjaGlsZC0+eSgpKSA+IHBhaW50SW5m
by5yZWN0LnkoKQotICAgICAgICAgICAgJiYgKHR5ICsgY2hpbGQtPnkoKSkgPCBwYWludEluZm8u
cmVjdC5ib3R0b20oKSkgeworICAgICAgICAgICAgJiYgKHR5ICsgY2hpbGQtPnkoKSkgPCBwYWlu
dEluZm8ucmVjdC5tYXhZKCkpIHsKICAgICAgICAgICAgIHZpZXcoKS0+c2V0QmVzdFRydW5jYXRl
ZEF0KHR5ICsgY2hpbGQtPnkoKSwgdGhpcywgdHJ1ZSk7CiAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgIH0KIAogICAgICAgICBpZiAoIWNoaWxkLT5pc0Zsb2F0aW5nKCkgJiYgY2hpbGQtPmlz
UmVwbGFjZWQoKSAmJiB1c2VQcmludFJlY3QgJiYgY2hpbGQtPmhlaWdodCgpIDw9IHJlbmRlclZp
ZXctPnByaW50UmVjdCgpLmhlaWdodCgpKSB7CiAgICAgICAgICAgICAvLyBQYWdpbmF0ZSBibG9j
ay1sZXZlbCByZXBsYWNlZCBlbGVtZW50cy4KLSAgICAgICAgICAgIGlmICh0eSArIGNoaWxkLT55
KCkgKyBjaGlsZC0+aGVpZ2h0KCkgPiByZW5kZXJWaWV3LT5wcmludFJlY3QoKS5ib3R0b20oKSkg
eworICAgICAgICAgICAgaWYgKHR5ICsgY2hpbGQtPnkoKSArIGNoaWxkLT5oZWlnaHQoKSA+IHJl
bmRlclZpZXctPnByaW50UmVjdCgpLm1heFkoKSkgewogICAgICAgICAgICAgICAgIGlmICh0eSAr
IGNoaWxkLT55KCkgPCByZW5kZXJWaWV3LT50cnVuY2F0ZWRBdCgpKQogICAgICAgICAgICAgICAg
ICAgICByZW5kZXJWaWV3LT5zZXRCZXN0VHJ1bmNhdGVkQXQodHkgKyBjaGlsZC0+eSgpLCBjaGls
ZCk7CiAgICAgICAgICAgICAgICAgLy8gSWYgd2Ugd2VyZSBhYmxlIHRvIHRydW5jYXRlLCBkb24n
dCBwYWludC4KQEAgLTIzNzEsNyArMjM3MSw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OnBhaW50Q2hp
bGRyZW4oUGFpbnRJbmYKICAgICAgICAgYm9vbCBjaGVja0FmdGVyQWx3YXlzID0gIWNoaWxkcmVu
SW5saW5lKCkgJiYgKHVzZVByaW50UmVjdCAmJiBjaGlsZC0+c3R5bGUoKS0+cGFnZUJyZWFrQWZ0
ZXIoKSA9PSBQQkFMV0FZUyk7CiAgICAgICAgIGlmIChjaGVja0FmdGVyQWx3YXlzCiAgICAgICAg
ICAgICAmJiAodHkgKyBjaGlsZC0+eSgpICsgY2hpbGQtPmhlaWdodCgpKSA+IHBhaW50SW5mby5y
ZWN0LnkoKQotICAgICAgICAgICAgJiYgKHR5ICsgY2hpbGQtPnkoKSArIGNoaWxkLT5oZWlnaHQo
KSkgPCBwYWludEluZm8ucmVjdC5ib3R0b20oKSkgeworICAgICAgICAgICAgJiYgKHR5ICsgY2hp
bGQtPnkoKSArIGNoaWxkLT5oZWlnaHQoKSkgPCBwYWludEluZm8ucmVjdC5tYXhZKCkpIHsKICAg
ICAgICAgICAgIHZpZXcoKS0+c2V0QmVzdFRydW5jYXRlZEF0KHR5ICsgY2hpbGQtPnkoKSArIGNo
aWxkLT5oZWlnaHQoKSArIG1heCgwLCBjaGlsZC0+Y29sbGFwc2VkTWFyZ2luQWZ0ZXIoKSksIHRo
aXMsIHRydWUpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CkBAIC0yNTM3LDcgKzI1
MzcsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjpwYWludEVsbGlwc2lzQm94ZXMoUGFpCiAgICAgICAg
IC8vIGludGVyc2VjdC4KICAgICAgICAgaW50IHlQb3MgPSB0eSArIGZpcnN0TGluZUJveCgpLT55
KCk7CiAgICAgICAgIGludCBoID0gbGFzdExpbmVCb3goKS0+eSgpICsgbGFzdExpbmVCb3goKS0+
bG9naWNhbEhlaWdodCgpIC0gZmlyc3RMaW5lQm94KCktPnkoKTsKLSAgICAgICAgaWYgKHlQb3Mg
Pj0gcGFpbnRJbmZvLnJlY3QuYm90dG9tKCkgfHwgeVBvcyArIGggPD0gcGFpbnRJbmZvLnJlY3Qu
eSgpKQorICAgICAgICBpZiAoeVBvcyA+PSBwYWludEluZm8ucmVjdC5tYXhZKCkgfHwgeVBvcyAr
IGggPD0gcGFpbnRJbmZvLnJlY3QueSgpKQogICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAg
IC8vIFNlZSBpZiBvdXIgYm94ZXMgaW50ZXJzZWN0IHdpdGggdGhlIGRpcnR5IHJlY3QuICBJZiBz
bywgdGhlbiB3ZSBwYWludApAQCAtMjU0Niw3ICsyNTQ2LDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6
cGFpbnRFbGxpcHNpc0JveGVzKFBhaQogICAgICAgICBmb3IgKFJvb3RJbmxpbmVCb3gqIGN1cnIg
PSBmaXJzdFJvb3RCb3goKTsgY3VycjsgY3VyciA9IGN1cnItPm5leHRSb290Qm94KCkpIHsKICAg
ICAgICAgICAgIHlQb3MgPSB0eSArIGN1cnItPnkoKTsKICAgICAgICAgICAgIGggPSBjdXJyLT5s
b2dpY2FsSGVpZ2h0KCk7Ci0gICAgICAgICAgICBpZiAoY3Vyci0+ZWxsaXBzaXNCb3goKSAmJiB5
UG9zIDwgcGFpbnRJbmZvLnJlY3QuYm90dG9tKCkgJiYgeVBvcyArIGggPiBwYWludEluZm8ucmVj
dC55KCkpCisgICAgICAgICAgICBpZiAoY3Vyci0+ZWxsaXBzaXNCb3goKSAmJiB5UG9zIDwgcGFp
bnRJbmZvLnJlY3QubWF4WSgpICYmIHlQb3MgKyBoID4gcGFpbnRJbmZvLnJlY3QueSgpKQogICAg
ICAgICAgICAgICAgIGN1cnItPnBhaW50RWxsaXBzaXNCb3gocGFpbnRJbmZvLCB0eCwgdHkpOwog
ICAgICAgICB9CiAgICAgfQpAQCAtMjgxNiw4ICsyODE2LDggQEAgR2FwUmVjdHMgUmVuZGVyQmxv
Y2s6OmlubGluZVNlbGVjdGlvbkdhcAogICAgICAgICBJbnRSZWN0IGxvZ2ljYWxSZWN0KGN1cnIt
PmxvZ2ljYWxMZWZ0KCksIHNlbFRvcCwgY3Vyci0+bG9naWNhbFdpZHRoKCksIHNlbFRvcCArIHNl
bEhlaWdodCk7CiAgICAgICAgIGxvZ2ljYWxSZWN0Lm1vdmUoc3R5bGUoKS0+aXNIb3Jpem9udGFs
V3JpdGluZ01vZGUoKSA/IG9mZnNldEZyb21Sb290QmxvY2sgOiBJbnRTaXplKG9mZnNldEZyb21S
b290QmxvY2suaGVpZ2h0KCksIG9mZnNldEZyb21Sb290QmxvY2sud2lkdGgoKSkpOwogICAgICAg
ICBJbnRSZWN0IHBoeXNpY2FsUmVjdCA9IHJvb3RCbG9jay0+bG9naWNhbFJlY3RUb1BoeXNpY2Fs
UmVjdChyb290QmxvY2tQaHlzaWNhbFBvc2l0aW9uLCBsb2dpY2FsUmVjdCk7Ci0gICAgICAgIGlm
ICghcGFpbnRJbmZvIHx8IChzdHlsZSgpLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpICYmIHBo
eXNpY2FsUmVjdC55KCkgPCBwYWludEluZm8tPnJlY3QuYm90dG9tKCkgJiYgcGh5c2ljYWxSZWN0
LmJvdHRvbSgpID4gcGFpbnRJbmZvLT5yZWN0LnkoKSkKLSAgICAgICAgICAgIHx8ICghc3R5bGUo
KS0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSAmJiBwaHlzaWNhbFJlY3QueCgpIDwgcGFpbnRJ
bmZvLT5yZWN0LnJpZ2h0KCkgJiYgcGh5c2ljYWxSZWN0LnJpZ2h0KCkgPiBwYWludEluZm8tPnJl
Y3QueCgpKSkKKyAgICAgICAgaWYgKCFwYWludEluZm8gfHwgKHN0eWxlKCktPmlzSG9yaXpvbnRh
bFdyaXRpbmdNb2RlKCkgJiYgcGh5c2ljYWxSZWN0LnkoKSA8IHBhaW50SW5mby0+cmVjdC5tYXhZ
KCkgJiYgcGh5c2ljYWxSZWN0Lm1heFkoKSA+IHBhaW50SW5mby0+cmVjdC55KCkpCisgICAgICAg
ICAgICB8fCAoIXN0eWxlKCktPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgJiYgcGh5c2ljYWxS
ZWN0LngoKSA8IHBhaW50SW5mby0+cmVjdC5tYXhYKCkgJiYgcGh5c2ljYWxSZWN0Lm1heFgoKSA+
IHBhaW50SW5mby0+cmVjdC54KCkpKQogICAgICAgICAgICAgcmVzdWx0LnVuaXRlKGN1cnItPmxp
bmVTZWxlY3Rpb25HYXAocm9vdEJsb2NrLCByb290QmxvY2tQaHlzaWNhbFBvc2l0aW9uLCBvZmZz
ZXRGcm9tUm9vdEJsb2NrLCBzZWxUb3AsIHNlbEhlaWdodCwgcGFpbnRJbmZvKSk7CiAKICAgICAg
ICAgbGFzdFNlbGVjdGVkTGluZSA9IGN1cnI7CkBAIC00MzIyLDcgKzQzMjIsNyBAQCB2b2lkIFJl
bmRlckJsb2NrOjphZGp1c3RQb2ludFRvQ29sdW1uQ29uCiAgICAgICAgIEludFJlY3QgY29sUmVj
dCA9IGNvbHVtblJlY3RBdChjb2xJbmZvLCBpKTsKICAgICAgICAgaWYgKHN0eWxlKCktPmlzSG9y
aXpvbnRhbFdyaXRpbmdNb2RlKCkpIHsKICAgICAgICAgICAgIEludFJlY3QgZ2FwQW5kQ29sdW1u
UmVjdChjb2xSZWN0LngoKSAtIGhhbGZDb2xHYXAsIGNvbFJlY3QueSgpLCBjb2xSZWN0LndpZHRo
KCkgKyBjb2xHYXAsIGNvbFJlY3QuaGVpZ2h0KCkpOwotICAgICAgICAgICAgaWYgKHBvaW50Lngo
KSA+PSBnYXBBbmRDb2x1bW5SZWN0LngoKSAmJiBwb2ludC54KCkgPCBnYXBBbmRDb2x1bW5SZWN0
LnJpZ2h0KCkpIHsKKyAgICAgICAgICAgIGlmIChwb2ludC54KCkgPj0gZ2FwQW5kQ29sdW1uUmVj
dC54KCkgJiYgcG9pbnQueCgpIDwgZ2FwQW5kQ29sdW1uUmVjdC5tYXhYKCkpIHsKICAgICAgICAg
ICAgICAgICAvLyBGSVhNRTogVGhlIGNsYW1waW5nIHRoYXQgZm9sbG93cyBpcyBub3QgY29tcGxl
dGVseSByaWdodCBmb3IgcmlnaHQtdG8tbGVmdAogICAgICAgICAgICAgICAgIC8vIGNvbnRlbnQu
CiAgICAgICAgICAgICAgICAgLy8gQ2xhbXAgZXZlcnl0aGluZyBhYm92ZSB0aGUgY29sdW1uIHRv
IGl0cyB0b3AgbGVmdC4KQEAgLTQzMzAsNyArNDMzMCw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmFk
anVzdFBvaW50VG9Db2x1bW5Db24KICAgICAgICAgICAgICAgICAgICAgcG9pbnQgPSBnYXBBbmRD
b2x1bW5SZWN0LmxvY2F0aW9uKCk7CiAgICAgICAgICAgICAgICAgLy8gQ2xhbXAgZXZlcnl0aGlu
ZyBiZWxvdyB0aGUgY29sdW1uIHRvIHRoZSBuZXh0IGNvbHVtbidzIHRvcCBsZWZ0LiBJZiB0aGVy
ZSBpcwogICAgICAgICAgICAgICAgIC8vIG5vIG5leHQgY29sdW1uLCB0aGlzIHN0aWxsIG1hcHMg
dG8ganVzdCBhZnRlciB0aGlzIGNvbHVtbi4KLSAgICAgICAgICAgICAgICBlbHNlIGlmIChwb2lu
dC55KCkgPj0gZ2FwQW5kQ29sdW1uUmVjdC5ib3R0b20oKSkgeworICAgICAgICAgICAgICAgIGVs
c2UgaWYgKHBvaW50LnkoKSA+PSBnYXBBbmRDb2x1bW5SZWN0Lm1heFkoKSkgewogICAgICAgICAg
ICAgICAgICAgICBwb2ludCA9IGdhcEFuZENvbHVtblJlY3QubG9jYXRpb24oKTsKICAgICAgICAg
ICAgICAgICAgICAgcG9pbnQubW92ZSgwLCBnYXBBbmRDb2x1bW5SZWN0LmhlaWdodCgpKTsKICAg
ICAgICAgICAgICAgICB9CkBAIC00MzQ0LDcgKzQzNDQsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjph
ZGp1c3RQb2ludFRvQ29sdW1uQ29uCiAgICAgICAgICAgICBsb2dpY2FsT2Zmc2V0ICs9IGNvbFJl
Y3QuaGVpZ2h0KCk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBJbnRSZWN0IGdhcEFu
ZENvbHVtblJlY3QoY29sUmVjdC54KCksIGNvbFJlY3QueSgpIC0gaGFsZkNvbEdhcCwgY29sUmVj
dC53aWR0aCgpLCBjb2xSZWN0LmhlaWdodCgpICsgY29sR2FwKTsKLSAgICAgICAgICAgIGlmIChw
b2ludC55KCkgPj0gZ2FwQW5kQ29sdW1uUmVjdC55KCkgJiYgcG9pbnQueSgpIDwgZ2FwQW5kQ29s
dW1uUmVjdC5ib3R0b20oKSkgeworICAgICAgICAgICAgaWYgKHBvaW50LnkoKSA+PSBnYXBBbmRD
b2x1bW5SZWN0LnkoKSAmJiBwb2ludC55KCkgPCBnYXBBbmRDb2x1bW5SZWN0Lm1heFkoKSkgewog
ICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBUaGUgY2xhbXBpbmcgdGhhdCBmb2xsb3dzIGlzIG5v
dCBjb21wbGV0ZWx5IHJpZ2h0IGZvciByaWdodC10by1sZWZ0CiAgICAgICAgICAgICAgICAgLy8g
Y29udGVudC4KICAgICAgICAgICAgICAgICAvLyBDbGFtcCBldmVyeXRoaW5nIGFib3ZlIHRoZSBj
b2x1bW4gdG8gaXRzIHRvcCBsZWZ0LgpAQCAtNDM1Miw3ICs0MzUyLDcgQEAgdm9pZCBSZW5kZXJC
bG9jazo6YWRqdXN0UG9pbnRUb0NvbHVtbkNvbgogICAgICAgICAgICAgICAgICAgICBwb2ludCA9
IGdhcEFuZENvbHVtblJlY3QubG9jYXRpb24oKTsKICAgICAgICAgICAgICAgICAvLyBDbGFtcCBl
dmVyeXRoaW5nIGJlbG93IHRoZSBjb2x1bW4gdG8gdGhlIG5leHQgY29sdW1uJ3MgdG9wIGxlZnQu
IElmIHRoZXJlIGlzCiAgICAgICAgICAgICAgICAgLy8gbm8gbmV4dCBjb2x1bW4sIHRoaXMgc3Rp
bGwgbWFwcyB0byBqdXN0IGFmdGVyIHRoaXMgY29sdW1uLgotICAgICAgICAgICAgICAgIGVsc2Ug
aWYgKHBvaW50LngoKSA+PSBnYXBBbmRDb2x1bW5SZWN0LnJpZ2h0KCkpIHsKKyAgICAgICAgICAg
ICAgICBlbHNlIGlmIChwb2ludC54KCkgPj0gZ2FwQW5kQ29sdW1uUmVjdC5tYXhYKCkpIHsKICAg
ICAgICAgICAgICAgICAgICAgcG9pbnQgPSBnYXBBbmRDb2x1bW5SZWN0LmxvY2F0aW9uKCk7CiAg
ICAgICAgICAgICAgICAgICAgIHBvaW50Lm1vdmUoZ2FwQW5kQ29sdW1uUmVjdC53aWR0aCgpLCAw
KTsKICAgICAgICAgICAgICAgICB9CkBAIC00NDI5LDkgKzQ0MjksOSBAQCB2b2lkIFJlbmRlckJs
b2NrOjpmbGlwRm9yV3JpdGluZ01vZGVJbmNsCiAgICAgaW50IGNvbHVtbkxvZ2ljYWxIZWlnaHQg
PSBjb2xJbmZvLT5jb2x1bW5IZWlnaHQoKTsKICAgICBpbnQgZXhwYW5kZWRMb2dpY2FsSGVpZ2h0
ID0gYm9yZGVyQmVmb3JlKCkgKyBwYWRkaW5nQmVmb3JlKCkgKyBjb2x1bW5Db3VudChjb2xJbmZv
KSAqIGNvbHVtbkxvZ2ljYWxIZWlnaHQgKyBib3JkZXJBZnRlcigpICsgcGFkZGluZ0FmdGVyKCkg
KyBzY3JvbGxiYXJMb2dpY2FsSGVpZ2h0KCk7CiAgICAgaWYgKHN0eWxlKCktPmlzSG9yaXpvbnRh
bFdyaXRpbmdNb2RlKCkpCi0gICAgICAgIHJlY3Quc2V0WShleHBhbmRlZExvZ2ljYWxIZWlnaHQg
LSByZWN0LmJvdHRvbSgpKTsKKyAgICAgICAgcmVjdC5zZXRZKGV4cGFuZGVkTG9naWNhbEhlaWdo
dCAtIHJlY3QubWF4WSgpKTsKICAgICBlbHNlCi0gICAgICAgIHJlY3Quc2V0WChleHBhbmRlZExv
Z2ljYWxIZWlnaHQgLSByZWN0LnJpZ2h0KCkpOworICAgICAgICByZWN0LnNldFgoZXhwYW5kZWRM
b2dpY2FsSGVpZ2h0IC0gcmVjdC5tYXhYKCkpOwogfQogCiB2b2lkIFJlbmRlckJsb2NrOjphZGp1
c3RGb3JDb2x1bW5zKEludFNpemUmIG9mZnNldCwgY29uc3QgSW50UG9pbnQmIHBvaW50KSBjb25z
dApAQCAtNDQ1OSwxMiArNDQ1OSwxMiBAQCB2b2lkIFJlbmRlckJsb2NrOjphZGp1c3RGb3JDb2x1
bW5zKEludFNpCiAKICAgICAgICAgLy8gTm93IHdlJ3JlIGluIHRoZSBzYW1lIGNvb3JkaW5hdGUg
c3BhY2UgYXMgdGhlIHBvaW50LiAgU2VlIGlmIGl0IGlzIGluc2lkZSB0aGUgcmVjdGFuZ2xlLgog
ICAgICAgICBpZiAoc3R5bGUoKS0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkgewotICAgICAg
ICAgICAgaWYgKHBvaW50LnkoKSA+PSBzbGljZVJlY3QueSgpICYmIHBvaW50LnkoKSA8IHNsaWNl
UmVjdC5ib3R0b20oKSkgeworICAgICAgICAgICAgaWYgKHBvaW50LnkoKSA+PSBzbGljZVJlY3Qu
eSgpICYmIHBvaW50LnkoKSA8IHNsaWNlUmVjdC5tYXhZKCkpIHsKICAgICAgICAgICAgICAgICBv
ZmZzZXQuZXhwYW5kKGNvbHVtblJlY3RBdChjb2xJbmZvLCBpKS54KCkgLSBsb2dpY2FsTGVmdCwg
LWxvZ2ljYWxPZmZzZXQpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0K
ICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlmIChwb2ludC54KCkgPj0gc2xpY2VSZWN0
LngoKSAmJiBwb2ludC54KCkgPCBzbGljZVJlY3QucmlnaHQoKSkgeworICAgICAgICAgICAgaWYg
KHBvaW50LngoKSA+PSBzbGljZVJlY3QueCgpICYmIHBvaW50LngoKSA8IHNsaWNlUmVjdC5tYXhY
KCkpIHsKICAgICAgICAgICAgICAgICBvZmZzZXQuZXhwYW5kKC1sb2dpY2FsT2Zmc2V0LCBjb2x1
bW5SZWN0QXQoY29sSW5mbywgaSkueSgpIC0gbG9naWNhbExlZnQpOwogICAgICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJCbG9jay5oCShyZXZpc2lvbiA3NzI2MCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOTgsOSArMzk4LDkgQEAgcHJpdmF0ZToK
ICAgICAgICAgdm9pZCBzZXRJc1BsYWNlZChib29sIHBsYWNlZCA9IHRydWUpIHsgbV9pc1BsYWNl
ZCA9IHBsYWNlZDsgfQogCiAgICAgICAgIGludCBsZWZ0KCkgY29uc3QgeyBBU1NFUlQoaXNQbGFj
ZWQoKSk7IHJldHVybiBtX2ZyYW1lUmVjdC54KCk7IH0KLSAgICAgICAgaW50IHJpZ2h0KCkgY29u
c3QgeyBBU1NFUlQoaXNQbGFjZWQoKSk7IHJldHVybiBtX2ZyYW1lUmVjdC5yaWdodCgpOyB9Cisg
ICAgICAgIGludCByaWdodCgpIGNvbnN0IHsgQVNTRVJUKGlzUGxhY2VkKCkpOyByZXR1cm4gbV9m
cmFtZVJlY3QubWF4WCgpOyB9CiAgICAgICAgIGludCB0b3AoKSBjb25zdCB7IEFTU0VSVChpc1Bs
YWNlZCgpKTsgcmV0dXJuIG1fZnJhbWVSZWN0LnkoKTsgfQotICAgICAgICBpbnQgYm90dG9tKCkg
Y29uc3QgeyBBU1NFUlQoaXNQbGFjZWQoKSk7IHJldHVybiBtX2ZyYW1lUmVjdC5ib3R0b20oKTsg
fQorICAgICAgICBpbnQgYm90dG9tKCkgY29uc3QgeyBBU1NFUlQoaXNQbGFjZWQoKSk7IHJldHVy
biBtX2ZyYW1lUmVjdC5tYXhZKCk7IH0KICAgICAgICAgaW50IHdpZHRoKCkgY29uc3QgeyByZXR1
cm4gbV9mcmFtZVJlY3Qud2lkdGgoKTsgfQogICAgICAgICBpbnQgaGVpZ2h0KCkgY29uc3QgeyBy
ZXR1cm4gbV9mcmFtZVJlY3QuaGVpZ2h0KCk7IH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckJveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckJveC5jcHAJKHJldmlzaW9uIDc3MjYwKQorKysgU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckJveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU0OCwxNiArNTQ4LDE2IEBA
IEludFJlY3QgUmVuZGVyQm94OjpyZWZsZWN0ZWRSZWN0KGNvbnN0IEkKICAgICBJbnRSZWN0IHJl
c3VsdCA9IHI7CiAgICAgc3dpdGNoIChzdHlsZSgpLT5ib3hSZWZsZWN0KCktPmRpcmVjdGlvbigp
KSB7CiAgICAgICAgIGNhc2UgUmVmbGVjdGlvbkJlbG93OgotICAgICAgICAgICAgcmVzdWx0LnNl
dFkoYm94LmJvdHRvbSgpICsgcmVmbGVjdGlvbk9mZnNldCgpICsgKGJveC5ib3R0b20oKSAtIHIu
Ym90dG9tKCkpKTsKKyAgICAgICAgICAgIHJlc3VsdC5zZXRZKGJveC5tYXhZKCkgKyByZWZsZWN0
aW9uT2Zmc2V0KCkgKyAoYm94Lm1heFkoKSAtIHIubWF4WSgpKSk7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgY2FzZSBSZWZsZWN0aW9uQWJvdmU6Ci0gICAgICAgICAgICByZXN1bHQuc2V0
WShib3gueSgpIC0gcmVmbGVjdGlvbk9mZnNldCgpIC0gYm94LmhlaWdodCgpICsgKGJveC5ib3R0
b20oKSAtIHIuYm90dG9tKCkpKTsKKyAgICAgICAgICAgIHJlc3VsdC5zZXRZKGJveC55KCkgLSBy
ZWZsZWN0aW9uT2Zmc2V0KCkgLSBib3guaGVpZ2h0KCkgKyAoYm94Lm1heFkoKSAtIHIubWF4WSgp
KSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBSZWZsZWN0aW9uTGVmdDoKLSAg
ICAgICAgICAgIHJlc3VsdC5zZXRYKGJveC54KCkgLSByZWZsZWN0aW9uT2Zmc2V0KCkgLSBib3gu
d2lkdGgoKSArIChib3gucmlnaHQoKSAtIHIucmlnaHQoKSkpOworICAgICAgICAgICAgcmVzdWx0
LnNldFgoYm94LngoKSAtIHJlZmxlY3Rpb25PZmZzZXQoKSAtIGJveC53aWR0aCgpICsgKGJveC5t
YXhYKCkgLSByLm1heFgoKSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgUmVm
bGVjdGlvblJpZ2h0OgotICAgICAgICAgICAgcmVzdWx0LnNldFgoYm94LnJpZ2h0KCkgKyByZWZs
ZWN0aW9uT2Zmc2V0KCkgKyAoYm94LnJpZ2h0KCkgLSByLnJpZ2h0KCkpKTsKKyAgICAgICAgICAg
IHJlc3VsdC5zZXRYKGJveC5tYXhYKCkgKyByZWZsZWN0aW9uT2Zmc2V0KCkgKyAoYm94Lm1heFgo
KSAtIHIubWF4WCgpKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICB9CiAgICAgcmV0dXJuIHJl
c3VsdDsKQEAgLTI5ODcsNyArMjk4Nyw3IEBAIEludFJlY3QgUmVuZGVyQm94Ojpsb2NhbENhcmV0
UmVjdChJbmxpbmUKICAgICAgICAgcmVjdC5zZXRIZWlnaHQoZm9udEhlaWdodCk7CiAKICAgICBp
ZiAoZXh0cmFXaWR0aFRvRW5kT2ZMaW5lKQotICAgICAgICAqZXh0cmFXaWR0aFRvRW5kT2ZMaW5l
ID0geCgpICsgd2lkdGgoKSAtIHJlY3QucmlnaHQoKTsKKyAgICAgICAgKmV4dHJhV2lkdGhUb0Vu
ZE9mTGluZSA9IHgoKSArIHdpZHRoKCkgLSByZWN0Lm1heFgoKTsKIAogICAgIC8vIE1vdmUgdG8g
bG9jYWwgY29vcmRzCiAgICAgcmVjdC5tb3ZlKC14KCksIC15KCkpOwpAQCAtMzEwOCw5ICszMTA4
LDkgQEAgdm9pZCBSZW5kZXJCb3g6OmFkZFNoYWRvd092ZXJmbG93KCkKICAgICBzdHlsZSgpLT5n
ZXRCb3hTaGFkb3dFeHRlbnQoc2hhZG93VG9wLCBzaGFkb3dSaWdodCwgc2hhZG93Qm90dG9tLCBz
aGFkb3dMZWZ0KTsKICAgICBJbnRSZWN0IGJvcmRlckJveCA9IGJvcmRlckJveFJlY3QoKTsKICAg
ICBpbnQgb3ZlcmZsb3dMZWZ0ID0gYm9yZGVyQm94LngoKSArIHNoYWRvd0xlZnQ7Ci0gICAgaW50
IG92ZXJmbG93UmlnaHQgPSBib3JkZXJCb3gucmlnaHQoKSArIHNoYWRvd1JpZ2h0OworICAgIGlu
dCBvdmVyZmxvd1JpZ2h0ID0gYm9yZGVyQm94Lm1heFgoKSArIHNoYWRvd1JpZ2h0OwogICAgIGlu
dCBvdmVyZmxvd1RvcCA9IGJvcmRlckJveC55KCkgKyBzaGFkb3dUb3A7Ci0gICAgaW50IG92ZXJm
bG93Qm90dG9tID0gYm9yZGVyQm94LmJvdHRvbSgpICsgc2hhZG93Qm90dG9tOworICAgIGludCBv
dmVyZmxvd0JvdHRvbSA9IGJvcmRlckJveC5tYXhZKCkgKyBzaGFkb3dCb3R0b207CiAgICAgYWRk
VmlzdWFsT3ZlcmZsb3coSW50UmVjdChvdmVyZmxvd0xlZnQsIG92ZXJmbG93VG9wLCBvdmVyZmxv
d1JpZ2h0IC0gb3ZlcmZsb3dMZWZ0LCBvdmVyZmxvd0JvdHRvbSAtIG92ZXJmbG93VG9wKSk7CiB9
CiAKQEAgLTMxNDksMTMgKzMxNDksMTMgQEAgdm9pZCBSZW5kZXJCb3g6OmFkZExheW91dE92ZXJm
bG93KGNvbnN0IAogICAgICAgICBib29sIGhhc0xlZnRPdmVyZmxvdyA9ICFzdHlsZSgpLT5pc0xl
ZnRUb1JpZ2h0RGlyZWN0aW9uKCkgJiYgc3R5bGUoKS0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUo
KTsKICAgICAgICAgCiAgICAgICAgIGlmICghaGFzVG9wT3ZlcmZsb3cpCi0gICAgICAgICAgICBv
dmVyZmxvd1JlY3Quc2hpZnRUb3BFZGdlVG8obWF4KG92ZXJmbG93UmVjdC55KCksIGNsaWVudEJv
eC55KCkpKTsKKyAgICAgICAgICAgIG92ZXJmbG93UmVjdC5zaGlmdE1pbllFZGdlVG8obWF4KG92
ZXJmbG93UmVjdC55KCksIGNsaWVudEJveC55KCkpKTsKICAgICAgICAgZWxzZQotICAgICAgICAg
ICAgb3ZlcmZsb3dSZWN0LnNoaWZ0Qm90dG9tRWRnZVRvKG1pbihvdmVyZmxvd1JlY3QuYm90dG9t
KCksIGNsaWVudEJveC5ib3R0b20oKSkpOworICAgICAgICAgICAgb3ZlcmZsb3dSZWN0LnNoaWZ0
TWF4WUVkZ2VUbyhtaW4ob3ZlcmZsb3dSZWN0Lm1heFkoKSwgY2xpZW50Qm94Lm1heFkoKSkpOwog
ICAgICAgICBpZiAoIWhhc0xlZnRPdmVyZmxvdykKLSAgICAgICAgICAgIG92ZXJmbG93UmVjdC5z
aGlmdExlZnRFZGdlVG8obWF4KG92ZXJmbG93UmVjdC54KCksIGNsaWVudEJveC54KCkpKTsKKyAg
ICAgICAgICAgIG92ZXJmbG93UmVjdC5zaGlmdE1pblhFZGdlVG8obWF4KG92ZXJmbG93UmVjdC54
KCksIGNsaWVudEJveC54KCkpKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgb3ZlcmZsb3dS
ZWN0LnNoaWZ0UmlnaHRFZGdlVG8obWluKG92ZXJmbG93UmVjdC5yaWdodCgpLCBjbGllbnRCb3gu
cmlnaHQoKSkpOworICAgICAgICAgICAgb3ZlcmZsb3dSZWN0LnNoaWZ0TWF4WEVkZ2VUbyhtaW4o
b3ZlcmZsb3dSZWN0Lm1heFgoKSwgY2xpZW50Qm94Lm1heFgoKSkpOwogICAgICAgICAKICAgICAg
ICAgLy8gTm93IHJlLXRlc3Qgd2l0aCB0aGUgYWRqdXN0ZWQgcmVjdGFuZ2xlIGFuZCBzZWUgaWYg
aXQgaGFzIGJlY29tZSB1bnJlYWNoYWJsZSBvciBmdWxseQogICAgICAgICAvLyBjb250YWluZWQu
CkBAIC0zMjQ0LDkgKzMyNDQsOSBAQCBJbnRSZWN0IFJlbmRlckJveDo6dmlzdWFsT3ZlcmZsb3dS
ZWN0Rm9yCiAgICAgLy8gV2UgYXJlIHB1dHRpbmcgb3Vyc2VsdmVzIGludG8gb3VyIHBhcmVudCdz
IGNvb3JkaW5hdGUgc3BhY2UuICBJZiB0aGVyZSBpcyBhIGZsaXBwZWQgYmxvY2sgbWlzbWF0Y2gK
ICAgICAvLyBpbiBhIHBhcnRpY3VsYXIgYXhpcywgdGhlbiB3ZSBoYXZlIHRvIGZsaXAgdGhlIHJl
Y3QgYWxvbmcgdGhhdCBheGlzLgogICAgIGlmIChzdHlsZSgpLT53cml0aW5nTW9kZSgpID09IFJp
Z2h0VG9MZWZ0V3JpdGluZ01vZGUgfHwgcGFyZW50U3R5bGUtPndyaXRpbmdNb2RlKCkgPT0gUmln
aHRUb0xlZnRXcml0aW5nTW9kZSkKLSAgICAgICAgcmVjdC5zZXRYKHdpZHRoKCkgLSByZWN0LnJp
Z2h0KCkpOworICAgICAgICByZWN0LnNldFgod2lkdGgoKSAtIHJlY3QubWF4WCgpKTsKICAgICBl
bHNlIGlmIChzdHlsZSgpLT53cml0aW5nTW9kZSgpID09IEJvdHRvbVRvVG9wV3JpdGluZ01vZGUg
fHwgcGFyZW50U3R5bGUtPndyaXRpbmdNb2RlKCkgPT0gQm90dG9tVG9Ub3BXcml0aW5nTW9kZSkK
LSAgICAgICAgcmVjdC5zZXRZKGhlaWdodCgpIC0gcmVjdC5ib3R0b20oKSk7CisgICAgICAgIHJl
Y3Quc2V0WShoZWlnaHQoKSAtIHJlY3QubWF4WSgpKTsKIAogICAgIHJldHVybiByZWN0OwogfQpA
QCAtMzI5MCw5ICszMjkwLDkgQEAgSW50UmVjdCBSZW5kZXJCb3g6OmxheW91dE92ZXJmbG93UmVj
dEZvcgogICAgIC8vIFdlIGFyZSBwdXR0aW5nIG91cnNlbHZlcyBpbnRvIG91ciBwYXJlbnQncyBj
b29yZGluYXRlIHNwYWNlLiAgSWYgdGhlcmUgaXMgYSBmbGlwcGVkIGJsb2NrIG1pc21hdGNoCiAg
ICAgLy8gaW4gYSBwYXJ0aWN1bGFyIGF4aXMsIHRoZW4gd2UgaGF2ZSB0byBmbGlwIHRoZSByZWN0
IGFsb25nIHRoYXQgYXhpcy4KICAgICBpZiAoc3R5bGUoKS0+d3JpdGluZ01vZGUoKSA9PSBSaWdo
dFRvTGVmdFdyaXRpbmdNb2RlIHx8IHBhcmVudFN0eWxlLT53cml0aW5nTW9kZSgpID09IFJpZ2h0
VG9MZWZ0V3JpdGluZ01vZGUpCi0gICAgICAgIHJlY3Quc2V0WCh3aWR0aCgpIC0gcmVjdC5yaWdo
dCgpKTsKKyAgICAgICAgcmVjdC5zZXRYKHdpZHRoKCkgLSByZWN0Lm1heFgoKSk7CiAgICAgZWxz
ZSBpZiAoc3R5bGUoKS0+d3JpdGluZ01vZGUoKSA9PSBCb3R0b21Ub1RvcFdyaXRpbmdNb2RlIHx8
IHBhcmVudFN0eWxlLT53cml0aW5nTW9kZSgpID09IEJvdHRvbVRvVG9wV3JpdGluZ01vZGUpCi0g
ICAgICAgIHJlY3Quc2V0WShoZWlnaHQoKSAtIHJlY3QuYm90dG9tKCkpOworICAgICAgICByZWN0
LnNldFkoaGVpZ2h0KCkgLSByZWN0Lm1heFkoKSk7CiAKICAgICByZXR1cm4gcmVjdDsKIH0KQEAg
LTMzMTUsOSArMzMxNSw5IEBAIHZvaWQgUmVuZGVyQm94OjpmbGlwRm9yV3JpdGluZ01vZGUoSW50
UmUKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKHN0eWxlKCktPmlzSG9yaXpvbnRhbFdyaXRp
bmdNb2RlKCkpCi0gICAgICAgIHJlY3Quc2V0WShoZWlnaHQoKSAtIHJlY3QuYm90dG9tKCkpOwor
ICAgICAgICByZWN0LnNldFkoaGVpZ2h0KCkgLSByZWN0Lm1heFkoKSk7CiAgICAgZWxzZQotICAg
ICAgICByZWN0LnNldFgod2lkdGgoKSAtIHJlY3QucmlnaHQoKSk7CisgICAgICAgIHJlY3Quc2V0
WCh3aWR0aCgpIC0gcmVjdC5tYXhYKCkpOwogfQogCiBpbnQgUmVuZGVyQm94OjpmbGlwRm9yV3Jp
dGluZ01vZGUoaW50IHBvc2l0aW9uKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckZyYW1lU2V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyRnJhbWVTZXQuY3BwCShyZXZpc2lvbiA3NzI2MCkKKysrIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJGcmFtZVNldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkzLDgg
KzkzLDggQEAgdm9pZCBSZW5kZXJGcmFtZVNldDo6cGFpbnRDb2x1bW5Cb3JkZXIoYwogICAgIC8v
IE5vdyBzdHJva2UgdGhlIGVkZ2VzIGJ1dCBvbmx5IGlmIHdlIGhhdmUgZW5vdWdoIHJvb20gdG8g
cGFpbnQgYm90aCBlZGdlcyB3aXRoIGEgbGl0dGxlCiAgICAgLy8gYml0IG9mIHRoZSBmaWxsIGNv
bG9yIHNob3dpbmcgdGhyb3VnaC4KICAgICBpZiAoYm9yZGVyUmVjdC53aWR0aCgpID49IDMpIHsK
LSAgICAgICAgY29udGV4dC0+ZmlsbFJlY3QoSW50UmVjdChib3JkZXJSZWN0LnRvcExlZnQoKSwg
SW50U2l6ZSgxLCBoZWlnaHQoKSkpLCBib3JkZXJTdGFydEVkZ2VDb2xvcigpLCBjb2xvclNwYWNl
KTsKLSAgICAgICAgY29udGV4dC0+ZmlsbFJlY3QoSW50UmVjdChib3JkZXJSZWN0LnRvcFJpZ2h0
KCksIEludFNpemUoMSwgaGVpZ2h0KCkpKSwgYm9yZGVyRW5kRWRnZUNvbG9yKCksIGNvbG9yU3Bh
Y2UpOworICAgICAgICBjb250ZXh0LT5maWxsUmVjdChJbnRSZWN0KGJvcmRlclJlY3QubG9jYXRp
b24oKSwgSW50U2l6ZSgxLCBoZWlnaHQoKSkpLCBib3JkZXJTdGFydEVkZ2VDb2xvcigpLCBjb2xv
clNwYWNlKTsKKyAgICAgICAgY29udGV4dC0+ZmlsbFJlY3QoSW50UmVjdChJbnRQb2ludChib3Jk
ZXJSZWN0Lm1heFgoKSAtIDEsIGJvcmRlclJlY3QueSgpKSwgSW50U2l6ZSgxLCBoZWlnaHQoKSkp
LCBib3JkZXJFbmRFZGdlQ29sb3IoKSwgY29sb3JTcGFjZSk7CiAgICAgfQogfQogCkBAIC0xMTMs
OCArMTEzLDggQEAgdm9pZCBSZW5kZXJGcmFtZVNldDo6cGFpbnRSb3dCb3JkZXIoY29ucwogICAg
IC8vIE5vdyBzdHJva2UgdGhlIGVkZ2VzIGJ1dCBvbmx5IGlmIHdlIGhhdmUgZW5vdWdoIHJvb20g
dG8gcGFpbnQgYm90aCBlZGdlcyB3aXRoIGEgbGl0dGxlCiAgICAgLy8gYml0IG9mIHRoZSBmaWxs
IGNvbG9yIHNob3dpbmcgdGhyb3VnaC4KICAgICBpZiAoYm9yZGVyUmVjdC5oZWlnaHQoKSA+PSAz
KSB7Ci0gICAgICAgIGNvbnRleHQtPmZpbGxSZWN0KEludFJlY3QoYm9yZGVyUmVjdC50b3BMZWZ0
KCksIEludFNpemUod2lkdGgoKSwgMSkpLCBib3JkZXJTdGFydEVkZ2VDb2xvcigpLCBjb2xvclNw
YWNlKTsKLSAgICAgICAgY29udGV4dC0+ZmlsbFJlY3QoSW50UmVjdChib3JkZXJSZWN0LmJvdHRv
bUxlZnQoKSwgSW50U2l6ZSh3aWR0aCgpLCAxKSksIGJvcmRlckVuZEVkZ2VDb2xvcigpLCBjb2xv
clNwYWNlKTsKKyAgICAgICAgY29udGV4dC0+ZmlsbFJlY3QoSW50UmVjdChib3JkZXJSZWN0Lmxv
Y2F0aW9uKCksIEludFNpemUod2lkdGgoKSwgMSkpLCBib3JkZXJTdGFydEVkZ2VDb2xvcigpLCBj
b2xvclNwYWNlKTsKKyAgICAgICAgY29udGV4dC0+ZmlsbFJlY3QoSW50UmVjdChJbnRQb2ludChi
b3JkZXJSZWN0LngoKSwgYm9yZGVyUmVjdC5tYXhZKCkgLSAxKSwgSW50U2l6ZSh3aWR0aCgpLCAx
KSksIGJvcmRlckVuZEVkZ2VDb2xvcigpLCBjb2xvclNwYWNlKTsKICAgICB9CiB9CiAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbmxpbmUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbmxpbmUuY3BwCShyZXZpc2lvbiA3NzI2
MCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbmxpbmUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMDM3LDMwICsxMDM3LDMwIEBAIHZvaWQgUmVuZGVySW5saW5lOjpwYWludE91
dGxpbmVGb3JMaW5lKEcKIAogICAgIGludCB0ID0gdHkgKyB0aGlzbGluZS55KCkgLSBvZmZzZXQ7
CiAgICAgaW50IGwgPSB0eCArIHRoaXNsaW5lLngoKSAtIG9mZnNldDsKLSAgICBpbnQgYiA9IHR5
ICsgdGhpc2xpbmUuYm90dG9tKCkgKyBvZmZzZXQ7Ci0gICAgaW50IHIgPSB0eCArIHRoaXNsaW5l
LnJpZ2h0KCkgKyBvZmZzZXQ7CisgICAgaW50IGIgPSB0eSArIHRoaXNsaW5lLm1heFkoKSArIG9m
ZnNldDsKKyAgICBpbnQgciA9IHR4ICsgdGhpc2xpbmUubWF4WCgpICsgb2Zmc2V0OwogICAgIAog
ICAgIC8vIGxlZnQgZWRnZQogICAgIGRyYXdMaW5lRm9yQm94U2lkZShncmFwaGljc0NvbnRleHQs
CiAgICAgICAgICAgICAgICBsIC0gb3csCi0gICAgICAgICAgICAgICB0IC0gKGxhc3RsaW5lLmlz
RW1wdHkoKSB8fCB0aGlzbGluZS54KCkgPCBsYXN0bGluZS54KCkgfHwgKGxhc3RsaW5lLnJpZ2h0
KCkgLSAxKSA8PSB0aGlzbGluZS54KCkgPyBvdyA6IDApLAorICAgICAgICAgICAgICAgdCAtIChs
YXN0bGluZS5pc0VtcHR5KCkgfHwgdGhpc2xpbmUueCgpIDwgbGFzdGxpbmUueCgpIHx8IChsYXN0
bGluZS5tYXhYKCkgLSAxKSA8PSB0aGlzbGluZS54KCkgPyBvdyA6IDApLAogICAgICAgICAgICAg
ICAgbCwKLSAgICAgICAgICAgICAgIGIgKyAobmV4dGxpbmUuaXNFbXB0eSgpIHx8IHRoaXNsaW5l
LngoKSA8PSBuZXh0bGluZS54KCkgfHwgKG5leHRsaW5lLnJpZ2h0KCkgLSAxKSA8PSB0aGlzbGlu
ZS54KCkgPyBvdyA6IDApLAorICAgICAgICAgICAgICAgYiArIChuZXh0bGluZS5pc0VtcHR5KCkg
fHwgdGhpc2xpbmUueCgpIDw9IG5leHRsaW5lLngoKSB8fCAobmV4dGxpbmUubWF4WCgpIC0gMSkg
PD0gdGhpc2xpbmUueCgpID8gb3cgOiAwKSwKICAgICAgICAgICAgICAgIEJTTGVmdCwKICAgICAg
ICAgICAgICAgIG9jLCBvcywKLSAgICAgICAgICAgICAgIChsYXN0bGluZS5pc0VtcHR5KCkgfHwg
dGhpc2xpbmUueCgpIDwgbGFzdGxpbmUueCgpIHx8IChsYXN0bGluZS5yaWdodCgpIC0gMSkgPD0g
dGhpc2xpbmUueCgpID8gb3cgOiAtb3cpLAotICAgICAgICAgICAgICAgKG5leHRsaW5lLmlzRW1w
dHkoKSB8fCB0aGlzbGluZS54KCkgPD0gbmV4dGxpbmUueCgpIHx8IChuZXh0bGluZS5yaWdodCgp
IC0gMSkgPD0gdGhpc2xpbmUueCgpID8gb3cgOiAtb3cpKTsKKyAgICAgICAgICAgICAgIChsYXN0
bGluZS5pc0VtcHR5KCkgfHwgdGhpc2xpbmUueCgpIDwgbGFzdGxpbmUueCgpIHx8IChsYXN0bGlu
ZS5tYXhYKCkgLSAxKSA8PSB0aGlzbGluZS54KCkgPyBvdyA6IC1vdyksCisgICAgICAgICAgICAg
ICAobmV4dGxpbmUuaXNFbXB0eSgpIHx8IHRoaXNsaW5lLngoKSA8PSBuZXh0bGluZS54KCkgfHwg
KG5leHRsaW5lLm1heFgoKSAtIDEpIDw9IHRoaXNsaW5lLngoKSA/IG93IDogLW93KSk7CiAgICAg
CiAgICAgLy8gcmlnaHQgZWRnZQogICAgIGRyYXdMaW5lRm9yQm94U2lkZShncmFwaGljc0NvbnRl
eHQsCiAgICAgICAgICAgICAgICByLAotICAgICAgICAgICAgICAgdCAtIChsYXN0bGluZS5pc0Vt
cHR5KCkgfHwgbGFzdGxpbmUucmlnaHQoKSA8IHRoaXNsaW5lLnJpZ2h0KCkgfHwgKHRoaXNsaW5l
LnJpZ2h0KCkgLSAxKSA8PSBsYXN0bGluZS54KCkgPyBvdyA6IDApLAorICAgICAgICAgICAgICAg
dCAtIChsYXN0bGluZS5pc0VtcHR5KCkgfHwgbGFzdGxpbmUubWF4WCgpIDwgdGhpc2xpbmUubWF4
WCgpIHx8ICh0aGlzbGluZS5tYXhYKCkgLSAxKSA8PSBsYXN0bGluZS54KCkgPyBvdyA6IDApLAog
ICAgICAgICAgICAgICAgciArIG93LAotICAgICAgICAgICAgICAgYiArIChuZXh0bGluZS5pc0Vt
cHR5KCkgfHwgbmV4dGxpbmUucmlnaHQoKSA8PSB0aGlzbGluZS5yaWdodCgpIHx8ICh0aGlzbGlu
ZS5yaWdodCgpIC0gMSkgPD0gbmV4dGxpbmUueCgpID8gb3cgOiAwKSwKKyAgICAgICAgICAgICAg
IGIgKyAobmV4dGxpbmUuaXNFbXB0eSgpIHx8IG5leHRsaW5lLm1heFgoKSA8PSB0aGlzbGluZS5t
YXhYKCkgfHwgKHRoaXNsaW5lLm1heFgoKSAtIDEpIDw9IG5leHRsaW5lLngoKSA/IG93IDogMCks
CiAgICAgICAgICAgICAgICBCU1JpZ2h0LAogICAgICAgICAgICAgICAgb2MsIG9zLAotICAgICAg
ICAgICAgICAgKGxhc3RsaW5lLmlzRW1wdHkoKSB8fCBsYXN0bGluZS5yaWdodCgpIDwgdGhpc2xp
bmUucmlnaHQoKSB8fCAodGhpc2xpbmUucmlnaHQoKSAtIDEpIDw9IGxhc3RsaW5lLngoKSA/IG93
IDogLW93KSwKLSAgICAgICAgICAgICAgIChuZXh0bGluZS5pc0VtcHR5KCkgfHwgbmV4dGxpbmUu
cmlnaHQoKSA8PSB0aGlzbGluZS5yaWdodCgpIHx8ICh0aGlzbGluZS5yaWdodCgpIC0gMSkgPD0g
bmV4dGxpbmUueCgpID8gb3cgOiAtb3cpKTsKKyAgICAgICAgICAgICAgIChsYXN0bGluZS5pc0Vt
cHR5KCkgfHwgbGFzdGxpbmUubWF4WCgpIDwgdGhpc2xpbmUubWF4WCgpIHx8ICh0aGlzbGluZS5t
YXhYKCkgLSAxKSA8PSBsYXN0bGluZS54KCkgPyBvdyA6IC1vdyksCisgICAgICAgICAgICAgICAo
bmV4dGxpbmUuaXNFbXB0eSgpIHx8IG5leHRsaW5lLm1heFgoKSA8PSB0aGlzbGluZS5tYXhYKCkg
fHwgKHRoaXNsaW5lLm1heFgoKSAtIDEpIDw9IG5leHRsaW5lLngoKSA/IG93IDogLW93KSk7CiAg
ICAgLy8gdXBwZXIgZWRnZQogICAgIGlmICh0aGlzbGluZS54KCkgPCBsYXN0bGluZS54KCkpCiAg
ICAgICAgIGRyYXdMaW5lRm9yQm94U2lkZShncmFwaGljc0NvbnRleHQsCkBAIC0xMDcyLDE0ICsx
MDcyLDE0IEBAIHZvaWQgUmVuZGVySW5saW5lOjpwYWludE91dGxpbmVGb3JMaW5lKEcKICAgICAg
ICAgICAgICAgICAgICBvdywKICAgICAgICAgICAgICAgICAgICAoIWxhc3RsaW5lLmlzRW1wdHko
KSAmJiB0eCArIGxhc3RsaW5lLngoKSArIDEgPCByICsgb3cpID8gLW93IDogb3cpOwogICAgIAot
ICAgIGlmIChsYXN0bGluZS5yaWdodCgpIDwgdGhpc2xpbmUucmlnaHQoKSkKKyAgICBpZiAobGFz
dGxpbmUubWF4WCgpIDwgdGhpc2xpbmUubWF4WCgpKQogICAgICAgICBkcmF3TGluZUZvckJveFNp
ZGUoZ3JhcGhpY3NDb250ZXh0LAotICAgICAgICAgICAgICAgICAgIG1heChsYXN0bGluZS5pc0Vt
cHR5KCkgPyAtMTAwMDAwMCA6IHR4ICsgbGFzdGxpbmUucmlnaHQoKSwgbCAtIG93KSwKKyAgICAg
ICAgICAgICAgICAgICBtYXgobGFzdGxpbmUuaXNFbXB0eSgpID8gLTEwMDAwMDAgOiB0eCArIGxh
c3RsaW5lLm1heFgoKSwgbCAtIG93KSwKICAgICAgICAgICAgICAgICAgICB0IC0gb3csCiAgICAg
ICAgICAgICAgICAgICAgciArIG93LAogICAgICAgICAgICAgICAgICAgIHQgLAogICAgICAgICAg
ICAgICAgICAgIEJTVG9wLCBvYywgb3MsCi0gICAgICAgICAgICAgICAgICAgKCFsYXN0bGluZS5p
c0VtcHR5KCkgJiYgbCAtIG93IDwgdHggKyBsYXN0bGluZS5yaWdodCgpKSA/IC1vdyA6IG93LAor
ICAgICAgICAgICAgICAgICAgICghbGFzdGxpbmUuaXNFbXB0eSgpICYmIGwgLSBvdyA8IHR4ICsg
bGFzdGxpbmUubWF4WCgpKSA/IC1vdyA6IG93LAogICAgICAgICAgICAgICAgICAgIG93KTsKICAg
ICAKICAgICAvLyBsb3dlciBlZGdlCkBAIC0xMDkzLDE0ICsxMDkzLDE0IEBAIHZvaWQgUmVuZGVy
SW5saW5lOjpwYWludE91dGxpbmVGb3JMaW5lKEcKICAgICAgICAgICAgICAgICAgICBvdywKICAg
ICAgICAgICAgICAgICAgICAoIW5leHRsaW5lLmlzRW1wdHkoKSAmJiB0eCArIG5leHRsaW5lLngo
KSArIDEgPCByICsgb3cpID8gLW93IDogb3cpOwogICAgIAotICAgIGlmIChuZXh0bGluZS5yaWdo
dCgpIDwgdGhpc2xpbmUucmlnaHQoKSkKKyAgICBpZiAobmV4dGxpbmUubWF4WCgpIDwgdGhpc2xp
bmUubWF4WCgpKQogICAgICAgICBkcmF3TGluZUZvckJveFNpZGUoZ3JhcGhpY3NDb250ZXh0LAot
ICAgICAgICAgICAgICAgICAgIG1heCghbmV4dGxpbmUuaXNFbXB0eSgpID8gdHggKyBuZXh0bGlu
ZS5yaWdodCgpIDogLTEwMDAwMDAsIGwgLSBvdyksCisgICAgICAgICAgICAgICAgICAgbWF4KCFu
ZXh0bGluZS5pc0VtcHR5KCkgPyB0eCArIG5leHRsaW5lLm1heFgoKSA6IC0xMDAwMDAwLCBsIC0g
b3cpLAogICAgICAgICAgICAgICAgICAgIGIsCiAgICAgICAgICAgICAgICAgICAgciArIG93LAog
ICAgICAgICAgICAgICAgICAgIGIgKyBvdywKICAgICAgICAgICAgICAgICAgICBCU0JvdHRvbSwg
b2MsIG9zLAotICAgICAgICAgICAgICAgICAgICghbmV4dGxpbmUuaXNFbXB0eSgpICYmIGwgLSBv
dyA8IHR4ICsgbmV4dGxpbmUucmlnaHQoKSkgPyAtb3cgOiBvdywKKyAgICAgICAgICAgICAgICAg
ICAoIW5leHRsaW5lLmlzRW1wdHkoKSAmJiBsIC0gb3cgPCB0eCArIG5leHRsaW5lLm1heFgoKSkg
PyAtb3cgOiBvdywKICAgICAgICAgICAgICAgICAgICBvdyk7CiB9CiAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAkocmV2aXNpb24gNzcyNjApCisrKyBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
NTE2LDcgKzE1MTYsNyBAQCBJbnRSZWN0IFJlbmRlckxheWVyOjpnZXRSZWN0VG9FeHBvc2UoY29u
CiAgICAgICAgIHNjcm9sbFggPSBTY3JvbGxBbGlnbm1lbnQ6OmdldEhpZGRlbkJlaGF2aW9yKGFs
aWduWCk7CiAgICAgLy8gSWYgd2UncmUgdHJ5aW5nIHRvIGFsaWduIHRvIHRoZSBjbG9zZXN0IGVk
Z2UsIGFuZCB0aGUgZXhwb3NlUmVjdCBpcyBmdXJ0aGVyIHJpZ2h0CiAgICAgLy8gdGhhbiB0aGUg
dmlzaWJsZVJlY3QsIGFuZCBub3QgYmlnZ2VyIHRoYW4gdGhlIHZpc2libGUgYXJlYSwgdGhlbiBh
bGlnbiB3aXRoIHRoZSByaWdodC4KLSAgICBpZiAoc2Nyb2xsWCA9PSBhbGlnblRvQ2xvc2VzdEVk
Z2UgJiYgZXhwb3NlUmVjdC5yaWdodCgpID4gdmlzaWJsZVJlY3QucmlnaHQoKSAmJiBleHBvc2VS
ZWN0LndpZHRoKCkgPCB2aXNpYmxlUmVjdC53aWR0aCgpKQorICAgIGlmIChzY3JvbGxYID09IGFs
aWduVG9DbG9zZXN0RWRnZSAmJiBleHBvc2VSZWN0Lm1heFgoKSA+IHZpc2libGVSZWN0Lm1heFgo
KSAmJiBleHBvc2VSZWN0LndpZHRoKCkgPCB2aXNpYmxlUmVjdC53aWR0aCgpKQogICAgICAgICBz
Y3JvbGxYID0gYWxpZ25SaWdodDsKIAogICAgIC8vIEdpdmVuIHRoZSBYIGJlaGF2aW9yLCBjb21w
dXRlIHRoZSBYIGNvb3JkaW5hdGUuCkBAIC0xNTI0LDcgKzE1MjQsNyBAQCBJbnRSZWN0IFJlbmRl
ckxheWVyOjpnZXRSZWN0VG9FeHBvc2UoY29uCiAgICAgaWYgKHNjcm9sbFggPT0gbm9TY3JvbGwp
IAogICAgICAgICB4ID0gdmlzaWJsZVJlY3QueCgpOwogICAgIGVsc2UgaWYgKHNjcm9sbFggPT0g
YWxpZ25SaWdodCkKLSAgICAgICAgeCA9IGV4cG9zZVJlY3QucmlnaHQoKSAtIHZpc2libGVSZWN0
LndpZHRoKCk7CisgICAgICAgIHggPSBleHBvc2VSZWN0Lm1heFgoKSAtIHZpc2libGVSZWN0Lndp
ZHRoKCk7CiAgICAgZWxzZSBpZiAoc2Nyb2xsWCA9PSBhbGlnbkNlbnRlcikKICAgICAgICAgeCA9
IGV4cG9zZVJlY3QueCgpICsgKGV4cG9zZVJlY3Qud2lkdGgoKSAtIHZpc2libGVSZWN0LndpZHRo
KCkpIC8gMjsKICAgICBlbHNlCkBAIC0xNTQ5LDcgKzE1NDksNyBAQCBJbnRSZWN0IFJlbmRlckxh
eWVyOjpnZXRSZWN0VG9FeHBvc2UoY29uCiAgICAgICAgIHNjcm9sbFkgPSBTY3JvbGxBbGlnbm1l
bnQ6OmdldEhpZGRlbkJlaGF2aW9yKGFsaWduWSk7CiAgICAgLy8gSWYgd2UncmUgdHJ5aW5nIHRv
IGFsaWduIHRvIHRoZSBjbG9zZXN0IGVkZ2UsIGFuZCB0aGUgZXhwb3NlUmVjdCBpcyBmdXJ0aGVy
IGRvd24KICAgICAvLyB0aGFuIHRoZSB2aXNpYmxlUmVjdCwgYW5kIG5vdCBiaWdnZXIgdGhhbiB0
aGUgdmlzaWJsZSBhcmVhLCB0aGVuIGFsaWduIHdpdGggdGhlIGJvdHRvbS4KLSAgICBpZiAoc2Ny
b2xsWSA9PSBhbGlnblRvQ2xvc2VzdEVkZ2UgJiYgZXhwb3NlUmVjdC5ib3R0b20oKSA+IHZpc2li
bGVSZWN0LmJvdHRvbSgpICYmIGV4cG9zZVJlY3QuaGVpZ2h0KCkgPCB2aXNpYmxlUmVjdC5oZWln
aHQoKSkKKyAgICBpZiAoc2Nyb2xsWSA9PSBhbGlnblRvQ2xvc2VzdEVkZ2UgJiYgZXhwb3NlUmVj
dC5tYXhZKCkgPiB2aXNpYmxlUmVjdC5tYXhZKCkgJiYgZXhwb3NlUmVjdC5oZWlnaHQoKSA8IHZp
c2libGVSZWN0LmhlaWdodCgpKQogICAgICAgICBzY3JvbGxZID0gYWxpZ25Cb3R0b207CiAKICAg
ICAvLyBHaXZlbiB0aGUgWSBiZWhhdmlvciwgY29tcHV0ZSB0aGUgWSBjb29yZGluYXRlLgpAQCAt
MTU1Nyw3ICsxNTU3LDcgQEAgSW50UmVjdCBSZW5kZXJMYXllcjo6Z2V0UmVjdFRvRXhwb3NlKGNv
bgogICAgIGlmIChzY3JvbGxZID09IG5vU2Nyb2xsKSAKICAgICAgICAgeSA9IHZpc2libGVSZWN0
LnkoKTsKICAgICBlbHNlIGlmIChzY3JvbGxZID09IGFsaWduQm90dG9tKQotICAgICAgICB5ID0g
ZXhwb3NlUmVjdC5ib3R0b20oKSAtIHZpc2libGVSZWN0LmhlaWdodCgpOworICAgICAgICB5ID0g
ZXhwb3NlUmVjdC5tYXhZKCkgLSB2aXNpYmxlUmVjdC5oZWlnaHQoKTsKICAgICBlbHNlIGlmIChz
Y3JvbGxZID09IGFsaWduQ2VudGVyKQogICAgICAgICB5ID0gZXhwb3NlUmVjdC55KCkgKyAoZXhw
b3NlUmVjdC5oZWlnaHQoKSAtIHZpc2libGVSZWN0LmhlaWdodCgpKSAvIDI7CiAgICAgZWxzZQpA
QCAtMTY5NCw4ICsxNjk0LDggQEAgc3RhdGljIEludFJlY3QgY29ybmVyUmVjdChjb25zdCBSZW5k
ZXJMYQogICAgICAgICBob3Jpem9udGFsVGhpY2tuZXNzID0gbGF5ZXItPnZlcnRpY2FsU2Nyb2xs
YmFyKCktPndpZHRoKCk7CiAgICAgICAgIHZlcnRpY2FsVGhpY2tuZXNzID0gbGF5ZXItPmhvcml6
b250YWxTY3JvbGxiYXIoKS0+aGVpZ2h0KCk7CiAgICAgfQotICAgIHJldHVybiBJbnRSZWN0KGJv
dW5kcy5yaWdodCgpIC0gaG9yaXpvbnRhbFRoaWNrbmVzcyAtIGxheWVyLT5yZW5kZXJlcigpLT5z
dHlsZSgpLT5ib3JkZXJSaWdodFdpZHRoKCksIAotICAgICAgICAgICAgICAgICAgIGJvdW5kcy5i
b3R0b20oKSAtIHZlcnRpY2FsVGhpY2tuZXNzIC0gbGF5ZXItPnJlbmRlcmVyKCktPnN0eWxlKCkt
PmJvcmRlckJvdHRvbVdpZHRoKCksCisgICAgcmV0dXJuIEludFJlY3QoYm91bmRzLm1heFgoKSAt
IGhvcml6b250YWxUaGlja25lc3MgLSBsYXllci0+cmVuZGVyZXIoKS0+c3R5bGUoKS0+Ym9yZGVy
UmlnaHRXaWR0aCgpLCAKKyAgICAgICAgICAgICAgICAgICBib3VuZHMubWF4WSgpIC0gdmVydGlj
YWxUaGlja25lc3MgLSBsYXllci0+cmVuZGVyZXIoKS0+c3R5bGUoKS0+Ym9yZGVyQm90dG9tV2lk
dGgoKSwKICAgICAgICAgICAgICAgICAgICBob3Jpem9udGFsVGhpY2tuZXNzLCB2ZXJ0aWNhbFRo
aWNrbmVzcyk7CiB9CiAKQEAgLTE5MTEsMTQgKzE5MTEsMTQgQEAgdm9pZCBSZW5kZXJMYXllcjo6
cG9zaXRpb25PdmVyZmxvd0NvbnRybwogICAgIEludFJlY3Qgc2Nyb2xsQ29ybmVyKHNjcm9sbENv
cm5lclJlY3QodGhpcywgYm9yZGVyQm94KSk7CiAgICAgSW50UmVjdCBhYnNCb3VuZHMoYm9yZGVy
Qm94LngoKSArIHR4LCBib3JkZXJCb3gueSgpICsgdHksIGJvcmRlckJveC53aWR0aCgpLCBib3Jk
ZXJCb3guaGVpZ2h0KCkpOwogICAgIGlmIChtX3ZCYXIpCi0gICAgICAgIG1fdkJhci0+c2V0RnJh
bWVSZWN0KEludFJlY3QoYWJzQm91bmRzLnJpZ2h0KCkgLSBib3gtPmJvcmRlclJpZ2h0KCkgLSBt
X3ZCYXItPndpZHRoKCksCisgICAgICAgIG1fdkJhci0+c2V0RnJhbWVSZWN0KEludFJlY3QoYWJz
Qm91bmRzLm1heFgoKSAtIGJveC0+Ym9yZGVyUmlnaHQoKSAtIG1fdkJhci0+d2lkdGgoKSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhYnNCb3VuZHMueSgpICsgYm94LT5i
b3JkZXJUb3AoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3ZCYXIt
PndpZHRoKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWJzQm91bmRz
LmhlaWdodCgpIC0gKGJveC0+Ym9yZGVyVG9wKCkgKyBib3gtPmJvcmRlckJvdHRvbSgpKSAtIHNj
cm9sbENvcm5lci5oZWlnaHQoKSkpOwogCiAgICAgaWYgKG1faEJhcikKICAgICAgICAgbV9oQmFy
LT5zZXRGcmFtZVJlY3QoSW50UmVjdChhYnNCb3VuZHMueCgpICsgYm94LT5ib3JkZXJMZWZ0KCks
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWJzQm91bmRzLmJvdHRvbSgp
IC0gYm94LT5ib3JkZXJCb3R0b20oKSAtIG1faEJhci0+aGVpZ2h0KCksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYWJzQm91bmRzLm1heFkoKSAtIGJveC0+Ym9yZGVyQm90
dG9tKCkgLSBtX2hCYXItPmhlaWdodCgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGFic0JvdW5kcy53aWR0aCgpIC0gKGJveC0+Ym9yZGVyTGVmdCgpICsgYm94LT5ib3Jk
ZXJSaWdodCgpKSAtIHNjcm9sbENvcm5lci53aWR0aCgpLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG1faEJhci0+aGVpZ2h0KCkpKTsKICAgICAKQEAgLTE5NTUsNyArMTk1
NSw3IEBAIGludCBSZW5kZXJMYXllcjo6b3ZlcmZsb3dCb3R0b20oKSBjb25zdAogICAgIFJlbmRl
ckJveCogYm94ID0gcmVuZGVyQm94KCk7CiAgICAgSW50UmVjdCBvdmVyZmxvd1JlY3QoYm94LT5s
YXlvdXRPdmVyZmxvd1JlY3QoKSk7CiAgICAgYm94LT5mbGlwRm9yV3JpdGluZ01vZGUob3ZlcmZs
b3dSZWN0KTsKLSAgICByZXR1cm4gb3ZlcmZsb3dSZWN0LmJvdHRvbSgpOworICAgIHJldHVybiBv
dmVyZmxvd1JlY3QubWF4WSgpOwogfQogCiBpbnQgUmVuZGVyTGF5ZXI6Om92ZXJmbG93TGVmdCgp
IGNvbnN0CkBAIC0xOTcxLDcgKzE5NzEsNyBAQCBpbnQgUmVuZGVyTGF5ZXI6Om92ZXJmbG93Umln
aHQoKSBjb25zdAogICAgIFJlbmRlckJveCogYm94ID0gcmVuZGVyQm94KCk7CiAgICAgSW50UmVj
dCBvdmVyZmxvd1JlY3QoYm94LT5sYXlvdXRPdmVyZmxvd1JlY3QoKSk7CiAgICAgYm94LT5mbGlw
Rm9yV3JpdGluZ01vZGUob3ZlcmZsb3dSZWN0KTsKLSAgICByZXR1cm4gb3ZlcmZsb3dSZWN0LnJp
Z2h0KCk7CisgICAgcmV0dXJuIG92ZXJmbG93UmVjdC5tYXhYKCk7CiB9CiAKIHZvaWQgUmVuZGVy
TGF5ZXI6OmNvbXB1dGVTY3JvbGxEaW1lbnNpb25zKGJvb2wqIG5lZWRIQmFyLCBib29sKiBuZWVk
VkJhcikKQEAgLTIxOTcsNyArMjE5Nyw3IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnBhaW50UmVzaXpl
cihHcmFwaGljc0MKIAogICAgIC8vIFBhaW50IHRoZSByZXNpemVyIGNvbnRyb2wuCiAgICAgREVG
SU5FX1NUQVRJQ19MT0NBTChSZWZQdHI8SW1hZ2U+LCByZXNpemVDb3JuZXJJbWFnZSwgKEltYWdl
Ojpsb2FkUGxhdGZvcm1SZXNvdXJjZSgidGV4dEFyZWFSZXNpemVDb3JuZXIiKSkpOwotICAgIElu
dFBvaW50IGltYWdlUG9pbnQoYWJzUmVjdC5yaWdodCgpIC0gcmVzaXplQ29ybmVySW1hZ2UtPndp
ZHRoKCksIGFic1JlY3QuYm90dG9tKCkgLSByZXNpemVDb3JuZXJJbWFnZS0+aGVpZ2h0KCkpOwor
ICAgIEludFBvaW50IGltYWdlUG9pbnQoYWJzUmVjdC5tYXhYKCkgLSByZXNpemVDb3JuZXJJbWFn
ZS0+d2lkdGgoKSwgYWJzUmVjdC5tYXhZKCkgLSByZXNpemVDb3JuZXJJbWFnZS0+aGVpZ2h0KCkp
OwogICAgIGNvbnRleHQtPmRyYXdJbWFnZShyZXNpemVDb3JuZXJJbWFnZS5nZXQoKSwgYm94LT5z
dHlsZSgpLT5jb2xvclNwYWNlKCksIGltYWdlUG9pbnQpOwogCiAgICAgLy8gRHJhdyBhIGZyYW1l
IGFyb3VuZCB0aGUgcmVzaXplciAoMXB4IGdyZXkgbGluZSkgaWYgdGhlcmUgYXJlIGFueSBzY3Jv
bGxiYXJzIHByZXNlbnQuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlu
ZUJveExpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJMaW5lQm94TGlzdC5jcHAJKHJldmlzaW9uIDc3MjYwKQorKysgU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckxpbmVCb3hMaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTYwLDExICsx
NjAsMTEgQEAgYm9vbCBSZW5kZXJMaW5lQm94TGlzdDo6cmFuZ2VJbnRlcnNlY3RzUgogICAgIAog
ICAgIGlmIChyZW5kZXJlci0+c3R5bGUoKS0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkgewog
ICAgICAgICBwaHlzaWNhbFN0YXJ0ICs9IHR5OwotICAgICAgICBpZiAocGh5c2ljYWxTdGFydCA+
PSByZWN0LmJvdHRvbSgpIHx8IHBoeXNpY2FsU3RhcnQgKyBwaHlzaWNhbEV4dGVudCA8PSByZWN0
LnkoKSkKKyAgICAgICAgaWYgKHBoeXNpY2FsU3RhcnQgPj0gcmVjdC5tYXhZKCkgfHwgcGh5c2lj
YWxTdGFydCArIHBoeXNpY2FsRXh0ZW50IDw9IHJlY3QueSgpKQogICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgIH0gZWxzZSB7CiAgICAgICAgIHBoeXNpY2FsU3RhcnQgKz0gdHg7Ci0gICAg
ICAgIGlmIChwaHlzaWNhbFN0YXJ0ID49IHJlY3QucmlnaHQoKSB8fCBwaHlzaWNhbFN0YXJ0ICsg
cGh5c2ljYWxFeHRlbnQgPD0gcmVjdC54KCkpCisgICAgICAgIGlmIChwaHlzaWNhbFN0YXJ0ID49
IHJlY3QubWF4WCgpIHx8IHBoeXNpY2FsU3RhcnQgKyBwaHlzaWNhbEV4dGVudCA8PSByZWN0Lngo
KSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgCkBAIC0yMzksMTEgKzIz
OSwxMSBAQCB2b2lkIFJlbmRlckxpbmVCb3hMaXN0OjpwYWludChSZW5kZXJCb3hNCiAgICAgICAg
ICAgICAgICAgYm90dG9tRm9yUGFnaW5hdGlvbkNoZWNrID0gbWF4KGJvdHRvbUZvclBhZ2luYXRp
b25DaGVjaywgY3Vyci0+cm9vdCgpLT5saW5lQm90dG9tKCkpOwogICAgICAgICAgICAgfQogICAg
ICAgICAgICAgaWYgKGJvdHRvbUZvclBhZ2luYXRpb25DaGVjayAtIHRvcEZvclBhZ2luYXRpb25D
aGVjayA8PSB2LT5wcmludFJlY3QoKS5oZWlnaHQoKSkgewotICAgICAgICAgICAgICAgIGlmICh0
eSArIGJvdHRvbUZvclBhZ2luYXRpb25DaGVjayA+IHYtPnByaW50UmVjdCgpLmJvdHRvbSgpKSB7
CisgICAgICAgICAgICAgICAgaWYgKHR5ICsgYm90dG9tRm9yUGFnaW5hdGlvbkNoZWNrID4gdi0+
cHJpbnRSZWN0KCkubWF4WSgpKSB7CiAgICAgICAgICAgICAgICAgICAgIGlmIChSb290SW5saW5l
Qm94KiBuZXh0Um9vdEJveCA9IGN1cnItPnJvb3QoKS0+bmV4dFJvb3RCb3goKSkKICAgICAgICAg
ICAgICAgICAgICAgICAgIGJvdHRvbUZvclBhZ2luYXRpb25DaGVjayA9IG1pbihib3R0b21Gb3JQ
YWdpbmF0aW9uQ2hlY2ssIG1pbihuZXh0Um9vdEJveC0+dG9wVmlzdWFsT3ZlcmZsb3coKSwgbmV4
dFJvb3RCb3gtPmxpbmVUb3AoKSkpOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICBpZiAodHkgKyBib3R0b21Gb3JQYWdpbmF0aW9uQ2hlY2sgPiB2LT5wcmludFJlY3QoKS5ib3R0
b20oKSkgeworICAgICAgICAgICAgICAgIGlmICh0eSArIGJvdHRvbUZvclBhZ2luYXRpb25DaGVj
ayA+IHYtPnByaW50UmVjdCgpLm1heFkoKSkgewogICAgICAgICAgICAgICAgICAgICBpZiAodHkg
KyB0b3BGb3JQYWdpbmF0aW9uQ2hlY2sgPCB2LT50cnVuY2F0ZWRBdCgpKQogICAgICAgICAgICAg
ICAgICAgICAgICAgdi0+c2V0QmVzdFRydW5jYXRlZEF0KHR5ICsgdG9wRm9yUGFnaW5hdGlvbkNo
ZWNrLCByZW5kZXJlcik7CiAgICAgICAgICAgICAgICAgICAgIC8vIElmIHdlIHdlcmUgYWJsZSB0
byB0cnVuY2F0ZSwgZG9uJ3QgcGFpbnQuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTGlzdEl0ZW0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJMaXN0SXRlbS5jcHAJKHJldmlzaW9uIDc3MjYwKQorKysgU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckxpc3RJdGVtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjk3LDEyICsy
OTcsMTIgQEAgdm9pZCBSZW5kZXJMaXN0SXRlbTo6cG9zaXRpb25MaXN0TWFya2VyKAogICAgICAg
ICAgICAgZm9yIChJbmxpbmVGbG93Qm94KiBib3ggPSBtX21hcmtlci0+aW5saW5lQm94V3JhcHBl
cigpLT5wYXJlbnQoKTsgYm94OyBib3ggPSBib3gtPnBhcmVudCgpKSB7CiAgICAgICAgICAgICAg
ICAgSW50UmVjdCBuZXdMb2dpY2FsVmlzdWFsT3ZlcmZsb3dSZWN0ID0gYm94LT5sb2dpY2FsVmlz
dWFsT3ZlcmZsb3dSZWN0KCk7CiAgICAgICAgICAgICAgICAgSW50UmVjdCBuZXdMb2dpY2FsTGF5
b3V0T3ZlcmZsb3dSZWN0ID0gYm94LT5sb2dpY2FsTGF5b3V0T3ZlcmZsb3dSZWN0KCk7Ci0gICAg
ICAgICAgICAgICAgaWYgKG1hcmtlckxvZ2ljYWxMZWZ0ICsgbV9tYXJrZXItPmxvZ2ljYWxXaWR0
aCgpID4gbmV3TG9naWNhbFZpc3VhbE92ZXJmbG93UmVjdC5yaWdodCgpICYmICFoaXRTZWxmUGFp
bnRpbmdMYXllcikgeworICAgICAgICAgICAgICAgIGlmIChtYXJrZXJMb2dpY2FsTGVmdCArIG1f
bWFya2VyLT5sb2dpY2FsV2lkdGgoKSA+IG5ld0xvZ2ljYWxWaXN1YWxPdmVyZmxvd1JlY3QubWF4
WCgpICYmICFoaXRTZWxmUGFpbnRpbmdMYXllcikgewogICAgICAgICAgICAgICAgICAgICBuZXdM
b2dpY2FsVmlzdWFsT3ZlcmZsb3dSZWN0LnNldFdpZHRoKG1hcmtlckxvZ2ljYWxMZWZ0ICsgbV9t
YXJrZXItPmxvZ2ljYWxXaWR0aCgpIC0gYm94LT5sb2dpY2FsTGVmdFZpc3VhbE92ZXJmbG93KCkp
OwogICAgICAgICAgICAgICAgICAgICBpZiAoYm94ID09IHJvb3QpCiAgICAgICAgICAgICAgICAg
ICAgICAgICBhZGp1c3RPdmVyZmxvdyA9IHRydWU7CiAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIGlmIChtYXJrZXJMb2dpY2FsTGVmdCArIG1fbWFya2VyLT5sb2dpY2FsV2lkdGgo
KSA+IG5ld0xvZ2ljYWxMYXlvdXRPdmVyZmxvd1JlY3QucmlnaHQoKSkgeworICAgICAgICAgICAg
ICAgIGlmIChtYXJrZXJMb2dpY2FsTGVmdCArIG1fbWFya2VyLT5sb2dpY2FsV2lkdGgoKSA+IG5l
d0xvZ2ljYWxMYXlvdXRPdmVyZmxvd1JlY3QubWF4WCgpKSB7CiAgICAgICAgICAgICAgICAgICAg
IG5ld0xvZ2ljYWxMYXlvdXRPdmVyZmxvd1JlY3Quc2V0V2lkdGgobWFya2VyTG9naWNhbExlZnQg
KyBtX21hcmtlci0+bG9naWNhbFdpZHRoKCkgLSBib3gtPmxvZ2ljYWxMZWZ0TGF5b3V0T3ZlcmZs
b3coKSk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChib3ggPT0gcm9vdCkKICAgICAgICAgICAg
ICAgICAgICAgICAgIGFkanVzdE92ZXJmbG93ID0gdHJ1ZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJMaXN0TWFya2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdE1hcmtlci5jcHAJKHJldmlzaW9uIDc3MjYwKQorKysg
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RNYXJrZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xMjYwLDkgKzEyNjAsOSBAQCB2b2lkIFJlbmRlckxpc3RNYXJrZXI6OnBhaW50KFBh
aW50SW5mbyYgCiAgICAgICAgIG1hcmtlciA9IG1hcmtlci50cmFuc3Bvc2VkUmVjdCgpOwogICAg
ICAgICBtYXJrZXIubW92ZShib3gueCgpLCBib3gueSgpIC0gbG9naWNhbEhlaWdodCgpKTsKICAg
ICAgICAgY29udGV4dC0+c2F2ZSgpOwotICAgICAgICBjb250ZXh0LT50cmFuc2xhdGUobWFya2Vy
LngoKSwgbWFya2VyLmJvdHRvbSgpKTsKKyAgICAgICAgY29udGV4dC0+dHJhbnNsYXRlKG1hcmtl
ci54KCksIG1hcmtlci5tYXhZKCkpOwogICAgICAgICBjb250ZXh0LT5yb3RhdGUoc3RhdGljX2Nh
c3Q8ZmxvYXQ+KGRlZzJyYWQoOTAuKSkpOwotICAgICAgICBjb250ZXh0LT50cmFuc2xhdGUoLW1h
cmtlci54KCksIC1tYXJrZXIuYm90dG9tKCkpOworICAgICAgICBjb250ZXh0LT50cmFuc2xhdGUo
LW1hcmtlci54KCksIC1tYXJrZXIubWF4WSgpKTsKICAgICB9CiAKICAgICBJbnRQb2ludCB0ZXh0
T3JpZ2luID0gSW50UG9pbnQobWFya2VyLngoKSwgbWFya2VyLnkoKSArIHN0eWxlKCktPmZvbnRN
ZXRyaWNzKCkuYXNjZW50KCkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ck9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ck9iamVjdC5jcHAJKHJldmlzaW9uIDc3MjYwKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlck9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzNzgsMTEgKzEzNzgsMTEgQEAg
Ym9vbCBSZW5kZXJPYmplY3Q6OnJlcGFpbnRBZnRlckxheW91dElmTgogICAgIGVsc2UgaWYgKGRl
bHRhTGVmdCA8IDApCiAgICAgICAgIHJlcGFpbnRVc2luZ0NvbnRhaW5lcihyZXBhaW50Q29udGFp
bmVyLCBJbnRSZWN0KG5ld0JvdW5kcy54KCksIG5ld0JvdW5kcy55KCksIC1kZWx0YUxlZnQsIG5l
d0JvdW5kcy5oZWlnaHQoKSkpOwogCi0gICAgaW50IGRlbHRhUmlnaHQgPSBuZXdCb3VuZHMucmln
aHQoKSAtIG9sZEJvdW5kcy5yaWdodCgpOworICAgIGludCBkZWx0YVJpZ2h0ID0gbmV3Qm91bmRz
Lm1heFgoKSAtIG9sZEJvdW5kcy5tYXhYKCk7CiAgICAgaWYgKGRlbHRhUmlnaHQgPiAwKQotICAg
ICAgICByZXBhaW50VXNpbmdDb250YWluZXIocmVwYWludENvbnRhaW5lciwgSW50UmVjdChvbGRC
b3VuZHMucmlnaHQoKSwgbmV3Qm91bmRzLnkoKSwgZGVsdGFSaWdodCwgbmV3Qm91bmRzLmhlaWdo
dCgpKSk7CisgICAgICAgIHJlcGFpbnRVc2luZ0NvbnRhaW5lcihyZXBhaW50Q29udGFpbmVyLCBJ
bnRSZWN0KG9sZEJvdW5kcy5tYXhYKCksIG5ld0JvdW5kcy55KCksIGRlbHRhUmlnaHQsIG5ld0Jv
dW5kcy5oZWlnaHQoKSkpOwogICAgIGVsc2UgaWYgKGRlbHRhUmlnaHQgPCAwKQotICAgICAgICBy
ZXBhaW50VXNpbmdDb250YWluZXIocmVwYWludENvbnRhaW5lciwgSW50UmVjdChuZXdCb3VuZHMu
cmlnaHQoKSwgb2xkQm91bmRzLnkoKSwgLWRlbHRhUmlnaHQsIG9sZEJvdW5kcy5oZWlnaHQoKSkp
OworICAgICAgICByZXBhaW50VXNpbmdDb250YWluZXIocmVwYWludENvbnRhaW5lciwgSW50UmVj
dChuZXdCb3VuZHMubWF4WCgpLCBvbGRCb3VuZHMueSgpLCAtZGVsdGFSaWdodCwgb2xkQm91bmRz
LmhlaWdodCgpKSk7CiAKICAgICBpbnQgZGVsdGFUb3AgPSBuZXdCb3VuZHMueSgpIC0gb2xkQm91
bmRzLnkoKTsKICAgICBpZiAoZGVsdGFUb3AgPiAwKQpAQCAtMTM5MCwxMSArMTM5MCwxMSBAQCBi
b29sIFJlbmRlck9iamVjdDo6cmVwYWludEFmdGVyTGF5b3V0SWZOCiAgICAgZWxzZSBpZiAoZGVs
dGFUb3AgPCAwKQogICAgICAgICByZXBhaW50VXNpbmdDb250YWluZXIocmVwYWludENvbnRhaW5l
ciwgSW50UmVjdChuZXdCb3VuZHMueCgpLCBuZXdCb3VuZHMueSgpLCBuZXdCb3VuZHMud2lkdGgo
KSwgLWRlbHRhVG9wKSk7CiAKLSAgICBpbnQgZGVsdGFCb3R0b20gPSBuZXdCb3VuZHMuYm90dG9t
KCkgLSBvbGRCb3VuZHMuYm90dG9tKCk7CisgICAgaW50IGRlbHRhQm90dG9tID0gbmV3Qm91bmRz
Lm1heFkoKSAtIG9sZEJvdW5kcy5tYXhZKCk7CiAgICAgaWYgKGRlbHRhQm90dG9tID4gMCkKLSAg
ICAgICAgcmVwYWludFVzaW5nQ29udGFpbmVyKHJlcGFpbnRDb250YWluZXIsIEludFJlY3QobmV3
Qm91bmRzLngoKSwgb2xkQm91bmRzLmJvdHRvbSgpLCBuZXdCb3VuZHMud2lkdGgoKSwgZGVsdGFC
b3R0b20pKTsKKyAgICAgICAgcmVwYWludFVzaW5nQ29udGFpbmVyKHJlcGFpbnRDb250YWluZXIs
IEludFJlY3QobmV3Qm91bmRzLngoKSwgb2xkQm91bmRzLm1heFkoKSwgbmV3Qm91bmRzLndpZHRo
KCksIGRlbHRhQm90dG9tKSk7CiAgICAgZWxzZSBpZiAoZGVsdGFCb3R0b20gPCAwKQotICAgICAg
ICByZXBhaW50VXNpbmdDb250YWluZXIocmVwYWludENvbnRhaW5lciwgSW50UmVjdChvbGRCb3Vu
ZHMueCgpLCBuZXdCb3VuZHMuYm90dG9tKCksIG9sZEJvdW5kcy53aWR0aCgpLCAtZGVsdGFCb3R0
b20pKTsKKyAgICAgICAgcmVwYWludFVzaW5nQ29udGFpbmVyKHJlcGFpbnRDb250YWluZXIsIElu
dFJlY3Qob2xkQm91bmRzLngoKSwgbmV3Qm91bmRzLm1heFkoKSwgb2xkQm91bmRzLndpZHRoKCks
IC1kZWx0YUJvdHRvbSkpOwogCiAgICAgaWYgKG5ld091dGxpbmVCb3ggPT0gb2xkT3V0bGluZUJv
eCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTQxNiw3ICsxNDE2LDcgQEAgYm9vbCBSZW5k
ZXJPYmplY3Q6OnJlcGFpbnRBZnRlckxheW91dElmTgogICAgICAgICAgICAgbmV3T3V0bGluZUJv
eC55KCksCiAgICAgICAgICAgICB3aWR0aCArIGJvcmRlcldpZHRoLAogICAgICAgICAgICAgbWF4
KG5ld091dGxpbmVCb3guaGVpZ2h0KCksIG9sZE91dGxpbmVCb3guaGVpZ2h0KCkpKTsKLSAgICAg
ICAgaW50IHJpZ2h0ID0gbWluKG5ld0JvdW5kcy5yaWdodCgpLCBvbGRCb3VuZHMucmlnaHQoKSk7
CisgICAgICAgIGludCByaWdodCA9IG1pbihuZXdCb3VuZHMubWF4WCgpLCBvbGRCb3VuZHMubWF4
WCgpKTsKICAgICAgICAgaWYgKHJpZ2h0UmVjdC54KCkgPCByaWdodCkgewogICAgICAgICAgICAg
cmlnaHRSZWN0LnNldFdpZHRoKG1pbihyaWdodFJlY3Qud2lkdGgoKSwgcmlnaHQgLSByaWdodFJl
Y3QueCgpKSk7CiAgICAgICAgICAgICByZXBhaW50VXNpbmdDb250YWluZXIocmVwYWludENvbnRh
aW5lciwgcmlnaHRSZWN0KTsKQEAgLTE0MzIsMTAgKzE0MzIsMTAgQEAgYm9vbCBSZW5kZXJPYmpl
Y3Q6OnJlcGFpbnRBZnRlckxheW91dElmTgogICAgICAgICBpbnQgYm94SGVpZ2h0ID0gaXNCb3go
KSA/IHRvUmVuZGVyQm94KHRoaXMpLT5oZWlnaHQoKSA6IDA7CiAgICAgICAgIGludCBib3JkZXJI
ZWlnaHQgPSBtYXgoLW91dGxpbmVTdHlsZS0+b3V0bGluZU9mZnNldCgpLCBtYXgoYm9yZGVyQm90
dG9tLCBtYXgoc3R5bGUoKS0+Ym9yZGVyQm90dG9tTGVmdFJhZGl1cygpLmhlaWdodCgpLmNhbGNW
YWx1ZShib3hIZWlnaHQpLCBzdHlsZSgpLT5ib3JkZXJCb3R0b21SaWdodFJhZGl1cygpLmhlaWdo
dCgpLmNhbGNWYWx1ZShib3hIZWlnaHQpKSkpICsgbWF4KG93LCBzaGFkb3dCb3R0b20pOwogICAg
ICAgICBJbnRSZWN0IGJvdHRvbVJlY3QobmV3T3V0bGluZUJveC54KCksCi0gICAgICAgICAgICBt
aW4obmV3T3V0bGluZUJveC5ib3R0b20oKSwgb2xkT3V0bGluZUJveC5ib3R0b20oKSkgLSBib3Jk
ZXJIZWlnaHQsCisgICAgICAgICAgICBtaW4obmV3T3V0bGluZUJveC5tYXhZKCksIG9sZE91dGxp
bmVCb3gubWF4WSgpKSAtIGJvcmRlckhlaWdodCwKICAgICAgICAgICAgIG1heChuZXdPdXRsaW5l
Qm94LndpZHRoKCksIG9sZE91dGxpbmVCb3gud2lkdGgoKSksCiAgICAgICAgICAgICBoZWlnaHQg
KyBib3JkZXJIZWlnaHQpOwotICAgICAgICBpbnQgYm90dG9tID0gbWluKG5ld0JvdW5kcy5ib3R0
b20oKSwgb2xkQm91bmRzLmJvdHRvbSgpKTsKKyAgICAgICAgaW50IGJvdHRvbSA9IG1pbihuZXdC
b3VuZHMubWF4WSgpLCBvbGRCb3VuZHMubWF4WSgpKTsKICAgICAgICAgaWYgKGJvdHRvbVJlY3Qu
eSgpIDwgYm90dG9tKSB7CiAgICAgICAgICAgICBib3R0b21SZWN0LnNldEhlaWdodChtaW4oYm90
dG9tUmVjdC5oZWlnaHQoKSwgYm90dG9tIC0gYm90dG9tUmVjdC55KCkpKTsKICAgICAgICAgICAg
IHJlcGFpbnRVc2luZ0NvbnRhaW5lcihyZXBhaW50Q29udGFpbmVyLCBib3R0b21SZWN0KTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPdmVyZmxvdy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPdmVyZmxvdy5oCShyZXZpc2lvbiA3
NzI2MCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPdmVyZmxvdy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC00MiwxMyArNDIsMTMgQEAgY2xhc3MgUmVuZGVyT3ZlcmZsb3cgewogcHVi
bGljOgogICAgIFJlbmRlck92ZXJmbG93KGNvbnN0IEludFJlY3QmIGxheW91dFJlY3QsIGNvbnN0
IEludFJlY3QmIHZpc3VhbFJlY3QpIAogICAgICAgICA6IG1fdG9wTGF5b3V0T3ZlcmZsb3cobGF5
b3V0UmVjdC55KCkpCi0gICAgICAgICwgbV9ib3R0b21MYXlvdXRPdmVyZmxvdyhsYXlvdXRSZWN0
LmJvdHRvbSgpKQorICAgICAgICAsIG1fYm90dG9tTGF5b3V0T3ZlcmZsb3cobGF5b3V0UmVjdC5t
YXhZKCkpCiAgICAgICAgICwgbV9sZWZ0TGF5b3V0T3ZlcmZsb3cobGF5b3V0UmVjdC54KCkpCi0g
ICAgICAgICwgbV9yaWdodExheW91dE92ZXJmbG93KGxheW91dFJlY3QucmlnaHQoKSkKKyAgICAg
ICAgLCBtX3JpZ2h0TGF5b3V0T3ZlcmZsb3cobGF5b3V0UmVjdC5tYXhYKCkpCiAgICAgICAgICwg
bV90b3BWaXN1YWxPdmVyZmxvdyh2aXN1YWxSZWN0LnkoKSkKLSAgICAgICAgLCBtX2JvdHRvbVZp
c3VhbE92ZXJmbG93KHZpc3VhbFJlY3QuYm90dG9tKCkpCisgICAgICAgICwgbV9ib3R0b21WaXN1
YWxPdmVyZmxvdyh2aXN1YWxSZWN0Lm1heFkoKSkKICAgICAgICAgLCBtX2xlZnRWaXN1YWxPdmVy
Zmxvdyh2aXN1YWxSZWN0LngoKSkKLSAgICAgICAgLCBtX3JpZ2h0VmlzdWFsT3ZlcmZsb3codmlz
dWFsUmVjdC5yaWdodCgpKQorICAgICAgICAsIG1fcmlnaHRWaXN1YWxPdmVyZmxvdyh2aXN1YWxS
ZWN0Lm1heFgoKSkKICAgICB7CiAgICAgfQogICAgCkBAIC0xMjIsNDEgKzEyMiw0MSBAQCBpbmxp
bmUgdm9pZCBSZW5kZXJPdmVyZmxvdzo6bW92ZShpbnQgZHgsCiBpbmxpbmUgdm9pZCBSZW5kZXJP
dmVyZmxvdzo6YWRkTGF5b3V0T3ZlcmZsb3coY29uc3QgSW50UmVjdCYgcmVjdCkKIHsKICAgICBt
X3RvcExheW91dE92ZXJmbG93ID0gc3RkOjptaW4ocmVjdC55KCksIG1fdG9wTGF5b3V0T3ZlcmZs
b3cpOwotICAgIG1fYm90dG9tTGF5b3V0T3ZlcmZsb3cgPSBzdGQ6Om1heChyZWN0LmJvdHRvbSgp
LCBtX2JvdHRvbUxheW91dE92ZXJmbG93KTsKKyAgICBtX2JvdHRvbUxheW91dE92ZXJmbG93ID0g
c3RkOjptYXgocmVjdC5tYXhZKCksIG1fYm90dG9tTGF5b3V0T3ZlcmZsb3cpOwogICAgIG1fbGVm
dExheW91dE92ZXJmbG93ID0gc3RkOjptaW4ocmVjdC54KCksIG1fbGVmdExheW91dE92ZXJmbG93
KTsKLSAgICBtX3JpZ2h0TGF5b3V0T3ZlcmZsb3cgPSBzdGQ6Om1heChyZWN0LnJpZ2h0KCksIG1f
cmlnaHRMYXlvdXRPdmVyZmxvdyk7CisgICAgbV9yaWdodExheW91dE92ZXJmbG93ID0gc3RkOjpt
YXgocmVjdC5tYXhYKCksIG1fcmlnaHRMYXlvdXRPdmVyZmxvdyk7CiB9CiAKIGlubGluZSB2b2lk
IFJlbmRlck92ZXJmbG93OjphZGRWaXN1YWxPdmVyZmxvdyhjb25zdCBJbnRSZWN0JiByZWN0KQog
ewogICAgIG1fdG9wVmlzdWFsT3ZlcmZsb3cgPSBzdGQ6Om1pbihyZWN0LnkoKSwgbV90b3BWaXN1
YWxPdmVyZmxvdyk7Ci0gICAgbV9ib3R0b21WaXN1YWxPdmVyZmxvdyA9IHN0ZDo6bWF4KHJlY3Qu
Ym90dG9tKCksIG1fYm90dG9tVmlzdWFsT3ZlcmZsb3cpOworICAgIG1fYm90dG9tVmlzdWFsT3Zl
cmZsb3cgPSBzdGQ6Om1heChyZWN0Lm1heFkoKSwgbV9ib3R0b21WaXN1YWxPdmVyZmxvdyk7CiAg
ICAgbV9sZWZ0VmlzdWFsT3ZlcmZsb3cgPSBzdGQ6Om1pbihyZWN0LngoKSwgbV9sZWZ0VmlzdWFs
T3ZlcmZsb3cpOwotICAgIG1fcmlnaHRWaXN1YWxPdmVyZmxvdyA9IHN0ZDo6bWF4KHJlY3Qucmln
aHQoKSwgbV9yaWdodFZpc3VhbE92ZXJmbG93KTsKKyAgICBtX3JpZ2h0VmlzdWFsT3ZlcmZsb3cg
PSBzdGQ6Om1heChyZWN0Lm1heFgoKSwgbV9yaWdodFZpc3VhbE92ZXJmbG93KTsKIH0KIAogaW5s
aW5lIHZvaWQgUmVuZGVyT3ZlcmZsb3c6OnNldExheW91dE92ZXJmbG93KGNvbnN0IEludFJlY3Qm
IHJlY3QpCiB7CiAgICAgbV90b3BMYXlvdXRPdmVyZmxvdyA9IHJlY3QueSgpOwotICAgIG1fYm90
dG9tTGF5b3V0T3ZlcmZsb3cgPSByZWN0LmJvdHRvbSgpOworICAgIG1fYm90dG9tTGF5b3V0T3Zl
cmZsb3cgPSByZWN0Lm1heFkoKTsKICAgICBtX2xlZnRMYXlvdXRPdmVyZmxvdyA9IHJlY3QueCgp
OwotICAgIG1fcmlnaHRMYXlvdXRPdmVyZmxvdyA9IHJlY3QucmlnaHQoKTsKKyAgICBtX3JpZ2h0
TGF5b3V0T3ZlcmZsb3cgPSByZWN0Lm1heFgoKTsKIH0KIAogaW5saW5lIHZvaWQgUmVuZGVyT3Zl
cmZsb3c6OnNldFZpc3VhbE92ZXJmbG93KGNvbnN0IEludFJlY3QmIHJlY3QpCiB7CiAgICAgbV90
b3BWaXN1YWxPdmVyZmxvdyA9IHJlY3QueSgpOwotICAgIG1fYm90dG9tVmlzdWFsT3ZlcmZsb3cg
PSByZWN0LmJvdHRvbSgpOworICAgIG1fYm90dG9tVmlzdWFsT3ZlcmZsb3cgPSByZWN0Lm1heFko
KTsKICAgICBtX2xlZnRWaXN1YWxPdmVyZmxvdyA9IHJlY3QueCgpOwotICAgIG1fcmlnaHRWaXN1
YWxPdmVyZmxvdyA9IHJlY3QucmlnaHQoKTsKKyAgICBtX3JpZ2h0VmlzdWFsT3ZlcmZsb3cgPSBy
ZWN0Lm1heFgoKTsKIH0KIAogaW5saW5lIHZvaWQgUmVuZGVyT3ZlcmZsb3c6OnJlc2V0TGF5b3V0
T3ZlcmZsb3coY29uc3QgSW50UmVjdCYgcmVjdCkKIHsKICAgICBtX3RvcExheW91dE92ZXJmbG93
ID0gcmVjdC55KCk7Ci0gICAgbV9ib3R0b21MYXlvdXRPdmVyZmxvdyA9IHJlY3QuYm90dG9tKCk7
CisgICAgbV9ib3R0b21MYXlvdXRPdmVyZmxvdyA9IHJlY3QubWF4WSgpOwogICAgIG1fbGVmdExh
eW91dE92ZXJmbG93ID0gcmVjdC54KCk7Ci0gICAgbV9yaWdodExheW91dE92ZXJmbG93ID0gcmVj
dC5yaWdodCgpOworICAgIG1fcmlnaHRMYXlvdXRPdmVyZmxvdyA9IHJlY3QubWF4WCgpOwogfQog
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyUmVwbGFjZWQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJSZXBsYWNlZC5jcHAJKHJldmlzaW9uIDc3MjYwKQorKysgU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclJlcGxhY2VkLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTgyLDkgKzE4
Miw5IEBAIGJvb2wgUmVuZGVyUmVwbGFjZWQ6OnNob3VsZFBhaW50KFBhaW50SW4KICAgICB9CiAg
ICAgCiAgICAgaW50IG9zID0gMiAqIG1heGltYWxPdXRsaW5lU2l6ZShwYWludEluZm8ucGhhc2Up
OwotICAgIGlmIChjdXJyZW50VFggKyBsZWZ0VmlzdWFsT3ZlcmZsb3coKSA+PSBwYWludEluZm8u
cmVjdC5yaWdodCgpICsgb3MgfHwgY3VycmVudFRYICsgcmlnaHRWaXN1YWxPdmVyZmxvdygpIDw9
IHBhaW50SW5mby5yZWN0LngoKSAtIG9zKQorICAgIGlmIChjdXJyZW50VFggKyBsZWZ0VmlzdWFs
T3ZlcmZsb3coKSA+PSBwYWludEluZm8ucmVjdC5tYXhYKCkgKyBvcyB8fCBjdXJyZW50VFggKyBy
aWdodFZpc3VhbE92ZXJmbG93KCkgPD0gcGFpbnRJbmZvLnJlY3QueCgpIC0gb3MpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICBpZiAodG9wID49IHBhaW50SW5mby5yZWN0LmJvdHRvbSgpICsg
b3MgfHwgYm90dG9tIDw9IHBhaW50SW5mby5yZWN0LnkoKSAtIG9zKQorICAgIGlmICh0b3AgPj0g
cGFpbnRJbmZvLnJlY3QubWF4WSgpICsgb3MgfHwgYm90dG9tIDw9IHBhaW50SW5mby5yZWN0Lnko
KSAtIG9zKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICByZXR1cm4gdHJ1ZTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTY3JvbGxiYXJUaGVtZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNjcm9sbGJhclRoZW1lLmNw
cAkocmV2aXNpb24gNzcyNjApCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU2Ny
b2xsYmFyVGhlbWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05OCwxMCArOTgsMTAgQEAgSW50UmVj
dCBSZW5kZXJTY3JvbGxiYXJUaGVtZTo6Y29uc3RyYWluVAogICAgIEludFJlY3QgcmVzdWx0ID0g
cmVjdDsKICAgICBpZiAoc2Nyb2xsYmFyLT5vcmllbnRhdGlvbigpID09IEhvcml6b250YWxTY3Jv
bGxiYXIpIHsKICAgICAgICAgcmVzdWx0LnNldFgoYmFja1JlY3QueCgpKTsKLSAgICAgICAgcmVz
dWx0LnNldFdpZHRoKGZvcndhcmRSZWN0LnJpZ2h0KCkgLSBiYWNrUmVjdC54KCkpOworICAgICAg
ICByZXN1bHQuc2V0V2lkdGgoZm9yd2FyZFJlY3QubWF4WCgpIC0gYmFja1JlY3QueCgpKTsKICAg
ICB9IGVsc2UgewogICAgICAgICByZXN1bHQuc2V0WShiYWNrUmVjdC55KCkpOwotICAgICAgICBy
ZXN1bHQuc2V0SGVpZ2h0KGZvcndhcmRSZWN0LmJvdHRvbSgpIC0gYmFja1JlY3QueSgpKTsKKyAg
ICAgICAgcmVzdWx0LnNldEhlaWdodChmb3J3YXJkUmVjdC5tYXhZKCkgLSBiYWNrUmVjdC55KCkp
OwogICAgIH0KICAgICByZXR1cm4gcmVzdWx0OwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRhYmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVGFibGUuY3BwCShyZXZpc2lvbiA3NzI2MCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUYWJsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1NCw5ICs0NTQs
OSBAQCB2b2lkIFJlbmRlclRhYmxlOjpwYWludChQYWludEluZm8mIHBhaW50CiAgICAgUGFpbnRQ
aGFzZSBwYWludFBoYXNlID0gcGFpbnRJbmZvLnBoYXNlOwogCiAgICAgaW50IG9zID0gMiAqIG1h
eGltYWxPdXRsaW5lU2l6ZShwYWludFBoYXNlKTsKLSAgICBpZiAodHkgKyB0b3BWaXN1YWxPdmVy
ZmxvdygpID49IHBhaW50SW5mby5yZWN0LmJvdHRvbSgpICsgb3MgfHwgdHkgKyBib3R0b21WaXN1
YWxPdmVyZmxvdygpIDw9IHBhaW50SW5mby5yZWN0LnkoKSAtIG9zKQorICAgIGlmICh0eSArIHRv
cFZpc3VhbE92ZXJmbG93KCkgPj0gcGFpbnRJbmZvLnJlY3QubWF4WSgpICsgb3MgfHwgdHkgKyBi
b3R0b21WaXN1YWxPdmVyZmxvdygpIDw9IHBhaW50SW5mby5yZWN0LnkoKSAtIG9zKQogICAgICAg
ICByZXR1cm47Ci0gICAgaWYgKHR4ICsgbGVmdFZpc3VhbE92ZXJmbG93KCkgPj0gcGFpbnRJbmZv
LnJlY3QucmlnaHQoKSArIG9zIHx8IHR4ICsgcmlnaHRWaXN1YWxPdmVyZmxvdygpIDw9IHBhaW50
SW5mby5yZWN0LngoKSAtIG9zKQorICAgIGlmICh0eCArIGxlZnRWaXN1YWxPdmVyZmxvdygpID49
IHBhaW50SW5mby5yZWN0Lm1heFgoKSArIG9zIHx8IHR4ICsgcmlnaHRWaXN1YWxPdmVyZmxvdygp
IDw9IHBhaW50SW5mby5yZWN0LngoKSAtIG9zKQogICAgICAgICByZXR1cm47CiAKICAgICBib29s
IHB1c2hlZENsaXAgPSBwdXNoQ29udGVudHNDbGlwKHBhaW50SW5mbywgdHgsIHR5KTsgICAgCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVDZWxsLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVDZWxsLmNwcAkocmV2
aXNpb24gNzcyNjApCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVDZWxs
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODAzLDcgKzgwMyw3IEBAIHZvaWQgUmVuZGVyVGFibGVD
ZWxsOjpwYWludChQYWludEluZm8mIHAKICAgICAgICAgdHggKz0geCgpOwogICAgICAgICB0eSAr
PSB5KCk7CiAgICAgICAgIGludCBvcyA9IDIgKiBtYXhpbWFsT3V0bGluZVNpemUocGFpbnRJbmZv
LnBoYXNlKTsKLSAgICAgICAgaWYgKHR5IC0gdGFibGUoKS0+b3V0ZXJCb3JkZXJUb3AoKSA8IHBh
aW50SW5mby5yZWN0LmJvdHRvbSgpICsgb3MgJiYKKyAgICAgICAgaWYgKHR5IC0gdGFibGUoKS0+
b3V0ZXJCb3JkZXJUb3AoKSA8IHBhaW50SW5mby5yZWN0Lm1heFkoKSArIG9zICYmCiAgICAgICAg
ICAgICB0eSArIGhlaWdodCgpICsgdGFibGUoKS0+b3V0ZXJCb3JkZXJCb3R0b20oKSA+IHBhaW50
SW5mby5yZWN0LnkoKSAtIG9zKQogICAgICAgICAgICAgcGFpbnRDb2xsYXBzZWRCb3JkZXIocGFp
bnRJbmZvLmNvbnRleHQsIHR4LCB0eSwgd2lkdGgoKSwgaGVpZ2h0KCkpOwogICAgICAgICByZXR1
cm47CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0
aW9uLmNwcAkocmV2aXNpb24gNzcyNjApCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVGFibGVTZWN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTY0LDkgKzk2NCw5IEBAIHZv
aWQgUmVuZGVyVGFibGVTZWN0aW9uOjpwYWludE9iamVjdChQYWkKICAgICBsb2NhbFJlcGFpbnRS
ZWN0Lm1vdmUoLXR4LCAtdHkpOwogICAgIGlmIChzdHlsZSgpLT5pc0ZsaXBwZWRCbG9ja3NXcml0
aW5nTW9kZSgpKSB7CiAgICAgICAgIGlmIChzdHlsZSgpLT5pc0hvcml6b250YWxXcml0aW5nTW9k
ZSgpKQotICAgICAgICAgICAgbG9jYWxSZXBhaW50UmVjdC5zZXRZKGhlaWdodCgpIC0gbG9jYWxS
ZXBhaW50UmVjdC5ib3R0b20oKSk7CisgICAgICAgICAgICBsb2NhbFJlcGFpbnRSZWN0LnNldFko
aGVpZ2h0KCkgLSBsb2NhbFJlcGFpbnRSZWN0Lm1heFkoKSk7CiAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgIGxvY2FsUmVwYWludFJlY3Quc2V0WCh3aWR0aCgpIC0gbG9jYWxSZXBhaW50UmVjdC5y
aWdodCgpKTsKKyAgICAgICAgICAgIGxvY2FsUmVwYWludFJlY3Quc2V0WCh3aWR0aCgpIC0gbG9j
YWxSZXBhaW50UmVjdC5tYXhYKCkpOwogICAgIH0KIAogICAgIC8vIElmIHNvbWUgY2VsbCBvdmVy
Zmxvd3MsIGp1c3QgcGFpbnQgYWxsIG9mIHRoZW0uCkBAIC05ODEsNyArOTgxLDcgQEAgdm9pZCBS
ZW5kZXJUYWJsZVNlY3Rpb246OnBhaW50T2JqZWN0KFBhaQogICAgICAgICBpZiAoc3RhcnRyb3cg
PT0gbV9yb3dQb3Muc2l6ZSgpIHx8IChzdGFydHJvdyA+IDAgJiYgKG1fcm93UG9zW3N0YXJ0cm93
XSA+ICBiZWZvcmUpKSkKICAgICAgICAgICAtLXN0YXJ0cm93OwogCi0gICAgICAgIGludCBhZnRl
ciA9IChzdHlsZSgpLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gbG9jYWxSZXBhaW50UmVj
dC5ib3R0b20oKSA6IGxvY2FsUmVwYWludFJlY3QucmlnaHQoKSkgKyBvczsKKyAgICAgICAgaW50
IGFmdGVyID0gKHN0eWxlKCktPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBsb2NhbFJlcGFp
bnRSZWN0Lm1heFkoKSA6IGxvY2FsUmVwYWludFJlY3QubWF4WCgpKSArIG9zOwogICAgICAgICBl
bmRyb3cgPSBzdGQ6Omxvd2VyX2JvdW5kKG1fcm93UG9zLmJlZ2luKCksIG1fcm93UG9zLmVuZCgp
LCBhZnRlcikgLSBtX3Jvd1Bvcy5iZWdpbigpOwogICAgICAgICBpZiAoZW5kcm93ID09IG1fcm93
UG9zLnNpemUoKSkKICAgICAgICAgICAtLWVuZHJvdzsKQEAgLTEwMDAsNyArMTAwMCw3IEBAIHZv
aWQgUmVuZGVyVGFibGVTZWN0aW9uOjpwYWludE9iamVjdChQYWkKICAgICAgICAgaWYgKChzdGFy
dGNvbCA9PSBjb2x1bW5Qb3Muc2l6ZSgpKSB8fCAoc3RhcnRjb2wgPiAwICYmIChjb2x1bW5Qb3Nb
c3RhcnRjb2xdID4gc3RhcnQpKSkKICAgICAgICAgICAgIC0tc3RhcnRjb2w7CiAKLSAgICAgICAg
aW50IGVuZCA9IChzdHlsZSgpLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gbG9jYWxSZXBh
aW50UmVjdC5yaWdodCgpIDogbG9jYWxSZXBhaW50UmVjdC5ib3R0b20oKSkgKyBvczsKKyAgICAg
ICAgaW50IGVuZCA9IChzdHlsZSgpLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gbG9jYWxS
ZXBhaW50UmVjdC5tYXhYKCkgOiBsb2NhbFJlcGFpbnRSZWN0Lm1heFkoKSkgKyBvczsKICAgICAg
ICAgZW5kY29sID0gc3RkOjpsb3dlcl9ib3VuZChjb2x1bW5Qb3MuYmVnaW4oKSwgY29sdW1uUG9z
LmVuZCgpLCBlbmQpIC0gY29sdW1uUG9zLmJlZ2luKCk7CiAgICAgICAgIGlmIChlbmRjb2wgPT0g
Y29sdW1uUG9zLnNpemUoKSkKICAgICAgICAgICAgIC0tZW5kY29sOwpJbmRleDogU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmNwcAkocmV2aXNpb24gNzcyNjApCisrKyBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0OCw5
ICszNDgsOSBAQCB2b2lkIFJlbmRlclRleHQ6OmFic29sdXRlUXVhZHMoVmVjdG9yPEZsCiAgICAg
ICAgIEludFJlY3QgZWxsaXBzaXNSZWN0ID0gKG9wdGlvbiA9PSBDbGlwVG9FbGxpcHNpcykgPyBl
bGxpcHNpc1JlY3RGb3JCb3goYm94LCAwLCB0ZXh0TGVuZ3RoKCkpIDogSW50UmVjdCgpOwogICAg
ICAgICBpZiAoIWVsbGlwc2lzUmVjdC5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgIGlmIChzdHls
ZSgpLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpKQotICAgICAgICAgICAgICAgIGJvdW5kYXJp
ZXMuc2V0V2lkdGgoZWxsaXBzaXNSZWN0LnJpZ2h0KCkgLSBib3VuZGFyaWVzLngoKSk7CisgICAg
ICAgICAgICAgICAgYm91bmRhcmllcy5zZXRXaWR0aChlbGxpcHNpc1JlY3QubWF4WCgpIC0gYm91
bmRhcmllcy54KCkpOwogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGJvdW5kYXJp
ZXMuc2V0SGVpZ2h0KGVsbGlwc2lzUmVjdC5ib3R0b20oKSAtIGJvdW5kYXJpZXMueSgpKTsKKyAg
ICAgICAgICAgICAgICBib3VuZGFyaWVzLnNldEhlaWdodChlbGxpcHNpc1JlY3QubWF4WSgpIC0g
Ym91bmRhcmllcy55KCkpOwogICAgICAgICB9CiAgICAgICAgIHF1YWRzLmFwcGVuZChsb2NhbFRv
QWJzb2x1dGVRdWFkKEZsb2F0UmVjdChib3VuZGFyaWVzKSkpOwogICAgIH0KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmds
ZUxpbmUuY3BwCShyZXZpc2lvbiA3NzI2MCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOTMsNyAr
MzkzLDcgQEAgdm9pZCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OmZvcndhcgogI2VuZGlm
CiAKICAgICBGbG9hdFBvaW50IGxvY2FsUG9pbnQgPSBpbm5lclRleHRSZW5kZXJlci0+YWJzb2x1
dGVUb0xvY2FsKHN0YXRpY19jYXN0PE1vdXNlRXZlbnQqPihldmVudCktPmFic29sdXRlTG9jYXRp
b24oKSwgZmFsc2UsIHRydWUpOwotICAgIGludCB0ZXh0UmlnaHQgPSBpbm5lclRleHRSZW5kZXJl
ci0+Ym9yZGVyQm94UmVjdCgpLnJpZ2h0KCk7CisgICAgaW50IHRleHRSaWdodCA9IGlubmVyVGV4
dFJlbmRlcmVyLT5ib3JkZXJCb3hSZWN0KCkubWF4WCgpOwogCiAgICAgaWYgKG1fcmVzdWx0c0J1
dHRvbiAmJiBsb2NhbFBvaW50LngoKSA8IGlubmVyVGV4dFJlbmRlcmVyLT5ib3JkZXJCb3hSZWN0
KCkueCgpKQogICAgICAgICBtX3Jlc3VsdHNCdXR0b24tPmRlZmF1bHRFdmVudEhhbmRsZXIoZXZl
bnQpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5tbQko
cmV2aXNpb24gNzcyNjApCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVN
YWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTEwNDEsMjAgKzEwNDEsMjAgQEAgdm9pZCBSZW5kZXJU
aGVtZU1hYzo6cGFpbnRNZW51TGlzdEJ1dHRvbgogICAgIEZsb2F0UmVjdCB0b3BHcmFkaWVudChy
LngoKSwgci55KCksIHIud2lkdGgoKSwgci5oZWlnaHQoKSAvIDIuMGYpOwogICAgIHN0cnVjdCBD
R0Z1bmN0aW9uQ2FsbGJhY2tzIHRvcENhbGxiYWNrcyA9IHsgMCwgVG9wR3JhZGllbnRJbnRlcnBv
bGF0ZSwgTlVMTCB9OwogICAgIFJldGFpblB0cjxDR0Z1bmN0aW9uUmVmPiB0b3BGdW5jdGlvbihB
ZG9wdENGLCBDR0Z1bmN0aW9uQ3JlYXRlKE5VTEwsIDEsIE5VTEwsIDQsIE5VTEwsICZ0b3BDYWxs
YmFja3MpKTsKLSAgICBSZXRhaW5QdHI8Q0dTaGFkaW5nUmVmPiB0b3BTaGFkaW5nKEFkb3B0Q0Ys
IENHU2hhZGluZ0NyZWF0ZUF4aWFsKGNzcGFjZSwgQ0dQb2ludE1ha2UodG9wR3JhZGllbnQueCgp
LCB0b3BHcmFkaWVudC55KCkpLCBDR1BvaW50TWFrZSh0b3BHcmFkaWVudC54KCksIHRvcEdyYWRp
ZW50LmJvdHRvbSgpKSwgdG9wRnVuY3Rpb24uZ2V0KCksIGZhbHNlLCBmYWxzZSkpOworICAgIFJl
dGFpblB0cjxDR1NoYWRpbmdSZWY+IHRvcFNoYWRpbmcoQWRvcHRDRiwgQ0dTaGFkaW5nQ3JlYXRl
QXhpYWwoY3NwYWNlLCBDR1BvaW50TWFrZSh0b3BHcmFkaWVudC54KCksIHRvcEdyYWRpZW50Lnko
KSksIENHUG9pbnRNYWtlKHRvcEdyYWRpZW50LngoKSwgdG9wR3JhZGllbnQubWF4WSgpKSwgdG9w
RnVuY3Rpb24uZ2V0KCksIGZhbHNlLCBmYWxzZSkpOwogCiAgICAgRmxvYXRSZWN0IGJvdHRvbUdy
YWRpZW50KHIueCgpICsgcmFkaXVzLCByLnkoKSArIHIuaGVpZ2h0KCkgLyAyLjBmLCByLndpZHRo
KCkgLSAyLjBmICogcmFkaXVzLCByLmhlaWdodCgpIC8gMi4wZik7CiAgICAgc3RydWN0IENHRnVu
Y3Rpb25DYWxsYmFja3MgYm90dG9tQ2FsbGJhY2tzID0geyAwLCBCb3R0b21HcmFkaWVudEludGVy
cG9sYXRlLCBOVUxMIH07CiAgICAgUmV0YWluUHRyPENHRnVuY3Rpb25SZWY+IGJvdHRvbUZ1bmN0
aW9uKEFkb3B0Q0YsIENHRnVuY3Rpb25DcmVhdGUoTlVMTCwgMSwgTlVMTCwgNCwgTlVMTCwgJmJv
dHRvbUNhbGxiYWNrcykpOwotICAgIFJldGFpblB0cjxDR1NoYWRpbmdSZWY+IGJvdHRvbVNoYWRp
bmcoQWRvcHRDRiwgQ0dTaGFkaW5nQ3JlYXRlQXhpYWwoY3NwYWNlLCBDR1BvaW50TWFrZShib3R0
b21HcmFkaWVudC54KCksICBib3R0b21HcmFkaWVudC55KCkpLCBDR1BvaW50TWFrZShib3R0b21H
cmFkaWVudC54KCksIGJvdHRvbUdyYWRpZW50LmJvdHRvbSgpKSwgYm90dG9tRnVuY3Rpb24uZ2V0
KCksIGZhbHNlLCBmYWxzZSkpOworICAgIFJldGFpblB0cjxDR1NoYWRpbmdSZWY+IGJvdHRvbVNo
YWRpbmcoQWRvcHRDRiwgQ0dTaGFkaW5nQ3JlYXRlQXhpYWwoY3NwYWNlLCBDR1BvaW50TWFrZShi
b3R0b21HcmFkaWVudC54KCksICBib3R0b21HcmFkaWVudC55KCkpLCBDR1BvaW50TWFrZShib3R0
b21HcmFkaWVudC54KCksIGJvdHRvbUdyYWRpZW50Lm1heFkoKSksIGJvdHRvbUZ1bmN0aW9uLmdl
dCgpLCBmYWxzZSwgZmFsc2UpKTsKIAogICAgIHN0cnVjdCBDR0Z1bmN0aW9uQ2FsbGJhY2tzIG1h
aW5DYWxsYmFja3MgPSB7IDAsIE1haW5HcmFkaWVudEludGVycG9sYXRlLCBOVUxMIH07CiAgICAg
UmV0YWluUHRyPENHRnVuY3Rpb25SZWY+IG1haW5GdW5jdGlvbihBZG9wdENGLCBDR0Z1bmN0aW9u
Q3JlYXRlKE5VTEwsIDEsIE5VTEwsIDQsIE5VTEwsICZtYWluQ2FsbGJhY2tzKSk7Ci0gICAgUmV0
YWluUHRyPENHU2hhZGluZ1JlZj4gbWFpblNoYWRpbmcoQWRvcHRDRiwgQ0dTaGFkaW5nQ3JlYXRl
QXhpYWwoY3NwYWNlLCBDR1BvaW50TWFrZShyLngoKSwgIHIueSgpKSwgQ0dQb2ludE1ha2Uoci54
KCksIHIuYm90dG9tKCkpLCBtYWluRnVuY3Rpb24uZ2V0KCksIGZhbHNlLCBmYWxzZSkpOworICAg
IFJldGFpblB0cjxDR1NoYWRpbmdSZWY+IG1haW5TaGFkaW5nKEFkb3B0Q0YsIENHU2hhZGluZ0Ny
ZWF0ZUF4aWFsKGNzcGFjZSwgQ0dQb2ludE1ha2Uoci54KCksICByLnkoKSksIENHUG9pbnRNYWtl
KHIueCgpLCByLm1heFkoKSksIG1haW5GdW5jdGlvbi5nZXQoKSwgZmFsc2UsIGZhbHNlKSk7CiAK
ICAgICBSZXRhaW5QdHI8Q0dTaGFkaW5nUmVmPiBsZWZ0U2hhZGluZyhBZG9wdENGLCBDR1NoYWRp
bmdDcmVhdGVBeGlhbChjc3BhY2UsIENHUG9pbnRNYWtlKHIueCgpLCAgci55KCkpLCBDR1BvaW50
TWFrZShyLngoKSArIHJhZGl1cywgci55KCkpLCBtYWluRnVuY3Rpb24uZ2V0KCksIGZhbHNlLCBm
YWxzZSkpOwogCi0gICAgUmV0YWluUHRyPENHU2hhZGluZ1JlZj4gcmlnaHRTaGFkaW5nKEFkb3B0
Q0YsIENHU2hhZGluZ0NyZWF0ZUF4aWFsKGNzcGFjZSwgQ0dQb2ludE1ha2Uoci5yaWdodCgpLCAg
ci55KCkpLCBDR1BvaW50TWFrZShyLnJpZ2h0KCkgLSByYWRpdXMsIHIueSgpKSwgbWFpbkZ1bmN0
aW9uLmdldCgpLCBmYWxzZSwgZmFsc2UpKTsKKyAgICBSZXRhaW5QdHI8Q0dTaGFkaW5nUmVmPiBy
aWdodFNoYWRpbmcoQWRvcHRDRiwgQ0dTaGFkaW5nQ3JlYXRlQXhpYWwoY3NwYWNlLCBDR1BvaW50
TWFrZShyLm1heFgoKSwgIHIueSgpKSwgQ0dQb2ludE1ha2Uoci5tYXhYKCkgLSByYWRpdXMsIHIu
eSgpKSwgbWFpbkZ1bmN0aW9uLmdldCgpLCBmYWxzZSwgZmFsc2UpKTsKICAgICBwYWludEluZm8u
Y29udGV4dC0+c2F2ZSgpOwogICAgIENHQ29udGV4dENsaXBUb1JlY3QoY29udGV4dCwgcik7CiAg
ICAgcGFpbnRJbmZvLmNvbnRleHQtPmFkZFJvdW5kZWRSZWN0Q2xpcChib3JkZXIpOwpAQCAtMTA5
OSw3ICsxMDk5LDcgQEAgYm9vbCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRNZW51TGlzdEJ1dHRvbgog
ICAgIGZsb2F0IGNlbnRlclkgPSBib3VuZHMueSgpICsgYm91bmRzLmhlaWdodCgpIC8gMi4wZjsK
ICAgICBmbG9hdCBhcnJvd0hlaWdodCA9IGJhc2VBcnJvd0hlaWdodCAqIGZvbnRTY2FsZTsKICAg
ICBmbG9hdCBhcnJvd1dpZHRoID0gYmFzZUFycm93V2lkdGggKiBmb250U2NhbGU7Ci0gICAgZmxv
YXQgbGVmdEVkZ2UgPSBib3VuZHMucmlnaHQoKSAtIGFycm93UGFkZGluZ1JpZ2h0ICogby0+c3R5
bGUoKS0+ZWZmZWN0aXZlWm9vbSgpIC0gYXJyb3dXaWR0aDsKKyAgICBmbG9hdCBsZWZ0RWRnZSA9
IGJvdW5kcy5tYXhYKCkgLSBhcnJvd1BhZGRpbmdSaWdodCAqIG8tPnN0eWxlKCktPmVmZmVjdGl2
ZVpvb20oKSAtIGFycm93V2lkdGg7CiAgICAgZmxvYXQgc3BhY2VCZXR3ZWVuQXJyb3dzID0gYmFz
ZVNwYWNlQmV0d2VlbkFycm93cyAqIGZvbnRTY2FsZTsKIAogICAgIGlmIChib3VuZHMud2lkdGgo
KSA8IGFycm93V2lkdGggKyBhcnJvd1BhZGRpbmdMZWZ0ICogby0+c3R5bGUoKS0+ZWZmZWN0aXZl
Wm9vbSgpKQpAQCAtMTEzOCwxMSArMTEzOCwxMSBAQCBib29sIFJlbmRlclRoZW1lTWFjOjpwYWlu
dE1lbnVMaXN0QnV0dG9uCiAgICAgcGFpbnRJbmZvLmNvbnRleHQtPnNldFN0cm9rZVN0eWxlKFNv
bGlkU3Ryb2tlKTsKICAgICBwYWludEluZm8uY29udGV4dC0+c2V0U3Ryb2tlQ29sb3IobGVmdFNl
cGFyYXRvckNvbG9yLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKICAgICBwYWludEluZm8uY29udGV4
dC0+ZHJhd0xpbmUoSW50UG9pbnQobGVmdEVkZ2VPZlNlcGFyYXRvciwgYm91bmRzLnkoKSksCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEludFBvaW50KGxlZnRFZGdlT2ZTZXBhcmF0
b3IsIGJvdW5kcy5ib3R0b20oKSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJ
bnRQb2ludChsZWZ0RWRnZU9mU2VwYXJhdG9yLCBib3VuZHMubWF4WSgpKSk7CiAKICAgICBwYWlu
dEluZm8uY29udGV4dC0+c2V0U3Ryb2tlQ29sb3IocmlnaHRTZXBhcmF0b3JDb2xvciwgQ29sb3JT
cGFjZURldmljZVJHQik7CiAgICAgcGFpbnRJbmZvLmNvbnRleHQtPmRyYXdMaW5lKEludFBvaW50
KGxlZnRFZGdlT2ZTZXBhcmF0b3IgKyBzZXBhcmF0b3JTcGFjZSwgYm91bmRzLnkoKSksCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEludFBvaW50KGxlZnRFZGdlT2ZTZXBhcmF0b3Ig
KyBzZXBhcmF0b3JTcGFjZSwgYm91bmRzLmJvdHRvbSgpKSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEludFBvaW50KGxlZnRFZGdlT2ZTZXBhcmF0b3IgKyBzZXBhcmF0b3JTcGFj
ZSwgYm91bmRzLm1heFkoKSkpOwogCiAgICAgcGFpbnRJbmZvLmNvbnRleHQtPnJlc3RvcmUoKTsK
ICAgICByZXR1cm4gZmFsc2U7CkBAIC0xMjkzLDkgKzEyOTMsOSBAQCBib29sIFJlbmRlclRoZW1l
TWFjOjpwYWludFNsaWRlclRyYWNrKFJlCiAgICAgUmV0YWluUHRyPENHRnVuY3Rpb25SZWY+IG1h
aW5GdW5jdGlvbihBZG9wdENGLCBDR0Z1bmN0aW9uQ3JlYXRlKE5VTEwsIDEsIE5VTEwsIDQsIE5V
TEwsICZtYWluQ2FsbGJhY2tzKSk7CiAgICAgUmV0YWluUHRyPENHU2hhZGluZ1JlZj4gbWFpblNo
YWRpbmc7CiAgICAgaWYgKG8tPnN0eWxlKCktPmFwcGVhcmFuY2UoKSA9PSBTbGlkZXJWZXJ0aWNh
bFBhcnQpCi0gICAgICAgIG1haW5TaGFkaW5nLmFkb3B0Q0YoQ0dTaGFkaW5nQ3JlYXRlQXhpYWwo
Y3NwYWNlLCBDR1BvaW50TWFrZShib3VuZHMueCgpLCAgYm91bmRzLmJvdHRvbSgpKSwgQ0dQb2lu
dE1ha2UoYm91bmRzLnJpZ2h0KCksIGJvdW5kcy5ib3R0b20oKSksIG1haW5GdW5jdGlvbi5nZXQo
KSwgZmFsc2UsIGZhbHNlKSk7CisgICAgICAgIG1haW5TaGFkaW5nLmFkb3B0Q0YoQ0dTaGFkaW5n
Q3JlYXRlQXhpYWwoY3NwYWNlLCBDR1BvaW50TWFrZShib3VuZHMueCgpLCAgYm91bmRzLm1heFko
KSksIENHUG9pbnRNYWtlKGJvdW5kcy5tYXhYKCksIGJvdW5kcy5tYXhZKCkpLCBtYWluRnVuY3Rp
b24uZ2V0KCksIGZhbHNlLCBmYWxzZSkpOwogICAgIGVsc2UKLSAgICAgICAgbWFpblNoYWRpbmcu
YWRvcHRDRihDR1NoYWRpbmdDcmVhdGVBeGlhbChjc3BhY2UsIENHUG9pbnRNYWtlKGJvdW5kcy54
KCksICBib3VuZHMueSgpKSwgQ0dQb2ludE1ha2UoYm91bmRzLngoKSwgYm91bmRzLmJvdHRvbSgp
KSwgbWFpbkZ1bmN0aW9uLmdldCgpLCBmYWxzZSwgZmFsc2UpKTsKKyAgICAgICAgbWFpblNoYWRp
bmcuYWRvcHRDRihDR1NoYWRpbmdDcmVhdGVBeGlhbChjc3BhY2UsIENHUG9pbnRNYWtlKGJvdW5k
cy54KCksICBib3VuZHMueSgpKSwgQ0dQb2ludE1ha2UoYm91bmRzLngoKSwgYm91bmRzLm1heFko
KSksIG1haW5GdW5jdGlvbi5nZXQoKSwgZmFsc2UsIGZhbHNlKSk7CiAKICAgICBJbnRTaXplIHJh
ZGl1cyh0cmFja1JhZGl1cywgdHJhY2tSYWRpdXMpOwogICAgIHBhaW50SW5mby5jb250ZXh0LT5h
ZGRSb3VuZGVkUmVjdENsaXAoUm91bmRlZEludFJlY3QoYm91bmRzLCByYWRpdXMsIHJhZGl1cywg
cmFkaXVzLCByYWRpdXMpKTsKQEAgLTE0OTQsNyArMTQ5NCw3IEBAIGJvb2wgUmVuZGVyVGhlbWVN
YWM6OnBhaW50U2VhcmNoRmllbGRDYW4KICAgICAvLyBUYWtlIGNhcmUgb2YgY2FzZXMgd2hlcmUg
dGhlIGNhbmNlbCBidXR0b24gd2FzIG5vdCBhbGlnbmVkIHdpdGggdGhlIHJpZ2h0IGJvcmRlciBv
ZiB0aGUgaW5wdXQgZWxlbWVudCAoZm9yIGUuZy4KICAgICAvLyB3aGVuIHNwZWVjaCBpbnB1dCBp
cyBlbmFibGVkIGZvciB0aGUgaW5wdXQgZWxlbWVudC4KICAgICBJbnRSZWN0IGFic0JvdW5kaW5n
Qm94ID0gaW5wdXQtPnJlbmRlcmVyKCktPmFic29sdXRlQm91bmRpbmdCb3hSZWN0KCk7Ci0gICAg
aW50IGFic1JpZ2h0ID0gYWJzQm91bmRpbmdCb3gueCgpICsgYWJzQm91bmRpbmdCb3gud2lkdGgo
KSAtIGlucHV0LT5yZW5kZXJCb3goKS0+cGFkZGluZ1JpZ2h0KCkgLSBpbnB1dC0+cmVuZGVyQm94
KCktPmJvcmRlclJpZ2h0KCk7CisgICAgaW50IGFic1JpZ2h0ID0gYWJzQm91bmRpbmdCb3gueCgp
ICsgYWJzQm91bmRpbmdCb3gud2lkdGgoKSAtIGlucHV0LT5yZW5kZXJCb3goKS0+cGFkZGluZ21h
eFgoKSAtIGlucHV0LT5yZW5kZXJCb3goKS0+Ym9yZGVybWF4WCgpOwogICAgIGludCBzcGFjZVRv
UmlnaHRPZkNhbmNlbEJ1dHRvbiA9IGFic1JpZ2h0IC0gKHIueCgpICsgci53aWR0aCgpKTsKICAg
ICBsb2NhbEJvdW5kcy5zZXRYKGxvY2FsQm91bmRzLngoKSAtIHNwYWNlVG9SaWdodE9mQ2FuY2Vs
QnV0dG9uKTsKICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZp
ZXcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3
LmNwcAkocmV2aXNpb24gNzcyNjApCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
Vmlldy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwNCw5ICszMDQsOSBAQCB2b2lkIFJlbmRlclZp
ZXc6OmNvbXB1dGVSZWN0Rm9yUmVwYWludChSCiAgICAgICAgIC8vIFdlIGhhdmUgdG8gZmxpcCBi
eSBoYW5kIHNpbmNlIHRoZSB2aWV3J3MgbG9naWNhbCBoZWlnaHQgaGFzIG5vdCBiZWVuIGRldGVy
bWluZWQuICBXZQogICAgICAgICAvLyBjYW4gdXNlIHRoZSB2aWV3cG9ydCB3aWR0aCBhbmQgaGVp
Z2h0LgogICAgICAgICBpZiAoc3R5bGUoKS0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkKLSAg
ICAgICAgICAgIHJlY3Quc2V0WSh2aWV3SGVpZ2h0KCkgLSByZWN0LmJvdHRvbSgpKTsKKyAgICAg
ICAgICAgIHJlY3Quc2V0WSh2aWV3SGVpZ2h0KCkgLSByZWN0Lm1heFkoKSk7CiAgICAgICAgIGVs
c2UKLSAgICAgICAgICAgIHJlY3Quc2V0WCh2aWV3V2lkdGgoKSAtIHJlY3QucmlnaHQoKSk7Cisg
ICAgICAgICAgICByZWN0LnNldFgodmlld1dpZHRoKCkgLSByZWN0Lm1heFgoKSk7CiAgICAgfQog
CiAgICAgaWYgKGZpeGVkICYmIG1fZnJhbWVWaWV3KQpAQCAtNjY0LDcgKzY2NCw3IEBAIGludCBS
ZW5kZXJWaWV3Ojpkb2NCb3R0b20oKSBjb25zdAogICAgIGZsaXBGb3JXcml0aW5nTW9kZShvdmVy
Zmxvd1JlY3QpOwogICAgIGlmIChoYXNUcmFuc2Zvcm0oKSkKICAgICAgICAgb3ZlcmZsb3dSZWN0
ID0gbGF5ZXIoKS0+Y3VycmVudFRyYW5zZm9ybSgpLm1hcFJlY3Qob3ZlcmZsb3dSZWN0KTsKLSAg
ICByZXR1cm4gb3ZlcmZsb3dSZWN0LmJvdHRvbSgpOworICAgIHJldHVybiBvdmVyZmxvd1JlY3Qu
bWF4WSgpOwogfQogCiBpbnQgUmVuZGVyVmlldzo6ZG9jTGVmdCgpIGNvbnN0CkBAIC02ODIsNyAr
NjgyLDcgQEAgaW50IFJlbmRlclZpZXc6OmRvY1JpZ2h0KCkgY29uc3QKICAgICBmbGlwRm9yV3Jp
dGluZ01vZGUob3ZlcmZsb3dSZWN0KTsKICAgICBpZiAoaGFzVHJhbnNmb3JtKCkpCiAgICAgICAg
IG92ZXJmbG93UmVjdCA9IGxheWVyKCktPmN1cnJlbnRUcmFuc2Zvcm0oKS5tYXBSZWN0KG92ZXJm
bG93UmVjdCk7Ci0gICAgcmV0dXJuIG92ZXJmbG93UmVjdC5yaWdodCgpOworICAgIHJldHVybiBv
dmVyZmxvd1JlY3QubWF4WCgpOwogfQogCiBpbnQgUmVuZGVyVmlldzo6dmlld0hlaWdodCgpIGNv
bnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUm9vdElubGluZUJveC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jvb3RJbmxpbmVCb3guY3BwCShy
ZXZpc2lvbiA3NzI2MCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Sb290SW5saW5lQm94
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTQ0LDE0ICs1NDQsMTQgQEAgSW50UmVjdCBSb290SW5s
aW5lQm94OjpwYWRkZWRMYXlvdXRPdmVyZgogICAgIAogICAgIGlmIChpc0hvcml6b250YWwoKSkg
ewogICAgICAgICBpZiAoaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpKQotICAgICAgICAgICAgbGlu
ZUxheW91dE92ZXJmbG93LnNoaWZ0UmlnaHRFZGdlVG8obWF4KGxpbmVMYXlvdXRPdmVyZmxvdy5y
aWdodCgpLCBsb2dpY2FsUmlnaHQoKSArIGVuZFBhZGRpbmcpKTsKKyAgICAgICAgICAgIGxpbmVM
YXlvdXRPdmVyZmxvdy5zaGlmdE1heFhFZGdlVG8obWF4KGxpbmVMYXlvdXRPdmVyZmxvdy5tYXhY
KCksIGxvZ2ljYWxSaWdodCgpICsgZW5kUGFkZGluZykpOwogICAgICAgICBlbHNlCi0gICAgICAg
ICAgICBsaW5lTGF5b3V0T3ZlcmZsb3cuc2hpZnRMZWZ0RWRnZVRvKG1pbihsaW5lTGF5b3V0T3Zl
cmZsb3cueCgpLCBsb2dpY2FsTGVmdCgpIC0gZW5kUGFkZGluZykpOworICAgICAgICAgICAgbGlu
ZUxheW91dE92ZXJmbG93LnNoaWZ0TWluWEVkZ2VUbyhtaW4obGluZUxheW91dE92ZXJmbG93Lngo
KSwgbG9naWNhbExlZnQoKSAtIGVuZFBhZGRpbmcpKTsKICAgICB9IGVsc2UgewogICAgICAgICBp
ZiAoaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpKQotICAgICAgICAgICAgbGluZUxheW91dE92ZXJm
bG93LnNoaWZ0Qm90dG9tRWRnZVRvKG1heChsaW5lTGF5b3V0T3ZlcmZsb3cuYm90dG9tKCksIGxv
Z2ljYWxSaWdodCgpICsgZW5kUGFkZGluZykpOworICAgICAgICAgICAgbGluZUxheW91dE92ZXJm
bG93LnNoaWZ0TWF4WUVkZ2VUbyhtYXgobGluZUxheW91dE92ZXJmbG93Lm1heFkoKSwgbG9naWNh
bFJpZ2h0KCkgKyBlbmRQYWRkaW5nKSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGxpbmVM
YXlvdXRPdmVyZmxvdy5zaGlmdFRvcEVkZ2VUbyhtaW4obGluZUxheW91dE92ZXJmbG93LnkoKSwg
bG9naWNhbFJpZ2h0KCkgLSBlbmRQYWRkaW5nKSk7CisgICAgICAgICAgICBsaW5lTGF5b3V0T3Zl
cmZsb3cuc2hpZnRNaW5ZRWRnZVRvKG1pbihsaW5lTGF5b3V0T3ZlcmZsb3cueSgpLCBsb2dpY2Fs
UmlnaHQoKSAtIGVuZFBhZGRpbmcpKTsKICAgICB9CiAgICAgCiAgICAgcmV0dXJuIGxpbmVMYXlv
dXRPdmVyZmxvdzsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZH
SW5saW5lVGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9SZW5kZXJTVkdJbmxpbmVUZXh0LmNwcAkocmV2aXNpb24gNzcyNjApCisrKyBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0lubGluZVRleHQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xMDMsMTIgKzEwMywxMiBAQCBJbnRSZWN0IFJlbmRlclNWR0lubGluZVRleHQ6OmxvY2Fs
Q2FyZXRSCiAgICAgLy8gVXNlIHRoZSBlZGdlIG9mIHRoZSBzZWxlY3Rpb24gcmVjdCB0byBkZXRl
cm1pbmUgdGhlIGNhcmV0IHJlY3QuCiAgICAgaWYgKHN0YXRpY19jYXN0PHVuc2lnbmVkPihjYXJl
dE9mZnNldCkgPCB0ZXh0Qm94LT5zdGFydCgpICsgdGV4dEJveC0+bGVuKCkpIHsKICAgICAgICAg
SW50UmVjdCByZWN0ID0gdGV4dEJveC0+c2VsZWN0aW9uUmVjdCgwLCAwLCBjYXJldE9mZnNldCwg
Y2FyZXRPZmZzZXQgKyAxKTsKLSAgICAgICAgaW50IHggPSBib3gtPmlzTGVmdFRvUmlnaHREaXJl
Y3Rpb24oKSA/IHJlY3QueCgpIDogcmVjdC5yaWdodCgpOworICAgICAgICBpbnQgeCA9IGJveC0+
aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpID8gcmVjdC54KCkgOiByZWN0Lm1heFgoKTsKICAgICAg
ICAgcmV0dXJuIEludFJlY3QoeCwgcmVjdC55KCksIGNhcmV0V2lkdGgsIHJlY3QuaGVpZ2h0KCkp
OwogICAgIH0KIAogICAgIEludFJlY3QgcmVjdCA9IHRleHRCb3gtPnNlbGVjdGlvblJlY3QoMCwg
MCwgY2FyZXRPZmZzZXQgLSAxLCBjYXJldE9mZnNldCk7Ci0gICAgaW50IHggPSBib3gtPmlzTGVm
dFRvUmlnaHREaXJlY3Rpb24oKSA/IHJlY3QucmlnaHQoKSA6IHJlY3QueCgpOworICAgIGludCB4
ID0gYm94LT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyByZWN0Lm1heFgoKSA6IHJlY3QueCgp
OwogICAgIHJldHVybiBJbnRSZWN0KHgsIHJlY3QueSgpLCBjYXJldFdpZHRoLCByZWN0LmhlaWdo
dCgpKTsKIH0KIApJbmRleDogU291cmNlL1dlYktpdDIvUGxhdGZvcm0vUmVnaW9uLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9SZWdpb24uY3BwCShyZXZpc2lvbiA3
NzI2MCkKKysrIFNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL1JlZ2lvbi5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTczLDggKzczLDggQEAgUmVnaW9uOjpTaGFwZTo6U2hhcGUoY29uc3QgSW50UmVjdCYg
cmVjdAogewogICAgIGFwcGVuZFNwYW4ocmVjdC55KCkpOwogICAgIGFwcGVuZFNlZ21lbnQocmVj
dC54KCkpOwotICAgIGFwcGVuZFNlZ21lbnQocmVjdC5yaWdodCgpKTsKLSAgICBhcHBlbmRTcGFu
KHJlY3QuYm90dG9tKCkpOworICAgIGFwcGVuZFNlZ21lbnQocmVjdC5tYXhYKCkpOworICAgIGFw
cGVuZFNwYW4ocmVjdC5tYXhZKCkpOwogfQogCiB2b2lkIFJlZ2lvbjo6U2hhcGU6OmFwcGVuZFNw
YW4oaW50IHkpCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvRmluZEluZGljYXRvci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0ZpbmRJbmRpY2F0b3Iu
Y3BwCShyZXZpc2lvbiA3NzI2MCkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9GaW5kSW5k
aWNhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU3LDcgKzE1Nyw3IEBAIHZvaWQgRmluZElu
ZGljYXRvcjo6ZHJhdyhHcmFwaGljc0NvbnRleHQKICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LnNh
dmUoKTsKICAgICAgICAgRmxvYXRSZWN0IGlubmVyUGF0aFJlY3QgPSBpbmZsYXRlUmVjdCh0ZXh0
UmVjdCwgaG9yaXpvbnRhbFBhZGRpbmdJbnNpZGVMaWdodEJvcmRlciwgdmVydGljYWxQYWRkaW5n
SW5zaWRlTGlnaHRCb3JkZXIpOwogICAgICAgICBncmFwaGljc0NvbnRleHQuY2xpcChwYXRoV2l0
aFJvdW5kZWRSZWN0KGlubmVyUGF0aFJlY3QsIGNvcm5lclJhZGl1cykpOwotICAgICAgICBSZWZQ
dHI8R3JhZGllbnQ+IGdyYWRpZW50ID0gR3JhZGllbnQ6OmNyZWF0ZShGbG9hdFBvaW50KGlubmVy
UGF0aFJlY3QueCgpLCBpbm5lclBhdGhSZWN0LnkoKSksIEZsb2F0UG9pbnQoaW5uZXJQYXRoUmVj
dC54KCksIGlubmVyUGF0aFJlY3QuYm90dG9tKCkpKTsKKyAgICAgICAgUmVmUHRyPEdyYWRpZW50
PiBncmFkaWVudCA9IEdyYWRpZW50OjpjcmVhdGUoRmxvYXRQb2ludChpbm5lclBhdGhSZWN0Lngo
KSwgaW5uZXJQYXRoUmVjdC55KCkpLCBGbG9hdFBvaW50KGlubmVyUGF0aFJlY3QueCgpLCBpbm5l
clBhdGhSZWN0Lm1heFkoKSkpOwogICAgICAgICBncmFkaWVudC0+YWRkQ29sb3JTdG9wKDAsIGdy
YWRpZW50TGlnaHRDb2xvcigpKTsKICAgICAgICAgZ3JhZGllbnQtPmFkZENvbG9yU3RvcCgxLCBn
cmFkaWVudERhcmtDb2xvcigpKTsKICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LnNldEZpbGxHcmFk
aWVudChncmFkaWVudCk7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9X
S1ByaW50aW5nVmlldy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL21hYy9XS1ByaW50aW5nVmlldy5tbQkocmV2aXNpb24gNzcyNjApCisrKyBTb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9XS1ByaW50aW5nVmlldy5tbQkod29ya2luZyBjb3B5KQpA
QCAtMjMzLDggKzIzMyw4IEBAIHN0YXRpYyB2b2lkIHBhZ2VEaWRDb21wdXRlUGFnZVJlY3RzKGNv
bnMKIAogICAgICAgICBjb25zdCBJbnRSZWN0JiBsYXN0UHJpbnRpbmdQYWdlUmVjdCA9IHZpZXct
Pl9wcmludGluZ1BhZ2VSZWN0c1t2aWV3LT5fcHJpbnRpbmdQYWdlUmVjdHMuc2l6ZSgpIC0gMV07
CiAgICAgICAgIE5TUmVjdCBuZXdGcmFtZVNpemUgPSBOU01ha2VSZWN0KDAsIDAsIAotICAgICAg
ICAgICAgY2VpbChsYXN0UHJpbnRpbmdQYWdlUmVjdC5yaWdodCgpICogdmlldy0+X3RvdGFsU2Nh
bGVGYWN0b3JGb3JQcmludGluZyksIAotICAgICAgICAgICAgY2VpbChsYXN0UHJpbnRpbmdQYWdl
UmVjdC5ib3R0b20oKSAqIHZpZXctPl90b3RhbFNjYWxlRmFjdG9yRm9yUHJpbnRpbmcpKTsKKyAg
ICAgICAgICAgIGNlaWwobGFzdFByaW50aW5nUGFnZVJlY3QubWF4WCgpICogdmlldy0+X3RvdGFs
U2NhbGVGYWN0b3JGb3JQcmludGluZyksIAorICAgICAgICAgICAgY2VpbChsYXN0UHJpbnRpbmdQ
YWdlUmVjdC5tYXhZKCkgKiB2aWV3LT5fdG90YWxTY2FsZUZhY3RvckZvclByaW50aW5nKSk7CiAg
ICAgICAgIExPRyhWaWV3LCAiV0tQcmludGluZ1ZpZXcgc2V0dGluZyBmcmFtZSBzaXplIHRvIHg6
JWcgeTolZyB3aWR0aDolZyBoZWlnaHQ6JWciLCBuZXdGcmFtZVNpemUub3JpZ2luLngsIG5ld0Zy
YW1lU2l6ZS5vcmlnaW4ueSwgbmV3RnJhbWVTaXplLnNpemUud2lkdGgsIG5ld0ZyYW1lU2l6ZS5z
aXplLmhlaWdodCk7CiAgICAgICAgIFt2aWV3IHNldEZyYW1lOm5ld0ZyYW1lU2l6ZV07CiAKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvQ2h1bmtlZFVwZGF0ZURyYXdpbmdBcmVh
UHJveHlNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9D
aHVua2VkVXBkYXRlRHJhd2luZ0FyZWFQcm94eU1hYy5tbQkocmV2aXNpb24gNzcyNjApCisrKyBT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL0NodW5rZWRVcGRhdGVEcmF3aW5nQXJlYVByb3h5
TWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC05Nyw3ICs5Nyw3IEBAIHZvaWQgQ2h1bmtlZFVwZGF0
ZURyYXdpbmdBcmVhUHJveHk6OmRyYXcKIAogICAgIC8vIEZsaXAgdGhlIGRlc3RpbmF0aW9uLgog
ICAgIENHQ29udGV4dFNjYWxlQ1RNKG1fYml0bWFwQ29udGV4dC5nZXQoKSwgMSwgLTEpOwotICAg
IENHQ29udGV4dFRyYW5zbGF0ZUNUTShtX2JpdG1hcENvbnRleHQuZ2V0KCksIDAsIC0odXBkYXRl
Q2h1bmtSZWN0LnkoKSArIHVwZGF0ZUNodW5rUmVjdC5ib3R0b20oKSkpOworICAgIENHQ29udGV4
dFRyYW5zbGF0ZUNUTShtX2JpdG1hcENvbnRleHQuZ2V0KCksIDAsIC0odXBkYXRlQ2h1bmtSZWN0
LnkoKSArIHVwZGF0ZUNodW5rUmVjdC5tYXhZKCkpKTsKIAogICAgIENHQ29udGV4dERyYXdJbWFn
ZShtX2JpdG1hcENvbnRleHQuZ2V0KCksIHVwZGF0ZUNodW5rUmVjdCwgaW1hZ2UuZ2V0KCkpOwog
CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvTmV0c2Nh
cGVQbHVnaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1
Z2lucy9OZXRzY2FwZS9OZXRzY2FwZVBsdWdpbi5jcHAJKHJldmlzaW9uIDc3MjYwKQorKysgU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL05ldHNjYXBlUGx1Z2luLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzUyLDggKzM1Miw4IEBAIHZvaWQgTmV0c2NhcGVQbHVnaW46
OmNhbGxTZXRXaW5kb3coKQogICAgIG1fbnBXaW5kb3cuaGVpZ2h0ID0gbV9mcmFtZVJlY3QuaGVp
Z2h0KCk7CiAgICAgbV9ucFdpbmRvdy5jbGlwUmVjdC50b3AgPSBtX2NsaXBSZWN0LnkoKTsKICAg
ICBtX25wV2luZG93LmNsaXBSZWN0LmxlZnQgPSBtX2NsaXBSZWN0LngoKTsKLSAgICBtX25wV2lu
ZG93LmNsaXBSZWN0LmJvdHRvbSA9IG1fY2xpcFJlY3QuYm90dG9tKCk7Ci0gICAgbV9ucFdpbmRv
dy5jbGlwUmVjdC5yaWdodCA9IG1fY2xpcFJlY3QucmlnaHQoKTsKKyAgICBtX25wV2luZG93LmNs
aXBSZWN0LmJvdHRvbSA9IG1fY2xpcFJlY3QubWF4WSgpOworICAgIG1fbnBXaW5kb3cuY2xpcFJl
Y3QucmlnaHQgPSBtX2NsaXBSZWN0Lm1heFgoKTsKIAogICAgIE5QUF9TZXRXaW5kb3coJm1fbnBX
aW5kb3cpOwogfQpJbmRleDogU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJIVE1MVmlldy5t
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkhUTUxWaWV3Lm1t
CShyZXZpc2lvbiA3NzI2MCkKKysrIFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViSFRNTFZp
ZXcubW0JKHdvcmtpbmcgY29weSkKQEAgLTMxMiw3ICszMTIsNyBAQCBzdGF0aWMgdm9pZCBzZXRO
ZWVkc0Rpc3BsYXlJblJlY3QoTlNWaWV3CiAgICAgTlNSZWN0IGludmFsaWRSZWN0SW5XZWJGcmFt
ZVZpZXdDb29yZGluYXRlcyA9IFtlbmNsb3NpbmdXZWJGcmFtZVZpZXcgY29udmVydFJlY3Q6aW52
YWxpZFJlY3QgZnJvbVZpZXc6c2VsZl07CiAgICAgSW50UmVjdCBpbnZhbGlkUmVjdEluRnJhbWVW
aWV3Q29vcmRpbmF0ZXMoaW52YWxpZFJlY3RJbldlYkZyYW1lVmlld0Nvb3JkaW5hdGVzKTsKICAg
ICBpZiAoIVtlbmNsb3NpbmdXZWJGcmFtZVZpZXcgaXNGbGlwcGVkXSkKLSAgICAgICAgaW52YWxp
ZFJlY3RJbkZyYW1lVmlld0Nvb3JkaW5hdGVzLnNldFkoZnJhbWVWaWV3LT5mcmFtZVJlY3QoKS5z
aXplKCkuaGVpZ2h0KCkgLSBpbnZhbGlkUmVjdEluRnJhbWVWaWV3Q29vcmRpbmF0ZXMuYm90dG9t
KCkpOworICAgICAgICBpbnZhbGlkUmVjdEluRnJhbWVWaWV3Q29vcmRpbmF0ZXMuc2V0WShmcmFt
ZVZpZXctPmZyYW1lUmVjdCgpLnNpemUoKS5oZWlnaHQoKSAtIGludmFsaWRSZWN0SW5GcmFtZVZp
ZXdDb29yZGluYXRlcy5tYXhZKCkpOwogCiAgICAgZnJhbWVWaWV3LT5pbnZhbGlkYXRlUmVjdChp
bnZhbGlkUmVjdEluRnJhbWVWaWV3Q29vcmRpbmF0ZXMpOwogfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>80804</attachid>
            <date>2011-02-01 12:43:18 -0800</date>
            <delta_ts>2011-02-01 12:49:24 -0800</delta_ts>
            <desc>Step 1: Convert most of WebCore and WebKit without getting rid of the methods yet.</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>107406</size>
            <attacher name="Dave Hyatt">hyatt</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9i
amVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nl
c3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcAkocmV2aXNpb24gNzcyNjApCisrKyBTb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yNTE5LDcgKzI1MTksNyBAQCBJbnRSZWN0IEFjY2Vzc2liaWxpdHlSZW5kZXJP
YmplY3Q6OmJvdW5kCiAgICAgb3VycmVjdC51bml0ZShyZWN0Mik7CiAgICAgCiAgICAgLy8gaWYg
dGhlIHJlY3RhbmdsZSBzcGFucyBsaW5lcyBhbmQgY29udGFpbnMgbXVsdGlwbGUgdGV4dCBjaGFy
cywgdXNlIHRoZSByYW5nZSdzIGJvdW5kaW5nIGJveCBpbnRlYWQKLSAgICBpZiAocmVjdDEuYm90
dG9tKCkgIT0gcmVjdDIuYm90dG9tKCkpIHsKKyAgICBpZiAocmVjdDEubWF4WSgpICE9IHJlY3Qy
Lm1heFkoKSkgewogICAgICAgICBSZWZQdHI8UmFuZ2U+IGRhdGFSYW5nZSA9IG1ha2VSYW5nZShy
YW5nZS5zdGFydCwgcmFuZ2UuZW5kKTsKICAgICAgICAgSW50UmVjdCBib3VuZGluZ0JveCA9IGRh
dGFSYW5nZS0+Ym91bmRpbmdCb3goKTsKICAgICAgICAgU3RyaW5nIHJhbmdlU3RyaW5nID0gcGxh
aW5UZXh0KGRhdGFSYW5nZS5nZXQoKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L21hYy9BY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlci5tbQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9BY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlci5t
bQkocmV2aXNpb24gNzcyNjApCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9B
Y2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlci5tbQkod29ya2luZyBjb3B5KQpAQCAtMTEyNSw3ICsx
MTI1LDcgQEAgLSAoTlNWYWx1ZSopcG9zaXRpb24KICAgICAgICAgcG9pbnQueSA9IHNjcmVlbkhl
aWdodCAtIChwb2ludC55ICsgcmVtb3RlUG9zaXRpb24ueSArIHJlY3QuaGVpZ2h0KCkgLSBzY3Jv
bGxQb3NpdGlvbi55KTsKICAgICB9IGVsc2UgewogICAgICAgICAvLyBUaGUgQ29jb2EgYWNjZXNz
aWJpbGl0eSBBUEkgd2FudHMgdGhlIGxvd2VyLWxlZnQgY29ybmVyLgotICAgICAgICBwb2ludCA9
IE5TTWFrZVBvaW50KHJlY3QueCgpLCByZWN0LmJvdHRvbSgpKTsKKyAgICAgICAgcG9pbnQgPSBO
U01ha2VQb2ludChyZWN0LngoKSwgcmVjdC5tYXhZKCkpOwogICAgICAgICAKICAgICAgICAgaWYg
KGZyYW1lVmlldykgewogICAgICAgICAgICAgTlNWaWV3KiB2aWV3ID0gZnJhbWVWaWV3LT5kb2N1
bWVudFZpZXcoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9DbGllbnRSZWN0LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0NsaWVudFJlY3QuaAkocmV2aXNpb24gNzcyNjAp
CisrKyBTb3VyY2UvV2ViQ29yZS9kb20vQ2xpZW50UmVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC00
Miw4ICs0Miw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgc3RhdGljIFBhc3NSZWZQ
dHI8Q2xpZW50UmVjdD4gY3JlYXRlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkgeyByZXR1cm4gYWRv
cHRSZWYobmV3IENsaWVudFJlY3QocmVjdCkpOyB9CiAKICAgICAgICAgZmxvYXQgdG9wKCkgY29u
c3QgeyByZXR1cm4gbV9yZWN0LnkoKTsgfQotICAgICAgICBmbG9hdCByaWdodCgpIGNvbnN0IHsg
cmV0dXJuIG1fcmVjdC5yaWdodCgpOyB9Ci0gICAgICAgIGZsb2F0IGJvdHRvbSgpIGNvbnN0IHsg
cmV0dXJuIG1fcmVjdC5ib3R0b20oKTsgfQorICAgICAgICBmbG9hdCByaWdodCgpIGNvbnN0IHsg
cmV0dXJuIG1fcmVjdC5tYXhYKCk7IH0KKyAgICAgICAgZmxvYXQgYm90dG9tKCkgY29uc3QgeyBy
ZXR1cm4gbV9yZWN0Lm1heFkoKTsgfQogICAgICAgICBmbG9hdCBsZWZ0KCkgY29uc3QgeyByZXR1
cm4gbV9yZWN0LngoKTsgfQogICAgICAgICBmbG9hdCB3aWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1f
cmVjdC53aWR0aCgpOyB9CiAgICAgICAgIGZsb2F0IGhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIG1f
cmVjdC5oZWlnaHQoKTsgfQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxl
bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxl
bWVudC5jcHAJKHJldmlzaW9uIDc3MjYwKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2Fu
dmFzRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0NCwxMCArMzQ0LDEwIEBAIFN0cmlu
ZyBIVE1MQ2FudmFzRWxlbWVudDo6dG9EYXRhVVJMKGNvbnMKIAogSW50UmVjdCBIVE1MQ2FudmFz
RWxlbWVudDo6Y29udmVydExvZ2ljYWxUb0RldmljZShjb25zdCBGbG9hdFJlY3QmIGxvZ2ljYWxS
ZWN0KSBjb25zdAogewotICAgIGZsb2F0IGxlZnQgPSBmbG9vcmYobG9naWNhbFJlY3QubGVmdCgp
ICogbV9wYWdlU2NhbGVGYWN0b3IpOwotICAgIGZsb2F0IHRvcCA9IGZsb29yZihsb2dpY2FsUmVj
dC50b3AoKSAqIG1fcGFnZVNjYWxlRmFjdG9yKTsKLSAgICBmbG9hdCByaWdodCA9IGNlaWxmKGxv
Z2ljYWxSZWN0LnJpZ2h0KCkgKiBtX3BhZ2VTY2FsZUZhY3Rvcik7Ci0gICAgZmxvYXQgYm90dG9t
ID0gY2VpbGYobG9naWNhbFJlY3QuYm90dG9tKCkgKiBtX3BhZ2VTY2FsZUZhY3Rvcik7CisgICAg
ZmxvYXQgbGVmdCA9IGZsb29yZihsb2dpY2FsUmVjdC54KCkgKiBtX3BhZ2VTY2FsZUZhY3Rvcik7
CisgICAgZmxvYXQgdG9wID0gZmxvb3JmKGxvZ2ljYWxSZWN0LnkoKSAqIG1fcGFnZVNjYWxlRmFj
dG9yKTsKKyAgICBmbG9hdCByaWdodCA9IGNlaWxmKGxvZ2ljYWxSZWN0Lm1heFgoKSAqIG1fcGFn
ZVNjYWxlRmFjdG9yKTsKKyAgICBmbG9hdCBib3R0b20gPSBjZWlsZihsb2dpY2FsUmVjdC5tYXhZ
KCkgKiBtX3BhZ2VTY2FsZUZhY3Rvcik7CiAgICAgCiAgICAgcmV0dXJuIEludFJlY3QoSW50UG9p
bnQobGVmdCwgdG9wKSwgY29udmVydFRvVmFsaWREZXZpY2VTaXplKHJpZ2h0IC0gbGVmdCwgYm90
dG9tIC0gdG9wKSk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwv
Y2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAJKHJldmlzaW9uIDc3MjYwKQorKysg
U291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTEwNSw4ICsxMTA1LDggQEAgc3RhdGljIEludFNpemUgc2l6ZShI
VE1MVmlkZW9FbGVtZW50KiB2aQogCiBzdGF0aWMgaW5saW5lIEZsb2F0UmVjdCBub3JtYWxpemVS
ZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKLSAgICByZXR1cm4gRmxvYXRSZWN0KG1pbihy
ZWN0LngoKSwgcmVjdC5yaWdodCgpKSwKLSAgICAgICAgbWluKHJlY3QueSgpLCByZWN0LmJvdHRv
bSgpKSwKKyAgICByZXR1cm4gRmxvYXRSZWN0KG1pbihyZWN0LngoKSwgcmVjdC5tYXhYKCkpLAor
ICAgICAgICBtaW4ocmVjdC55KCksIHJlY3QubWF4WSgpKSwKICAgICAgICAgbWF4KHJlY3Qud2lk
dGgoKSwgLXJlY3Qud2lkdGgoKSksCiAgICAgICAgIG1heChyZWN0LmhlaWdodCgpLCAtcmVjdC5o
ZWlnaHQoKSkpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckFn
ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
QWdlbnQuY3BwCShyZXZpc2lvbiA3NzI2MCkKKysrIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JBZ2VudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyNzQsNyArMTI3NCw3IEBAIHZv
aWQgSW5zcGVjdG9yQWdlbnQ6OmRyYXdFbGVtZW50VGl0bGUoR3IKICAgICBmb250LnVwZGF0ZSgw
KTsKIAogICAgIFRleHRSdW4gbm9kZVRpdGxlUnVuKG5vZGVUaXRsZSk7Ci0gICAgSW50UG9pbnQg
dGl0bGVCYXNlUG9pbnQgPSBib3VuZGluZ0JveC5ib3R0b21MZWZ0KCk7CisgICAgSW50UG9pbnQg
dGl0bGVCYXNlUG9pbnQgPSBJbnRQb2ludChib3VuZGluZ0JveC54KCksIGJvdW5kaW5nQm94Lm1h
eFkoKSAtIDEpOwogICAgIHRpdGxlQmFzZVBvaW50Lm1vdmUocmVjdEluZmxhdGVQeCwgcmVjdElu
ZmxhdGVQeCk7CiAgICAgSW50UmVjdCB0aXRsZVJlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KGZvbnQu
c2VsZWN0aW9uUmVjdEZvclRleHQobm9kZVRpdGxlUnVuLCB0aXRsZUJhc2VQb2ludCwgZm9udEhl
aWdodFB4KSk7CiAgICAgdGl0bGVSZWN0LmluZmxhdGUocmVjdEluZmxhdGVQeCk7CkBAIC0xMjg0
LDE5ICsxMjg0LDE5IEBAIHZvaWQgSW5zcGVjdG9yQWdlbnQ6OmRyYXdFbGVtZW50VGl0bGUoR3IK
ICAgICBpbnQgZHkgPSBib3JkZXJXaWR0aFB4OwogCiAgICAgLy8gSWYgdGhlIHRpcCBzdGlja3Mg
YmV5b25kIHRoZSByaWdodCBvZiBvdmVybGF5UmVjdCwgcmlnaHQtYWxpZ24gdGhlIHRpcCB3aXRo
IHRoZSBzYWlkIGJvdW5kYXJ5LgotICAgIGlmICh0aXRsZVJlY3QucmlnaHQoKSA+IG92ZXJsYXlS
ZWN0LnJpZ2h0KCkpCi0gICAgICAgIGR4ID0gb3ZlcmxheVJlY3QucmlnaHQoKSAtIHRpdGxlUmVj
dC5yaWdodCgpOworICAgIGlmICh0aXRsZVJlY3QubWF4WCgpID4gb3ZlcmxheVJlY3QubWF4WCgp
KQorICAgICAgICBkeCA9IG92ZXJsYXlSZWN0Lm1heFgoKSAtIHRpdGxlUmVjdC5tYXhYKCk7CiAK
ICAgICAvLyBJZiB0aGUgdGlwIHN0aWNrcyBiZXlvbmQgdGhlIGxlZnQgb2Ygb3ZlcmxheVJlY3Qs
IGxlZnQtYWxpZ24gdGhlIHRpcCB3aXRoIHRoZSBzYWlkIGJvdW5kYXJ5LgogICAgIGlmICh0aXRs
ZVJlY3QueCgpICsgZHggPCBvdmVybGF5UmVjdC54KCkpCiAgICAgICAgIGR4ID0gb3ZlcmxheVJl
Y3QueCgpIC0gdGl0bGVSZWN0LngoKSAtIGJvcmRlcldpZHRoUHg7CiAKICAgICAvLyBJZiB0aGUg
dGlwIHN0aWNrcyBiZXlvbmQgdGhlIGJvdHRvbSBvZiBvdmVybGF5UmVjdCwgc2hvdyB0aGUgdGlw
IGF0IHRvcCBvZiBib3VuZGluZyBib3guCi0gICAgaWYgKHRpdGxlUmVjdC5ib3R0b20oKSA+IG92
ZXJsYXlSZWN0LmJvdHRvbSgpKSB7Ci0gICAgICAgIGR5ID0gYm91bmRpbmdCb3gueSgpIC0gdGl0
bGVSZWN0LmJvdHRvbSgpIC0gYm9yZGVyV2lkdGhQeDsKKyAgICBpZiAodGl0bGVSZWN0Lm1heFko
KSA+IG92ZXJsYXlSZWN0Lm1heFkoKSkgeworICAgICAgICBkeSA9IGJvdW5kaW5nQm94LnkoKSAt
IHRpdGxlUmVjdC5tYXhZKCkgLSBib3JkZXJXaWR0aFB4OwogICAgICAgICAvLyBJZiB0aGUgdGlw
IHN0aWxsIHN0aWNrcyBiZXlvbmQgdGhlIGJvdHRvbSBvZiBvdmVybGF5UmVjdCwgYm90dG9tLWFs
aWduIHRoZSB0aXAgd2l0aCB0aGUgc2FpZCBib3VuZGFyeS4KLSAgICAgICAgaWYgKHRpdGxlUmVj
dC5ib3R0b20oKSArIGR5ID4gb3ZlcmxheVJlY3QuYm90dG9tKCkpCi0gICAgICAgICAgICBkeSA9
IG92ZXJsYXlSZWN0LmJvdHRvbSgpIC0gdGl0bGVSZWN0LmJvdHRvbSgpOworICAgICAgICBpZiAo
dGl0bGVSZWN0Lm1heFkoKSArIGR5ID4gb3ZlcmxheVJlY3QubWF4WSgpKQorICAgICAgICAgICAg
ZHkgPSBvdmVybGF5UmVjdC5tYXhZKCkgLSB0aXRsZVJlY3QubWF4WSgpOwogICAgIH0KIAogICAg
IC8vIElmIHRoZSB0aXAgc3RpY2tzIGJleW9uZCB0aGUgdG9wIG9mIG92ZXJsYXlSZWN0LCBzaG93
IHRoZSB0aXAgYXQgdG9wIG9mIG92ZXJsYXlSZWN0LgpJbmRleDogU291cmNlL1dlYkNvcmUvcGFn
ZS9ET01XaW5kb3cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2lu
ZG93LmNwcAkocmV2aXNpb24gNzcyNjApCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRv
dy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0Miw4ICszNDIsOCBAQCB2b2lkIERPTVdpbmRvdzo6
YWRqdXN0V2luZG93UmVjdChjb25zdCBGCiAgICAgd2luZG93LnNldEhlaWdodChtaW4obWF4KDEw
MC4wZiwgd2luZG93LmhlaWdodCgpKSwgc2NyZWVuLmhlaWdodCgpKSk7CiAgICAgCiAgICAgLy8g
Q29uc3RyYWluIHRoZSB3aW5kb3cgcG9zaXRpb24gdG8gdGhlIHNjcmVlbi4KLSAgICB3aW5kb3cu
c2V0WChtYXgoc2NyZWVuLngoKSwgbWluKHdpbmRvdy54KCksIHNjcmVlbi5yaWdodCgpIC0gd2lu
ZG93LndpZHRoKCkpKSk7Ci0gICAgd2luZG93LnNldFkobWF4KHNjcmVlbi55KCksIG1pbih3aW5k
b3cueSgpLCBzY3JlZW4uYm90dG9tKCkgLSB3aW5kb3cuaGVpZ2h0KCkpKSk7CisgICAgd2luZG93
LnNldFgobWF4KHNjcmVlbi54KCksIG1pbih3aW5kb3cueCgpLCBzY3JlZW4ubWF4WCgpIC0gd2lu
ZG93LndpZHRoKCkpKSk7CisgICAgd2luZG93LnNldFkobWF4KHNjcmVlbi55KCksIG1pbih3aW5k
b3cueSgpLCBzY3JlZW4ubWF4WSgpIC0gd2luZG93LmhlaWdodCgpKSkpOwogfQogCiAvLyBGSVhN
RTogV2UgY2FuIHJlbW92ZSB0aGlzIGZ1bmN0aW9uIG9uY2UgVjggc2hvd01vZGFsRGlhbG9nIGlz
IGNoYW5nZWQgdG8gdXNlIERPTVdpbmRvdy4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvRHJh
Z0NvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRHJhZ0Nv
bnRyb2xsZXIuY3BwCShyZXZpc2lvbiA3NzI2MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRHJh
Z0NvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NDQsOSArNjQ0LDkgQEAgc3RhdGlj
IEludFBvaW50IGRyYWdMb2NGb3JESFRNTERyYWcoY29ucwogc3RhdGljIEludFBvaW50IGRyYWdM
b2NGb3JTZWxlY3Rpb25EcmFnKEZyYW1lKiBzcmMpCiB7CiAgICAgSW50UmVjdCBkcmFnZ2luZ1Jl
Y3QgPSBlbmNsb3NpbmdJbnRSZWN0KHNyYy0+c2VsZWN0aW9uKCktPmJvdW5kcygpKTsKLSAgICBp
bnQgeHBvcyA9IGRyYWdnaW5nUmVjdC5yaWdodCgpOworICAgIGludCB4cG9zID0gZHJhZ2dpbmdS
ZWN0Lm1heFgoKTsKICAgICB4cG9zID0gZHJhZ2dpbmdSZWN0LngoKSA8IHhwb3MgPyBkcmFnZ2lu
Z1JlY3QueCgpIDogeHBvczsKLSAgICBpbnQgeXBvcyA9IGRyYWdnaW5nUmVjdC5ib3R0b20oKTsK
KyAgICBpbnQgeXBvcyA9IGRyYWdnaW5nUmVjdC5tYXhZKCk7CiAjaWYgUExBVEZPUk0oTUFDKQog
ICAgIC8vIERlYWwgd2l0aCBmbGlwcGVkIGNvb3JkaW5hdGVzIG9uIE1hYwogICAgIHlwb3MgPSBk
cmFnZ2luZ1JlY3QueSgpID4geXBvcyA/IGRyYWdnaW5nUmVjdC55KCkgOiB5cG9zOwpJbmRleDog
U291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAkocmV2aXNpb24gNzcyNjApCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxMTEs
MTIgKzIxMTEsMTIgQEAgYm9vbCBFdmVudEhhbmRsZXI6OnNlbmRDb250ZXh0TWVudUV2ZW50Rgog
ICAgICAgICBSZWZQdHI8UmFuZ2U+IHNlbGVjdGlvbiA9IHNlbGVjdGlvbkNvbnRyb2xsZXItPnRv
Tm9ybWFsaXplZFJhbmdlKCk7CiAgICAgICAgIEludFJlY3QgZmlyc3RSZWN0ID0gbV9mcmFtZS0+
ZWRpdG9yKCktPmZpcnN0UmVjdEZvclJhbmdlKHNlbGVjdGlvbi5nZXQoKSk7CiAKLSAgICAgICAg
aW50IHggPSByaWdodEFsaWduZWQgPyBmaXJzdFJlY3QucmlnaHQoKSA6IGZpcnN0UmVjdC54KCk7
Ci0gICAgICAgIGxvY2F0aW9uID0gSW50UG9pbnQoeCwgZmlyc3RSZWN0LmJvdHRvbSgpKTsKKyAg
ICAgICAgaW50IHggPSByaWdodEFsaWduZWQgPyBmaXJzdFJlY3QubWF4WCgpIDogZmlyc3RSZWN0
LngoKTsKKyAgICAgICAgbG9jYXRpb24gPSBJbnRQb2ludCh4LCBmaXJzdFJlY3QubWF4WSgpKTsK
ICAgICB9IGVsc2UgaWYgKGZvY3VzZWROb2RlKSB7CiAgICAgICAgIFJlbmRlckJveE1vZGVsT2Jq
ZWN0KiBib3ggPSBmb2N1c2VkTm9kZS0+cmVuZGVyQm94TW9kZWxPYmplY3QoKTsKICAgICAgICAg
SW50UmVjdCBjbGlwcGVkUmVjdCA9IGJveC0+YWJzb2x1dGVDbGlwcGVkT3ZlcmZsb3dSZWN0KCk7
Ci0gICAgICAgIGxvY2F0aW9uID0gY2xpcHBlZFJlY3QuYm90dG9tTGVmdCgpOworICAgICAgICBs
b2NhdGlvbiA9IEludFBvaW50KGNsaXBwZWRSZWN0LngoKSwgY2xpcHBlZFJlY3QubWF4WSgpIC0g
MSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgbG9jYXRpb24gPSBJbnRQb2ludCgKICAgICAgICAg
ICAgIHJpZ2h0QWxpZ25lZCA/IHZpZXctPmNvbnRlbnRzV2lkdGgoKSAtIGtDb250ZXh0TWVudU1h
cmdpbiA6IGtDb250ZXh0TWVudU1hcmdpbiwKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvUHJp
bnRDb250ZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL1ByaW50Q29u
dGV4dC5jcHAJKHJldmlzaW9uIDc3MjYwKQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9QcmludENv
bnRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzUsMjQgKzEzNSwyNCBAQCB2b2lkIFByaW50
Q29udGV4dDo6Y29tcHV0ZVBhZ2VSZWN0c1dpdGhQCiAgICAgaW50IGJsb2NrRGlyZWN0aW9uRW5k
OwogICAgIGlmIChpc0hvcml6b250YWwpIHsKICAgICAgICAgaWYgKHZpZXctPnN0eWxlKCktPmlz
RmxpcHBlZEJsb2Nrc1dyaXRpbmdNb2RlKCkpIHsKLSAgICAgICAgICAgIGJsb2NrRGlyZWN0aW9u
U3RhcnQgPSBkb2NSZWN0LmJvdHRvbSgpOworICAgICAgICAgICAgYmxvY2tEaXJlY3Rpb25TdGFy
dCA9IGRvY1JlY3QubWF4WSgpOwogICAgICAgICAgICAgYmxvY2tEaXJlY3Rpb25FbmQgPSBkb2NS
ZWN0LnkoKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGJsb2NrRGlyZWN0aW9uU3Rh
cnQgPSBkb2NSZWN0LnkoKTsKLSAgICAgICAgICAgIGJsb2NrRGlyZWN0aW9uRW5kID0gZG9jUmVj
dC5ib3R0b20oKTsKKyAgICAgICAgICAgIGJsb2NrRGlyZWN0aW9uRW5kID0gZG9jUmVjdC5tYXhZ
KCk7CiAgICAgICAgIH0KLSAgICAgICAgaW5saW5lRGlyZWN0aW9uU3RhcnQgPSB2aWV3LT5zdHls
ZSgpLT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyBkb2NSZWN0LngoKSA6IGRvY1JlY3Qucmln
aHQoKTsKLSAgICAgICAgaW5saW5lRGlyZWN0aW9uRW5kID0gdmlldy0+c3R5bGUoKS0+aXNMZWZ0
VG9SaWdodERpcmVjdGlvbigpID8gZG9jUmVjdC5yaWdodCgpIDogZG9jUmVjdC54KCk7CisgICAg
ICAgIGlubGluZURpcmVjdGlvblN0YXJ0ID0gdmlldy0+c3R5bGUoKS0+aXNMZWZ0VG9SaWdodERp
cmVjdGlvbigpID8gZG9jUmVjdC54KCkgOiBkb2NSZWN0Lm1heFgoKTsKKyAgICAgICAgaW5saW5l
RGlyZWN0aW9uRW5kID0gdmlldy0+c3R5bGUoKS0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpID8g
ZG9jUmVjdC5tYXhYKCkgOiBkb2NSZWN0LngoKTsKICAgICB9IGVsc2UgewogICAgICAgICBpZiAo
dmlldy0+c3R5bGUoKS0+aXNGbGlwcGVkQmxvY2tzV3JpdGluZ01vZGUoKSkgewotICAgICAgICAg
ICAgYmxvY2tEaXJlY3Rpb25TdGFydCA9IGRvY1JlY3QucmlnaHQoKTsKKyAgICAgICAgICAgIGJs
b2NrRGlyZWN0aW9uU3RhcnQgPSBkb2NSZWN0Lm1heFgoKTsKICAgICAgICAgICAgIGJsb2NrRGly
ZWN0aW9uRW5kID0gZG9jUmVjdC54KCk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBi
bG9ja0RpcmVjdGlvblN0YXJ0ID0gZG9jUmVjdC54KCk7Ci0gICAgICAgICAgICBibG9ja0RpcmVj
dGlvbkVuZCA9IGRvY1JlY3QucmlnaHQoKTsKKyAgICAgICAgICAgIGJsb2NrRGlyZWN0aW9uRW5k
ID0gZG9jUmVjdC5tYXhYKCk7CiAgICAgICAgIH0KLSAgICAgICAgaW5saW5lRGlyZWN0aW9uU3Rh
cnQgPSB2aWV3LT5zdHlsZSgpLT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyBkb2NSZWN0Lnko
KSA6IGRvY1JlY3QuYm90dG9tKCk7Ci0gICAgICAgIGlubGluZURpcmVjdGlvbkVuZCA9IHZpZXct
PnN0eWxlKCktPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/IGRvY1JlY3QuYm90dG9tKCkgOiBk
b2NSZWN0LnkoKTsKKyAgICAgICAgaW5saW5lRGlyZWN0aW9uU3RhcnQgPSB2aWV3LT5zdHlsZSgp
LT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyBkb2NSZWN0LnkoKSA6IGRvY1JlY3QubWF4WSgp
OworICAgICAgICBpbmxpbmVEaXJlY3Rpb25FbmQgPSB2aWV3LT5zdHlsZSgpLT5pc0xlZnRUb1Jp
Z2h0RGlyZWN0aW9uKCkgPyBkb2NSZWN0Lm1heFkoKSA6IGRvY1JlY3QueSgpOwogICAgIH0KIAog
ICAgIHVuc2lnbmVkIHBhZ2VDb3VudCA9IGNlaWxmKChmbG9hdClkb2NMb2dpY2FsSGVpZ2h0IC8g
cGFnZUxvZ2ljYWxIZWlnaHQpOwpAQCAtMjc0LDcgKzI3NCw3IEBAIGludCBQcmludENvbnRleHQ6
OnBhZ2VOdW1iZXJGb3JFbGVtZW50KEUKICAgICBzaXplX3QgcGFnZU51bWJlciA9IDA7CiAgICAg
Zm9yICg7IHBhZ2VOdW1iZXIgPCBwcmludENvbnRleHQucGFnZUNvdW50KCk7IHBhZ2VOdW1iZXIr
KykgewogICAgICAgICBjb25zdCBJbnRSZWN0JiBwYWdlID0gcHJpbnRDb250ZXh0LnBhZ2VSZWN0
KHBhZ2VOdW1iZXIpOwotICAgICAgICBpZiAocGFnZS54KCkgPD0gbGVmdCAmJiBsZWZ0IDwgcGFn
ZS5yaWdodCgpICYmIHBhZ2UueSgpIDw9IHRvcCAmJiB0b3AgPCBwYWdlLmJvdHRvbSgpKQorICAg
ICAgICBpZiAocGFnZS54KCkgPD0gbGVmdCAmJiBsZWZ0IDwgcGFnZS5tYXhYKCkgJiYgcGFnZS55
KCkgPD0gdG9wICYmIHRvcCA8IHBhZ2UubWF4WSgpKQogICAgICAgICAgICAgcmV0dXJuIHBhZ2VO
dW1iZXI7CiAgICAgfQogICAgIHJldHVybiAtMTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2Uv
U3BhdGlhbE5hdmlnYXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2Uv
U3BhdGlhbE5hdmlnYXRpb24uY3BwCShyZXZpc2lvbiA3NzI2MCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BhZ2UvU3BhdGlhbE5hdmlnYXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjcsNyArMTI3
LDcgQEAgc3RhdGljIGlubGluZSBpbnQgbWlkZGxlKEZvY3VzRGlyZWN0aW9uIAogCiBzdGF0aWMg
aW5saW5lIGludCBlbmQoRm9jdXNEaXJlY3Rpb24gZGlyZWN0aW9uLCBjb25zdCBJbnRSZWN0JiBy
ZWN0KQogewotICAgIHJldHVybiBpc0hvcml6b250YWxNb3ZlKGRpcmVjdGlvbikgPyByZWN0LmJv
dHRvbSgpIDogcmVjdC5yaWdodCgpOworICAgIHJldHVybiBpc0hvcml6b250YWxNb3ZlKGRpcmVj
dGlvbikgPyByZWN0Lm1heFkoKSA6IHJlY3QubWF4WCgpOwogfQogCiAvLyBUaGlzIG1ldGhvZCBj
aGVja3MgaWYgcmVjdHMgfGF8IGFuZCB8YnwgYXJlIGZ1bGx5IGFsaWduZWQgZWl0aGVyIHZlcnRp
Y2FsbHkgb3IKQEAgLTE0NCwxMSArMTQ0LDExIEBAIHN0YXRpYyBib29sIGFyZVJlY3RzRnVsbHlB
bGlnbmVkKEZvY3VzRGkKICAgICBzd2l0Y2ggKGRpcmVjdGlvbikgewogICAgIGNhc2UgRm9jdXNE
aXJlY3Rpb25MZWZ0OgogICAgICAgICBhU3RhcnQgPSBhLngoKTsKLSAgICAgICAgYkVuZCA9IGIu
cmlnaHQoKTsKKyAgICAgICAgYkVuZCA9IGIubWF4WCgpOwogICAgICAgICBicmVhazsKICAgICBj
YXNlIEZvY3VzRGlyZWN0aW9uUmlnaHQ6CiAgICAgICAgIGFTdGFydCA9IGIueCgpOwotICAgICAg
ICBiRW5kID0gYS5yaWdodCgpOworICAgICAgICBiRW5kID0gYS5tYXhYKCk7CiAgICAgICAgIGJy
ZWFrOwogICAgIGNhc2UgRm9jdXNEaXJlY3Rpb25VcDoKICAgICAgICAgYVN0YXJ0ID0gYS55KCk7
CkBAIC0yNDUsMTMgKzI0NSwxMyBAQCBzdGF0aWMgYm9vbCBhcmVSZWN0c01vcmVUaGFuRnVsbFNj
cmVlbkFwCiAKICAgICBzd2l0Y2ggKGRpcmVjdGlvbikgewogICAgIGNhc2UgRm9jdXNEaXJlY3Rp
b25MZWZ0OgotICAgICAgICByZXR1cm4gY3VyUmVjdC54KCkgLSB0YXJnZXRSZWN0LnJpZ2h0KCkg
PiB2aWV3U2l6ZS53aWR0aCgpOworICAgICAgICByZXR1cm4gY3VyUmVjdC54KCkgLSB0YXJnZXRS
ZWN0Lm1heFgoKSA+IHZpZXdTaXplLndpZHRoKCk7CiAgICAgY2FzZSBGb2N1c0RpcmVjdGlvblJp
Z2h0OgotICAgICAgICByZXR1cm4gdGFyZ2V0UmVjdC54KCkgLSBjdXJSZWN0LnJpZ2h0KCkgPiB2
aWV3U2l6ZS53aWR0aCgpOworICAgICAgICByZXR1cm4gdGFyZ2V0UmVjdC54KCkgLSBjdXJSZWN0
Lm1heFgoKSA+IHZpZXdTaXplLndpZHRoKCk7CiAgICAgY2FzZSBGb2N1c0RpcmVjdGlvblVwOgot
ICAgICAgICByZXR1cm4gY3VyUmVjdC55KCkgLSB0YXJnZXRSZWN0LmJvdHRvbSgpID4gdmlld1Np
emUuaGVpZ2h0KCk7CisgICAgICAgIHJldHVybiBjdXJSZWN0LnkoKSAtIHRhcmdldFJlY3QubWF4
WSgpID4gdmlld1NpemUuaGVpZ2h0KCk7CiAgICAgY2FzZSBGb2N1c0RpcmVjdGlvbkRvd246Ci0g
ICAgICAgIHJldHVybiB0YXJnZXRSZWN0LnkoKSAtIGN1clJlY3QuYm90dG9tKCkgPiB2aWV3U2l6
ZS5oZWlnaHQoKTsKKyAgICAgICAgcmV0dXJuIHRhcmdldFJlY3QueSgpIC0gY3VyUmVjdC5tYXhZ
KCkgPiB2aWV3U2l6ZS5oZWlnaHQoKTsKICAgICBkZWZhdWx0OgogICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0yNjEsMjYgKzI2MSwyNiBAQCBz
dGF0aWMgYm9vbCBhcmVSZWN0c01vcmVUaGFuRnVsbFNjcmVlbkFwCiAvLyBSZXR1cm4gdHJ1ZSBp
ZiByZWN0IHxhfCBpcyBiZWxvdyB8YnwuIEZhbHNlIG90aGVyd2lzZS4KIHN0YXRpYyBpbmxpbmUg
Ym9vbCBiZWxvdyhjb25zdCBJbnRSZWN0JiBhLCBjb25zdCBJbnRSZWN0JiBiKQogewotICAgIHJl
dHVybiBhLnkoKSA+IGIuYm90dG9tKCk7CisgICAgcmV0dXJuIGEueSgpID4gYi5tYXhZKCk7CiB9
CiAKIC8vIFJldHVybiB0cnVlIGlmIHJlY3QgfGF8IGlzIG9uIHRoZSByaWdodCBvZiB8YnwuIEZh
bHNlIG90aGVyd2lzZS4KIHN0YXRpYyBpbmxpbmUgYm9vbCByaWdodE9mKGNvbnN0IEludFJlY3Qm
IGEsIGNvbnN0IEludFJlY3QmIGIpCiB7Ci0gICAgcmV0dXJuIGEueCgpID4gYi5yaWdodCgpOwor
ICAgIHJldHVybiBhLngoKSA+IGIubWF4WCgpOwogfQogCiBzdGF0aWMgYm9vbCBpc1JlY3RJbkRp
cmVjdGlvbihGb2N1c0RpcmVjdGlvbiBkaXJlY3Rpb24sIGNvbnN0IEludFJlY3QmIGN1clJlY3Qs
IGNvbnN0IEludFJlY3QmIHRhcmdldFJlY3QpCiB7CiAgICAgc3dpdGNoIChkaXJlY3Rpb24pIHsK
ICAgICBjYXNlIEZvY3VzRGlyZWN0aW9uTGVmdDoKLSAgICAgICAgcmV0dXJuIHRhcmdldFJlY3Qu
cmlnaHQoKSA8PSBjdXJSZWN0LngoKTsKKyAgICAgICAgcmV0dXJuIHRhcmdldFJlY3QubWF4WCgp
IDw9IGN1clJlY3QueCgpOwogICAgIGNhc2UgRm9jdXNEaXJlY3Rpb25SaWdodDoKLSAgICAgICAg
cmV0dXJuIHRhcmdldFJlY3QueCgpID49IGN1clJlY3QucmlnaHQoKTsKKyAgICAgICAgcmV0dXJu
IHRhcmdldFJlY3QueCgpID49IGN1clJlY3QubWF4WCgpOwogICAgIGNhc2UgRm9jdXNEaXJlY3Rp
b25VcDoKLSAgICAgICAgcmV0dXJuIHRhcmdldFJlY3QuYm90dG9tKCkgPD0gY3VyUmVjdC55KCk7
CisgICAgICAgIHJldHVybiB0YXJnZXRSZWN0Lm1heFkoKSA8PSBjdXJSZWN0LnkoKTsKICAgICBj
YXNlIEZvY3VzRGlyZWN0aW9uRG93bjoKLSAgICAgICAgcmV0dXJuIHRhcmdldFJlY3QueSgpID49
IGN1clJlY3QuYm90dG9tKCk7CisgICAgICAgIHJldHVybiB0YXJnZXRSZWN0LnkoKSA+PSBjdXJS
ZWN0Lm1heFkoKTsKICAgICBkZWZhdWx0OgogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNTQ0LDE4ICs1NDQsMTggQEAgdm9pZCBlbnRyeUFu
ZEV4aXRQb2ludHNGb3JEaXJlY3Rpb24oRm9jdQogICAgIHN3aXRjaCAoZGlyZWN0aW9uKSB7CiAg
ICAgY2FzZSBGb2N1c0RpcmVjdGlvbkxlZnQ6CiAgICAgICAgIGV4aXRQb2ludC5zZXRYKHN0YXJ0
aW5nUmVjdC54KCkpOwotICAgICAgICBlbnRyeVBvaW50LnNldFgocG90ZW50aWFsUmVjdC5yaWdo
dCgpKTsKKyAgICAgICAgZW50cnlQb2ludC5zZXRYKHBvdGVudGlhbFJlY3QubWF4WCgpKTsKICAg
ICAgICAgYnJlYWs7CiAgICAgY2FzZSBGb2N1c0RpcmVjdGlvblVwOgogICAgICAgICBleGl0UG9p
bnQuc2V0WShzdGFydGluZ1JlY3QueSgpKTsKLSAgICAgICAgZW50cnlQb2ludC5zZXRZKHBvdGVu
dGlhbFJlY3QuYm90dG9tKCkpOworICAgICAgICBlbnRyeVBvaW50LnNldFkocG90ZW50aWFsUmVj
dC5tYXhZKCkpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEZvY3VzRGlyZWN0aW9uUmlnaHQ6
Ci0gICAgICAgIGV4aXRQb2ludC5zZXRYKHN0YXJ0aW5nUmVjdC5yaWdodCgpKTsKKyAgICAgICAg
ZXhpdFBvaW50LnNldFgoc3RhcnRpbmdSZWN0Lm1heFgoKSk7CiAgICAgICAgIGVudHJ5UG9pbnQu
c2V0WChwb3RlbnRpYWxSZWN0LngoKSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgRm9jdXNE
aXJlY3Rpb25Eb3duOgotICAgICAgICBleGl0UG9pbnQuc2V0WShzdGFydGluZ1JlY3QuYm90dG9t
KCkpOworICAgICAgICBleGl0UG9pbnQuc2V0WShzdGFydGluZ1JlY3QubWF4WSgpKTsKICAgICAg
ICAgZW50cnlQb2ludC5zZXRZKHBvdGVudGlhbFJlY3QueSgpKTsKICAgICAgICAgYnJlYWs7CiAg
ICAgZGVmYXVsdDoKQEAgLTU2Nyw5ICs1NjcsOSBAQCB2b2lkIGVudHJ5QW5kRXhpdFBvaW50c0Zv
ckRpcmVjdGlvbihGb2N1CiAgICAgY2FzZSBGb2N1c0RpcmVjdGlvblJpZ2h0OgogICAgICAgICBp
ZiAoYmVsb3coc3RhcnRpbmdSZWN0LCBwb3RlbnRpYWxSZWN0KSkgewogICAgICAgICAgICAgZXhp
dFBvaW50LnNldFkoc3RhcnRpbmdSZWN0LnkoKSk7Ci0gICAgICAgICAgICBlbnRyeVBvaW50LnNl
dFkocG90ZW50aWFsUmVjdC5ib3R0b20oKSk7CisgICAgICAgICAgICBlbnRyeVBvaW50LnNldFko
cG90ZW50aWFsUmVjdC5tYXhZKCkpOwogICAgICAgICB9IGVsc2UgaWYgKGJlbG93KHBvdGVudGlh
bFJlY3QsIHN0YXJ0aW5nUmVjdCkpIHsKLSAgICAgICAgICAgIGV4aXRQb2ludC5zZXRZKHN0YXJ0
aW5nUmVjdC5ib3R0b20oKSk7CisgICAgICAgICAgICBleGl0UG9pbnQuc2V0WShzdGFydGluZ1Jl
Y3QubWF4WSgpKTsKICAgICAgICAgICAgIGVudHJ5UG9pbnQuc2V0WShwb3RlbnRpYWxSZWN0Lnko
KSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBleGl0UG9pbnQuc2V0WShtYXgoc3Rh
cnRpbmdSZWN0LnkoKSwgcG90ZW50aWFsUmVjdC55KCkpKTsKQEAgLTU4MCw5ICs1ODAsOSBAQCB2
b2lkIGVudHJ5QW5kRXhpdFBvaW50c0ZvckRpcmVjdGlvbihGb2N1CiAgICAgY2FzZSBGb2N1c0Rp
cmVjdGlvbkRvd246CiAgICAgICAgIGlmIChyaWdodE9mKHN0YXJ0aW5nUmVjdCwgcG90ZW50aWFs
UmVjdCkpIHsKICAgICAgICAgICAgIGV4aXRQb2ludC5zZXRYKHN0YXJ0aW5nUmVjdC54KCkpOwot
ICAgICAgICAgICAgZW50cnlQb2ludC5zZXRYKHBvdGVudGlhbFJlY3QucmlnaHQoKSk7CisgICAg
ICAgICAgICBlbnRyeVBvaW50LnNldFgocG90ZW50aWFsUmVjdC5tYXhYKCkpOwogICAgICAgICB9
IGVsc2UgaWYgKHJpZ2h0T2YocG90ZW50aWFsUmVjdCwgc3RhcnRpbmdSZWN0KSkgewotICAgICAg
ICAgICAgZXhpdFBvaW50LnNldFgoc3RhcnRpbmdSZWN0LnJpZ2h0KCkpOworICAgICAgICAgICAg
ZXhpdFBvaW50LnNldFgoc3RhcnRpbmdSZWN0Lm1heFgoKSk7CiAgICAgICAgICAgICBlbnRyeVBv
aW50LnNldFgocG90ZW50aWFsUmVjdC54KCkpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAg
ICAgZXhpdFBvaW50LnNldFgobWF4KHN0YXJ0aW5nUmVjdC54KCksIHBvdGVudGlhbFJlY3QueCgp
KSk7CkBAIC02NzUsMTEgKzY3NSwxMSBAQCBJbnRSZWN0IHZpcnR1YWxSZWN0Rm9yRGlyZWN0aW9u
KEZvY3VzRGlyCiAgICAgSW50UmVjdCB2aXJ0dWFsU3RhcnRpbmdSZWN0ID0gc3RhcnRpbmdSZWN0
OwogICAgIHN3aXRjaCAoZGlyZWN0aW9uKSB7CiAgICAgY2FzZSBGb2N1c0RpcmVjdGlvbkxlZnQ6
Ci0gICAgICAgIHZpcnR1YWxTdGFydGluZ1JlY3Quc2V0WCh2aXJ0dWFsU3RhcnRpbmdSZWN0LnJp
Z2h0KCkgLSB3aWR0aCk7CisgICAgICAgIHZpcnR1YWxTdGFydGluZ1JlY3Quc2V0WCh2aXJ0dWFs
U3RhcnRpbmdSZWN0Lm1heFgoKSAtIHdpZHRoKTsKICAgICAgICAgdmlydHVhbFN0YXJ0aW5nUmVj
dC5zZXRXaWR0aCh3aWR0aCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgRm9jdXNEaXJlY3Rp
b25VcDoKLSAgICAgICAgdmlydHVhbFN0YXJ0aW5nUmVjdC5zZXRZKHZpcnR1YWxTdGFydGluZ1Jl
Y3QuYm90dG9tKCkgLSB3aWR0aCk7CisgICAgICAgIHZpcnR1YWxTdGFydGluZ1JlY3Quc2V0WSh2
aXJ0dWFsU3RhcnRpbmdSZWN0Lm1heFkoKSAtIHdpZHRoKTsKICAgICAgICAgdmlydHVhbFN0YXJ0
aW5nUmVjdC5zZXRIZWlnaHQod2lkdGgpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEZvY3Vz
RGlyZWN0aW9uUmlnaHQ6CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL1dpbmRvd0ZlYXR1cmVz
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL1dpbmRvd0ZlYXR1cmVzLmNw
cAkocmV2aXNpb24gNzcyNjApCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL1dpbmRvd0ZlYXR1cmVz
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTg2LDkgKzE4Niw5IEBAIFdpbmRvd0ZlYXR1cmVzOjpX
aW5kb3dGZWF0dXJlcyhjb25zdCBTdHIKICAgICB3aWR0aCA9IGZsb2F0RmVhdHVyZShmZWF0dXJl
cywgImRpYWxvZ3dpZHRoIiwgMTAwLCBzY3JlZW5BdmFpbGFibGVSZWN0LndpZHRoKCksIDYyMCk7
IC8vIGRlZmF1bHQgaGVyZSBjYW1lIGZyb20gZnJhbWUgc2l6ZSBvZiBkaWFsb2cgaW4gTWFjSUUK
ICAgICBoZWlnaHQgPSBmbG9hdEZlYXR1cmUoZmVhdHVyZXMsICJkaWFsb2doZWlnaHQiLCAxMDAs
IHNjcmVlbkF2YWlsYWJsZVJlY3QuaGVpZ2h0KCksIDQ1MCk7IC8vIGRlZmF1bHQgaGVyZSBjYW1l
IGZyb20gZnJhbWUgc2l6ZSBvZiBkaWFsb2cgaW4gTWFjSUUKIAotICAgIHggPSBmbG9hdEZlYXR1
cmUoZmVhdHVyZXMsICJkaWFsb2dsZWZ0Iiwgc2NyZWVuQXZhaWxhYmxlUmVjdC54KCksIHNjcmVl
bkF2YWlsYWJsZVJlY3QucmlnaHQoKSAtIHdpZHRoLCAtMSk7CisgICAgeCA9IGZsb2F0RmVhdHVy
ZShmZWF0dXJlcywgImRpYWxvZ2xlZnQiLCBzY3JlZW5BdmFpbGFibGVSZWN0LngoKSwgc2NyZWVu
QXZhaWxhYmxlUmVjdC5tYXhYKCkgLSB3aWR0aCwgLTEpOwogICAgIHhTZXQgPSB4ID4gMDsKLSAg
ICB5ID0gZmxvYXRGZWF0dXJlKGZlYXR1cmVzLCAiZGlhbG9ndG9wIiwgc2NyZWVuQXZhaWxhYmxl
UmVjdC55KCksIHNjcmVlbkF2YWlsYWJsZVJlY3QuYm90dG9tKCkgLSBoZWlnaHQsIC0xKTsKKyAg
ICB5ID0gZmxvYXRGZWF0dXJlKGZlYXR1cmVzLCAiZGlhbG9ndG9wIiwgc2NyZWVuQXZhaWxhYmxl
UmVjdC55KCksIHNjcmVlbkF2YWlsYWJsZVJlY3QubWF4WSgpIC0gaGVpZ2h0LCAtMSk7CiAgICAg
eVNldCA9IHkgPiAwOwogCiAgICAgaWYgKGJvb2xGZWF0dXJlKGZlYXR1cmVzLCAiY2VudGVyIiwg
dHJ1ZSkpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbFZpZXcuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbFZpZXcuY3BwCShyZXZp
c2lvbiA3NzI2MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbFZpZXcuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC05MjIsNyArOTIyLDcgQEAgdm9pZCBTY3JvbGxWaWV3OjpjYWxjdWxh
dGVPdmVyaGFuZ0FyZWFzRgogICAgIH0gZWxzZSBpZiAoc2Nyb2xsWSgpID4gY29udGVudHNIZWln
aHQoKSAtIHZpc2libGVDb250ZW50UmVjdCh0cnVlKS5oZWlnaHQoKSkgewogICAgICAgICBpbnQg
aGVpZ2h0ID0gc2Nyb2xsWSgpIC0gKGNvbnRlbnRzSGVpZ2h0KCkgLSB2aXNpYmxlQ29udGVudFJl
Y3QodHJ1ZSkuaGVpZ2h0KCkpOwogICAgICAgICBob3Jpem9udGFsT3ZlcmhhbmdSZWN0ID0gZnJh
bWVSZWN0KCk7Ci0gICAgICAgIGhvcml6b250YWxPdmVyaGFuZ1JlY3Quc2V0WShmcmFtZVJlY3Qo
KS5ib3R0b20oKSAtIGhlaWdodCk7CisgICAgICAgIGhvcml6b250YWxPdmVyaGFuZ1JlY3Quc2V0
WShmcmFtZVJlY3QoKS5tYXhZKCkgLSBoZWlnaHQpOwogICAgICAgICBob3Jpem9udGFsT3Zlcmhh
bmdSZWN0LnNldEhlaWdodChoZWlnaHQpOwogICAgIH0KIApAQCAtOTM4LDcgKzkzOCw3IEBAIHZv
aWQgU2Nyb2xsVmlldzo6Y2FsY3VsYXRlT3ZlcmhhbmdBcmVhc0YKICAgICAgICAgaW50IHdpZHRo
ID0gc2Nyb2xsWCgpIC0gKGNvbnRlbnRzV2lkdGgoKSAtIHZpc2libGVDb250ZW50UmVjdCh0cnVl
KS53aWR0aCgpKTsKICAgICAgICAgdmVydGljYWxPdmVyaGFuZ1JlY3Quc2V0V2lkdGgod2lkdGgp
OwogICAgICAgICB2ZXJ0aWNhbE92ZXJoYW5nUmVjdC5zZXRIZWlnaHQoZnJhbWVSZWN0KCkuaGVp
Z2h0KCkgLSBob3Jpem9udGFsT3ZlcmhhbmdSZWN0LmhlaWdodCgpKTsKLSAgICAgICAgdmVydGlj
YWxPdmVyaGFuZ1JlY3Quc2V0WChmcmFtZVJlY3QoKS5yaWdodCgpIC0gd2lkdGgpOworICAgICAg
ICB2ZXJ0aWNhbE92ZXJoYW5nUmVjdC5zZXRYKGZyYW1lUmVjdCgpLm1heFgoKSAtIHdpZHRoKTsK
ICAgICAgICAgaWYgKGhvcml6b250YWxPdmVyaGFuZ1JlY3QueSgpID09IGZyYW1lUmVjdCgpLnko
KSkKICAgICAgICAgICAgIHZlcnRpY2FsT3ZlcmhhbmdSZWN0LnNldFkoZnJhbWVSZWN0KCkueSgp
ICsgaG9yaXpvbnRhbE92ZXJoYW5nUmVjdC5oZWlnaHQoKSk7CiAgICAgICAgIGVsc2UKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGJhci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFyLmNwcAkocmV2aXNpb24gNzcyNjApCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
OTMsMTQgKzM5MywxNCBAQCB2b2lkIFNjcm9sbGJhcjo6c2V0RnJhbWVSZWN0KGNvbnN0IEludFJl
CiAgICAgICAgIEludFJlY3QgcmVzaXplclJlY3QgPSB2aWV3LT5jb252ZXJ0RnJvbUNvbnRhaW5p
bmdXaW5kb3codmlldy0+d2luZG93UmVzaXplclJlY3QoKSk7CiAgICAgICAgIGlmIChyZWN0Lmlu
dGVyc2VjdHMocmVzaXplclJlY3QpKSB7CiAgICAgICAgICAgICBpZiAob3JpZW50YXRpb24oKSA9
PSBIb3Jpem9udGFsU2Nyb2xsYmFyKSB7Ci0gICAgICAgICAgICAgICAgaW50IG92ZXJsYXAgPSBy
ZWN0LnJpZ2h0KCkgLSByZXNpemVyUmVjdC54KCk7Ci0gICAgICAgICAgICAgICAgaWYgKG92ZXJs
YXAgPiAwICYmIHJlc2l6ZXJSZWN0LnJpZ2h0KCkgPj0gcmVjdC5yaWdodCgpKSB7CisgICAgICAg
ICAgICAgICAgaW50IG92ZXJsYXAgPSByZWN0Lm1heFgoKSAtIHJlc2l6ZXJSZWN0LngoKTsKKyAg
ICAgICAgICAgICAgICBpZiAob3ZlcmxhcCA+IDAgJiYgcmVzaXplclJlY3QubWF4WCgpID49IHJl
Y3QubWF4WCgpKSB7CiAgICAgICAgICAgICAgICAgICAgIGFkanVzdGVkUmVjdC5zZXRXaWR0aChy
ZWN0LndpZHRoKCkgLSBvdmVybGFwKTsKICAgICAgICAgICAgICAgICAgICAgb3ZlcmxhcHNSZXNp
emVyID0gdHJ1ZTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgICAgIGludCBvdmVybGFwID0gcmVjdC5ib3R0b20oKSAtIHJlc2l6ZXJSZWN0Lnko
KTsKLSAgICAgICAgICAgICAgICBpZiAob3ZlcmxhcCA+IDAgJiYgcmVzaXplclJlY3QuYm90dG9t
KCkgPj0gcmVjdC5ib3R0b20oKSkgeworICAgICAgICAgICAgICAgIGludCBvdmVybGFwID0gcmVj
dC5tYXhZKCkgLSByZXNpemVyUmVjdC55KCk7CisgICAgICAgICAgICAgICAgaWYgKG92ZXJsYXAg
PiAwICYmIHJlc2l6ZXJSZWN0Lm1heFkoKSA+PSByZWN0Lm1heFkoKSkgewogICAgICAgICAgICAg
ICAgICAgICBhZGp1c3RlZFJlY3Quc2V0SGVpZ2h0KHJlY3QuaGVpZ2h0KCkgLSBvdmVybGFwKTsK
ICAgICAgICAgICAgICAgICAgICAgb3ZlcmxhcHNSZXNpemVyID0gdHJ1ZTsKICAgICAgICAgICAg
ICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXJUaGVtZUNvbXBv
c2l0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFy
VGhlbWVDb21wb3NpdGUuY3BwCShyZXZpc2lvbiA3NzI2MCkKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL1Njcm9sbGJhclRoZW1lQ29tcG9zaXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQ4
LDExICsyNDgsMTEgQEAgdm9pZCBTY3JvbGxiYXJUaGVtZUNvbXBvc2l0ZTo6c3BsaXRUcmFjawog
ICAgIGlmIChzY3JvbGxiYXItPm9yaWVudGF0aW9uKCkgPT0gSG9yaXpvbnRhbFNjcm9sbGJhcikg
ewogICAgICAgICB0aHVtYlJlY3QgPSBJbnRSZWN0KHRyYWNrUmVjdC54KCkgKyB0aHVtYlBvcywg
dHJhY2tSZWN0LnkoKSArICh0cmFja1JlY3QuaGVpZ2h0KCkgLSB0aGlja25lc3MpIC8gMiwgdGh1
bWJMZW5ndGgoc2Nyb2xsYmFyKSwgdGhpY2tuZXNzKTsgCiAgICAgICAgIGJlZm9yZVRodW1iUmVj
dCA9IEludFJlY3QodHJhY2tSZWN0LngoKSwgdHJhY2tSZWN0LnkoKSwgdGh1bWJQb3MgKyB0aHVt
YlJlY3Qud2lkdGgoKSAvIDIsIHRyYWNrUmVjdC5oZWlnaHQoKSk7IAotICAgICAgICBhZnRlclRo
dW1iUmVjdCA9IEludFJlY3QodHJhY2tSZWN0LngoKSArIGJlZm9yZVRodW1iUmVjdC53aWR0aCgp
LCB0cmFja1JlY3QueSgpLCB0cmFja1JlY3QucmlnaHQoKSAtIGJlZm9yZVRodW1iUmVjdC5yaWdo
dCgpLCB0cmFja1JlY3QuaGVpZ2h0KCkpOworICAgICAgICBhZnRlclRodW1iUmVjdCA9IEludFJl
Y3QodHJhY2tSZWN0LngoKSArIGJlZm9yZVRodW1iUmVjdC53aWR0aCgpLCB0cmFja1JlY3QueSgp
LCB0cmFja1JlY3QubWF4WCgpIC0gYmVmb3JlVGh1bWJSZWN0Lm1heFgoKSwgdHJhY2tSZWN0Lmhl
aWdodCgpKTsKICAgICB9IGVsc2UgewogICAgICAgICB0aHVtYlJlY3QgPSBJbnRSZWN0KHRyYWNr
UmVjdC54KCkgKyAodHJhY2tSZWN0LndpZHRoKCkgLSB0aGlja25lc3MpIC8gMiwgdHJhY2tSZWN0
LnkoKSArIHRodW1iUG9zLCB0aGlja25lc3MsIHRodW1iTGVuZ3RoKHNjcm9sbGJhcikpOwogICAg
ICAgICBiZWZvcmVUaHVtYlJlY3QgPSBJbnRSZWN0KHRyYWNrUmVjdC54KCksIHRyYWNrUmVjdC55
KCksIHRyYWNrUmVjdC53aWR0aCgpLCB0aHVtYlBvcyArIHRodW1iUmVjdC5oZWlnaHQoKSAvIDIp
OyAKLSAgICAgICAgYWZ0ZXJUaHVtYlJlY3QgPSBJbnRSZWN0KHRyYWNrUmVjdC54KCksIHRyYWNr
UmVjdC55KCkgKyBiZWZvcmVUaHVtYlJlY3QuaGVpZ2h0KCksIHRyYWNrUmVjdC53aWR0aCgpLCB0
cmFja1JlY3QuYm90dG9tKCkgLSBiZWZvcmVUaHVtYlJlY3QuYm90dG9tKCkpOworICAgICAgICBh
ZnRlclRodW1iUmVjdCA9IEludFJlY3QodHJhY2tSZWN0LngoKSwgdHJhY2tSZWN0LnkoKSArIGJl
Zm9yZVRodW1iUmVjdC5oZWlnaHQoKSwgdHJhY2tSZWN0LndpZHRoKCksIHRyYWNrUmVjdC5tYXhZ
KCkgLSBiZWZvcmVUaHVtYlJlY3QubWF4WSgpKTsKICAgICB9CiB9CiAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UXVhZC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UXVhZC5oCShyZXZpc2lvbiA3NzI2MCkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UXVhZC5oCSh3b3JraW5n
IGNvcHkpCkBAIC01NCw5ICs1NCw5IEBAIHB1YmxpYzoKIAogICAgIEZsb2F0UXVhZChjb25zdCBG
bG9hdFJlY3QmIGluUmVjdCkKICAgICAgICAgOiBtX3AxKGluUmVjdC5sb2NhdGlvbigpKQotICAg
ICAgICAsIG1fcDIoaW5SZWN0LnJpZ2h0KCksIGluUmVjdC55KCkpCi0gICAgICAgICwgbV9wMyhp
blJlY3QucmlnaHQoKSwgaW5SZWN0LmJvdHRvbSgpKQotICAgICAgICAsIG1fcDQoaW5SZWN0Lngo
KSwgaW5SZWN0LmJvdHRvbSgpKQorICAgICAgICAsIG1fcDIoaW5SZWN0Lm1heFgoKSwgaW5SZWN0
LnkoKSkKKyAgICAgICAgLCBtX3AzKGluUmVjdC5tYXhYKCksIGluUmVjdC5tYXhZKCkpCisgICAg
ICAgICwgbV9wNChpblJlY3QueCgpLCBpblJlY3QubWF4WSgpKQogICAgIHsKICAgICB9CiAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UmVjdC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRSZWN0LmNwcAko
cmV2aXNpb24gNzcyNjApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9h
dFJlY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MSwyMiArNTEsMjIgQEAgYm9vbCBGbG9hdFJl
Y3Q6OmludGVyc2VjdHMoY29uc3QgRmxvYXRSZQogewogICAgIC8vIENoZWNraW5nIGVtcHRpbmVz
cyBoYW5kbGVzIG5lZ2F0aXZlIHdpZHRocyBhcyB3ZWxsIGFzIHplcm8uCiAgICAgcmV0dXJuICFp
c0VtcHR5KCkgJiYgIW90aGVyLmlzRW1wdHkoKQotICAgICAgICAmJiB4KCkgPCBvdGhlci5yaWdo
dCgpICYmIG90aGVyLngoKSA8IHJpZ2h0KCkKLSAgICAgICAgJiYgeSgpIDwgb3RoZXIuYm90dG9t
KCkgJiYgb3RoZXIueSgpIDwgYm90dG9tKCk7CisgICAgICAgICYmIHgoKSA8IG90aGVyLm1heFgo
KSAmJiBvdGhlci54KCkgPCBtYXhYKCkKKyAgICAgICAgJiYgeSgpIDwgb3RoZXIubWF4WSgpICYm
IG90aGVyLnkoKSA8IG1heFkoKTsKIH0KIAogYm9vbCBGbG9hdFJlY3Q6OmNvbnRhaW5zKGNvbnN0
IEZsb2F0UmVjdCYgb3RoZXIpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIHgoKSA8PSBvdGhlci54KCkg
JiYgcmlnaHQoKSA+PSBvdGhlci5yaWdodCgpCi0gICAgICAgICYmIHkoKSA8PSBvdGhlci55KCkg
JiYgYm90dG9tKCkgPj0gb3RoZXIuYm90dG9tKCk7CisgICAgcmV0dXJuIHgoKSA8PSBvdGhlci54
KCkgJiYgbWF4WCgpID49IG90aGVyLm1heFgoKQorICAgICAgICAmJiB5KCkgPD0gb3RoZXIueSgp
ICYmIG1heFkoKSA+PSBvdGhlci5tYXhZKCk7CiB9CiAKIHZvaWQgRmxvYXRSZWN0OjppbnRlcnNl
Y3QoY29uc3QgRmxvYXRSZWN0JiBvdGhlcikKIHsKICAgICBmbG9hdCBsID0gbWF4KHgoKSwgb3Ro
ZXIueCgpKTsKICAgICBmbG9hdCB0ID0gbWF4KHkoKSwgb3RoZXIueSgpKTsKLSAgICBmbG9hdCBy
ID0gbWluKHJpZ2h0KCksIG90aGVyLnJpZ2h0KCkpOwotICAgIGZsb2F0IGIgPSBtaW4oYm90dG9t
KCksIG90aGVyLmJvdHRvbSgpKTsKKyAgICBmbG9hdCByID0gbWluKG1heFgoKSwgb3RoZXIubWF4
WCgpKTsKKyAgICBmbG9hdCBiID0gbWluKG1heFkoKSwgb3RoZXIubWF4WSgpKTsKIAogICAgIC8v
IFJldHVybiBhIGNsZWFuIGVtcHR5IHJlY3RhbmdsZSBmb3Igbm9uLWludGVyc2VjdGluZyBjYXNl
cy4KICAgICBpZiAobCA+PSByIHx8IHQgPj0gYikgewpAQCAtOTEsOCArOTEsOCBAQCB2b2lkIEZs
b2F0UmVjdDo6dW5pdGUoY29uc3QgRmxvYXRSZWN0JiBvCiAKICAgICBmbG9hdCBsID0gbWluKHgo
KSwgb3RoZXIueCgpKTsKICAgICBmbG9hdCB0ID0gbWluKHkoKSwgb3RoZXIueSgpKTsKLSAgICBm
bG9hdCByID0gbWF4KHJpZ2h0KCksIG90aGVyLnJpZ2h0KCkpOwotICAgIGZsb2F0IGIgPSBtYXgo
Ym90dG9tKCksIG90aGVyLmJvdHRvbSgpKTsKKyAgICBmbG9hdCByID0gbWF4KG1heFgoKSwgb3Ro
ZXIubWF4WCgpKTsKKyAgICBmbG9hdCBiID0gbWF4KG1heFkoKSwgb3RoZXIubWF4WSgpKTsKIAog
ICAgIHNldExvY2F0aW9uQW5kU2l6ZUZyb21FZGdlcyhsLCB0LCByLCBiKTsKIH0KQEAgLTE4MCw4
ICsxODAsOCBAQCBJbnRSZWN0IGVuY2xvc2luZ0ludFJlY3QoY29uc3QgRmxvYXRSZWN0CiB7CiAg
ICAgZmxvYXQgbGVmdCA9IGZsb29yZihyZWN0LngoKSk7CiAgICAgZmxvYXQgdG9wID0gZmxvb3Jm
KHJlY3QueSgpKTsKLSAgICBmbG9hdCB3aWR0aCA9IGNlaWxmKHJlY3QucmlnaHQoKSkgLSBsZWZ0
OwotICAgIGZsb2F0IGhlaWdodCA9IGNlaWxmKHJlY3QuYm90dG9tKCkpIC0gdG9wOworICAgIGZs
b2F0IHdpZHRoID0gY2VpbGYocmVjdC5tYXhYKCkpIC0gbGVmdDsKKyAgICBmbG9hdCBoZWlnaHQg
PSBjZWlsZihyZWN0Lm1heFkoKSkgLSB0b3A7CiAgICAgcmV0dXJuIEludFJlY3Qoc2FmZUZsb2F0
VG9JbnQobGVmdCksIHNhZmVGbG9hdFRvSW50KHRvcCksIAogICAgICAgICAgICAgICAgICAgIHNh
ZmVGbG9hdFRvSW50KHdpZHRoKSwgc2FmZUZsb2F0VG9JbnQoaGVpZ2h0KSk7CiB9CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3QuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3QuaAkocmV2aXNpb24g
NzcyNjApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3QuaAko
d29ya2luZyBjb3B5KQpAQCAtOTAsNiArOTAsOCBAQCBwdWJsaWM6CiAKICAgICBmbG9hdCB4KCkg
Y29uc3QgeyByZXR1cm4gbV9sb2NhdGlvbi54KCk7IH0KICAgICBmbG9hdCB5KCkgY29uc3QgeyBy
ZXR1cm4gbV9sb2NhdGlvbi55KCk7IH0KKyAgICBmbG9hdCBtYXhYKCkgY29uc3QgeyByZXR1cm4g
eCgpICsgd2lkdGgoKTsgfQorICAgIGZsb2F0IG1heFkoKSBjb25zdCB7IHJldHVybiB5KCkgKyBo
ZWlnaHQoKTsgfQogICAgIGZsb2F0IHdpZHRoKCkgY29uc3QgeyByZXR1cm4gbV9zaXplLndpZHRo
KCk7IH0KICAgICBmbG9hdCBoZWlnaHQoKSBjb25zdCB7IHJldHVybiBtX3NpemUuaGVpZ2h0KCk7
IH0KIApAQCAtMTE5LDcgKzEyMSw3IEBAIHB1YmxpYzoKICAgICAvLyBOb3RlLCB0aGlzIGRvZXNu
J3QgbWF0Y2ggd2hhdCBJbnRSZWN0Ojpjb250YWlucyhJbnRQb2ludCYpIGRvZXM7IHRoZSBpbnQg
dmVyc2lvbgogICAgIC8vIGlzIHJlYWxseSBjaGVja2luZyBmb3IgY29udGFpbm1lbnQgb2YgMXgx
IHJlY3QsIGJ1dCB0aGF0IGRvZXNuJ3QgbWFrZSBzZW5zZSB3aXRoIGZsb2F0cy4KICAgICBib29s
IGNvbnRhaW5zKGZsb2F0IHB4LCBmbG9hdCBweSkgY29uc3QKLSAgICAgICAgeyByZXR1cm4gcHgg
Pj0geCgpICYmIHB4IDw9IHJpZ2h0KCkgJiYgcHkgPj0geSgpICYmIHB5IDw9IGJvdHRvbSgpOyB9
CisgICAgICAgIHsgcmV0dXJuIHB4ID49IHgoKSAmJiBweCA8PSBtYXhYKCkgJiYgcHkgPj0geSgp
ICYmIHB5IDw9IG1heFkoKTsgfQogICAgIGJvb2wgY29udGFpbnMoY29uc3QgRmxvYXRQb2ludCYg
cG9pbnQpIGNvbnN0IHsgcmV0dXJuIGNvbnRhaW5zKHBvaW50LngoKSwgcG9pbnQueSgpKTsgfQog
CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ludFJlY3QuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ludFJlY3QuY3Bw
CShyZXZpc2lvbiA3NzI2MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0lu
dFJlY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NCwyMiArNDQsMjIgQEAgYm9vbCBJbnRSZWN0
OjppbnRlcnNlY3RzKGNvbnN0IEludFJlY3QmIAogewogICAgIC8vIENoZWNraW5nIGVtcHRpbmVz
cyBoYW5kbGVzIG5lZ2F0aXZlIHdpZHRocyBhcyB3ZWxsIGFzIHplcm8uCiAgICAgcmV0dXJuICFp
c0VtcHR5KCkgJiYgIW90aGVyLmlzRW1wdHkoKQotICAgICAgICAmJiB4KCkgPCBvdGhlci5yaWdo
dCgpICYmIG90aGVyLngoKSA8IHJpZ2h0KCkKLSAgICAgICAgJiYgeSgpIDwgb3RoZXIuYm90dG9t
KCkgJiYgb3RoZXIueSgpIDwgYm90dG9tKCk7CisgICAgICAgICYmIHgoKSA8IG90aGVyLm1heFgo
KSAmJiBvdGhlci54KCkgPCBtYXhYKCkKKyAgICAgICAgJiYgeSgpIDwgb3RoZXIubWF4WSgpICYm
IG90aGVyLnkoKSA8IG1heFkoKTsKIH0KIAogYm9vbCBJbnRSZWN0Ojpjb250YWlucyhjb25zdCBJ
bnRSZWN0JiBvdGhlcikgY29uc3QKIHsKLSAgICByZXR1cm4geCgpIDw9IG90aGVyLngoKSAmJiBy
aWdodCgpID49IG90aGVyLnJpZ2h0KCkKLSAgICAgICAgJiYgeSgpIDw9IG90aGVyLnkoKSAmJiBi
b3R0b20oKSA+PSBvdGhlci5ib3R0b20oKTsKKyAgICByZXR1cm4geCgpIDw9IG90aGVyLngoKSAm
JiBtYXhYKCkgPj0gb3RoZXIubWF4WCgpCisgICAgICAgICYmIHkoKSA8PSBvdGhlci55KCkgJiYg
bWF4WSgpID49IG90aGVyLm1heFkoKTsKIH0KIAogdm9pZCBJbnRSZWN0OjppbnRlcnNlY3QoY29u
c3QgSW50UmVjdCYgb3RoZXIpCiB7CiAgICAgaW50IGwgPSBtYXgoeCgpLCBvdGhlci54KCkpOwog
ICAgIGludCB0ID0gbWF4KHkoKSwgb3RoZXIueSgpKTsKLSAgICBpbnQgciA9IG1pbihyaWdodCgp
LCBvdGhlci5yaWdodCgpKTsKLSAgICBpbnQgYiA9IG1pbihib3R0b20oKSwgb3RoZXIuYm90dG9t
KCkpOworICAgIGludCByID0gbWluKG1heFgoKSwgb3RoZXIubWF4WCgpKTsKKyAgICBpbnQgYiA9
IG1pbihtYXhZKCksIG90aGVyLm1heFkoKSk7CiAKICAgICAvLyBSZXR1cm4gYSBjbGVhbiBlbXB0
eSByZWN0YW5nbGUgZm9yIG5vbi1pbnRlcnNlY3RpbmcgY2FzZXMuCiAgICAgaWYgKGwgPj0gciB8
fCB0ID49IGIpIHsKQEAgLTg3LDggKzg3LDggQEAgdm9pZCBJbnRSZWN0Ojp1bml0ZShjb25zdCBJ
bnRSZWN0JiBvdGhlcgogCiAgICAgaW50IGwgPSBtaW4oeCgpLCBvdGhlci54KCkpOwogICAgIGlu
dCB0ID0gbWluKHkoKSwgb3RoZXIueSgpKTsKLSAgICBpbnQgciA9IG1heChyaWdodCgpLCBvdGhl
ci5yaWdodCgpKTsKLSAgICBpbnQgYiA9IG1heChib3R0b20oKSwgb3RoZXIuYm90dG9tKCkpOwor
ICAgIGludCByID0gbWF4KG1heFgoKSwgb3RoZXIubWF4WCgpKTsKKyAgICBpbnQgYiA9IG1heCht
YXhZKCksIG90aGVyLm1heFkoKSk7CiAKICAgICBtX2xvY2F0aW9uLnNldFgobCk7CiAgICAgbV9s
b2NhdGlvbi5zZXRZKHQpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
SW50UmVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0ludFJlY3QuaAkocmV2aXNpb24gNzcyNjApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9JbnRSZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTkxLDYgKzkxLDggQEAgcHVibGlj
OgogCiAgICAgaW50IHgoKSBjb25zdCB7IHJldHVybiBtX2xvY2F0aW9uLngoKTsgfQogICAgIGlu
dCB5KCkgY29uc3QgeyByZXR1cm4gbV9sb2NhdGlvbi55KCk7IH0KKyAgICBpbnQgbWF4WCgpIGNv
bnN0IHsgcmV0dXJuIHgoKSArIHdpZHRoKCk7IH0KKyAgICBpbnQgbWF4WSgpIGNvbnN0IHsgcmV0
dXJuIHkoKSArIGhlaWdodCgpOyB9CiAgICAgaW50IHdpZHRoKCkgY29uc3QgeyByZXR1cm4gbV9z
aXplLndpZHRoKCk7IH0KICAgICBpbnQgaGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gbV9zaXplLmhl
aWdodCgpOyB9CiAKQEAgLTk5LDEzICsxMDEsNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRXaWR0
aChpbnQgd2lkdGgpIHsgbV9zaXplLnNldFdpZHRoKHdpZHRoKTsgfQogICAgIHZvaWQgc2V0SGVp
Z2h0KGludCBoZWlnaHQpIHsgbV9zaXplLnNldEhlaWdodChoZWlnaHQpOyB9CiAKLSAgICAvLyBC
ZSBjYXJlZnVsIHdpdGggdGhlc2UgZnVuY3Rpb25zLiAgVGhlIHBvaW50IGlzIGNvbnNpZGVyZWQg
dG8gYmUgdG8gdGhlIHJpZ2h0IGFuZCBiZWxvdy4gIFRoZXNlIGFyZSBub3QKLSAgICAvLyBzdWJz
dGl0dXRlcyBmb3IgcmlnaHQoKSBhbmQgYm90dG9tKCkuCi0gICAgSW50UG9pbnQgdG9wTGVmdCgp
IGNvbnN0IHsgcmV0dXJuIG1fbG9jYXRpb247IH0KLSAgICBJbnRQb2ludCB0b3BSaWdodCgpIGNv
bnN0IHsgcmV0dXJuIEludFBvaW50KHJpZ2h0KCkgLSAxLCB5KCkpOyB9Ci0gICAgSW50UG9pbnQg
Ym90dG9tTGVmdCgpIGNvbnN0IHsgcmV0dXJuIEludFBvaW50KHgoKSwgYm90dG9tKCkgLSAxKTsg
fQotICAgIEludFBvaW50IGJvdHRvbVJpZ2h0KCkgY29uc3QgeyByZXR1cm4gSW50UG9pbnQocmln
aHQoKSAtIDEsIGJvdHRvbSgpIC0gMSk7IH0KLQogICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsg
cmV0dXJuIG1fc2l6ZS5pc0VtcHR5KCk7IH0KIAogICAgIGludCByaWdodCgpIGNvbnN0IHsgcmV0
dXJuIHgoKSArIHdpZHRoKCk7IH0KQEAgLTExOCwyNiArMTEzLDI2IEBAIHB1YmxpYzoKICAgICB2
b2lkIG1vdmUoY29uc3QgSW50U2l6ZSYgcykgeyBtX2xvY2F0aW9uICs9IHM7IH0gCiAgICAgdm9p
ZCBtb3ZlKGludCBkeCwgaW50IGR5KSB7IG1fbG9jYXRpb24ubW92ZShkeCwgZHkpOyB9IAogICAg
IAotICAgIHZvaWQgc2hpZnRMZWZ0RWRnZVRvKGludCBlZGdlKQorICAgIHZvaWQgc2hpZnRNaW5Y
RWRnZVRvKGludCBlZGdlKQogICAgIHsKICAgICAgICAgaW50IGRlbHRhID0gZWRnZSAtIHgoKTsK
ICAgICAgICAgc2V0WChlZGdlKTsKICAgICAgICAgc2V0V2lkdGgoc3RkOjptYXgoMCwgd2lkdGgo
KSAtIGRlbHRhKSk7CiAgICAgfQotICAgIHZvaWQgc2hpZnRSaWdodEVkZ2VUbyhpbnQgZWRnZSkK
KyAgICB2b2lkIHNoaWZ0TWF4WEVkZ2VUbyhpbnQgZWRnZSkKICAgICB7Ci0gICAgICAgIGludCBk
ZWx0YSA9IGVkZ2UgLSByaWdodCgpOworICAgICAgICBpbnQgZGVsdGEgPSBlZGdlIC0gbWF4WCgp
OwogICAgICAgICBzZXRXaWR0aChzdGQ6Om1heCgwLCB3aWR0aCgpICsgZGVsdGEpKTsKICAgICB9
Ci0gICAgdm9pZCBzaGlmdFRvcEVkZ2VUbyhpbnQgZWRnZSkKKyAgICB2b2lkIHNoaWZ0TWluWUVk
Z2VUbyhpbnQgZWRnZSkKICAgICB7CiAgICAgICAgIGludCBkZWx0YSA9IGVkZ2UgLSB5KCk7CiAg
ICAgICAgIHNldFkoZWRnZSk7CiAgICAgICAgIHNldEhlaWdodChzdGQ6Om1heCgwLCBoZWlnaHQo
KSAtIGRlbHRhKSk7CiAgICAgfQotICAgIHZvaWQgc2hpZnRCb3R0b21FZGdlVG8oaW50IGVkZ2Up
CisgICAgdm9pZCBzaGlmdE1heFlFZGdlVG8oaW50IGVkZ2UpCiAgICAgewotICAgICAgICBpbnQg
ZGVsdGEgPSBlZGdlIC0gYm90dG9tKCk7CisgICAgICAgIGludCBkZWx0YSA9IGVkZ2UgLSBtYXhZ
KCk7CiAgICAgICAgIHNldEhlaWdodChzdGQ6Om1heCgwLCBoZWlnaHQoKSArIGRlbHRhKSk7CiAg
ICAgfQogCkBAIC0xNDcsNyArMTQyLDcgQEAgcHVibGljOgogICAgIC8vIFRoaXMgY2hlY2tzIHRv
IHNlZSBpZiB0aGUgcmVjdCBjb250YWlucyB4LHkgaW4gdGhlIHRyYWRpdGlvbmFsIHNlbnNlLgog
ICAgIC8vIEVxdWl2YWxlbnQgdG8gY2hlY2tpbmcgaWYgdGhlIHJlY3QgY29udGFpbnMgYSAxeDEg
cmVjdCBiZWxvdyBhbmQgdG8gdGhlIHJpZ2h0IG9mIChweCxweSkuCiAgICAgYm9vbCBjb250YWlu
cyhpbnQgcHgsIGludCBweSkgY29uc3QKLSAgICAgICAgeyByZXR1cm4gcHggPj0geCgpICYmIHB4
IDwgcmlnaHQoKSAmJiBweSA+PSB5KCkgJiYgcHkgPCBib3R0b20oKTsgfQorICAgICAgICB7IHJl
dHVybiBweCA+PSB4KCkgJiYgcHggPCBtYXhYKCkgJiYgcHkgPj0geSgpICYmIHB5IDwgbWF4WSgp
OyB9CiAgICAgYm9vbCBjb250YWlucyhjb25zdCBJbnRQb2ludCYgcG9pbnQpIGNvbnN0IHsgcmV0
dXJuIGNvbnRhaW5zKHBvaW50LngoKSwgcG9pbnQueSgpKTsgfQogCiAgICAgdm9pZCBpbnRlcnNl
Y3QoY29uc3QgSW50UmVjdCYpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvV2lkdGhJdGVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvV2lkdGhJdGVyYXRvci5jcHAJKHJldmlzaW9uIDc3MjYwKQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvV2lkdGhJdGVyYXRvci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI1NSw5ICsyNTUsOSBAQCB2b2lkIFdpZHRoSXRlcmF0b3I6OmFkdmFuY2UoaW50IG9m
ZnNldCwgCiAgICAgICAgIGxhc3RSb3VuZGluZ1dpZHRoID0gd2lkdGggLSBvbGRXaWR0aDsKIAog
ICAgICAgICBpZiAobV9hY2NvdW50Rm9yR2x5cGhCb3VuZHMpIHsKLSAgICAgICAgICAgIG1fbWF4
R2x5cGhCb3VuZGluZ0JveFkgPSBtYXgobV9tYXhHbHlwaEJvdW5kaW5nQm94WSwgYm91bmRzLmJv
dHRvbSgpKTsKKyAgICAgICAgICAgIG1fbWF4R2x5cGhCb3VuZGluZ0JveFkgPSBtYXgobV9tYXhH
bHlwaEJvdW5kaW5nQm94WSwgYm91bmRzLm1heFkoKSk7CiAgICAgICAgICAgICBtX21pbkdseXBo
Qm91bmRpbmdCb3hZID0gbWluKG1fbWluR2x5cGhCb3VuZGluZ0JveFksIGJvdW5kcy55KCkpOwot
ICAgICAgICAgICAgbV9sYXN0R2x5cGhPdmVyZmxvdyA9IG1heDxmbG9hdD4oMCwgYm91bmRzLnJp
Z2h0KCkgLSB3aWR0aCk7CisgICAgICAgICAgICBtX2xhc3RHbHlwaE92ZXJmbG93ID0gbWF4PGZs
b2F0PigwLCBib3VuZHMubWF4WCgpIC0gd2lkdGgpOwogICAgICAgICB9CiAgICAgfQogCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3Jh
cGhpY3NDb250ZXh0Q0cuY3BwCShyZXZpc2lvbiA3NzI2MCkKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTY2LDkgKzE2Niw5IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3UmVjdChjb25zdCBJ
bnQKICAgICAgICAgICAgIHNldENHRmlsbENvbG9yKGNvbnRleHQsIHN0cm9rZUNvbG9yKCksIHN0
cm9rZUNvbG9yU3BhY2UoKSk7CiAgICAgICAgIENHUmVjdCByZWN0c1s0XSA9IHsKICAgICAgICAg
ICAgIEZsb2F0UmVjdChyZWN0LngoKSwgcmVjdC55KCksIHJlY3Qud2lkdGgoKSwgMSksCi0gICAg
ICAgICAgICBGbG9hdFJlY3QocmVjdC54KCksIHJlY3QuYm90dG9tKCkgLSAxLCByZWN0LndpZHRo
KCksIDEpLAorICAgICAgICAgICAgRmxvYXRSZWN0KHJlY3QueCgpLCByZWN0Lm1heFkoKSAtIDEs
IHJlY3Qud2lkdGgoKSwgMSksCiAgICAgICAgICAgICBGbG9hdFJlY3QocmVjdC54KCksIHJlY3Qu
eSgpICsgMSwgMSwgcmVjdC5oZWlnaHQoKSAtIDIpLAotICAgICAgICAgICAgRmxvYXRSZWN0KHJl
Y3QucmlnaHQoKSAtIDEsIHJlY3QueSgpICsgMSwgMSwgcmVjdC5oZWlnaHQoKSAtIDIpCisgICAg
ICAgICAgICBGbG9hdFJlY3QocmVjdC5tYXhYKCkgLSAxLCByZWN0LnkoKSArIDEsIDEsIHJlY3Qu
aGVpZ2h0KCkgLSAyKQogICAgICAgICB9OwogICAgICAgICBDR0NvbnRleHRGaWxsUmVjdHMoY29u
dGV4dCwgcmVjdHMsIDQpOwogICAgICAgICBpZiAob2xkRmlsbENvbG9yICE9IHN0cm9rZUNvbG9y
KCkpCkBAIC01NjQsNyArNTY0LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxQYXRoKGNv
bnN0IFBhdAogICAgICAgICAgICAgICAgIENHQ29udGV4dENsaXAobGF5ZXJDb250ZXh0KTsKIAog
ICAgICAgICAgICAgbV9zdGF0ZS5maWxsR3JhZGllbnQtPnBhaW50KGxheWVyQ29udGV4dCk7Ci0g
ICAgICAgICAgICBDR0NvbnRleHREcmF3TGF5ZXJBdFBvaW50KGNvbnRleHQsIENHUG9pbnRNYWtl
KHJlY3QubGVmdCgpLCByZWN0LnRvcCgpKSwgbGF5ZXIpOworICAgICAgICAgICAgQ0dDb250ZXh0
RHJhd0xheWVyQXRQb2ludChjb250ZXh0LCBDR1BvaW50TWFrZShyZWN0LngoKSwgcmVjdC55KCkp
LCBsYXllcik7CiAgICAgICAgICAgICBDR0xheWVyUmVsZWFzZShsYXllcik7CiAgICAgICAgIH0g
ZWxzZSB7CiAgICAgICAgICAgICBDR0NvbnRleHRCZWdpblBhdGgoY29udGV4dCk7CkBAIC02NDYs
NyArNjQ2LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KGNvbnN0IEZsbwogCiAg
ICAgICAgICAgICBDR0NvbnRleHRDb25jYXRDVE0obGF5ZXJDb250ZXh0LCBtX3N0YXRlLmZpbGxH
cmFkaWVudC0+Z3JhZGllbnRTcGFjZVRyYW5zZm9ybSgpKTsKICAgICAgICAgICAgIG1fc3RhdGUu
ZmlsbEdyYWRpZW50LT5wYWludChsYXllckNvbnRleHQpOwotICAgICAgICAgICAgQ0dDb250ZXh0
RHJhd0xheWVyQXRQb2ludChjb250ZXh0LCBDR1BvaW50TWFrZShyZWN0LmxlZnQoKSwgcmVjdC50
b3AoKSksIGxheWVyKTsKKyAgICAgICAgICAgIENHQ29udGV4dERyYXdMYXllckF0UG9pbnQoY29u
dGV4dCwgQ0dQb2ludE1ha2UocmVjdC54KCksIHJlY3QueSgpKSwgbGF5ZXIpOwogICAgICAgICAg
ICAgQ0dMYXllclJlbGVhc2UobGF5ZXIpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAg
Q0dDb250ZXh0Q2xpcFRvUmVjdChjb250ZXh0LCByZWN0KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0cuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0cuY3BwCShyZXZp
c2lvbiA3NzI2MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdl
QnVmZmVyQ0cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNjcsNyArMjY3LDcgQEAgUGFzc1JlZlB0
cjxCeXRlQXJyYXk+IGdldEltYWdlRGF0YShjb25zdAogICAgIFJlZlB0cjxCeXRlQXJyYXk+IHJl
c3VsdCA9IEJ5dGVBcnJheTo6Y3JlYXRlKHJlY3Qud2lkdGgoKSAqIHJlY3QuaGVpZ2h0KCkgKiA0
KTsKICAgICB1bnNpZ25lZCBjaGFyKiBkYXRhID0gcmVzdWx0LT5kYXRhKCk7CiAKLSAgICBpZiAo
cmVjdC54KCkgPCAwIHx8IHJlY3QueSgpIDwgMCB8fCByZWN0LnJpZ2h0KCkgPiBzaXplLndpZHRo
KCkgfHwgcmVjdC5ib3R0b20oKSA+IHNpemUuaGVpZ2h0KCkpCisgICAgaWYgKHJlY3QueCgpIDwg
MCB8fCByZWN0LnkoKSA8IDAgfHwgcmVjdC5tYXhYKCkgPiBzaXplLndpZHRoKCkgfHwgcmVjdC5t
YXhZKCkgPiBzaXplLmhlaWdodCgpKQogICAgICAgICBtZW1zZXQoZGF0YSwgMCwgcmVzdWx0LT5s
ZW5ndGgoKSk7CiAKICAgICBpbnQgb3JpZ2lueCA9IHJlY3QueCgpOwpAQCAtMjc2LDcgKzI3Niw3
IEBAIFBhc3NSZWZQdHI8Qnl0ZUFycmF5PiBnZXRJbWFnZURhdGEoY29uc3QKICAgICAgICAgZGVz
dHggPSAtb3JpZ2lueDsKICAgICAgICAgb3JpZ2lueCA9IDA7CiAgICAgfQotICAgIGludCBlbmR4
ID0gcmVjdC5yaWdodCgpOworICAgIGludCBlbmR4ID0gcmVjdC5tYXhYKCk7CiAgICAgaWYgKGVu
ZHggPiBzaXplLndpZHRoKCkpCiAgICAgICAgIGVuZHggPSBzaXplLndpZHRoKCk7CiAgICAgaW50
IG51bUNvbHVtbnMgPSBlbmR4IC0gb3JpZ2lueDsKQEAgLTI4Nyw3ICsyODcsNyBAQCBQYXNzUmVm
UHRyPEJ5dGVBcnJheT4gZ2V0SW1hZ2VEYXRhKGNvbnN0CiAgICAgICAgIGRlc3R5ID0gLW9yaWdp
bnk7CiAgICAgICAgIG9yaWdpbnkgPSAwOwogICAgIH0KLSAgICBpbnQgZW5keSA9IHJlY3QuYm90
dG9tKCk7CisgICAgaW50IGVuZHkgPSByZWN0Lm1heFkoKTsKICAgICBpZiAoZW5keSA+IHNpemUu
aGVpZ2h0KCkpCiAgICAgICAgIGVuZHkgPSBzaXplLmhlaWdodCgpOwogICAgIGludCBudW1Sb3dz
ID0gZW5keSAtIG9yaWdpbnk7CkBAIC0zNzcsOSArMzc3LDkgQEAgdm9pZCBwdXRJbWFnZURhdGEo
Qnl0ZUFycmF5KiYgc291cmNlLCBjbwogICAgIEFTU0VSVChkZXN0eCA+PSAwKTsKICAgICBBU1NF
UlQoZGVzdHggPCBzaXplLndpZHRoKCkpOwogICAgIEFTU0VSVChvcmlnaW54ID49IDApOwotICAg
IEFTU0VSVChvcmlnaW54IDw9IHNvdXJjZVJlY3QucmlnaHQoKSk7CisgICAgQVNTRVJUKG9yaWdp
bnggPD0gc291cmNlUmVjdC5tYXhYKCkpOwogCi0gICAgaW50IGVuZHggPSBkZXN0UG9pbnQueCgp
ICsgc291cmNlUmVjdC5yaWdodCgpOworICAgIGludCBlbmR4ID0gZGVzdFBvaW50LngoKSArIHNv
dXJjZVJlY3QubWF4WCgpOwogICAgIEFTU0VSVChlbmR4IDw9IHNpemUud2lkdGgoKSk7CiAKICAg
ICBpbnQgbnVtQ29sdW1ucyA9IGVuZHggLSBkZXN0eDsKQEAgLTM4OSw5ICszODksOSBAQCB2b2lk
IHB1dEltYWdlRGF0YShCeXRlQXJyYXkqJiBzb3VyY2UsIGNvCiAgICAgQVNTRVJUKGRlc3R5ID49
IDApOwogICAgIEFTU0VSVChkZXN0eSA8IHNpemUuaGVpZ2h0KCkpOwogICAgIEFTU0VSVChvcmln
aW55ID49IDApOwotICAgIEFTU0VSVChvcmlnaW55IDw9IHNvdXJjZVJlY3QuYm90dG9tKCkpOwor
ICAgIEFTU0VSVChvcmlnaW55IDw9IHNvdXJjZVJlY3QubWF4WSgpKTsKIAotICAgIGludCBlbmR5
ID0gZGVzdFBvaW50LnkoKSArIHNvdXJjZVJlY3QuYm90dG9tKCk7CisgICAgaW50IGVuZHkgPSBk
ZXN0UG9pbnQueSgpICsgc291cmNlUmVjdC5tYXhZKCk7CiAgICAgQVNTRVJUKGVuZHkgPD0gc2l6
ZS5oZWlnaHQoKSk7CiAgICAgaW50IG51bVJvd3MgPSBlbmR5IC0gZGVzdHk7CiAKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQ0cuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQ0cuY3BwCShyZXZp
c2lvbiA3NzI2MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdl
Q0cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDQsNyArMjA0LDcgQEAgdm9pZCBCaXRtYXBJbWFn
ZTo6ZHJhdyhHcmFwaGljc0NvbnRleHQqIAogICAgICAgICAgICAgYWRqdXN0ZWREZXN0UmVjdC5z
ZXRIZWlnaHQoc3ViaW1hZ2VSZWN0LmhlaWdodCgpIC8geVNjYWxlKTsKIAogICAgICAgICAgICAg
aW1hZ2UuYWRvcHRDRihDR0ltYWdlQ3JlYXRlV2l0aEltYWdlSW5SZWN0KGltYWdlLmdldCgpLCBz
dWJpbWFnZVJlY3QpKTsKLSAgICAgICAgICAgIGlmIChjdXJySGVpZ2h0IDwgc3JjUmVjdC5ib3R0
b20oKSkgeworICAgICAgICAgICAgaWYgKGN1cnJIZWlnaHQgPCBzcmNSZWN0Lm1heFkoKSkgewog
ICAgICAgICAgICAgICAgIEFTU0VSVChDR0ltYWdlR2V0SGVpZ2h0KGltYWdlLmdldCgpKSA9PSBj
dXJySGVpZ2h0IC0gQ0dSZWN0SW50ZWdyYWwoc3JjUmVjdCkub3JpZ2luLnkpOwogICAgICAgICAg
ICAgICAgIGFkanVzdGVkRGVzdFJlY3Quc2V0SGVpZ2h0KENHSW1hZ2VHZXRIZWlnaHQoaW1hZ2Uu
Z2V0KCkpIC8geVNjYWxlKTsKICAgICAgICAgICAgIH0KQEAgLTIyNCw3ICsyMjQsNyBAQCB2b2lk
IEJpdG1hcEltYWdlOjpkcmF3KEdyYXBoaWNzQ29udGV4dCogCiAKICAgICAvLyBGbGlwIHRoZSBj
b29yZHMuCiAgICAgQ0dDb250ZXh0U2NhbGVDVE0oY29udGV4dCwgMSwgLTEpOwotICAgIGFkanVz
dGVkRGVzdFJlY3Quc2V0WSgtYWRqdXN0ZWREZXN0UmVjdC5ib3R0b20oKSk7CisgICAgYWRqdXN0
ZWREZXN0UmVjdC5zZXRZKC1hZGp1c3RlZERlc3RSZWN0Lm1heFkoKSk7CiAKICAgICAvLyBBZGp1
c3QgdGhlIGNvbG9yIHNwYWNlLgogICAgIGltYWdlID0gaW1hZ2VXaXRoQ29sb3JTcGFjZShpbWFn
ZS5nZXQoKSwgc3R5bGVDb2xvclNwYWNlKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHAJKHJldmlz
aW9uIDc3MjYwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
aWx0ZXJFZmZlY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTksNyArMTE5LDcgQEAgUGFzc1Jl
ZlB0cjxCeXRlQXJyYXk+IEZpbHRlckVmZmVjdDo6YXNQcgogaW5saW5lIHZvaWQgRmlsdGVyRWZm
ZWN0Ojpjb3B5SW1hZ2VCeXRlcyhCeXRlQXJyYXkqIHNvdXJjZSwgQnl0ZUFycmF5KiBkZXN0aW5h
dGlvbiwgY29uc3QgSW50UmVjdCYgcmVjdCkKIHsKICAgICAvLyBDb3B5IHRoZSBuZWNlc3Nhcnkg
bGluZXMuCi0gICAgaWYgKHJlY3QueCgpIDwgMCB8fCByZWN0LnkoKSA8IDAgfHwgcmVjdC5ib3R0
b20oKSA+IG1fYWJzb2x1dGVQYWludFJlY3Qud2lkdGgoKSB8fCByZWN0LmJvdHRvbSgpID4gbV9h
YnNvbHV0ZVBhaW50UmVjdC5oZWlnaHQoKSkKKyAgICBpZiAocmVjdC54KCkgPCAwIHx8IHJlY3Qu
eSgpIDwgMCB8fCByZWN0Lm1heFkoKSA+IG1fYWJzb2x1dGVQYWludFJlY3Qud2lkdGgoKSB8fCBy
ZWN0Lm1heFkoKSA+IG1fYWJzb2x1dGVQYWludFJlY3QuaGVpZ2h0KCkpCiAgICAgICAgIG1lbXNl
dChkZXN0aW5hdGlvbi0+ZGF0YSgpLCAwLCBkZXN0aW5hdGlvbi0+bGVuZ3RoKCkpOwogCiAgICAg
aW50IHhPcmlnaW4gPSByZWN0LngoKTsKQEAgLTEyOCw3ICsxMjgsNyBAQCBpbmxpbmUgdm9pZCBG
aWx0ZXJFZmZlY3Q6OmNvcHlJbWFnZUJ5dGVzCiAgICAgICAgIHhEZXN0ID0gLXhPcmlnaW47CiAg
ICAgICAgIHhPcmlnaW4gPSAwOwogICAgIH0KLSAgICBpbnQgeEVuZCA9IHJlY3QucmlnaHQoKTsK
KyAgICBpbnQgeEVuZCA9IHJlY3QubWF4WCgpOwogICAgIGlmICh4RW5kID4gbV9hYnNvbHV0ZVBh
aW50UmVjdC53aWR0aCgpKQogICAgICAgICB4RW5kID0gbV9hYnNvbHV0ZVBhaW50UmVjdC53aWR0
aCgpOwogCkBAIC0xMzgsNyArMTM4LDcgQEAgaW5saW5lIHZvaWQgRmlsdGVyRWZmZWN0Ojpjb3B5
SW1hZ2VCeXRlcwogICAgICAgICB5RGVzdCA9IC15T3JpZ2luOwogICAgICAgICB5T3JpZ2luID0g
MDsKICAgICB9Ci0gICAgaW50IHlFbmQgPSByZWN0LmJvdHRvbSgpOworICAgIGludCB5RW5kID0g
cmVjdC5tYXhZKCk7CiAgICAgaWYgKHlFbmQgPiBtX2Fic29sdXRlUGFpbnRSZWN0LmhlaWdodCgp
KQogICAgICAgICB5RW5kID0gbV9hYnNvbHV0ZVBhaW50UmVjdC5oZWlnaHQoKTsKIApJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbXBsZXhUZXh0Q29udHJvbGxl
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFj
L0NvbXBsZXhUZXh0Q29udHJvbGxlci5jcHAJKHJldmlzaW9uIDc3MjYwKQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbXBsZXhUZXh0Q29udHJvbGxlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTU1Myw5ICs1NTMsOSBAQCB2b2lkIENvbXBsZXhUZXh0Q29udHJvbGxl
cjo6YWRqdXN0R2x5cGhzCiAgICAgICAgICAgICBGbG9hdFJlY3QgZ2x5cGhCb3VuZHMgPSBmb250
RGF0YS0+Ym91bmRzRm9yR2x5cGgoZ2x5cGgpOwogICAgICAgICAgICAgZ2x5cGhCb3VuZHMubW92
ZShnbHlwaE9yaWdpbi54LCBnbHlwaE9yaWdpbi55KTsKICAgICAgICAgICAgIG1fbWluR2x5cGhC
b3VuZGluZ0JveFggPSBtaW4obV9taW5HbHlwaEJvdW5kaW5nQm94WCwgZ2x5cGhCb3VuZHMueCgp
KTsKLSAgICAgICAgICAgIG1fbWF4R2x5cGhCb3VuZGluZ0JveFggPSBtYXgobV9tYXhHbHlwaEJv
dW5kaW5nQm94WCwgZ2x5cGhCb3VuZHMucmlnaHQoKSk7CisgICAgICAgICAgICBtX21heEdseXBo
Qm91bmRpbmdCb3hYID0gbWF4KG1fbWF4R2x5cGhCb3VuZGluZ0JveFgsIGdseXBoQm91bmRzLm1h
eFgoKSk7CiAgICAgICAgICAgICBtX21pbkdseXBoQm91bmRpbmdCb3hZID0gbWluKG1fbWluR2x5
cGhCb3VuZGluZ0JveFksIGdseXBoQm91bmRzLnkoKSk7Ci0gICAgICAgICAgICBtX21heEdseXBo
Qm91bmRpbmdCb3hZID0gbWF4KG1fbWF4R2x5cGhCb3VuZGluZ0JveFksIGdseXBoQm91bmRzLmJv
dHRvbSgpKTsKKyAgICAgICAgICAgIG1fbWF4R2x5cGhCb3VuZGluZ0JveFkgPSBtYXgobV9tYXhH
bHlwaEJvdW5kaW5nQm94WSwgZ2x5cGhCb3VuZHMubWF4WSgpKTsKICAgICAgICAgICAgIGdseXBo
T3JpZ2luLnggKz0gYWR2YW5jZS53aWR0aDsKICAgICAgICAgICAgIGdseXBoT3JpZ2luLnkgKz0g
YWR2YW5jZS5oZWlnaHQ7CiAgICAgICAgICAgICAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL21hYy9TaW1wbGVGb250RGF0YU1hYy5tbQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvU2ltcGxlRm9udERhdGFNYWMubW0JKHJl
dmlzaW9uIDc3MjYwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL1Np
bXBsZUZvbnREYXRhTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC00NzcsMTMgKzQ3NywxMyBAQCBG
bG9hdFJlY3QgU2ltcGxlRm9udERhdGE6OnBsYXRmb3JtQm91bmRzCiAjaWZuZGVmIEJVSUxESU5H
X09OX1RJR0VSCiAgICAgYm91bmRpbmdCb3ggPSBDVEZvbnRHZXRCb3VuZGluZ1JlY3RzRm9yR2x5
cGhzKG1fcGxhdGZvcm1EYXRhLmN0Rm9udCgpLAogICAgICAgICAgICAgICAgICAgICBvcmllbnRh
dGlvbigpID09IFZlcnRpY2FsID8ga0NURm9udFZlcnRpY2FsT3JpZW50YXRpb24gOiBrQ1RGb250
SG9yaXpvbnRhbE9yaWVudGF0aW9uLCAmZ2x5cGgsIDAsIDEpOwotICAgIGJvdW5kaW5nQm94LnNl
dFkoLWJvdW5kaW5nQm94LmJvdHRvbSgpKTsKKyAgICBib3VuZGluZ0JveC5zZXRZKC1ib3VuZGlu
Z0JveC5tYXhZKCkpOwogI2Vsc2UKICAgICAvLyBGSVhNRTogQ3VzdG9tIGZvbnRzIGRvbid0IGhh
dmUgTlNGb250cywgc28gdGhpcyBmdW5jdGlvbiBkb2Vzbid0IGNvbXB1dGUgY29ycmVjdCBib3Vu
ZHMgZm9yIHRoZXNlIG9uIFRpZ2VyLgogICAgIGlmICghbV9wbGF0Zm9ybURhdGEuZm9udCgpKQog
ICAgICAgICByZXR1cm4gYm91bmRpbmdCb3g7CiAgICAgYm91bmRpbmdCb3ggPSBbbV9wbGF0Zm9y
bURhdGEuZm9udCgpIGJvdW5kaW5nUmVjdEZvckdseXBoOmdseXBoXTsKLSAgICBib3VuZGluZ0Jv
eC5zZXRZKC1ib3VuZGluZ0JveC5ib3R0b20oKSk7CisgICAgYm91bmRpbmdCb3guc2V0WSgtYm91
bmRpbmdCb3gubWF4WSgpKTsKICNlbmRpZgogICAgIGlmIChtX3N5bnRoZXRpY0JvbGRPZmZzZXQp
CiAgICAgICAgIGJvdW5kaW5nQm94LnNldFdpZHRoKGJvdW5kaW5nQm94LndpZHRoKCkgKyBtX3N5
bnRoZXRpY0JvbGRPZmZzZXQpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvdHJhbnNmb3Jtcy9BZmZpbmVUcmFuc2Zvcm0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvQWZmaW5lVHJhbnNmb3JtLmNwcAko
cmV2aXNpb24gNzcyNjApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFu
c2Zvcm1zL0FmZmluZVRyYW5zZm9ybS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxNiw5ICszMTYs
OSBAQCBGbG9hdFJlY3QgQWZmaW5lVHJhbnNmb3JtOjptYXBSZWN0KGNvbnN0CiAKICAgICBGbG9h
dFF1YWQgcmVzdWx0OwogICAgIHJlc3VsdC5zZXRQMShtYXBQb2ludChyZWN0LmxvY2F0aW9uKCkp
KTsKLSAgICByZXN1bHQuc2V0UDIobWFwUG9pbnQoRmxvYXRQb2ludChyZWN0LnJpZ2h0KCksIHJl
Y3QueSgpKSkpOwotICAgIHJlc3VsdC5zZXRQMyhtYXBQb2ludChGbG9hdFBvaW50KHJlY3Qucmln
aHQoKSwgcmVjdC5ib3R0b20oKSkpKTsKLSAgICByZXN1bHQuc2V0UDQobWFwUG9pbnQoRmxvYXRQ
b2ludChyZWN0LngoKSwgcmVjdC5ib3R0b20oKSkpKTsKKyAgICByZXN1bHQuc2V0UDIobWFwUG9p
bnQoRmxvYXRQb2ludChyZWN0Lm1heFgoKSwgcmVjdC55KCkpKSk7CisgICAgcmVzdWx0LnNldFAz
KG1hcFBvaW50KEZsb2F0UG9pbnQocmVjdC5tYXhYKCksIHJlY3QubWF4WSgpKSkpOworICAgIHJl
c3VsdC5zZXRQNChtYXBQb2ludChGbG9hdFBvaW50KHJlY3QueCgpLCByZWN0Lm1heFkoKSkpKTsK
ICAgICByZXR1cm4gcmVzdWx0LmJvdW5kaW5nQm94KCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL21hYy9XaWRnZXRNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbWFjL1dpZGdldE1hYy5tbQkocmV2aXNpb24gNzcyNjApCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2lkZ2V0TWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yNTIs
NyArMjUyLDcgQEAgdm9pZCBXaWRnZXQ6OnBhaW50KEdyYXBoaWNzQ29udGV4dCogcCwgYwogICAg
ICAgICBJbnRSZWN0IGRpcnR5UmVjdCA9IHI7CiAgICAgICAgIGRpcnR5UmVjdC5tb3ZlKC10cmFu
c2Zvcm1PcmlnaW4ueCgpLCAtdHJhbnNmb3JtT3JpZ2luLnkoKSk7CiAgICAgICAgIGlmICghW3Zp
ZXcgaXNGbGlwcGVkXSkKLSAgICAgICAgICAgIGRpcnR5UmVjdC5zZXRZKFt2aWV3IGJvdW5kc10u
c2l6ZS5oZWlnaHQgLSBkaXJ0eVJlY3QuYm90dG9tKCkpOworICAgICAgICAgICAgZGlydHlSZWN0
LnNldFkoW3ZpZXcgYm91bmRzXS5zaXplLmhlaWdodCAtIGRpcnR5UmVjdC5tYXhZKCkpOwogCiAg
ICAgICAgIFt2aWV3IGRpc3BsYXlSZWN0SWdub3JpbmdPcGFjaXR5OmRpcnR5UmVjdF07CiAKQEAg
LTI5Niw3ICsyOTYsNyBAQCB2b2lkIFdpZGdldDo6cGFpbnQoR3JhcGhpY3NDb250ZXh0KiBwLCBj
CiAgICAgICAgIEludFJlY3QgZGlydHlSZWN0ID0gcjsKICAgICAgICAgZGlydHlSZWN0Lm1vdmUo
LXRyYW5zZm9ybU9yaWdpbi54KCksIC10cmFuc2Zvcm1PcmlnaW4ueSgpKTsKICAgICAgICAgaWYg
KCFbdmlldyBpc0ZsaXBwZWRdKQotICAgICAgICAgICAgZGlydHlSZWN0LnNldFkoW3ZpZXcgYm91
bmRzXS5zaXplLmhlaWdodCAtIGRpcnR5UmVjdC5ib3R0b20oKSk7CisgICAgICAgICAgICBkaXJ0
eVJlY3Quc2V0WShbdmlldyBib3VuZHNdLnNpemUuaGVpZ2h0IC0gZGlydHlSZWN0Lm1heFkoKSk7
CiAKICAgICAgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOwogICAgICAgICB7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lRmxvd0JveC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUZsb3dCb3guY3BwCShyZXZpc2lvbiA3
NzI2MCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVGbG93Qm94LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNzE4LDE0ICs3MTgsMTQgQEAgdm9pZCBJbmxpbmVGbG93Qm94OjphZGRC
b3hTaGFkb3dWaXN1YWxPdgogICAgIHJlbmRlcmVyKCktPnN0eWxlKG1fZmlyc3RMaW5lKS0+Z2V0
Qm94U2hhZG93QmxvY2tEaXJlY3Rpb25FeHRlbnQoYm94U2hhZG93TG9naWNhbFRvcCwgYm94U2hh
ZG93TG9naWNhbEJvdHRvbSk7CiAgICAgCiAgICAgaW50IGxvZ2ljYWxUb3BWaXN1YWxPdmVyZmxv
dyA9IG1pbihsb2dpY2FsVG9wKCkgKyBib3hTaGFkb3dMb2dpY2FsVG9wLCBsb2dpY2FsVmlzdWFs
T3ZlcmZsb3cueSgpKTsKLSAgICBpbnQgbG9naWNhbEJvdHRvbVZpc3VhbE92ZXJmbG93ID0gbWF4
KGxvZ2ljYWxCb3R0b20oKSArIGJveFNoYWRvd0xvZ2ljYWxCb3R0b20sIGxvZ2ljYWxWaXN1YWxP
dmVyZmxvdy5ib3R0b20oKSk7CisgICAgaW50IGxvZ2ljYWxCb3R0b21WaXN1YWxPdmVyZmxvdyA9
IG1heChsb2dpY2FsQm90dG9tKCkgKyBib3hTaGFkb3dMb2dpY2FsQm90dG9tLCBsb2dpY2FsVmlz
dWFsT3ZlcmZsb3cubWF4WSgpKTsKICAgICAKICAgICBpbnQgYm94U2hhZG93TG9naWNhbExlZnQ7
CiAgICAgaW50IGJveFNoYWRvd0xvZ2ljYWxSaWdodDsKICAgICByZW5kZXJlcigpLT5zdHlsZSht
X2ZpcnN0TGluZSktPmdldEJveFNoYWRvd0lubGluZURpcmVjdGlvbkV4dGVudChib3hTaGFkb3dM
b2dpY2FsTGVmdCwgYm94U2hhZG93TG9naWNhbFJpZ2h0KTsKIAogICAgIGludCBsb2dpY2FsTGVm
dFZpc3VhbE92ZXJmbG93ID0gbWluKGxvZ2ljYWxMZWZ0KCkgKyBib3hTaGFkb3dMb2dpY2FsTGVm
dCwgbG9naWNhbFZpc3VhbE92ZXJmbG93LngoKSk7Ci0gICAgaW50IGxvZ2ljYWxSaWdodFZpc3Vh
bE92ZXJmbG93ID0gbWF4KGxvZ2ljYWxSaWdodCgpICsgYm94U2hhZG93TG9naWNhbFJpZ2h0LCBs
b2dpY2FsVmlzdWFsT3ZlcmZsb3cucmlnaHQoKSk7CisgICAgaW50IGxvZ2ljYWxSaWdodFZpc3Vh
bE92ZXJmbG93ID0gbWF4KGxvZ2ljYWxSaWdodCgpICsgYm94U2hhZG93TG9naWNhbFJpZ2h0LCBs
b2dpY2FsVmlzdWFsT3ZlcmZsb3cubWF4WCgpKTsKICAgICAKICAgICBsb2dpY2FsVmlzdWFsT3Zl
cmZsb3cgPSBJbnRSZWN0KGxvZ2ljYWxMZWZ0VmlzdWFsT3ZlcmZsb3csIGxvZ2ljYWxUb3BWaXN1
YWxPdmVyZmxvdywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2ljYWxS
aWdodFZpc3VhbE92ZXJmbG93IC0gbG9naWNhbExlZnRWaXN1YWxPdmVyZmxvdywgbG9naWNhbEJv
dHRvbVZpc3VhbE92ZXJmbG93IC0gbG9naWNhbFRvcFZpc3VhbE92ZXJmbG93KTsKQEAgLTc4MCw5
ICs3ODAsOSBAQCB2b2lkIElubGluZUZsb3dCb3g6OmFkZFRleHRCb3hWaXN1YWxPdmVyCiAgICAg
aW50IGNoaWxkT3ZlcmZsb3dMb2dpY2FsUmlnaHQgPSBtYXgodGV4dFNoYWRvd0xvZ2ljYWxSaWdo
dCArIHJpZ2h0R2x5cGhPdmVyZmxvdywgcmlnaHRHbHlwaE92ZXJmbG93KTsKIAogICAgIGludCBs
b2dpY2FsVG9wVmlzdWFsT3ZlcmZsb3cgPSBtaW4odGV4dEJveC0+bG9naWNhbFRvcCgpICsgY2hp
bGRPdmVyZmxvd0xvZ2ljYWxUb3AsIGxvZ2ljYWxWaXN1YWxPdmVyZmxvdy55KCkpOwotICAgIGlu
dCBsb2dpY2FsQm90dG9tVmlzdWFsT3ZlcmZsb3cgPSBtYXgodGV4dEJveC0+bG9naWNhbEJvdHRv
bSgpICsgY2hpbGRPdmVyZmxvd0xvZ2ljYWxCb3R0b20sIGxvZ2ljYWxWaXN1YWxPdmVyZmxvdy5i
b3R0b20oKSk7CisgICAgaW50IGxvZ2ljYWxCb3R0b21WaXN1YWxPdmVyZmxvdyA9IG1heCh0ZXh0
Qm94LT5sb2dpY2FsQm90dG9tKCkgKyBjaGlsZE92ZXJmbG93TG9naWNhbEJvdHRvbSwgbG9naWNh
bFZpc3VhbE92ZXJmbG93Lm1heFkoKSk7CiAgICAgaW50IGxvZ2ljYWxMZWZ0VmlzdWFsT3ZlcmZs
b3cgPSBtaW4odGV4dEJveC0+bG9naWNhbExlZnQoKSArIGNoaWxkT3ZlcmZsb3dMb2dpY2FsTGVm
dCwgbG9naWNhbFZpc3VhbE92ZXJmbG93LngoKSk7Ci0gICAgaW50IGxvZ2ljYWxSaWdodFZpc3Vh
bE92ZXJmbG93ID0gbWF4KHRleHRCb3gtPmxvZ2ljYWxSaWdodCgpICsgY2hpbGRPdmVyZmxvd0xv
Z2ljYWxSaWdodCwgbG9naWNhbFZpc3VhbE92ZXJmbG93LnJpZ2h0KCkpOworICAgIGludCBsb2dp
Y2FsUmlnaHRWaXN1YWxPdmVyZmxvdyA9IG1heCh0ZXh0Qm94LT5sb2dpY2FsUmlnaHQoKSArIGNo
aWxkT3ZlcmZsb3dMb2dpY2FsUmlnaHQsIGxvZ2ljYWxWaXN1YWxPdmVyZmxvdy5tYXhYKCkpOwog
ICAgIAogICAgIGxvZ2ljYWxWaXN1YWxPdmVyZmxvdyA9IEludFJlY3QobG9naWNhbExlZnRWaXN1
YWxPdmVyZmxvdywgbG9naWNhbFRvcFZpc3VhbE92ZXJmbG93LAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbG9naWNhbFJpZ2h0VmlzdWFsT3ZlcmZsb3cgLSBsb2dpY2FsTGVm
dFZpc3VhbE92ZXJmbG93LCBsb2dpY2FsQm90dG9tVmlzdWFsT3ZlcmZsb3cgLSBsb2dpY2FsVG9w
VmlzdWFsT3ZlcmZsb3cpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRl
eHRCb3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVU
ZXh0Qm94LmNwcAkocmV2aXNpb24gNzcyNjApCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
SW5saW5lVGV4dEJveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2OSw3ICsxNjksNyBAQCBJbnRS
ZWN0IElubGluZVRleHRCb3g6OnNlbGVjdGlvblJlY3QoaW50CiAgICAgaW50IGxvZ2ljYWxXaWR0
aCA9IHIud2lkdGgoKTsKICAgICBpZiAoci54KCkgPiBtX2xvZ2ljYWxXaWR0aCkKICAgICAgICAg
bG9naWNhbFdpZHRoICA9IDA7Ci0gICAgZWxzZSBpZiAoci5yaWdodCgpID4gbV9sb2dpY2FsV2lk
dGgpCisgICAgZWxzZSBpZiAoci5tYXhYKCkgPiBtX2xvZ2ljYWxXaWR0aCkKICAgICAgICAgbG9n
aWNhbFdpZHRoID0gbV9sb2dpY2FsV2lkdGggLSByLngoKTsKICAgICAKICAgICBJbnRQb2ludCB0
b3BQb2ludCA9IGlzSG9yaXpvbnRhbCgpID8gSW50UG9pbnQodHggKyBtX3ggKyByLngoKSwgdHkg
KyBzZWxUb3ApIDogSW50UG9pbnQodHggKyBzZWxUb3AsIHR5ICsgbV95ICsgci54KCkpOwpAQCAt
NDQyLDcgKzQ0Miw3IEBAIHZvaWQgSW5saW5lVGV4dEJveDo6cGFpbnQoUGFpbnRJbmZvJiBwYWkK
ICAgICBpbnQgbG9naWNhbFN0YXJ0ID0gbG9naWNhbExlZnQoKSAtIGxvZ2ljYWxMZWZ0T3ZlcmZs
b3cgKyAoaXNIb3Jpem9udGFsKCkgPyB0eCA6IHR5KTsKICAgICBpbnQgbG9naWNhbEV4dGVudCA9
IGxvZ2ljYWxXaWR0aCgpICsgbG9naWNhbExlZnRPdmVyZmxvdyArIGxvZ2ljYWxSaWdodE92ZXJm
bG93OwogICAgIAotICAgIGludCBwYWludEVuZCA9IGlzSG9yaXpvbnRhbCgpID8gcGFpbnRJbmZv
LnJlY3QucmlnaHQoKSA6IHBhaW50SW5mby5yZWN0LmJvdHRvbSgpOworICAgIGludCBwYWludEVu
ZCA9IGlzSG9yaXpvbnRhbCgpID8gcGFpbnRJbmZvLnJlY3QubWF4WCgpIDogcGFpbnRJbmZvLnJl
Y3QubWF4WSgpOwogICAgIGludCBwYWludFN0YXJ0ID0gaXNIb3Jpem9udGFsKCkgPyBwYWludElu
Zm8ucmVjdC54KCkgOiBwYWludEluZm8ucmVjdC55KCk7CiAgICAgCiAgICAgaWYgKGxvZ2ljYWxT
dGFydCA+PSBwYWludEVuZCB8fCBsb2dpY2FsU3RhcnQgKyBsb2dpY2FsRXh0ZW50IDw9IHBhaW50
U3RhcnQpCkBAIC00OTEsOSArNDkxLDkgQEAgdm9pZCBJbmxpbmVUZXh0Qm94OjpwYWludChQYWlu
dEluZm8mIHBhaQogICAgIGJvb2wgc2hvdWxkUm90YXRlID0gIWlzSG9yaXpvbnRhbCgpICYmICgh
Y29tYmluZWRUZXh0IHx8ICFjb21iaW5lZFRleHQtPmlzQ29tYmluZWQoKSk7CiAgICAgaWYgKHNo
b3VsZFJvdGF0ZSkgewogICAgICAgICBjb250ZXh0LT5zYXZlKCk7Ci0gICAgICAgIGNvbnRleHQt
PnRyYW5zbGF0ZShib3hSZWN0LngoKSwgYm94UmVjdC5ib3R0b20oKSk7CisgICAgICAgIGNvbnRl
eHQtPnRyYW5zbGF0ZShib3hSZWN0LngoKSwgYm94UmVjdC5tYXhZKCkpOwogICAgICAgICBjb250
ZXh0LT5yb3RhdGUoc3RhdGljX2Nhc3Q8ZmxvYXQ+KGRlZzJyYWQoOTAuKSkpOwotICAgICAgICBj
b250ZXh0LT50cmFuc2xhdGUoLWJveFJlY3QueCgpLCAtYm94UmVjdC5ib3R0b20oKSk7CisgICAg
ICAgIGNvbnRleHQtPnRyYW5zbGF0ZSgtYm94UmVjdC54KCksIC1ib3hSZWN0Lm1heFkoKSk7CiAg
ICAgfQogICAgIAogICAgIApAQCAtMTIxNiw3ICsxMjE2LDcgQEAgaW50IElubGluZVRleHRCb3g6
OnBvc2l0aW9uRm9yT2Zmc2V0KGludAogICAgIGludCB0byA9ICFpc0xlZnRUb1JpZ2h0RGlyZWN0
aW9uKCkgPyBtX2xlbiA6IG9mZnNldCAtIG1fc3RhcnQ7CiAgICAgLy8gRklYTUU6IERvIHdlIG5l
ZWQgdG8gYWRkIHJpZ2h0QmVhcmluZyBoZXJlPwogICAgIHJldHVybiBlbmNsb3NpbmdJbnRSZWN0
KGYuc2VsZWN0aW9uUmVjdEZvclRleHQoVGV4dFJ1bih0ZXh0LT50ZXh0KCktPmNoYXJhY3RlcnMo
KSArIG1fc3RhcnQsIG1fbGVuLCB0ZXh0UmVuZGVyZXIoKS0+YWxsb3dUYWJzKCksIHRleHRQb3Mo
KSwgbV9leHBhbnNpb24sIHRyYWlsaW5nRXhwYW5zaW9uQmVoYXZpb3IoKSwgIWlzTGVmdFRvUmln
aHREaXJlY3Rpb24oKSwgbV9kaXJPdmVycmlkZSksCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRQb2ludChsb2dpY2FsTGVmdCgpLCAwKSwgMCwg
ZnJvbSwgdG8pKS5yaWdodCgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgSW50UG9pbnQobG9naWNhbExlZnQoKSwgMCksIDAsIGZyb20sIHRvKSku
bWF4WCgpOwogfQogCiBib29sIElubGluZVRleHRCb3g6OmNvbnRhaW5zQ2FyZXRPZmZzZXQoaW50
IG9mZnNldCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9j
ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2Nr
LmNwcAkocmV2aXNpb24gNzcyNjApCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
QmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzI1LDEzICsxMzI1LDEzIEBAIHZvaWQgUmVu
ZGVyQmxvY2s6OmFkZE92ZXJmbG93RnJvbUNoaWxkcmUKICAgICAgICAgICAgIEludFJlY3QgbGFz
dFJlY3QgPSBjb2x1bW5SZWN0QXQoY29sSW5mbywgY29sdW1uQ291bnQoY29sSW5mbykgLSAxKTsK
ICAgICAgICAgICAgIGlmIChzdHlsZSgpLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpKSB7CiAg
ICAgICAgICAgICAgICAgaW50IG92ZXJmbG93TGVmdCA9ICFzdHlsZSgpLT5pc0xlZnRUb1JpZ2h0
RGlyZWN0aW9uKCkgPyBtaW4oMCwgbGFzdFJlY3QueCgpKSA6IDA7Ci0gICAgICAgICAgICAgICAg
aW50IG92ZXJmbG93UmlnaHQgPSBzdHlsZSgpLT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyBt
YXgod2lkdGgoKSwgbGFzdFJlY3QucmlnaHQoKSkgOiAwOworICAgICAgICAgICAgICAgIGludCBv
dmVyZmxvd1JpZ2h0ID0gc3R5bGUoKS0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpID8gbWF4KHdp
ZHRoKCksIGxhc3RSZWN0Lm1heFgoKSkgOiAwOwogICAgICAgICAgICAgICAgIGludCBvdmVyZmxv
d0hlaWdodCA9IGJvcmRlckJlZm9yZSgpICsgcGFkZGluZ0JlZm9yZSgpICsgY29sSW5mby0+Y29s
dW1uSGVpZ2h0KCk7CiAgICAgICAgICAgICAgICAgYWRkTGF5b3V0T3ZlcmZsb3coSW50UmVjdChv
dmVyZmxvd0xlZnQsIDAsIG92ZXJmbG93UmlnaHQgLSBvdmVyZmxvd0xlZnQsIG92ZXJmbG93SGVp
Z2h0KSk7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIEludFJlY3QgbGFz
dFJlY3QgPSBjb2x1bW5SZWN0QXQoY29sSW5mbywgY29sdW1uQ291bnQoY29sSW5mbykgLSAxKTsK
ICAgICAgICAgICAgICAgICBpbnQgb3ZlcmZsb3dUb3AgPSAhc3R5bGUoKS0+aXNMZWZ0VG9SaWdo
dERpcmVjdGlvbigpID8gbWluKDAsIGxhc3RSZWN0LnkoKSkgOiAwOwotICAgICAgICAgICAgICAg
IGludCBvdmVyZmxvd0JvdHRvbSA9IHN0eWxlKCktPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/
IG1heChoZWlnaHQoKSwgbGFzdFJlY3QuYm90dG9tKCkpIDogMDsKKyAgICAgICAgICAgICAgICBp
bnQgb3ZlcmZsb3dCb3R0b20gPSBzdHlsZSgpLT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyBt
YXgoaGVpZ2h0KCksIGxhc3RSZWN0Lm1heFkoKSkgOiAwOwogICAgICAgICAgICAgICAgIGludCBv
dmVyZmxvd1dpZHRoID0gYm9yZGVyQmVmb3JlKCkgKyBwYWRkaW5nQmVmb3JlKCkgKyBjb2xJbmZv
LT5jb2x1bW5IZWlnaHQoKTsKICAgICAgICAgICAgICAgICBhZGRMYXlvdXRPdmVyZmxvdyhJbnRS
ZWN0KDAsIG92ZXJmbG93VG9wLCBvdmVyZmxvd1dpZHRoLCBvdmVyZmxvd0JvdHRvbSAtIG92ZXJm
bG93VG9wKSk7CiAgICAgICAgICAgICB9CkBAIC0yMzQ3LDE0ICsyMzQ3LDE0IEBAIHZvaWQgUmVu
ZGVyQmxvY2s6OnBhaW50Q2hpbGRyZW4oUGFpbnRJbmYKICAgICAgICAgYm9vbCBjaGVja0JlZm9y
ZUFsd2F5cyA9ICFjaGlsZHJlbklubGluZSgpICYmICh1c2VQcmludFJlY3QgJiYgY2hpbGQtPnN0
eWxlKCktPnBhZ2VCcmVha0JlZm9yZSgpID09IFBCQUxXQVlTKTsKICAgICAgICAgaWYgKGNoZWNr
QmVmb3JlQWx3YXlzCiAgICAgICAgICAgICAmJiAodHkgKyBjaGlsZC0+eSgpKSA+IHBhaW50SW5m
by5yZWN0LnkoKQotICAgICAgICAgICAgJiYgKHR5ICsgY2hpbGQtPnkoKSkgPCBwYWludEluZm8u
cmVjdC5ib3R0b20oKSkgeworICAgICAgICAgICAgJiYgKHR5ICsgY2hpbGQtPnkoKSkgPCBwYWlu
dEluZm8ucmVjdC5tYXhZKCkpIHsKICAgICAgICAgICAgIHZpZXcoKS0+c2V0QmVzdFRydW5jYXRl
ZEF0KHR5ICsgY2hpbGQtPnkoKSwgdGhpcywgdHJ1ZSk7CiAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgIH0KIAogICAgICAgICBpZiAoIWNoaWxkLT5pc0Zsb2F0aW5nKCkgJiYgY2hpbGQtPmlz
UmVwbGFjZWQoKSAmJiB1c2VQcmludFJlY3QgJiYgY2hpbGQtPmhlaWdodCgpIDw9IHJlbmRlclZp
ZXctPnByaW50UmVjdCgpLmhlaWdodCgpKSB7CiAgICAgICAgICAgICAvLyBQYWdpbmF0ZSBibG9j
ay1sZXZlbCByZXBsYWNlZCBlbGVtZW50cy4KLSAgICAgICAgICAgIGlmICh0eSArIGNoaWxkLT55
KCkgKyBjaGlsZC0+aGVpZ2h0KCkgPiByZW5kZXJWaWV3LT5wcmludFJlY3QoKS5ib3R0b20oKSkg
eworICAgICAgICAgICAgaWYgKHR5ICsgY2hpbGQtPnkoKSArIGNoaWxkLT5oZWlnaHQoKSA+IHJl
bmRlclZpZXctPnByaW50UmVjdCgpLm1heFkoKSkgewogICAgICAgICAgICAgICAgIGlmICh0eSAr
IGNoaWxkLT55KCkgPCByZW5kZXJWaWV3LT50cnVuY2F0ZWRBdCgpKQogICAgICAgICAgICAgICAg
ICAgICByZW5kZXJWaWV3LT5zZXRCZXN0VHJ1bmNhdGVkQXQodHkgKyBjaGlsZC0+eSgpLCBjaGls
ZCk7CiAgICAgICAgICAgICAgICAgLy8gSWYgd2Ugd2VyZSBhYmxlIHRvIHRydW5jYXRlLCBkb24n
dCBwYWludC4KQEAgLTIzNzEsNyArMjM3MSw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OnBhaW50Q2hp
bGRyZW4oUGFpbnRJbmYKICAgICAgICAgYm9vbCBjaGVja0FmdGVyQWx3YXlzID0gIWNoaWxkcmVu
SW5saW5lKCkgJiYgKHVzZVByaW50UmVjdCAmJiBjaGlsZC0+c3R5bGUoKS0+cGFnZUJyZWFrQWZ0
ZXIoKSA9PSBQQkFMV0FZUyk7CiAgICAgICAgIGlmIChjaGVja0FmdGVyQWx3YXlzCiAgICAgICAg
ICAgICAmJiAodHkgKyBjaGlsZC0+eSgpICsgY2hpbGQtPmhlaWdodCgpKSA+IHBhaW50SW5mby5y
ZWN0LnkoKQotICAgICAgICAgICAgJiYgKHR5ICsgY2hpbGQtPnkoKSArIGNoaWxkLT5oZWlnaHQo
KSkgPCBwYWludEluZm8ucmVjdC5ib3R0b20oKSkgeworICAgICAgICAgICAgJiYgKHR5ICsgY2hp
bGQtPnkoKSArIGNoaWxkLT5oZWlnaHQoKSkgPCBwYWludEluZm8ucmVjdC5tYXhZKCkpIHsKICAg
ICAgICAgICAgIHZpZXcoKS0+c2V0QmVzdFRydW5jYXRlZEF0KHR5ICsgY2hpbGQtPnkoKSArIGNo
aWxkLT5oZWlnaHQoKSArIG1heCgwLCBjaGlsZC0+Y29sbGFwc2VkTWFyZ2luQWZ0ZXIoKSksIHRo
aXMsIHRydWUpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CkBAIC0yNTM3LDcgKzI1
MzcsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjpwYWludEVsbGlwc2lzQm94ZXMoUGFpCiAgICAgICAg
IC8vIGludGVyc2VjdC4KICAgICAgICAgaW50IHlQb3MgPSB0eSArIGZpcnN0TGluZUJveCgpLT55
KCk7CiAgICAgICAgIGludCBoID0gbGFzdExpbmVCb3goKS0+eSgpICsgbGFzdExpbmVCb3goKS0+
bG9naWNhbEhlaWdodCgpIC0gZmlyc3RMaW5lQm94KCktPnkoKTsKLSAgICAgICAgaWYgKHlQb3Mg
Pj0gcGFpbnRJbmZvLnJlY3QuYm90dG9tKCkgfHwgeVBvcyArIGggPD0gcGFpbnRJbmZvLnJlY3Qu
eSgpKQorICAgICAgICBpZiAoeVBvcyA+PSBwYWludEluZm8ucmVjdC5tYXhZKCkgfHwgeVBvcyAr
IGggPD0gcGFpbnRJbmZvLnJlY3QueSgpKQogICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAg
IC8vIFNlZSBpZiBvdXIgYm94ZXMgaW50ZXJzZWN0IHdpdGggdGhlIGRpcnR5IHJlY3QuICBJZiBz
bywgdGhlbiB3ZSBwYWludApAQCAtMjU0Niw3ICsyNTQ2LDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6
cGFpbnRFbGxpcHNpc0JveGVzKFBhaQogICAgICAgICBmb3IgKFJvb3RJbmxpbmVCb3gqIGN1cnIg
PSBmaXJzdFJvb3RCb3goKTsgY3VycjsgY3VyciA9IGN1cnItPm5leHRSb290Qm94KCkpIHsKICAg
ICAgICAgICAgIHlQb3MgPSB0eSArIGN1cnItPnkoKTsKICAgICAgICAgICAgIGggPSBjdXJyLT5s
b2dpY2FsSGVpZ2h0KCk7Ci0gICAgICAgICAgICBpZiAoY3Vyci0+ZWxsaXBzaXNCb3goKSAmJiB5
UG9zIDwgcGFpbnRJbmZvLnJlY3QuYm90dG9tKCkgJiYgeVBvcyArIGggPiBwYWludEluZm8ucmVj
dC55KCkpCisgICAgICAgICAgICBpZiAoY3Vyci0+ZWxsaXBzaXNCb3goKSAmJiB5UG9zIDwgcGFp
bnRJbmZvLnJlY3QubWF4WSgpICYmIHlQb3MgKyBoID4gcGFpbnRJbmZvLnJlY3QueSgpKQogICAg
ICAgICAgICAgICAgIGN1cnItPnBhaW50RWxsaXBzaXNCb3gocGFpbnRJbmZvLCB0eCwgdHkpOwog
ICAgICAgICB9CiAgICAgfQpAQCAtMjgxNiw4ICsyODE2LDggQEAgR2FwUmVjdHMgUmVuZGVyQmxv
Y2s6OmlubGluZVNlbGVjdGlvbkdhcAogICAgICAgICBJbnRSZWN0IGxvZ2ljYWxSZWN0KGN1cnIt
PmxvZ2ljYWxMZWZ0KCksIHNlbFRvcCwgY3Vyci0+bG9naWNhbFdpZHRoKCksIHNlbFRvcCArIHNl
bEhlaWdodCk7CiAgICAgICAgIGxvZ2ljYWxSZWN0Lm1vdmUoc3R5bGUoKS0+aXNIb3Jpem9udGFs
V3JpdGluZ01vZGUoKSA/IG9mZnNldEZyb21Sb290QmxvY2sgOiBJbnRTaXplKG9mZnNldEZyb21S
b290QmxvY2suaGVpZ2h0KCksIG9mZnNldEZyb21Sb290QmxvY2sud2lkdGgoKSkpOwogICAgICAg
ICBJbnRSZWN0IHBoeXNpY2FsUmVjdCA9IHJvb3RCbG9jay0+bG9naWNhbFJlY3RUb1BoeXNpY2Fs
UmVjdChyb290QmxvY2tQaHlzaWNhbFBvc2l0aW9uLCBsb2dpY2FsUmVjdCk7Ci0gICAgICAgIGlm
ICghcGFpbnRJbmZvIHx8IChzdHlsZSgpLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpICYmIHBo
eXNpY2FsUmVjdC55KCkgPCBwYWludEluZm8tPnJlY3QuYm90dG9tKCkgJiYgcGh5c2ljYWxSZWN0
LmJvdHRvbSgpID4gcGFpbnRJbmZvLT5yZWN0LnkoKSkKLSAgICAgICAgICAgIHx8ICghc3R5bGUo
KS0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSAmJiBwaHlzaWNhbFJlY3QueCgpIDwgcGFpbnRJ
bmZvLT5yZWN0LnJpZ2h0KCkgJiYgcGh5c2ljYWxSZWN0LnJpZ2h0KCkgPiBwYWludEluZm8tPnJl
Y3QueCgpKSkKKyAgICAgICAgaWYgKCFwYWludEluZm8gfHwgKHN0eWxlKCktPmlzSG9yaXpvbnRh
bFdyaXRpbmdNb2RlKCkgJiYgcGh5c2ljYWxSZWN0LnkoKSA8IHBhaW50SW5mby0+cmVjdC5tYXhZ
KCkgJiYgcGh5c2ljYWxSZWN0Lm1heFkoKSA+IHBhaW50SW5mby0+cmVjdC55KCkpCisgICAgICAg
ICAgICB8fCAoIXN0eWxlKCktPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgJiYgcGh5c2ljYWxS
ZWN0LngoKSA8IHBhaW50SW5mby0+cmVjdC5tYXhYKCkgJiYgcGh5c2ljYWxSZWN0Lm1heFgoKSA+
IHBhaW50SW5mby0+cmVjdC54KCkpKQogICAgICAgICAgICAgcmVzdWx0LnVuaXRlKGN1cnItPmxp
bmVTZWxlY3Rpb25HYXAocm9vdEJsb2NrLCByb290QmxvY2tQaHlzaWNhbFBvc2l0aW9uLCBvZmZz
ZXRGcm9tUm9vdEJsb2NrLCBzZWxUb3AsIHNlbEhlaWdodCwgcGFpbnRJbmZvKSk7CiAKICAgICAg
ICAgbGFzdFNlbGVjdGVkTGluZSA9IGN1cnI7CkBAIC00MzIyLDcgKzQzMjIsNyBAQCB2b2lkIFJl
bmRlckJsb2NrOjphZGp1c3RQb2ludFRvQ29sdW1uQ29uCiAgICAgICAgIEludFJlY3QgY29sUmVj
dCA9IGNvbHVtblJlY3RBdChjb2xJbmZvLCBpKTsKICAgICAgICAgaWYgKHN0eWxlKCktPmlzSG9y
aXpvbnRhbFdyaXRpbmdNb2RlKCkpIHsKICAgICAgICAgICAgIEludFJlY3QgZ2FwQW5kQ29sdW1u
UmVjdChjb2xSZWN0LngoKSAtIGhhbGZDb2xHYXAsIGNvbFJlY3QueSgpLCBjb2xSZWN0LndpZHRo
KCkgKyBjb2xHYXAsIGNvbFJlY3QuaGVpZ2h0KCkpOwotICAgICAgICAgICAgaWYgKHBvaW50Lngo
KSA+PSBnYXBBbmRDb2x1bW5SZWN0LngoKSAmJiBwb2ludC54KCkgPCBnYXBBbmRDb2x1bW5SZWN0
LnJpZ2h0KCkpIHsKKyAgICAgICAgICAgIGlmIChwb2ludC54KCkgPj0gZ2FwQW5kQ29sdW1uUmVj
dC54KCkgJiYgcG9pbnQueCgpIDwgZ2FwQW5kQ29sdW1uUmVjdC5tYXhYKCkpIHsKICAgICAgICAg
ICAgICAgICAvLyBGSVhNRTogVGhlIGNsYW1waW5nIHRoYXQgZm9sbG93cyBpcyBub3QgY29tcGxl
dGVseSByaWdodCBmb3IgcmlnaHQtdG8tbGVmdAogICAgICAgICAgICAgICAgIC8vIGNvbnRlbnQu
CiAgICAgICAgICAgICAgICAgLy8gQ2xhbXAgZXZlcnl0aGluZyBhYm92ZSB0aGUgY29sdW1uIHRv
IGl0cyB0b3AgbGVmdC4KQEAgLTQzMzAsNyArNDMzMCw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmFk
anVzdFBvaW50VG9Db2x1bW5Db24KICAgICAgICAgICAgICAgICAgICAgcG9pbnQgPSBnYXBBbmRD
b2x1bW5SZWN0LmxvY2F0aW9uKCk7CiAgICAgICAgICAgICAgICAgLy8gQ2xhbXAgZXZlcnl0aGlu
ZyBiZWxvdyB0aGUgY29sdW1uIHRvIHRoZSBuZXh0IGNvbHVtbidzIHRvcCBsZWZ0LiBJZiB0aGVy
ZSBpcwogICAgICAgICAgICAgICAgIC8vIG5vIG5leHQgY29sdW1uLCB0aGlzIHN0aWxsIG1hcHMg
dG8ganVzdCBhZnRlciB0aGlzIGNvbHVtbi4KLSAgICAgICAgICAgICAgICBlbHNlIGlmIChwb2lu
dC55KCkgPj0gZ2FwQW5kQ29sdW1uUmVjdC5ib3R0b20oKSkgeworICAgICAgICAgICAgICAgIGVs
c2UgaWYgKHBvaW50LnkoKSA+PSBnYXBBbmRDb2x1bW5SZWN0Lm1heFkoKSkgewogICAgICAgICAg
ICAgICAgICAgICBwb2ludCA9IGdhcEFuZENvbHVtblJlY3QubG9jYXRpb24oKTsKICAgICAgICAg
ICAgICAgICAgICAgcG9pbnQubW92ZSgwLCBnYXBBbmRDb2x1bW5SZWN0LmhlaWdodCgpKTsKICAg
ICAgICAgICAgICAgICB9CkBAIC00MzQ0LDcgKzQzNDQsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjph
ZGp1c3RQb2ludFRvQ29sdW1uQ29uCiAgICAgICAgICAgICBsb2dpY2FsT2Zmc2V0ICs9IGNvbFJl
Y3QuaGVpZ2h0KCk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBJbnRSZWN0IGdhcEFu
ZENvbHVtblJlY3QoY29sUmVjdC54KCksIGNvbFJlY3QueSgpIC0gaGFsZkNvbEdhcCwgY29sUmVj
dC53aWR0aCgpLCBjb2xSZWN0LmhlaWdodCgpICsgY29sR2FwKTsKLSAgICAgICAgICAgIGlmIChw
b2ludC55KCkgPj0gZ2FwQW5kQ29sdW1uUmVjdC55KCkgJiYgcG9pbnQueSgpIDwgZ2FwQW5kQ29s
dW1uUmVjdC5ib3R0b20oKSkgeworICAgICAgICAgICAgaWYgKHBvaW50LnkoKSA+PSBnYXBBbmRD
b2x1bW5SZWN0LnkoKSAmJiBwb2ludC55KCkgPCBnYXBBbmRDb2x1bW5SZWN0Lm1heFkoKSkgewog
ICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBUaGUgY2xhbXBpbmcgdGhhdCBmb2xsb3dzIGlzIG5v
dCBjb21wbGV0ZWx5IHJpZ2h0IGZvciByaWdodC10by1sZWZ0CiAgICAgICAgICAgICAgICAgLy8g
Y29udGVudC4KICAgICAgICAgICAgICAgICAvLyBDbGFtcCBldmVyeXRoaW5nIGFib3ZlIHRoZSBj
b2x1bW4gdG8gaXRzIHRvcCBsZWZ0LgpAQCAtNDM1Miw3ICs0MzUyLDcgQEAgdm9pZCBSZW5kZXJC
bG9jazo6YWRqdXN0UG9pbnRUb0NvbHVtbkNvbgogICAgICAgICAgICAgICAgICAgICBwb2ludCA9
IGdhcEFuZENvbHVtblJlY3QubG9jYXRpb24oKTsKICAgICAgICAgICAgICAgICAvLyBDbGFtcCBl
dmVyeXRoaW5nIGJlbG93IHRoZSBjb2x1bW4gdG8gdGhlIG5leHQgY29sdW1uJ3MgdG9wIGxlZnQu
IElmIHRoZXJlIGlzCiAgICAgICAgICAgICAgICAgLy8gbm8gbmV4dCBjb2x1bW4sIHRoaXMgc3Rp
bGwgbWFwcyB0byBqdXN0IGFmdGVyIHRoaXMgY29sdW1uLgotICAgICAgICAgICAgICAgIGVsc2Ug
aWYgKHBvaW50LngoKSA+PSBnYXBBbmRDb2x1bW5SZWN0LnJpZ2h0KCkpIHsKKyAgICAgICAgICAg
ICAgICBlbHNlIGlmIChwb2ludC54KCkgPj0gZ2FwQW5kQ29sdW1uUmVjdC5tYXhYKCkpIHsKICAg
ICAgICAgICAgICAgICAgICAgcG9pbnQgPSBnYXBBbmRDb2x1bW5SZWN0LmxvY2F0aW9uKCk7CiAg
ICAgICAgICAgICAgICAgICAgIHBvaW50Lm1vdmUoZ2FwQW5kQ29sdW1uUmVjdC53aWR0aCgpLCAw
KTsKICAgICAgICAgICAgICAgICB9CkBAIC00NDI5LDkgKzQ0MjksOSBAQCB2b2lkIFJlbmRlckJs
b2NrOjpmbGlwRm9yV3JpdGluZ01vZGVJbmNsCiAgICAgaW50IGNvbHVtbkxvZ2ljYWxIZWlnaHQg
PSBjb2xJbmZvLT5jb2x1bW5IZWlnaHQoKTsKICAgICBpbnQgZXhwYW5kZWRMb2dpY2FsSGVpZ2h0
ID0gYm9yZGVyQmVmb3JlKCkgKyBwYWRkaW5nQmVmb3JlKCkgKyBjb2x1bW5Db3VudChjb2xJbmZv
KSAqIGNvbHVtbkxvZ2ljYWxIZWlnaHQgKyBib3JkZXJBZnRlcigpICsgcGFkZGluZ0FmdGVyKCkg
KyBzY3JvbGxiYXJMb2dpY2FsSGVpZ2h0KCk7CiAgICAgaWYgKHN0eWxlKCktPmlzSG9yaXpvbnRh
bFdyaXRpbmdNb2RlKCkpCi0gICAgICAgIHJlY3Quc2V0WShleHBhbmRlZExvZ2ljYWxIZWlnaHQg
LSByZWN0LmJvdHRvbSgpKTsKKyAgICAgICAgcmVjdC5zZXRZKGV4cGFuZGVkTG9naWNhbEhlaWdo
dCAtIHJlY3QubWF4WSgpKTsKICAgICBlbHNlCi0gICAgICAgIHJlY3Quc2V0WChleHBhbmRlZExv
Z2ljYWxIZWlnaHQgLSByZWN0LnJpZ2h0KCkpOworICAgICAgICByZWN0LnNldFgoZXhwYW5kZWRM
b2dpY2FsSGVpZ2h0IC0gcmVjdC5tYXhYKCkpOwogfQogCiB2b2lkIFJlbmRlckJsb2NrOjphZGp1
c3RGb3JDb2x1bW5zKEludFNpemUmIG9mZnNldCwgY29uc3QgSW50UG9pbnQmIHBvaW50KSBjb25z
dApAQCAtNDQ1OSwxMiArNDQ1OSwxMiBAQCB2b2lkIFJlbmRlckJsb2NrOjphZGp1c3RGb3JDb2x1
bW5zKEludFNpCiAKICAgICAgICAgLy8gTm93IHdlJ3JlIGluIHRoZSBzYW1lIGNvb3JkaW5hdGUg
c3BhY2UgYXMgdGhlIHBvaW50LiAgU2VlIGlmIGl0IGlzIGluc2lkZSB0aGUgcmVjdGFuZ2xlLgog
ICAgICAgICBpZiAoc3R5bGUoKS0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkgewotICAgICAg
ICAgICAgaWYgKHBvaW50LnkoKSA+PSBzbGljZVJlY3QueSgpICYmIHBvaW50LnkoKSA8IHNsaWNl
UmVjdC5ib3R0b20oKSkgeworICAgICAgICAgICAgaWYgKHBvaW50LnkoKSA+PSBzbGljZVJlY3Qu
eSgpICYmIHBvaW50LnkoKSA8IHNsaWNlUmVjdC5tYXhZKCkpIHsKICAgICAgICAgICAgICAgICBv
ZmZzZXQuZXhwYW5kKGNvbHVtblJlY3RBdChjb2xJbmZvLCBpKS54KCkgLSBsb2dpY2FsTGVmdCwg
LWxvZ2ljYWxPZmZzZXQpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0K
ICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlmIChwb2ludC54KCkgPj0gc2xpY2VSZWN0
LngoKSAmJiBwb2ludC54KCkgPCBzbGljZVJlY3QucmlnaHQoKSkgeworICAgICAgICAgICAgaWYg
KHBvaW50LngoKSA+PSBzbGljZVJlY3QueCgpICYmIHBvaW50LngoKSA8IHNsaWNlUmVjdC5tYXhY
KCkpIHsKICAgICAgICAgICAgICAgICBvZmZzZXQuZXhwYW5kKC1sb2dpY2FsT2Zmc2V0LCBjb2x1
bW5SZWN0QXQoY29sSW5mbywgaSkueSgpIC0gbG9naWNhbExlZnQpOwogICAgICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJCbG9jay5oCShyZXZpc2lvbiA3NzI2MCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOTgsOSArMzk4LDkgQEAgcHJpdmF0ZToK
ICAgICAgICAgdm9pZCBzZXRJc1BsYWNlZChib29sIHBsYWNlZCA9IHRydWUpIHsgbV9pc1BsYWNl
ZCA9IHBsYWNlZDsgfQogCiAgICAgICAgIGludCBsZWZ0KCkgY29uc3QgeyBBU1NFUlQoaXNQbGFj
ZWQoKSk7IHJldHVybiBtX2ZyYW1lUmVjdC54KCk7IH0KLSAgICAgICAgaW50IHJpZ2h0KCkgY29u
c3QgeyBBU1NFUlQoaXNQbGFjZWQoKSk7IHJldHVybiBtX2ZyYW1lUmVjdC5yaWdodCgpOyB9Cisg
ICAgICAgIGludCByaWdodCgpIGNvbnN0IHsgQVNTRVJUKGlzUGxhY2VkKCkpOyByZXR1cm4gbV9m
cmFtZVJlY3QubWF4WCgpOyB9CiAgICAgICAgIGludCB0b3AoKSBjb25zdCB7IEFTU0VSVChpc1Bs
YWNlZCgpKTsgcmV0dXJuIG1fZnJhbWVSZWN0LnkoKTsgfQotICAgICAgICBpbnQgYm90dG9tKCkg
Y29uc3QgeyBBU1NFUlQoaXNQbGFjZWQoKSk7IHJldHVybiBtX2ZyYW1lUmVjdC5ib3R0b20oKTsg
fQorICAgICAgICBpbnQgYm90dG9tKCkgY29uc3QgeyBBU1NFUlQoaXNQbGFjZWQoKSk7IHJldHVy
biBtX2ZyYW1lUmVjdC5tYXhZKCk7IH0KICAgICAgICAgaW50IHdpZHRoKCkgY29uc3QgeyByZXR1
cm4gbV9mcmFtZVJlY3Qud2lkdGgoKTsgfQogICAgICAgICBpbnQgaGVpZ2h0KCkgY29uc3QgeyBy
ZXR1cm4gbV9mcmFtZVJlY3QuaGVpZ2h0KCk7IH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckJveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckJveC5jcHAJKHJldmlzaW9uIDc3MjYwKQorKysgU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckJveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU0OCwxNiArNTQ4LDE2IEBA
IEludFJlY3QgUmVuZGVyQm94OjpyZWZsZWN0ZWRSZWN0KGNvbnN0IEkKICAgICBJbnRSZWN0IHJl
c3VsdCA9IHI7CiAgICAgc3dpdGNoIChzdHlsZSgpLT5ib3hSZWZsZWN0KCktPmRpcmVjdGlvbigp
KSB7CiAgICAgICAgIGNhc2UgUmVmbGVjdGlvbkJlbG93OgotICAgICAgICAgICAgcmVzdWx0LnNl
dFkoYm94LmJvdHRvbSgpICsgcmVmbGVjdGlvbk9mZnNldCgpICsgKGJveC5ib3R0b20oKSAtIHIu
Ym90dG9tKCkpKTsKKyAgICAgICAgICAgIHJlc3VsdC5zZXRZKGJveC5tYXhZKCkgKyByZWZsZWN0
aW9uT2Zmc2V0KCkgKyAoYm94Lm1heFkoKSAtIHIubWF4WSgpKSk7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgY2FzZSBSZWZsZWN0aW9uQWJvdmU6Ci0gICAgICAgICAgICByZXN1bHQuc2V0
WShib3gueSgpIC0gcmVmbGVjdGlvbk9mZnNldCgpIC0gYm94LmhlaWdodCgpICsgKGJveC5ib3R0
b20oKSAtIHIuYm90dG9tKCkpKTsKKyAgICAgICAgICAgIHJlc3VsdC5zZXRZKGJveC55KCkgLSBy
ZWZsZWN0aW9uT2Zmc2V0KCkgLSBib3guaGVpZ2h0KCkgKyAoYm94Lm1heFkoKSAtIHIubWF4WSgp
KSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBSZWZsZWN0aW9uTGVmdDoKLSAg
ICAgICAgICAgIHJlc3VsdC5zZXRYKGJveC54KCkgLSByZWZsZWN0aW9uT2Zmc2V0KCkgLSBib3gu
d2lkdGgoKSArIChib3gucmlnaHQoKSAtIHIucmlnaHQoKSkpOworICAgICAgICAgICAgcmVzdWx0
LnNldFgoYm94LngoKSAtIHJlZmxlY3Rpb25PZmZzZXQoKSAtIGJveC53aWR0aCgpICsgKGJveC5t
YXhYKCkgLSByLm1heFgoKSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgUmVm
bGVjdGlvblJpZ2h0OgotICAgICAgICAgICAgcmVzdWx0LnNldFgoYm94LnJpZ2h0KCkgKyByZWZs
ZWN0aW9uT2Zmc2V0KCkgKyAoYm94LnJpZ2h0KCkgLSByLnJpZ2h0KCkpKTsKKyAgICAgICAgICAg
IHJlc3VsdC5zZXRYKGJveC5tYXhYKCkgKyByZWZsZWN0aW9uT2Zmc2V0KCkgKyAoYm94Lm1heFgo
KSAtIHIubWF4WCgpKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICB9CiAgICAgcmV0dXJuIHJl
c3VsdDsKQEAgLTI5ODcsNyArMjk4Nyw3IEBAIEludFJlY3QgUmVuZGVyQm94Ojpsb2NhbENhcmV0
UmVjdChJbmxpbmUKICAgICAgICAgcmVjdC5zZXRIZWlnaHQoZm9udEhlaWdodCk7CiAKICAgICBp
ZiAoZXh0cmFXaWR0aFRvRW5kT2ZMaW5lKQotICAgICAgICAqZXh0cmFXaWR0aFRvRW5kT2ZMaW5l
ID0geCgpICsgd2lkdGgoKSAtIHJlY3QucmlnaHQoKTsKKyAgICAgICAgKmV4dHJhV2lkdGhUb0Vu
ZE9mTGluZSA9IHgoKSArIHdpZHRoKCkgLSByZWN0Lm1heFgoKTsKIAogICAgIC8vIE1vdmUgdG8g
bG9jYWwgY29vcmRzCiAgICAgcmVjdC5tb3ZlKC14KCksIC15KCkpOwpAQCAtMzEwOCw5ICszMTA4
LDkgQEAgdm9pZCBSZW5kZXJCb3g6OmFkZFNoYWRvd092ZXJmbG93KCkKICAgICBzdHlsZSgpLT5n
ZXRCb3hTaGFkb3dFeHRlbnQoc2hhZG93VG9wLCBzaGFkb3dSaWdodCwgc2hhZG93Qm90dG9tLCBz
aGFkb3dMZWZ0KTsKICAgICBJbnRSZWN0IGJvcmRlckJveCA9IGJvcmRlckJveFJlY3QoKTsKICAg
ICBpbnQgb3ZlcmZsb3dMZWZ0ID0gYm9yZGVyQm94LngoKSArIHNoYWRvd0xlZnQ7Ci0gICAgaW50
IG92ZXJmbG93UmlnaHQgPSBib3JkZXJCb3gucmlnaHQoKSArIHNoYWRvd1JpZ2h0OworICAgIGlu
dCBvdmVyZmxvd1JpZ2h0ID0gYm9yZGVyQm94Lm1heFgoKSArIHNoYWRvd1JpZ2h0OwogICAgIGlu
dCBvdmVyZmxvd1RvcCA9IGJvcmRlckJveC55KCkgKyBzaGFkb3dUb3A7Ci0gICAgaW50IG92ZXJm
bG93Qm90dG9tID0gYm9yZGVyQm94LmJvdHRvbSgpICsgc2hhZG93Qm90dG9tOworICAgIGludCBv
dmVyZmxvd0JvdHRvbSA9IGJvcmRlckJveC5tYXhZKCkgKyBzaGFkb3dCb3R0b207CiAgICAgYWRk
VmlzdWFsT3ZlcmZsb3coSW50UmVjdChvdmVyZmxvd0xlZnQsIG92ZXJmbG93VG9wLCBvdmVyZmxv
d1JpZ2h0IC0gb3ZlcmZsb3dMZWZ0LCBvdmVyZmxvd0JvdHRvbSAtIG92ZXJmbG93VG9wKSk7CiB9
CiAKQEAgLTMxNDksMTMgKzMxNDksMTMgQEAgdm9pZCBSZW5kZXJCb3g6OmFkZExheW91dE92ZXJm
bG93KGNvbnN0IAogICAgICAgICBib29sIGhhc0xlZnRPdmVyZmxvdyA9ICFzdHlsZSgpLT5pc0xl
ZnRUb1JpZ2h0RGlyZWN0aW9uKCkgJiYgc3R5bGUoKS0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUo
KTsKICAgICAgICAgCiAgICAgICAgIGlmICghaGFzVG9wT3ZlcmZsb3cpCi0gICAgICAgICAgICBv
dmVyZmxvd1JlY3Quc2hpZnRUb3BFZGdlVG8obWF4KG92ZXJmbG93UmVjdC55KCksIGNsaWVudEJv
eC55KCkpKTsKKyAgICAgICAgICAgIG92ZXJmbG93UmVjdC5zaGlmdE1pbllFZGdlVG8obWF4KG92
ZXJmbG93UmVjdC55KCksIGNsaWVudEJveC55KCkpKTsKICAgICAgICAgZWxzZQotICAgICAgICAg
ICAgb3ZlcmZsb3dSZWN0LnNoaWZ0Qm90dG9tRWRnZVRvKG1pbihvdmVyZmxvd1JlY3QuYm90dG9t
KCksIGNsaWVudEJveC5ib3R0b20oKSkpOworICAgICAgICAgICAgb3ZlcmZsb3dSZWN0LnNoaWZ0
TWF4WUVkZ2VUbyhtaW4ob3ZlcmZsb3dSZWN0Lm1heFkoKSwgY2xpZW50Qm94Lm1heFkoKSkpOwog
ICAgICAgICBpZiAoIWhhc0xlZnRPdmVyZmxvdykKLSAgICAgICAgICAgIG92ZXJmbG93UmVjdC5z
aGlmdExlZnRFZGdlVG8obWF4KG92ZXJmbG93UmVjdC54KCksIGNsaWVudEJveC54KCkpKTsKKyAg
ICAgICAgICAgIG92ZXJmbG93UmVjdC5zaGlmdE1pblhFZGdlVG8obWF4KG92ZXJmbG93UmVjdC54
KCksIGNsaWVudEJveC54KCkpKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgb3ZlcmZsb3dS
ZWN0LnNoaWZ0UmlnaHRFZGdlVG8obWluKG92ZXJmbG93UmVjdC5yaWdodCgpLCBjbGllbnRCb3gu
cmlnaHQoKSkpOworICAgICAgICAgICAgb3ZlcmZsb3dSZWN0LnNoaWZ0TWF4WEVkZ2VUbyhtaW4o
b3ZlcmZsb3dSZWN0Lm1heFgoKSwgY2xpZW50Qm94Lm1heFgoKSkpOwogICAgICAgICAKICAgICAg
ICAgLy8gTm93IHJlLXRlc3Qgd2l0aCB0aGUgYWRqdXN0ZWQgcmVjdGFuZ2xlIGFuZCBzZWUgaWYg
aXQgaGFzIGJlY29tZSB1bnJlYWNoYWJsZSBvciBmdWxseQogICAgICAgICAvLyBjb250YWluZWQu
CkBAIC0zMjQ0LDkgKzMyNDQsOSBAQCBJbnRSZWN0IFJlbmRlckJveDo6dmlzdWFsT3ZlcmZsb3dS
ZWN0Rm9yCiAgICAgLy8gV2UgYXJlIHB1dHRpbmcgb3Vyc2VsdmVzIGludG8gb3VyIHBhcmVudCdz
IGNvb3JkaW5hdGUgc3BhY2UuICBJZiB0aGVyZSBpcyBhIGZsaXBwZWQgYmxvY2sgbWlzbWF0Y2gK
ICAgICAvLyBpbiBhIHBhcnRpY3VsYXIgYXhpcywgdGhlbiB3ZSBoYXZlIHRvIGZsaXAgdGhlIHJl
Y3QgYWxvbmcgdGhhdCBheGlzLgogICAgIGlmIChzdHlsZSgpLT53cml0aW5nTW9kZSgpID09IFJp
Z2h0VG9MZWZ0V3JpdGluZ01vZGUgfHwgcGFyZW50U3R5bGUtPndyaXRpbmdNb2RlKCkgPT0gUmln
aHRUb0xlZnRXcml0aW5nTW9kZSkKLSAgICAgICAgcmVjdC5zZXRYKHdpZHRoKCkgLSByZWN0LnJp
Z2h0KCkpOworICAgICAgICByZWN0LnNldFgod2lkdGgoKSAtIHJlY3QubWF4WCgpKTsKICAgICBl
bHNlIGlmIChzdHlsZSgpLT53cml0aW5nTW9kZSgpID09IEJvdHRvbVRvVG9wV3JpdGluZ01vZGUg
fHwgcGFyZW50U3R5bGUtPndyaXRpbmdNb2RlKCkgPT0gQm90dG9tVG9Ub3BXcml0aW5nTW9kZSkK
LSAgICAgICAgcmVjdC5zZXRZKGhlaWdodCgpIC0gcmVjdC5ib3R0b20oKSk7CisgICAgICAgIHJl
Y3Quc2V0WShoZWlnaHQoKSAtIHJlY3QubWF4WSgpKTsKIAogICAgIHJldHVybiByZWN0OwogfQpA
QCAtMzI5MCw5ICszMjkwLDkgQEAgSW50UmVjdCBSZW5kZXJCb3g6OmxheW91dE92ZXJmbG93UmVj
dEZvcgogICAgIC8vIFdlIGFyZSBwdXR0aW5nIG91cnNlbHZlcyBpbnRvIG91ciBwYXJlbnQncyBj
b29yZGluYXRlIHNwYWNlLiAgSWYgdGhlcmUgaXMgYSBmbGlwcGVkIGJsb2NrIG1pc21hdGNoCiAg
ICAgLy8gaW4gYSBwYXJ0aWN1bGFyIGF4aXMsIHRoZW4gd2UgaGF2ZSB0byBmbGlwIHRoZSByZWN0
IGFsb25nIHRoYXQgYXhpcy4KICAgICBpZiAoc3R5bGUoKS0+d3JpdGluZ01vZGUoKSA9PSBSaWdo
dFRvTGVmdFdyaXRpbmdNb2RlIHx8IHBhcmVudFN0eWxlLT53cml0aW5nTW9kZSgpID09IFJpZ2h0
VG9MZWZ0V3JpdGluZ01vZGUpCi0gICAgICAgIHJlY3Quc2V0WCh3aWR0aCgpIC0gcmVjdC5yaWdo
dCgpKTsKKyAgICAgICAgcmVjdC5zZXRYKHdpZHRoKCkgLSByZWN0Lm1heFgoKSk7CiAgICAgZWxz
ZSBpZiAoc3R5bGUoKS0+d3JpdGluZ01vZGUoKSA9PSBCb3R0b21Ub1RvcFdyaXRpbmdNb2RlIHx8
IHBhcmVudFN0eWxlLT53cml0aW5nTW9kZSgpID09IEJvdHRvbVRvVG9wV3JpdGluZ01vZGUpCi0g
ICAgICAgIHJlY3Quc2V0WShoZWlnaHQoKSAtIHJlY3QuYm90dG9tKCkpOworICAgICAgICByZWN0
LnNldFkoaGVpZ2h0KCkgLSByZWN0Lm1heFkoKSk7CiAKICAgICByZXR1cm4gcmVjdDsKIH0KQEAg
LTMzMTUsOSArMzMxNSw5IEBAIHZvaWQgUmVuZGVyQm94OjpmbGlwRm9yV3JpdGluZ01vZGUoSW50
UmUKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKHN0eWxlKCktPmlzSG9yaXpvbnRhbFdyaXRp
bmdNb2RlKCkpCi0gICAgICAgIHJlY3Quc2V0WShoZWlnaHQoKSAtIHJlY3QuYm90dG9tKCkpOwor
ICAgICAgICByZWN0LnNldFkoaGVpZ2h0KCkgLSByZWN0Lm1heFkoKSk7CiAgICAgZWxzZQotICAg
ICAgICByZWN0LnNldFgod2lkdGgoKSAtIHJlY3QucmlnaHQoKSk7CisgICAgICAgIHJlY3Quc2V0
WCh3aWR0aCgpIC0gcmVjdC5tYXhYKCkpOwogfQogCiBpbnQgUmVuZGVyQm94OjpmbGlwRm9yV3Jp
dGluZ01vZGUoaW50IHBvc2l0aW9uKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckZyYW1lU2V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyRnJhbWVTZXQuY3BwCShyZXZpc2lvbiA3NzI2MCkKKysrIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJGcmFtZVNldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkzLDgg
KzkzLDggQEAgdm9pZCBSZW5kZXJGcmFtZVNldDo6cGFpbnRDb2x1bW5Cb3JkZXIoYwogICAgIC8v
IE5vdyBzdHJva2UgdGhlIGVkZ2VzIGJ1dCBvbmx5IGlmIHdlIGhhdmUgZW5vdWdoIHJvb20gdG8g
cGFpbnQgYm90aCBlZGdlcyB3aXRoIGEgbGl0dGxlCiAgICAgLy8gYml0IG9mIHRoZSBmaWxsIGNv
bG9yIHNob3dpbmcgdGhyb3VnaC4KICAgICBpZiAoYm9yZGVyUmVjdC53aWR0aCgpID49IDMpIHsK
LSAgICAgICAgY29udGV4dC0+ZmlsbFJlY3QoSW50UmVjdChib3JkZXJSZWN0LnRvcExlZnQoKSwg
SW50U2l6ZSgxLCBoZWlnaHQoKSkpLCBib3JkZXJTdGFydEVkZ2VDb2xvcigpLCBjb2xvclNwYWNl
KTsKLSAgICAgICAgY29udGV4dC0+ZmlsbFJlY3QoSW50UmVjdChib3JkZXJSZWN0LnRvcFJpZ2h0
KCksIEludFNpemUoMSwgaGVpZ2h0KCkpKSwgYm9yZGVyRW5kRWRnZUNvbG9yKCksIGNvbG9yU3Bh
Y2UpOworICAgICAgICBjb250ZXh0LT5maWxsUmVjdChJbnRSZWN0KGJvcmRlclJlY3QubG9jYXRp
b24oKSwgSW50U2l6ZSgxLCBoZWlnaHQoKSkpLCBib3JkZXJTdGFydEVkZ2VDb2xvcigpLCBjb2xv
clNwYWNlKTsKKyAgICAgICAgY29udGV4dC0+ZmlsbFJlY3QoSW50UmVjdChJbnRQb2ludChib3Jk
ZXJSZWN0Lm1heFgoKSAtIDEsIGJvcmRlclJlY3QueSgpKSwgSW50U2l6ZSgxLCBoZWlnaHQoKSkp
LCBib3JkZXJFbmRFZGdlQ29sb3IoKSwgY29sb3JTcGFjZSk7CiAgICAgfQogfQogCkBAIC0xMTMs
OCArMTEzLDggQEAgdm9pZCBSZW5kZXJGcmFtZVNldDo6cGFpbnRSb3dCb3JkZXIoY29ucwogICAg
IC8vIE5vdyBzdHJva2UgdGhlIGVkZ2VzIGJ1dCBvbmx5IGlmIHdlIGhhdmUgZW5vdWdoIHJvb20g
dG8gcGFpbnQgYm90aCBlZGdlcyB3aXRoIGEgbGl0dGxlCiAgICAgLy8gYml0IG9mIHRoZSBmaWxs
IGNvbG9yIHNob3dpbmcgdGhyb3VnaC4KICAgICBpZiAoYm9yZGVyUmVjdC5oZWlnaHQoKSA+PSAz
KSB7Ci0gICAgICAgIGNvbnRleHQtPmZpbGxSZWN0KEludFJlY3QoYm9yZGVyUmVjdC50b3BMZWZ0
KCksIEludFNpemUod2lkdGgoKSwgMSkpLCBib3JkZXJTdGFydEVkZ2VDb2xvcigpLCBjb2xvclNw
YWNlKTsKLSAgICAgICAgY29udGV4dC0+ZmlsbFJlY3QoSW50UmVjdChib3JkZXJSZWN0LmJvdHRv
bUxlZnQoKSwgSW50U2l6ZSh3aWR0aCgpLCAxKSksIGJvcmRlckVuZEVkZ2VDb2xvcigpLCBjb2xv
clNwYWNlKTsKKyAgICAgICAgY29udGV4dC0+ZmlsbFJlY3QoSW50UmVjdChib3JkZXJSZWN0Lmxv
Y2F0aW9uKCksIEludFNpemUod2lkdGgoKSwgMSkpLCBib3JkZXJTdGFydEVkZ2VDb2xvcigpLCBj
b2xvclNwYWNlKTsKKyAgICAgICAgY29udGV4dC0+ZmlsbFJlY3QoSW50UmVjdChJbnRQb2ludChi
b3JkZXJSZWN0LngoKSwgYm9yZGVyUmVjdC5tYXhZKCkgLSAxKSwgSW50U2l6ZSh3aWR0aCgpLCAx
KSksIGJvcmRlckVuZEVkZ2VDb2xvcigpLCBjb2xvclNwYWNlKTsKICAgICB9CiB9CiAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbmxpbmUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbmxpbmUuY3BwCShyZXZpc2lvbiA3NzI2
MCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbmxpbmUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMDM3LDMwICsxMDM3LDMwIEBAIHZvaWQgUmVuZGVySW5saW5lOjpwYWludE91
dGxpbmVGb3JMaW5lKEcKIAogICAgIGludCB0ID0gdHkgKyB0aGlzbGluZS55KCkgLSBvZmZzZXQ7
CiAgICAgaW50IGwgPSB0eCArIHRoaXNsaW5lLngoKSAtIG9mZnNldDsKLSAgICBpbnQgYiA9IHR5
ICsgdGhpc2xpbmUuYm90dG9tKCkgKyBvZmZzZXQ7Ci0gICAgaW50IHIgPSB0eCArIHRoaXNsaW5l
LnJpZ2h0KCkgKyBvZmZzZXQ7CisgICAgaW50IGIgPSB0eSArIHRoaXNsaW5lLm1heFkoKSArIG9m
ZnNldDsKKyAgICBpbnQgciA9IHR4ICsgdGhpc2xpbmUubWF4WCgpICsgb2Zmc2V0OwogICAgIAog
ICAgIC8vIGxlZnQgZWRnZQogICAgIGRyYXdMaW5lRm9yQm94U2lkZShncmFwaGljc0NvbnRleHQs
CiAgICAgICAgICAgICAgICBsIC0gb3csCi0gICAgICAgICAgICAgICB0IC0gKGxhc3RsaW5lLmlz
RW1wdHkoKSB8fCB0aGlzbGluZS54KCkgPCBsYXN0bGluZS54KCkgfHwgKGxhc3RsaW5lLnJpZ2h0
KCkgLSAxKSA8PSB0aGlzbGluZS54KCkgPyBvdyA6IDApLAorICAgICAgICAgICAgICAgdCAtIChs
YXN0bGluZS5pc0VtcHR5KCkgfHwgdGhpc2xpbmUueCgpIDwgbGFzdGxpbmUueCgpIHx8IChsYXN0
bGluZS5tYXhYKCkgLSAxKSA8PSB0aGlzbGluZS54KCkgPyBvdyA6IDApLAogICAgICAgICAgICAg
ICAgbCwKLSAgICAgICAgICAgICAgIGIgKyAobmV4dGxpbmUuaXNFbXB0eSgpIHx8IHRoaXNsaW5l
LngoKSA8PSBuZXh0bGluZS54KCkgfHwgKG5leHRsaW5lLnJpZ2h0KCkgLSAxKSA8PSB0aGlzbGlu
ZS54KCkgPyBvdyA6IDApLAorICAgICAgICAgICAgICAgYiArIChuZXh0bGluZS5pc0VtcHR5KCkg
fHwgdGhpc2xpbmUueCgpIDw9IG5leHRsaW5lLngoKSB8fCAobmV4dGxpbmUubWF4WCgpIC0gMSkg
PD0gdGhpc2xpbmUueCgpID8gb3cgOiAwKSwKICAgICAgICAgICAgICAgIEJTTGVmdCwKICAgICAg
ICAgICAgICAgIG9jLCBvcywKLSAgICAgICAgICAgICAgIChsYXN0bGluZS5pc0VtcHR5KCkgfHwg
dGhpc2xpbmUueCgpIDwgbGFzdGxpbmUueCgpIHx8IChsYXN0bGluZS5yaWdodCgpIC0gMSkgPD0g
dGhpc2xpbmUueCgpID8gb3cgOiAtb3cpLAotICAgICAgICAgICAgICAgKG5leHRsaW5lLmlzRW1w
dHkoKSB8fCB0aGlzbGluZS54KCkgPD0gbmV4dGxpbmUueCgpIHx8IChuZXh0bGluZS5yaWdodCgp
IC0gMSkgPD0gdGhpc2xpbmUueCgpID8gb3cgOiAtb3cpKTsKKyAgICAgICAgICAgICAgIChsYXN0
bGluZS5pc0VtcHR5KCkgfHwgdGhpc2xpbmUueCgpIDwgbGFzdGxpbmUueCgpIHx8IChsYXN0bGlu
ZS5tYXhYKCkgLSAxKSA8PSB0aGlzbGluZS54KCkgPyBvdyA6IC1vdyksCisgICAgICAgICAgICAg
ICAobmV4dGxpbmUuaXNFbXB0eSgpIHx8IHRoaXNsaW5lLngoKSA8PSBuZXh0bGluZS54KCkgfHwg
KG5leHRsaW5lLm1heFgoKSAtIDEpIDw9IHRoaXNsaW5lLngoKSA/IG93IDogLW93KSk7CiAgICAg
CiAgICAgLy8gcmlnaHQgZWRnZQogICAgIGRyYXdMaW5lRm9yQm94U2lkZShncmFwaGljc0NvbnRl
eHQsCiAgICAgICAgICAgICAgICByLAotICAgICAgICAgICAgICAgdCAtIChsYXN0bGluZS5pc0Vt
cHR5KCkgfHwgbGFzdGxpbmUucmlnaHQoKSA8IHRoaXNsaW5lLnJpZ2h0KCkgfHwgKHRoaXNsaW5l
LnJpZ2h0KCkgLSAxKSA8PSBsYXN0bGluZS54KCkgPyBvdyA6IDApLAorICAgICAgICAgICAgICAg
dCAtIChsYXN0bGluZS5pc0VtcHR5KCkgfHwgbGFzdGxpbmUubWF4WCgpIDwgdGhpc2xpbmUubWF4
WCgpIHx8ICh0aGlzbGluZS5tYXhYKCkgLSAxKSA8PSBsYXN0bGluZS54KCkgPyBvdyA6IDApLAog
ICAgICAgICAgICAgICAgciArIG93LAotICAgICAgICAgICAgICAgYiArIChuZXh0bGluZS5pc0Vt
cHR5KCkgfHwgbmV4dGxpbmUucmlnaHQoKSA8PSB0aGlzbGluZS5yaWdodCgpIHx8ICh0aGlzbGlu
ZS5yaWdodCgpIC0gMSkgPD0gbmV4dGxpbmUueCgpID8gb3cgOiAwKSwKKyAgICAgICAgICAgICAg
IGIgKyAobmV4dGxpbmUuaXNFbXB0eSgpIHx8IG5leHRsaW5lLm1heFgoKSA8PSB0aGlzbGluZS5t
YXhYKCkgfHwgKHRoaXNsaW5lLm1heFgoKSAtIDEpIDw9IG5leHRsaW5lLngoKSA/IG93IDogMCks
CiAgICAgICAgICAgICAgICBCU1JpZ2h0LAogICAgICAgICAgICAgICAgb2MsIG9zLAotICAgICAg
ICAgICAgICAgKGxhc3RsaW5lLmlzRW1wdHkoKSB8fCBsYXN0bGluZS5yaWdodCgpIDwgdGhpc2xp
bmUucmlnaHQoKSB8fCAodGhpc2xpbmUucmlnaHQoKSAtIDEpIDw9IGxhc3RsaW5lLngoKSA/IG93
IDogLW93KSwKLSAgICAgICAgICAgICAgIChuZXh0bGluZS5pc0VtcHR5KCkgfHwgbmV4dGxpbmUu
cmlnaHQoKSA8PSB0aGlzbGluZS5yaWdodCgpIHx8ICh0aGlzbGluZS5yaWdodCgpIC0gMSkgPD0g
bmV4dGxpbmUueCgpID8gb3cgOiAtb3cpKTsKKyAgICAgICAgICAgICAgIChsYXN0bGluZS5pc0Vt
cHR5KCkgfHwgbGFzdGxpbmUubWF4WCgpIDwgdGhpc2xpbmUubWF4WCgpIHx8ICh0aGlzbGluZS5t
YXhYKCkgLSAxKSA8PSBsYXN0bGluZS54KCkgPyBvdyA6IC1vdyksCisgICAgICAgICAgICAgICAo
bmV4dGxpbmUuaXNFbXB0eSgpIHx8IG5leHRsaW5lLm1heFgoKSA8PSB0aGlzbGluZS5tYXhYKCkg
fHwgKHRoaXNsaW5lLm1heFgoKSAtIDEpIDw9IG5leHRsaW5lLngoKSA/IG93IDogLW93KSk7CiAg
ICAgLy8gdXBwZXIgZWRnZQogICAgIGlmICh0aGlzbGluZS54KCkgPCBsYXN0bGluZS54KCkpCiAg
ICAgICAgIGRyYXdMaW5lRm9yQm94U2lkZShncmFwaGljc0NvbnRleHQsCkBAIC0xMDcyLDE0ICsx
MDcyLDE0IEBAIHZvaWQgUmVuZGVySW5saW5lOjpwYWludE91dGxpbmVGb3JMaW5lKEcKICAgICAg
ICAgICAgICAgICAgICBvdywKICAgICAgICAgICAgICAgICAgICAoIWxhc3RsaW5lLmlzRW1wdHko
KSAmJiB0eCArIGxhc3RsaW5lLngoKSArIDEgPCByICsgb3cpID8gLW93IDogb3cpOwogICAgIAot
ICAgIGlmIChsYXN0bGluZS5yaWdodCgpIDwgdGhpc2xpbmUucmlnaHQoKSkKKyAgICBpZiAobGFz
dGxpbmUubWF4WCgpIDwgdGhpc2xpbmUubWF4WCgpKQogICAgICAgICBkcmF3TGluZUZvckJveFNp
ZGUoZ3JhcGhpY3NDb250ZXh0LAotICAgICAgICAgICAgICAgICAgIG1heChsYXN0bGluZS5pc0Vt
cHR5KCkgPyAtMTAwMDAwMCA6IHR4ICsgbGFzdGxpbmUucmlnaHQoKSwgbCAtIG93KSwKKyAgICAg
ICAgICAgICAgICAgICBtYXgobGFzdGxpbmUuaXNFbXB0eSgpID8gLTEwMDAwMDAgOiB0eCArIGxh
c3RsaW5lLm1heFgoKSwgbCAtIG93KSwKICAgICAgICAgICAgICAgICAgICB0IC0gb3csCiAgICAg
ICAgICAgICAgICAgICAgciArIG93LAogICAgICAgICAgICAgICAgICAgIHQgLAogICAgICAgICAg
ICAgICAgICAgIEJTVG9wLCBvYywgb3MsCi0gICAgICAgICAgICAgICAgICAgKCFsYXN0bGluZS5p
c0VtcHR5KCkgJiYgbCAtIG93IDwgdHggKyBsYXN0bGluZS5yaWdodCgpKSA/IC1vdyA6IG93LAor
ICAgICAgICAgICAgICAgICAgICghbGFzdGxpbmUuaXNFbXB0eSgpICYmIGwgLSBvdyA8IHR4ICsg
bGFzdGxpbmUubWF4WCgpKSA/IC1vdyA6IG93LAogICAgICAgICAgICAgICAgICAgIG93KTsKICAg
ICAKICAgICAvLyBsb3dlciBlZGdlCkBAIC0xMDkzLDE0ICsxMDkzLDE0IEBAIHZvaWQgUmVuZGVy
SW5saW5lOjpwYWludE91dGxpbmVGb3JMaW5lKEcKICAgICAgICAgICAgICAgICAgICBvdywKICAg
ICAgICAgICAgICAgICAgICAoIW5leHRsaW5lLmlzRW1wdHkoKSAmJiB0eCArIG5leHRsaW5lLngo
KSArIDEgPCByICsgb3cpID8gLW93IDogb3cpOwogICAgIAotICAgIGlmIChuZXh0bGluZS5yaWdo
dCgpIDwgdGhpc2xpbmUucmlnaHQoKSkKKyAgICBpZiAobmV4dGxpbmUubWF4WCgpIDwgdGhpc2xp
bmUubWF4WCgpKQogICAgICAgICBkcmF3TGluZUZvckJveFNpZGUoZ3JhcGhpY3NDb250ZXh0LAot
ICAgICAgICAgICAgICAgICAgIG1heCghbmV4dGxpbmUuaXNFbXB0eSgpID8gdHggKyBuZXh0bGlu
ZS5yaWdodCgpIDogLTEwMDAwMDAsIGwgLSBvdyksCisgICAgICAgICAgICAgICAgICAgbWF4KCFu
ZXh0bGluZS5pc0VtcHR5KCkgPyB0eCArIG5leHRsaW5lLm1heFgoKSA6IC0xMDAwMDAwLCBsIC0g
b3cpLAogICAgICAgICAgICAgICAgICAgIGIsCiAgICAgICAgICAgICAgICAgICAgciArIG93LAog
ICAgICAgICAgICAgICAgICAgIGIgKyBvdywKICAgICAgICAgICAgICAgICAgICBCU0JvdHRvbSwg
b2MsIG9zLAotICAgICAgICAgICAgICAgICAgICghbmV4dGxpbmUuaXNFbXB0eSgpICYmIGwgLSBv
dyA8IHR4ICsgbmV4dGxpbmUucmlnaHQoKSkgPyAtb3cgOiBvdywKKyAgICAgICAgICAgICAgICAg
ICAoIW5leHRsaW5lLmlzRW1wdHkoKSAmJiBsIC0gb3cgPCB0eCArIG5leHRsaW5lLm1heFgoKSkg
PyAtb3cgOiBvdywKICAgICAgICAgICAgICAgICAgICBvdyk7CiB9CiAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAkocmV2aXNpb24gNzcyNjApCisrKyBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
NTE2LDcgKzE1MTYsNyBAQCBJbnRSZWN0IFJlbmRlckxheWVyOjpnZXRSZWN0VG9FeHBvc2UoY29u
CiAgICAgICAgIHNjcm9sbFggPSBTY3JvbGxBbGlnbm1lbnQ6OmdldEhpZGRlbkJlaGF2aW9yKGFs
aWduWCk7CiAgICAgLy8gSWYgd2UncmUgdHJ5aW5nIHRvIGFsaWduIHRvIHRoZSBjbG9zZXN0IGVk
Z2UsIGFuZCB0aGUgZXhwb3NlUmVjdCBpcyBmdXJ0aGVyIHJpZ2h0CiAgICAgLy8gdGhhbiB0aGUg
dmlzaWJsZVJlY3QsIGFuZCBub3QgYmlnZ2VyIHRoYW4gdGhlIHZpc2libGUgYXJlYSwgdGhlbiBh
bGlnbiB3aXRoIHRoZSByaWdodC4KLSAgICBpZiAoc2Nyb2xsWCA9PSBhbGlnblRvQ2xvc2VzdEVk
Z2UgJiYgZXhwb3NlUmVjdC5yaWdodCgpID4gdmlzaWJsZVJlY3QucmlnaHQoKSAmJiBleHBvc2VS
ZWN0LndpZHRoKCkgPCB2aXNpYmxlUmVjdC53aWR0aCgpKQorICAgIGlmIChzY3JvbGxYID09IGFs
aWduVG9DbG9zZXN0RWRnZSAmJiBleHBvc2VSZWN0Lm1heFgoKSA+IHZpc2libGVSZWN0Lm1heFgo
KSAmJiBleHBvc2VSZWN0LndpZHRoKCkgPCB2aXNpYmxlUmVjdC53aWR0aCgpKQogICAgICAgICBz
Y3JvbGxYID0gYWxpZ25SaWdodDsKIAogICAgIC8vIEdpdmVuIHRoZSBYIGJlaGF2aW9yLCBjb21w
dXRlIHRoZSBYIGNvb3JkaW5hdGUuCkBAIC0xNTI0LDcgKzE1MjQsNyBAQCBJbnRSZWN0IFJlbmRl
ckxheWVyOjpnZXRSZWN0VG9FeHBvc2UoY29uCiAgICAgaWYgKHNjcm9sbFggPT0gbm9TY3JvbGwp
IAogICAgICAgICB4ID0gdmlzaWJsZVJlY3QueCgpOwogICAgIGVsc2UgaWYgKHNjcm9sbFggPT0g
YWxpZ25SaWdodCkKLSAgICAgICAgeCA9IGV4cG9zZVJlY3QucmlnaHQoKSAtIHZpc2libGVSZWN0
LndpZHRoKCk7CisgICAgICAgIHggPSBleHBvc2VSZWN0Lm1heFgoKSAtIHZpc2libGVSZWN0Lndp
ZHRoKCk7CiAgICAgZWxzZSBpZiAoc2Nyb2xsWCA9PSBhbGlnbkNlbnRlcikKICAgICAgICAgeCA9
IGV4cG9zZVJlY3QueCgpICsgKGV4cG9zZVJlY3Qud2lkdGgoKSAtIHZpc2libGVSZWN0LndpZHRo
KCkpIC8gMjsKICAgICBlbHNlCkBAIC0xNTQ5LDcgKzE1NDksNyBAQCBJbnRSZWN0IFJlbmRlckxh
eWVyOjpnZXRSZWN0VG9FeHBvc2UoY29uCiAgICAgICAgIHNjcm9sbFkgPSBTY3JvbGxBbGlnbm1l
bnQ6OmdldEhpZGRlbkJlaGF2aW9yKGFsaWduWSk7CiAgICAgLy8gSWYgd2UncmUgdHJ5aW5nIHRv
IGFsaWduIHRvIHRoZSBjbG9zZXN0IGVkZ2UsIGFuZCB0aGUgZXhwb3NlUmVjdCBpcyBmdXJ0aGVy
IGRvd24KICAgICAvLyB0aGFuIHRoZSB2aXNpYmxlUmVjdCwgYW5kIG5vdCBiaWdnZXIgdGhhbiB0
aGUgdmlzaWJsZSBhcmVhLCB0aGVuIGFsaWduIHdpdGggdGhlIGJvdHRvbS4KLSAgICBpZiAoc2Ny
b2xsWSA9PSBhbGlnblRvQ2xvc2VzdEVkZ2UgJiYgZXhwb3NlUmVjdC5ib3R0b20oKSA+IHZpc2li
bGVSZWN0LmJvdHRvbSgpICYmIGV4cG9zZVJlY3QuaGVpZ2h0KCkgPCB2aXNpYmxlUmVjdC5oZWln
aHQoKSkKKyAgICBpZiAoc2Nyb2xsWSA9PSBhbGlnblRvQ2xvc2VzdEVkZ2UgJiYgZXhwb3NlUmVj
dC5tYXhZKCkgPiB2aXNpYmxlUmVjdC5tYXhZKCkgJiYgZXhwb3NlUmVjdC5oZWlnaHQoKSA8IHZp
c2libGVSZWN0LmhlaWdodCgpKQogICAgICAgICBzY3JvbGxZID0gYWxpZ25Cb3R0b207CiAKICAg
ICAvLyBHaXZlbiB0aGUgWSBiZWhhdmlvciwgY29tcHV0ZSB0aGUgWSBjb29yZGluYXRlLgpAQCAt
MTU1Nyw3ICsxNTU3LDcgQEAgSW50UmVjdCBSZW5kZXJMYXllcjo6Z2V0UmVjdFRvRXhwb3NlKGNv
bgogICAgIGlmIChzY3JvbGxZID09IG5vU2Nyb2xsKSAKICAgICAgICAgeSA9IHZpc2libGVSZWN0
LnkoKTsKICAgICBlbHNlIGlmIChzY3JvbGxZID09IGFsaWduQm90dG9tKQotICAgICAgICB5ID0g
ZXhwb3NlUmVjdC5ib3R0b20oKSAtIHZpc2libGVSZWN0LmhlaWdodCgpOworICAgICAgICB5ID0g
ZXhwb3NlUmVjdC5tYXhZKCkgLSB2aXNpYmxlUmVjdC5oZWlnaHQoKTsKICAgICBlbHNlIGlmIChz
Y3JvbGxZID09IGFsaWduQ2VudGVyKQogICAgICAgICB5ID0gZXhwb3NlUmVjdC55KCkgKyAoZXhw
b3NlUmVjdC5oZWlnaHQoKSAtIHZpc2libGVSZWN0LmhlaWdodCgpKSAvIDI7CiAgICAgZWxzZQpA
QCAtMTY5NCw4ICsxNjk0LDggQEAgc3RhdGljIEludFJlY3QgY29ybmVyUmVjdChjb25zdCBSZW5k
ZXJMYQogICAgICAgICBob3Jpem9udGFsVGhpY2tuZXNzID0gbGF5ZXItPnZlcnRpY2FsU2Nyb2xs
YmFyKCktPndpZHRoKCk7CiAgICAgICAgIHZlcnRpY2FsVGhpY2tuZXNzID0gbGF5ZXItPmhvcml6
b250YWxTY3JvbGxiYXIoKS0+aGVpZ2h0KCk7CiAgICAgfQotICAgIHJldHVybiBJbnRSZWN0KGJv
dW5kcy5yaWdodCgpIC0gaG9yaXpvbnRhbFRoaWNrbmVzcyAtIGxheWVyLT5yZW5kZXJlcigpLT5z
dHlsZSgpLT5ib3JkZXJSaWdodFdpZHRoKCksIAotICAgICAgICAgICAgICAgICAgIGJvdW5kcy5i
b3R0b20oKSAtIHZlcnRpY2FsVGhpY2tuZXNzIC0gbGF5ZXItPnJlbmRlcmVyKCktPnN0eWxlKCkt
PmJvcmRlckJvdHRvbVdpZHRoKCksCisgICAgcmV0dXJuIEludFJlY3QoYm91bmRzLm1heFgoKSAt
IGhvcml6b250YWxUaGlja25lc3MgLSBsYXllci0+cmVuZGVyZXIoKS0+c3R5bGUoKS0+Ym9yZGVy
UmlnaHRXaWR0aCgpLCAKKyAgICAgICAgICAgICAgICAgICBib3VuZHMubWF4WSgpIC0gdmVydGlj
YWxUaGlja25lc3MgLSBsYXllci0+cmVuZGVyZXIoKS0+c3R5bGUoKS0+Ym9yZGVyQm90dG9tV2lk
dGgoKSwKICAgICAgICAgICAgICAgICAgICBob3Jpem9udGFsVGhpY2tuZXNzLCB2ZXJ0aWNhbFRo
aWNrbmVzcyk7CiB9CiAKQEAgLTE5MTEsMTQgKzE5MTEsMTQgQEAgdm9pZCBSZW5kZXJMYXllcjo6
cG9zaXRpb25PdmVyZmxvd0NvbnRybwogICAgIEludFJlY3Qgc2Nyb2xsQ29ybmVyKHNjcm9sbENv
cm5lclJlY3QodGhpcywgYm9yZGVyQm94KSk7CiAgICAgSW50UmVjdCBhYnNCb3VuZHMoYm9yZGVy
Qm94LngoKSArIHR4LCBib3JkZXJCb3gueSgpICsgdHksIGJvcmRlckJveC53aWR0aCgpLCBib3Jk
ZXJCb3guaGVpZ2h0KCkpOwogICAgIGlmIChtX3ZCYXIpCi0gICAgICAgIG1fdkJhci0+c2V0RnJh
bWVSZWN0KEludFJlY3QoYWJzQm91bmRzLnJpZ2h0KCkgLSBib3gtPmJvcmRlclJpZ2h0KCkgLSBt
X3ZCYXItPndpZHRoKCksCisgICAgICAgIG1fdkJhci0+c2V0RnJhbWVSZWN0KEludFJlY3QoYWJz
Qm91bmRzLm1heFgoKSAtIGJveC0+Ym9yZGVyUmlnaHQoKSAtIG1fdkJhci0+d2lkdGgoKSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhYnNCb3VuZHMueSgpICsgYm94LT5i
b3JkZXJUb3AoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3ZCYXIt
PndpZHRoKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWJzQm91bmRz
LmhlaWdodCgpIC0gKGJveC0+Ym9yZGVyVG9wKCkgKyBib3gtPmJvcmRlckJvdHRvbSgpKSAtIHNj
cm9sbENvcm5lci5oZWlnaHQoKSkpOwogCiAgICAgaWYgKG1faEJhcikKICAgICAgICAgbV9oQmFy
LT5zZXRGcmFtZVJlY3QoSW50UmVjdChhYnNCb3VuZHMueCgpICsgYm94LT5ib3JkZXJMZWZ0KCks
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWJzQm91bmRzLmJvdHRvbSgp
IC0gYm94LT5ib3JkZXJCb3R0b20oKSAtIG1faEJhci0+aGVpZ2h0KCksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYWJzQm91bmRzLm1heFkoKSAtIGJveC0+Ym9yZGVyQm90
dG9tKCkgLSBtX2hCYXItPmhlaWdodCgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGFic0JvdW5kcy53aWR0aCgpIC0gKGJveC0+Ym9yZGVyTGVmdCgpICsgYm94LT5ib3Jk
ZXJSaWdodCgpKSAtIHNjcm9sbENvcm5lci53aWR0aCgpLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG1faEJhci0+aGVpZ2h0KCkpKTsKICAgICAKQEAgLTE5NTUsNyArMTk1
NSw3IEBAIGludCBSZW5kZXJMYXllcjo6b3ZlcmZsb3dCb3R0b20oKSBjb25zdAogICAgIFJlbmRl
ckJveCogYm94ID0gcmVuZGVyQm94KCk7CiAgICAgSW50UmVjdCBvdmVyZmxvd1JlY3QoYm94LT5s
YXlvdXRPdmVyZmxvd1JlY3QoKSk7CiAgICAgYm94LT5mbGlwRm9yV3JpdGluZ01vZGUob3ZlcmZs
b3dSZWN0KTsKLSAgICByZXR1cm4gb3ZlcmZsb3dSZWN0LmJvdHRvbSgpOworICAgIHJldHVybiBv
dmVyZmxvd1JlY3QubWF4WSgpOwogfQogCiBpbnQgUmVuZGVyTGF5ZXI6Om92ZXJmbG93TGVmdCgp
IGNvbnN0CkBAIC0xOTcxLDcgKzE5NzEsNyBAQCBpbnQgUmVuZGVyTGF5ZXI6Om92ZXJmbG93Umln
aHQoKSBjb25zdAogICAgIFJlbmRlckJveCogYm94ID0gcmVuZGVyQm94KCk7CiAgICAgSW50UmVj
dCBvdmVyZmxvd1JlY3QoYm94LT5sYXlvdXRPdmVyZmxvd1JlY3QoKSk7CiAgICAgYm94LT5mbGlw
Rm9yV3JpdGluZ01vZGUob3ZlcmZsb3dSZWN0KTsKLSAgICByZXR1cm4gb3ZlcmZsb3dSZWN0LnJp
Z2h0KCk7CisgICAgcmV0dXJuIG92ZXJmbG93UmVjdC5tYXhYKCk7CiB9CiAKIHZvaWQgUmVuZGVy
TGF5ZXI6OmNvbXB1dGVTY3JvbGxEaW1lbnNpb25zKGJvb2wqIG5lZWRIQmFyLCBib29sKiBuZWVk
VkJhcikKQEAgLTIxOTcsNyArMjE5Nyw3IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnBhaW50UmVzaXpl
cihHcmFwaGljc0MKIAogICAgIC8vIFBhaW50IHRoZSByZXNpemVyIGNvbnRyb2wuCiAgICAgREVG
SU5FX1NUQVRJQ19MT0NBTChSZWZQdHI8SW1hZ2U+LCByZXNpemVDb3JuZXJJbWFnZSwgKEltYWdl
Ojpsb2FkUGxhdGZvcm1SZXNvdXJjZSgidGV4dEFyZWFSZXNpemVDb3JuZXIiKSkpOwotICAgIElu
dFBvaW50IGltYWdlUG9pbnQoYWJzUmVjdC5yaWdodCgpIC0gcmVzaXplQ29ybmVySW1hZ2UtPndp
ZHRoKCksIGFic1JlY3QuYm90dG9tKCkgLSByZXNpemVDb3JuZXJJbWFnZS0+aGVpZ2h0KCkpOwor
ICAgIEludFBvaW50IGltYWdlUG9pbnQoYWJzUmVjdC5tYXhYKCkgLSByZXNpemVDb3JuZXJJbWFn
ZS0+d2lkdGgoKSwgYWJzUmVjdC5tYXhZKCkgLSByZXNpemVDb3JuZXJJbWFnZS0+aGVpZ2h0KCkp
OwogICAgIGNvbnRleHQtPmRyYXdJbWFnZShyZXNpemVDb3JuZXJJbWFnZS5nZXQoKSwgYm94LT5z
dHlsZSgpLT5jb2xvclNwYWNlKCksIGltYWdlUG9pbnQpOwogCiAgICAgLy8gRHJhdyBhIGZyYW1l
IGFyb3VuZCB0aGUgcmVzaXplciAoMXB4IGdyZXkgbGluZSkgaWYgdGhlcmUgYXJlIGFueSBzY3Jv
bGxiYXJzIHByZXNlbnQuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlu
ZUJveExpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJMaW5lQm94TGlzdC5jcHAJKHJldmlzaW9uIDc3MjYwKQorKysgU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckxpbmVCb3hMaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTYwLDExICsx
NjAsMTEgQEAgYm9vbCBSZW5kZXJMaW5lQm94TGlzdDo6cmFuZ2VJbnRlcnNlY3RzUgogICAgIAog
ICAgIGlmIChyZW5kZXJlci0+c3R5bGUoKS0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkgewog
ICAgICAgICBwaHlzaWNhbFN0YXJ0ICs9IHR5OwotICAgICAgICBpZiAocGh5c2ljYWxTdGFydCA+
PSByZWN0LmJvdHRvbSgpIHx8IHBoeXNpY2FsU3RhcnQgKyBwaHlzaWNhbEV4dGVudCA8PSByZWN0
LnkoKSkKKyAgICAgICAgaWYgKHBoeXNpY2FsU3RhcnQgPj0gcmVjdC5tYXhZKCkgfHwgcGh5c2lj
YWxTdGFydCArIHBoeXNpY2FsRXh0ZW50IDw9IHJlY3QueSgpKQogICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgIH0gZWxzZSB7CiAgICAgICAgIHBoeXNpY2FsU3RhcnQgKz0gdHg7Ci0gICAg
ICAgIGlmIChwaHlzaWNhbFN0YXJ0ID49IHJlY3QucmlnaHQoKSB8fCBwaHlzaWNhbFN0YXJ0ICsg
cGh5c2ljYWxFeHRlbnQgPD0gcmVjdC54KCkpCisgICAgICAgIGlmIChwaHlzaWNhbFN0YXJ0ID49
IHJlY3QubWF4WCgpIHx8IHBoeXNpY2FsU3RhcnQgKyBwaHlzaWNhbEV4dGVudCA8PSByZWN0Lngo
KSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgCkBAIC0yMzksMTEgKzIz
OSwxMSBAQCB2b2lkIFJlbmRlckxpbmVCb3hMaXN0OjpwYWludChSZW5kZXJCb3hNCiAgICAgICAg
ICAgICAgICAgYm90dG9tRm9yUGFnaW5hdGlvbkNoZWNrID0gbWF4KGJvdHRvbUZvclBhZ2luYXRp
b25DaGVjaywgY3Vyci0+cm9vdCgpLT5saW5lQm90dG9tKCkpOwogICAgICAgICAgICAgfQogICAg
ICAgICAgICAgaWYgKGJvdHRvbUZvclBhZ2luYXRpb25DaGVjayAtIHRvcEZvclBhZ2luYXRpb25D
aGVjayA8PSB2LT5wcmludFJlY3QoKS5oZWlnaHQoKSkgewotICAgICAgICAgICAgICAgIGlmICh0
eSArIGJvdHRvbUZvclBhZ2luYXRpb25DaGVjayA+IHYtPnByaW50UmVjdCgpLmJvdHRvbSgpKSB7
CisgICAgICAgICAgICAgICAgaWYgKHR5ICsgYm90dG9tRm9yUGFnaW5hdGlvbkNoZWNrID4gdi0+
cHJpbnRSZWN0KCkubWF4WSgpKSB7CiAgICAgICAgICAgICAgICAgICAgIGlmIChSb290SW5saW5l
Qm94KiBuZXh0Um9vdEJveCA9IGN1cnItPnJvb3QoKS0+bmV4dFJvb3RCb3goKSkKICAgICAgICAg
ICAgICAgICAgICAgICAgIGJvdHRvbUZvclBhZ2luYXRpb25DaGVjayA9IG1pbihib3R0b21Gb3JQ
YWdpbmF0aW9uQ2hlY2ssIG1pbihuZXh0Um9vdEJveC0+dG9wVmlzdWFsT3ZlcmZsb3coKSwgbmV4
dFJvb3RCb3gtPmxpbmVUb3AoKSkpOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICBpZiAodHkgKyBib3R0b21Gb3JQYWdpbmF0aW9uQ2hlY2sgPiB2LT5wcmludFJlY3QoKS5ib3R0
b20oKSkgeworICAgICAgICAgICAgICAgIGlmICh0eSArIGJvdHRvbUZvclBhZ2luYXRpb25DaGVj
ayA+IHYtPnByaW50UmVjdCgpLm1heFkoKSkgewogICAgICAgICAgICAgICAgICAgICBpZiAodHkg
KyB0b3BGb3JQYWdpbmF0aW9uQ2hlY2sgPCB2LT50cnVuY2F0ZWRBdCgpKQogICAgICAgICAgICAg
ICAgICAgICAgICAgdi0+c2V0QmVzdFRydW5jYXRlZEF0KHR5ICsgdG9wRm9yUGFnaW5hdGlvbkNo
ZWNrLCByZW5kZXJlcik7CiAgICAgICAgICAgICAgICAgICAgIC8vIElmIHdlIHdlcmUgYWJsZSB0
byB0cnVuY2F0ZSwgZG9uJ3QgcGFpbnQuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTGlzdEl0ZW0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJMaXN0SXRlbS5jcHAJKHJldmlzaW9uIDc3MjYwKQorKysgU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckxpc3RJdGVtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjk3LDEyICsy
OTcsMTIgQEAgdm9pZCBSZW5kZXJMaXN0SXRlbTo6cG9zaXRpb25MaXN0TWFya2VyKAogICAgICAg
ICAgICAgZm9yIChJbmxpbmVGbG93Qm94KiBib3ggPSBtX21hcmtlci0+aW5saW5lQm94V3JhcHBl
cigpLT5wYXJlbnQoKTsgYm94OyBib3ggPSBib3gtPnBhcmVudCgpKSB7CiAgICAgICAgICAgICAg
ICAgSW50UmVjdCBuZXdMb2dpY2FsVmlzdWFsT3ZlcmZsb3dSZWN0ID0gYm94LT5sb2dpY2FsVmlz
dWFsT3ZlcmZsb3dSZWN0KCk7CiAgICAgICAgICAgICAgICAgSW50UmVjdCBuZXdMb2dpY2FsTGF5
b3V0T3ZlcmZsb3dSZWN0ID0gYm94LT5sb2dpY2FsTGF5b3V0T3ZlcmZsb3dSZWN0KCk7Ci0gICAg
ICAgICAgICAgICAgaWYgKG1hcmtlckxvZ2ljYWxMZWZ0ICsgbV9tYXJrZXItPmxvZ2ljYWxXaWR0
aCgpID4gbmV3TG9naWNhbFZpc3VhbE92ZXJmbG93UmVjdC5yaWdodCgpICYmICFoaXRTZWxmUGFp
bnRpbmdMYXllcikgeworICAgICAgICAgICAgICAgIGlmIChtYXJrZXJMb2dpY2FsTGVmdCArIG1f
bWFya2VyLT5sb2dpY2FsV2lkdGgoKSA+IG5ld0xvZ2ljYWxWaXN1YWxPdmVyZmxvd1JlY3QubWF4
WCgpICYmICFoaXRTZWxmUGFpbnRpbmdMYXllcikgewogICAgICAgICAgICAgICAgICAgICBuZXdM
b2dpY2FsVmlzdWFsT3ZlcmZsb3dSZWN0LnNldFdpZHRoKG1hcmtlckxvZ2ljYWxMZWZ0ICsgbV9t
YXJrZXItPmxvZ2ljYWxXaWR0aCgpIC0gYm94LT5sb2dpY2FsTGVmdFZpc3VhbE92ZXJmbG93KCkp
OwogICAgICAgICAgICAgICAgICAgICBpZiAoYm94ID09IHJvb3QpCiAgICAgICAgICAgICAgICAg
ICAgICAgICBhZGp1c3RPdmVyZmxvdyA9IHRydWU7CiAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIGlmIChtYXJrZXJMb2dpY2FsTGVmdCArIG1fbWFya2VyLT5sb2dpY2FsV2lkdGgo
KSA+IG5ld0xvZ2ljYWxMYXlvdXRPdmVyZmxvd1JlY3QucmlnaHQoKSkgeworICAgICAgICAgICAg
ICAgIGlmIChtYXJrZXJMb2dpY2FsTGVmdCArIG1fbWFya2VyLT5sb2dpY2FsV2lkdGgoKSA+IG5l
d0xvZ2ljYWxMYXlvdXRPdmVyZmxvd1JlY3QubWF4WCgpKSB7CiAgICAgICAgICAgICAgICAgICAg
IG5ld0xvZ2ljYWxMYXlvdXRPdmVyZmxvd1JlY3Quc2V0V2lkdGgobWFya2VyTG9naWNhbExlZnQg
KyBtX21hcmtlci0+bG9naWNhbFdpZHRoKCkgLSBib3gtPmxvZ2ljYWxMZWZ0TGF5b3V0T3ZlcmZs
b3coKSk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChib3ggPT0gcm9vdCkKICAgICAgICAgICAg
ICAgICAgICAgICAgIGFkanVzdE92ZXJmbG93ID0gdHJ1ZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJMaXN0TWFya2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdE1hcmtlci5jcHAJKHJldmlzaW9uIDc3MjYwKQorKysg
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RNYXJrZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xMjYwLDkgKzEyNjAsOSBAQCB2b2lkIFJlbmRlckxpc3RNYXJrZXI6OnBhaW50KFBh
aW50SW5mbyYgCiAgICAgICAgIG1hcmtlciA9IG1hcmtlci50cmFuc3Bvc2VkUmVjdCgpOwogICAg
ICAgICBtYXJrZXIubW92ZShib3gueCgpLCBib3gueSgpIC0gbG9naWNhbEhlaWdodCgpKTsKICAg
ICAgICAgY29udGV4dC0+c2F2ZSgpOwotICAgICAgICBjb250ZXh0LT50cmFuc2xhdGUobWFya2Vy
LngoKSwgbWFya2VyLmJvdHRvbSgpKTsKKyAgICAgICAgY29udGV4dC0+dHJhbnNsYXRlKG1hcmtl
ci54KCksIG1hcmtlci5tYXhZKCkpOwogICAgICAgICBjb250ZXh0LT5yb3RhdGUoc3RhdGljX2Nh
c3Q8ZmxvYXQ+KGRlZzJyYWQoOTAuKSkpOwotICAgICAgICBjb250ZXh0LT50cmFuc2xhdGUoLW1h
cmtlci54KCksIC1tYXJrZXIuYm90dG9tKCkpOworICAgICAgICBjb250ZXh0LT50cmFuc2xhdGUo
LW1hcmtlci54KCksIC1tYXJrZXIubWF4WSgpKTsKICAgICB9CiAKICAgICBJbnRQb2ludCB0ZXh0
T3JpZ2luID0gSW50UG9pbnQobWFya2VyLngoKSwgbWFya2VyLnkoKSArIHN0eWxlKCktPmZvbnRN
ZXRyaWNzKCkuYXNjZW50KCkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ck9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ck9iamVjdC5jcHAJKHJldmlzaW9uIDc3MjYwKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlck9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzNzgsMTEgKzEzNzgsMTEgQEAg
Ym9vbCBSZW5kZXJPYmplY3Q6OnJlcGFpbnRBZnRlckxheW91dElmTgogICAgIGVsc2UgaWYgKGRl
bHRhTGVmdCA8IDApCiAgICAgICAgIHJlcGFpbnRVc2luZ0NvbnRhaW5lcihyZXBhaW50Q29udGFp
bmVyLCBJbnRSZWN0KG5ld0JvdW5kcy54KCksIG5ld0JvdW5kcy55KCksIC1kZWx0YUxlZnQsIG5l
d0JvdW5kcy5oZWlnaHQoKSkpOwogCi0gICAgaW50IGRlbHRhUmlnaHQgPSBuZXdCb3VuZHMucmln
aHQoKSAtIG9sZEJvdW5kcy5yaWdodCgpOworICAgIGludCBkZWx0YVJpZ2h0ID0gbmV3Qm91bmRz
Lm1heFgoKSAtIG9sZEJvdW5kcy5tYXhYKCk7CiAgICAgaWYgKGRlbHRhUmlnaHQgPiAwKQotICAg
ICAgICByZXBhaW50VXNpbmdDb250YWluZXIocmVwYWludENvbnRhaW5lciwgSW50UmVjdChvbGRC
b3VuZHMucmlnaHQoKSwgbmV3Qm91bmRzLnkoKSwgZGVsdGFSaWdodCwgbmV3Qm91bmRzLmhlaWdo
dCgpKSk7CisgICAgICAgIHJlcGFpbnRVc2luZ0NvbnRhaW5lcihyZXBhaW50Q29udGFpbmVyLCBJ
bnRSZWN0KG9sZEJvdW5kcy5tYXhYKCksIG5ld0JvdW5kcy55KCksIGRlbHRhUmlnaHQsIG5ld0Jv
dW5kcy5oZWlnaHQoKSkpOwogICAgIGVsc2UgaWYgKGRlbHRhUmlnaHQgPCAwKQotICAgICAgICBy
ZXBhaW50VXNpbmdDb250YWluZXIocmVwYWludENvbnRhaW5lciwgSW50UmVjdChuZXdCb3VuZHMu
cmlnaHQoKSwgb2xkQm91bmRzLnkoKSwgLWRlbHRhUmlnaHQsIG9sZEJvdW5kcy5oZWlnaHQoKSkp
OworICAgICAgICByZXBhaW50VXNpbmdDb250YWluZXIocmVwYWludENvbnRhaW5lciwgSW50UmVj
dChuZXdCb3VuZHMubWF4WCgpLCBvbGRCb3VuZHMueSgpLCAtZGVsdGFSaWdodCwgb2xkQm91bmRz
LmhlaWdodCgpKSk7CiAKICAgICBpbnQgZGVsdGFUb3AgPSBuZXdCb3VuZHMueSgpIC0gb2xkQm91
bmRzLnkoKTsKICAgICBpZiAoZGVsdGFUb3AgPiAwKQpAQCAtMTM5MCwxMSArMTM5MCwxMSBAQCBi
b29sIFJlbmRlck9iamVjdDo6cmVwYWludEFmdGVyTGF5b3V0SWZOCiAgICAgZWxzZSBpZiAoZGVs
dGFUb3AgPCAwKQogICAgICAgICByZXBhaW50VXNpbmdDb250YWluZXIocmVwYWludENvbnRhaW5l
ciwgSW50UmVjdChuZXdCb3VuZHMueCgpLCBuZXdCb3VuZHMueSgpLCBuZXdCb3VuZHMud2lkdGgo
KSwgLWRlbHRhVG9wKSk7CiAKLSAgICBpbnQgZGVsdGFCb3R0b20gPSBuZXdCb3VuZHMuYm90dG9t
KCkgLSBvbGRCb3VuZHMuYm90dG9tKCk7CisgICAgaW50IGRlbHRhQm90dG9tID0gbmV3Qm91bmRz
Lm1heFkoKSAtIG9sZEJvdW5kcy5tYXhZKCk7CiAgICAgaWYgKGRlbHRhQm90dG9tID4gMCkKLSAg
ICAgICAgcmVwYWludFVzaW5nQ29udGFpbmVyKHJlcGFpbnRDb250YWluZXIsIEludFJlY3QobmV3
Qm91bmRzLngoKSwgb2xkQm91bmRzLmJvdHRvbSgpLCBuZXdCb3VuZHMud2lkdGgoKSwgZGVsdGFC
b3R0b20pKTsKKyAgICAgICAgcmVwYWludFVzaW5nQ29udGFpbmVyKHJlcGFpbnRDb250YWluZXIs
IEludFJlY3QobmV3Qm91bmRzLngoKSwgb2xkQm91bmRzLm1heFkoKSwgbmV3Qm91bmRzLndpZHRo
KCksIGRlbHRhQm90dG9tKSk7CiAgICAgZWxzZSBpZiAoZGVsdGFCb3R0b20gPCAwKQotICAgICAg
ICByZXBhaW50VXNpbmdDb250YWluZXIocmVwYWludENvbnRhaW5lciwgSW50UmVjdChvbGRCb3Vu
ZHMueCgpLCBuZXdCb3VuZHMuYm90dG9tKCksIG9sZEJvdW5kcy53aWR0aCgpLCAtZGVsdGFCb3R0
b20pKTsKKyAgICAgICAgcmVwYWludFVzaW5nQ29udGFpbmVyKHJlcGFpbnRDb250YWluZXIsIElu
dFJlY3Qob2xkQm91bmRzLngoKSwgbmV3Qm91bmRzLm1heFkoKSwgb2xkQm91bmRzLndpZHRoKCks
IC1kZWx0YUJvdHRvbSkpOwogCiAgICAgaWYgKG5ld091dGxpbmVCb3ggPT0gb2xkT3V0bGluZUJv
eCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTQxNiw3ICsxNDE2LDcgQEAgYm9vbCBSZW5k
ZXJPYmplY3Q6OnJlcGFpbnRBZnRlckxheW91dElmTgogICAgICAgICAgICAgbmV3T3V0bGluZUJv
eC55KCksCiAgICAgICAgICAgICB3aWR0aCArIGJvcmRlcldpZHRoLAogICAgICAgICAgICAgbWF4
KG5ld091dGxpbmVCb3guaGVpZ2h0KCksIG9sZE91dGxpbmVCb3guaGVpZ2h0KCkpKTsKLSAgICAg
ICAgaW50IHJpZ2h0ID0gbWluKG5ld0JvdW5kcy5yaWdodCgpLCBvbGRCb3VuZHMucmlnaHQoKSk7
CisgICAgICAgIGludCByaWdodCA9IG1pbihuZXdCb3VuZHMubWF4WCgpLCBvbGRCb3VuZHMubWF4
WCgpKTsKICAgICAgICAgaWYgKHJpZ2h0UmVjdC54KCkgPCByaWdodCkgewogICAgICAgICAgICAg
cmlnaHRSZWN0LnNldFdpZHRoKG1pbihyaWdodFJlY3Qud2lkdGgoKSwgcmlnaHQgLSByaWdodFJl
Y3QueCgpKSk7CiAgICAgICAgICAgICByZXBhaW50VXNpbmdDb250YWluZXIocmVwYWludENvbnRh
aW5lciwgcmlnaHRSZWN0KTsKQEAgLTE0MzIsMTAgKzE0MzIsMTAgQEAgYm9vbCBSZW5kZXJPYmpl
Y3Q6OnJlcGFpbnRBZnRlckxheW91dElmTgogICAgICAgICBpbnQgYm94SGVpZ2h0ID0gaXNCb3go
KSA/IHRvUmVuZGVyQm94KHRoaXMpLT5oZWlnaHQoKSA6IDA7CiAgICAgICAgIGludCBib3JkZXJI
ZWlnaHQgPSBtYXgoLW91dGxpbmVTdHlsZS0+b3V0bGluZU9mZnNldCgpLCBtYXgoYm9yZGVyQm90
dG9tLCBtYXgoc3R5bGUoKS0+Ym9yZGVyQm90dG9tTGVmdFJhZGl1cygpLmhlaWdodCgpLmNhbGNW
YWx1ZShib3hIZWlnaHQpLCBzdHlsZSgpLT5ib3JkZXJCb3R0b21SaWdodFJhZGl1cygpLmhlaWdo
dCgpLmNhbGNWYWx1ZShib3hIZWlnaHQpKSkpICsgbWF4KG93LCBzaGFkb3dCb3R0b20pOwogICAg
ICAgICBJbnRSZWN0IGJvdHRvbVJlY3QobmV3T3V0bGluZUJveC54KCksCi0gICAgICAgICAgICBt
aW4obmV3T3V0bGluZUJveC5ib3R0b20oKSwgb2xkT3V0bGluZUJveC5ib3R0b20oKSkgLSBib3Jk
ZXJIZWlnaHQsCisgICAgICAgICAgICBtaW4obmV3T3V0bGluZUJveC5tYXhZKCksIG9sZE91dGxp
bmVCb3gubWF4WSgpKSAtIGJvcmRlckhlaWdodCwKICAgICAgICAgICAgIG1heChuZXdPdXRsaW5l
Qm94LndpZHRoKCksIG9sZE91dGxpbmVCb3gud2lkdGgoKSksCiAgICAgICAgICAgICBoZWlnaHQg
KyBib3JkZXJIZWlnaHQpOwotICAgICAgICBpbnQgYm90dG9tID0gbWluKG5ld0JvdW5kcy5ib3R0
b20oKSwgb2xkQm91bmRzLmJvdHRvbSgpKTsKKyAgICAgICAgaW50IGJvdHRvbSA9IG1pbihuZXdC
b3VuZHMubWF4WSgpLCBvbGRCb3VuZHMubWF4WSgpKTsKICAgICAgICAgaWYgKGJvdHRvbVJlY3Qu
eSgpIDwgYm90dG9tKSB7CiAgICAgICAgICAgICBib3R0b21SZWN0LnNldEhlaWdodChtaW4oYm90
dG9tUmVjdC5oZWlnaHQoKSwgYm90dG9tIC0gYm90dG9tUmVjdC55KCkpKTsKICAgICAgICAgICAg
IHJlcGFpbnRVc2luZ0NvbnRhaW5lcihyZXBhaW50Q29udGFpbmVyLCBib3R0b21SZWN0KTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPdmVyZmxvdy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPdmVyZmxvdy5oCShyZXZpc2lvbiA3
NzI2MCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPdmVyZmxvdy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC00MiwxMyArNDIsMTMgQEAgY2xhc3MgUmVuZGVyT3ZlcmZsb3cgewogcHVi
bGljOgogICAgIFJlbmRlck92ZXJmbG93KGNvbnN0IEludFJlY3QmIGxheW91dFJlY3QsIGNvbnN0
IEludFJlY3QmIHZpc3VhbFJlY3QpIAogICAgICAgICA6IG1fdG9wTGF5b3V0T3ZlcmZsb3cobGF5
b3V0UmVjdC55KCkpCi0gICAgICAgICwgbV9ib3R0b21MYXlvdXRPdmVyZmxvdyhsYXlvdXRSZWN0
LmJvdHRvbSgpKQorICAgICAgICAsIG1fYm90dG9tTGF5b3V0T3ZlcmZsb3cobGF5b3V0UmVjdC5t
YXhZKCkpCiAgICAgICAgICwgbV9sZWZ0TGF5b3V0T3ZlcmZsb3cobGF5b3V0UmVjdC54KCkpCi0g
ICAgICAgICwgbV9yaWdodExheW91dE92ZXJmbG93KGxheW91dFJlY3QucmlnaHQoKSkKKyAgICAg
ICAgLCBtX3JpZ2h0TGF5b3V0T3ZlcmZsb3cobGF5b3V0UmVjdC5tYXhYKCkpCiAgICAgICAgICwg
bV90b3BWaXN1YWxPdmVyZmxvdyh2aXN1YWxSZWN0LnkoKSkKLSAgICAgICAgLCBtX2JvdHRvbVZp
c3VhbE92ZXJmbG93KHZpc3VhbFJlY3QuYm90dG9tKCkpCisgICAgICAgICwgbV9ib3R0b21WaXN1
YWxPdmVyZmxvdyh2aXN1YWxSZWN0Lm1heFkoKSkKICAgICAgICAgLCBtX2xlZnRWaXN1YWxPdmVy
Zmxvdyh2aXN1YWxSZWN0LngoKSkKLSAgICAgICAgLCBtX3JpZ2h0VmlzdWFsT3ZlcmZsb3codmlz
dWFsUmVjdC5yaWdodCgpKQorICAgICAgICAsIG1fcmlnaHRWaXN1YWxPdmVyZmxvdyh2aXN1YWxS
ZWN0Lm1heFgoKSkKICAgICB7CiAgICAgfQogICAgCkBAIC0xMjIsNDEgKzEyMiw0MSBAQCBpbmxp
bmUgdm9pZCBSZW5kZXJPdmVyZmxvdzo6bW92ZShpbnQgZHgsCiBpbmxpbmUgdm9pZCBSZW5kZXJP
dmVyZmxvdzo6YWRkTGF5b3V0T3ZlcmZsb3coY29uc3QgSW50UmVjdCYgcmVjdCkKIHsKICAgICBt
X3RvcExheW91dE92ZXJmbG93ID0gc3RkOjptaW4ocmVjdC55KCksIG1fdG9wTGF5b3V0T3ZlcmZs
b3cpOwotICAgIG1fYm90dG9tTGF5b3V0T3ZlcmZsb3cgPSBzdGQ6Om1heChyZWN0LmJvdHRvbSgp
LCBtX2JvdHRvbUxheW91dE92ZXJmbG93KTsKKyAgICBtX2JvdHRvbUxheW91dE92ZXJmbG93ID0g
c3RkOjptYXgocmVjdC5tYXhZKCksIG1fYm90dG9tTGF5b3V0T3ZlcmZsb3cpOwogICAgIG1fbGVm
dExheW91dE92ZXJmbG93ID0gc3RkOjptaW4ocmVjdC54KCksIG1fbGVmdExheW91dE92ZXJmbG93
KTsKLSAgICBtX3JpZ2h0TGF5b3V0T3ZlcmZsb3cgPSBzdGQ6Om1heChyZWN0LnJpZ2h0KCksIG1f
cmlnaHRMYXlvdXRPdmVyZmxvdyk7CisgICAgbV9yaWdodExheW91dE92ZXJmbG93ID0gc3RkOjpt
YXgocmVjdC5tYXhYKCksIG1fcmlnaHRMYXlvdXRPdmVyZmxvdyk7CiB9CiAKIGlubGluZSB2b2lk
IFJlbmRlck92ZXJmbG93OjphZGRWaXN1YWxPdmVyZmxvdyhjb25zdCBJbnRSZWN0JiByZWN0KQog
ewogICAgIG1fdG9wVmlzdWFsT3ZlcmZsb3cgPSBzdGQ6Om1pbihyZWN0LnkoKSwgbV90b3BWaXN1
YWxPdmVyZmxvdyk7Ci0gICAgbV9ib3R0b21WaXN1YWxPdmVyZmxvdyA9IHN0ZDo6bWF4KHJlY3Qu
Ym90dG9tKCksIG1fYm90dG9tVmlzdWFsT3ZlcmZsb3cpOworICAgIG1fYm90dG9tVmlzdWFsT3Zl
cmZsb3cgPSBzdGQ6Om1heChyZWN0Lm1heFkoKSwgbV9ib3R0b21WaXN1YWxPdmVyZmxvdyk7CiAg
ICAgbV9sZWZ0VmlzdWFsT3ZlcmZsb3cgPSBzdGQ6Om1pbihyZWN0LngoKSwgbV9sZWZ0VmlzdWFs
T3ZlcmZsb3cpOwotICAgIG1fcmlnaHRWaXN1YWxPdmVyZmxvdyA9IHN0ZDo6bWF4KHJlY3Qucmln
aHQoKSwgbV9yaWdodFZpc3VhbE92ZXJmbG93KTsKKyAgICBtX3JpZ2h0VmlzdWFsT3ZlcmZsb3cg
PSBzdGQ6Om1heChyZWN0Lm1heFgoKSwgbV9yaWdodFZpc3VhbE92ZXJmbG93KTsKIH0KIAogaW5s
aW5lIHZvaWQgUmVuZGVyT3ZlcmZsb3c6OnNldExheW91dE92ZXJmbG93KGNvbnN0IEludFJlY3Qm
IHJlY3QpCiB7CiAgICAgbV90b3BMYXlvdXRPdmVyZmxvdyA9IHJlY3QueSgpOwotICAgIG1fYm90
dG9tTGF5b3V0T3ZlcmZsb3cgPSByZWN0LmJvdHRvbSgpOworICAgIG1fYm90dG9tTGF5b3V0T3Zl
cmZsb3cgPSByZWN0Lm1heFkoKTsKICAgICBtX2xlZnRMYXlvdXRPdmVyZmxvdyA9IHJlY3QueCgp
OwotICAgIG1fcmlnaHRMYXlvdXRPdmVyZmxvdyA9IHJlY3QucmlnaHQoKTsKKyAgICBtX3JpZ2h0
TGF5b3V0T3ZlcmZsb3cgPSByZWN0Lm1heFgoKTsKIH0KIAogaW5saW5lIHZvaWQgUmVuZGVyT3Zl
cmZsb3c6OnNldFZpc3VhbE92ZXJmbG93KGNvbnN0IEludFJlY3QmIHJlY3QpCiB7CiAgICAgbV90
b3BWaXN1YWxPdmVyZmxvdyA9IHJlY3QueSgpOwotICAgIG1fYm90dG9tVmlzdWFsT3ZlcmZsb3cg
PSByZWN0LmJvdHRvbSgpOworICAgIG1fYm90dG9tVmlzdWFsT3ZlcmZsb3cgPSByZWN0Lm1heFko
KTsKICAgICBtX2xlZnRWaXN1YWxPdmVyZmxvdyA9IHJlY3QueCgpOwotICAgIG1fcmlnaHRWaXN1
YWxPdmVyZmxvdyA9IHJlY3QucmlnaHQoKTsKKyAgICBtX3JpZ2h0VmlzdWFsT3ZlcmZsb3cgPSBy
ZWN0Lm1heFgoKTsKIH0KIAogaW5saW5lIHZvaWQgUmVuZGVyT3ZlcmZsb3c6OnJlc2V0TGF5b3V0
T3ZlcmZsb3coY29uc3QgSW50UmVjdCYgcmVjdCkKIHsKICAgICBtX3RvcExheW91dE92ZXJmbG93
ID0gcmVjdC55KCk7Ci0gICAgbV9ib3R0b21MYXlvdXRPdmVyZmxvdyA9IHJlY3QuYm90dG9tKCk7
CisgICAgbV9ib3R0b21MYXlvdXRPdmVyZmxvdyA9IHJlY3QubWF4WSgpOwogICAgIG1fbGVmdExh
eW91dE92ZXJmbG93ID0gcmVjdC54KCk7Ci0gICAgbV9yaWdodExheW91dE92ZXJmbG93ID0gcmVj
dC5yaWdodCgpOworICAgIG1fcmlnaHRMYXlvdXRPdmVyZmxvdyA9IHJlY3QubWF4WCgpOwogfQog
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyUmVwbGFjZWQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJSZXBsYWNlZC5jcHAJKHJldmlzaW9uIDc3MjYwKQorKysgU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclJlcGxhY2VkLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTgyLDkgKzE4
Miw5IEBAIGJvb2wgUmVuZGVyUmVwbGFjZWQ6OnNob3VsZFBhaW50KFBhaW50SW4KICAgICB9CiAg
ICAgCiAgICAgaW50IG9zID0gMiAqIG1heGltYWxPdXRsaW5lU2l6ZShwYWludEluZm8ucGhhc2Up
OwotICAgIGlmIChjdXJyZW50VFggKyBsZWZ0VmlzdWFsT3ZlcmZsb3coKSA+PSBwYWludEluZm8u
cmVjdC5yaWdodCgpICsgb3MgfHwgY3VycmVudFRYICsgcmlnaHRWaXN1YWxPdmVyZmxvdygpIDw9
IHBhaW50SW5mby5yZWN0LngoKSAtIG9zKQorICAgIGlmIChjdXJyZW50VFggKyBsZWZ0VmlzdWFs
T3ZlcmZsb3coKSA+PSBwYWludEluZm8ucmVjdC5tYXhYKCkgKyBvcyB8fCBjdXJyZW50VFggKyBy
aWdodFZpc3VhbE92ZXJmbG93KCkgPD0gcGFpbnRJbmZvLnJlY3QueCgpIC0gb3MpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICBpZiAodG9wID49IHBhaW50SW5mby5yZWN0LmJvdHRvbSgpICsg
b3MgfHwgYm90dG9tIDw9IHBhaW50SW5mby5yZWN0LnkoKSAtIG9zKQorICAgIGlmICh0b3AgPj0g
cGFpbnRJbmZvLnJlY3QubWF4WSgpICsgb3MgfHwgYm90dG9tIDw9IHBhaW50SW5mby5yZWN0Lnko
KSAtIG9zKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICByZXR1cm4gdHJ1ZTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTY3JvbGxiYXJUaGVtZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNjcm9sbGJhclRoZW1lLmNw
cAkocmV2aXNpb24gNzcyNjApCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU2Ny
b2xsYmFyVGhlbWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05OCwxMCArOTgsMTAgQEAgSW50UmVj
dCBSZW5kZXJTY3JvbGxiYXJUaGVtZTo6Y29uc3RyYWluVAogICAgIEludFJlY3QgcmVzdWx0ID0g
cmVjdDsKICAgICBpZiAoc2Nyb2xsYmFyLT5vcmllbnRhdGlvbigpID09IEhvcml6b250YWxTY3Jv
bGxiYXIpIHsKICAgICAgICAgcmVzdWx0LnNldFgoYmFja1JlY3QueCgpKTsKLSAgICAgICAgcmVz
dWx0LnNldFdpZHRoKGZvcndhcmRSZWN0LnJpZ2h0KCkgLSBiYWNrUmVjdC54KCkpOworICAgICAg
ICByZXN1bHQuc2V0V2lkdGgoZm9yd2FyZFJlY3QubWF4WCgpIC0gYmFja1JlY3QueCgpKTsKICAg
ICB9IGVsc2UgewogICAgICAgICByZXN1bHQuc2V0WShiYWNrUmVjdC55KCkpOwotICAgICAgICBy
ZXN1bHQuc2V0SGVpZ2h0KGZvcndhcmRSZWN0LmJvdHRvbSgpIC0gYmFja1JlY3QueSgpKTsKKyAg
ICAgICAgcmVzdWx0LnNldEhlaWdodChmb3J3YXJkUmVjdC5tYXhZKCkgLSBiYWNrUmVjdC55KCkp
OwogICAgIH0KICAgICByZXR1cm4gcmVzdWx0OwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRhYmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVGFibGUuY3BwCShyZXZpc2lvbiA3NzI2MCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUYWJsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1NCw5ICs0NTQs
OSBAQCB2b2lkIFJlbmRlclRhYmxlOjpwYWludChQYWludEluZm8mIHBhaW50CiAgICAgUGFpbnRQ
aGFzZSBwYWludFBoYXNlID0gcGFpbnRJbmZvLnBoYXNlOwogCiAgICAgaW50IG9zID0gMiAqIG1h
eGltYWxPdXRsaW5lU2l6ZShwYWludFBoYXNlKTsKLSAgICBpZiAodHkgKyB0b3BWaXN1YWxPdmVy
ZmxvdygpID49IHBhaW50SW5mby5yZWN0LmJvdHRvbSgpICsgb3MgfHwgdHkgKyBib3R0b21WaXN1
YWxPdmVyZmxvdygpIDw9IHBhaW50SW5mby5yZWN0LnkoKSAtIG9zKQorICAgIGlmICh0eSArIHRv
cFZpc3VhbE92ZXJmbG93KCkgPj0gcGFpbnRJbmZvLnJlY3QubWF4WSgpICsgb3MgfHwgdHkgKyBi
b3R0b21WaXN1YWxPdmVyZmxvdygpIDw9IHBhaW50SW5mby5yZWN0LnkoKSAtIG9zKQogICAgICAg
ICByZXR1cm47Ci0gICAgaWYgKHR4ICsgbGVmdFZpc3VhbE92ZXJmbG93KCkgPj0gcGFpbnRJbmZv
LnJlY3QucmlnaHQoKSArIG9zIHx8IHR4ICsgcmlnaHRWaXN1YWxPdmVyZmxvdygpIDw9IHBhaW50
SW5mby5yZWN0LngoKSAtIG9zKQorICAgIGlmICh0eCArIGxlZnRWaXN1YWxPdmVyZmxvdygpID49
IHBhaW50SW5mby5yZWN0Lm1heFgoKSArIG9zIHx8IHR4ICsgcmlnaHRWaXN1YWxPdmVyZmxvdygp
IDw9IHBhaW50SW5mby5yZWN0LngoKSAtIG9zKQogICAgICAgICByZXR1cm47CiAKICAgICBib29s
IHB1c2hlZENsaXAgPSBwdXNoQ29udGVudHNDbGlwKHBhaW50SW5mbywgdHgsIHR5KTsgICAgCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVDZWxsLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVDZWxsLmNwcAkocmV2
aXNpb24gNzcyNjApCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVDZWxs
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODAzLDggKzgwMyw4IEBAIHZvaWQgUmVuZGVyVGFibGVD
ZWxsOjpwYWludChQYWludEluZm8mIHAKICAgICAgICAgdHggKz0geCgpOwogICAgICAgICB0eSAr
PSB5KCk7CiAgICAgICAgIGludCBvcyA9IDIgKiBtYXhpbWFsT3V0bGluZVNpemUocGFpbnRJbmZv
LnBoYXNlKTsKLSAgICAgICAgaWYgKHR5IC0gdGFibGUoKS0+b3V0ZXJCb3JkZXJUb3AoKSA8IHBh
aW50SW5mby5yZWN0LmJvdHRvbSgpICsgb3MgJiYKLSAgICAgICAgICAgIHR5ICsgaGVpZ2h0KCkg
KyB0YWJsZSgpLT5vdXRlckJvcmRlckJvdHRvbSgpID4gcGFpbnRJbmZvLnJlY3QueSgpIC0gb3Mp
CisgICAgICAgIGlmICh0eSAtIHRhYmxlKCktPm91dGVyQm9yZGVyVG9wKCkgPCBwYWludEluZm8u
cmVjdC5tYXhZKCkgKyBvcworICAgICAgICAgICAgJiYgdHkgKyBoZWlnaHQoKSArIHRhYmxlKCkt
Pm91dGVyQm9yZGVyQm90dG9tKCkgPiBwYWludEluZm8ucmVjdC55KCkgLSBvcykKICAgICAgICAg
ICAgIHBhaW50Q29sbGFwc2VkQm9yZGVyKHBhaW50SW5mby5jb250ZXh0LCB0eCwgdHksIHdpZHRo
KCksIGhlaWdodCgpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0gCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmNwcAkocmV2aXNpb24gNzcy
NjApCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtOTY0LDkgKzk2NCw5IEBAIHZvaWQgUmVuZGVyVGFibGVTZWN0aW9u
OjpwYWludE9iamVjdChQYWkKICAgICBsb2NhbFJlcGFpbnRSZWN0Lm1vdmUoLXR4LCAtdHkpOwog
ICAgIGlmIChzdHlsZSgpLT5pc0ZsaXBwZWRCbG9ja3NXcml0aW5nTW9kZSgpKSB7CiAgICAgICAg
IGlmIChzdHlsZSgpLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpKQotICAgICAgICAgICAgbG9j
YWxSZXBhaW50UmVjdC5zZXRZKGhlaWdodCgpIC0gbG9jYWxSZXBhaW50UmVjdC5ib3R0b20oKSk7
CisgICAgICAgICAgICBsb2NhbFJlcGFpbnRSZWN0LnNldFkoaGVpZ2h0KCkgLSBsb2NhbFJlcGFp
bnRSZWN0Lm1heFkoKSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGxvY2FsUmVwYWludFJl
Y3Quc2V0WCh3aWR0aCgpIC0gbG9jYWxSZXBhaW50UmVjdC5yaWdodCgpKTsKKyAgICAgICAgICAg
IGxvY2FsUmVwYWludFJlY3Quc2V0WCh3aWR0aCgpIC0gbG9jYWxSZXBhaW50UmVjdC5tYXhYKCkp
OwogICAgIH0KIAogICAgIC8vIElmIHNvbWUgY2VsbCBvdmVyZmxvd3MsIGp1c3QgcGFpbnQgYWxs
IG9mIHRoZW0uCkBAIC05ODEsNyArOTgxLDcgQEAgdm9pZCBSZW5kZXJUYWJsZVNlY3Rpb246OnBh
aW50T2JqZWN0KFBhaQogICAgICAgICBpZiAoc3RhcnRyb3cgPT0gbV9yb3dQb3Muc2l6ZSgpIHx8
IChzdGFydHJvdyA+IDAgJiYgKG1fcm93UG9zW3N0YXJ0cm93XSA+ICBiZWZvcmUpKSkKICAgICAg
ICAgICAtLXN0YXJ0cm93OwogCi0gICAgICAgIGludCBhZnRlciA9IChzdHlsZSgpLT5pc0hvcml6
b250YWxXcml0aW5nTW9kZSgpID8gbG9jYWxSZXBhaW50UmVjdC5ib3R0b20oKSA6IGxvY2FsUmVw
YWludFJlY3QucmlnaHQoKSkgKyBvczsKKyAgICAgICAgaW50IGFmdGVyID0gKHN0eWxlKCktPmlz
SG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBsb2NhbFJlcGFpbnRSZWN0Lm1heFkoKSA6IGxvY2Fs
UmVwYWludFJlY3QubWF4WCgpKSArIG9zOwogICAgICAgICBlbmRyb3cgPSBzdGQ6Omxvd2VyX2Jv
dW5kKG1fcm93UG9zLmJlZ2luKCksIG1fcm93UG9zLmVuZCgpLCBhZnRlcikgLSBtX3Jvd1Bvcy5i
ZWdpbigpOwogICAgICAgICBpZiAoZW5kcm93ID09IG1fcm93UG9zLnNpemUoKSkKICAgICAgICAg
ICAtLWVuZHJvdzsKQEAgLTEwMDAsNyArMTAwMCw3IEBAIHZvaWQgUmVuZGVyVGFibGVTZWN0aW9u
OjpwYWludE9iamVjdChQYWkKICAgICAgICAgaWYgKChzdGFydGNvbCA9PSBjb2x1bW5Qb3Muc2l6
ZSgpKSB8fCAoc3RhcnRjb2wgPiAwICYmIChjb2x1bW5Qb3Nbc3RhcnRjb2xdID4gc3RhcnQpKSkK
ICAgICAgICAgICAgIC0tc3RhcnRjb2w7CiAKLSAgICAgICAgaW50IGVuZCA9IChzdHlsZSgpLT5p
c0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gbG9jYWxSZXBhaW50UmVjdC5yaWdodCgpIDogbG9j
YWxSZXBhaW50UmVjdC5ib3R0b20oKSkgKyBvczsKKyAgICAgICAgaW50IGVuZCA9IChzdHlsZSgp
LT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gbG9jYWxSZXBhaW50UmVjdC5tYXhYKCkgOiBs
b2NhbFJlcGFpbnRSZWN0Lm1heFkoKSkgKyBvczsKICAgICAgICAgZW5kY29sID0gc3RkOjpsb3dl
cl9ib3VuZChjb2x1bW5Qb3MuYmVnaW4oKSwgY29sdW1uUG9zLmVuZCgpLCBlbmQpIC0gY29sdW1u
UG9zLmJlZ2luKCk7CiAgICAgICAgIGlmIChlbmRjb2wgPT0gY29sdW1uUG9zLnNpemUoKSkKICAg
ICAgICAgICAgIC0tZW5kY29sOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
ZXh0LmNwcAkocmV2aXNpb24gNzcyNjApCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0OCw5ICszNDgsOSBAQCB2b2lkIFJlbmRl
clRleHQ6OmFic29sdXRlUXVhZHMoVmVjdG9yPEZsCiAgICAgICAgIEludFJlY3QgZWxsaXBzaXNS
ZWN0ID0gKG9wdGlvbiA9PSBDbGlwVG9FbGxpcHNpcykgPyBlbGxpcHNpc1JlY3RGb3JCb3goYm94
LCAwLCB0ZXh0TGVuZ3RoKCkpIDogSW50UmVjdCgpOwogICAgICAgICBpZiAoIWVsbGlwc2lzUmVj
dC5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgIGlmIChzdHlsZSgpLT5pc0hvcml6b250YWxXcml0
aW5nTW9kZSgpKQotICAgICAgICAgICAgICAgIGJvdW5kYXJpZXMuc2V0V2lkdGgoZWxsaXBzaXNS
ZWN0LnJpZ2h0KCkgLSBib3VuZGFyaWVzLngoKSk7CisgICAgICAgICAgICAgICAgYm91bmRhcmll
cy5zZXRXaWR0aChlbGxpcHNpc1JlY3QubWF4WCgpIC0gYm91bmRhcmllcy54KCkpOwogICAgICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGJvdW5kYXJpZXMuc2V0SGVpZ2h0KGVsbGlwc2lz
UmVjdC5ib3R0b20oKSAtIGJvdW5kYXJpZXMueSgpKTsKKyAgICAgICAgICAgICAgICBib3VuZGFy
aWVzLnNldEhlaWdodChlbGxpcHNpc1JlY3QubWF4WSgpIC0gYm91bmRhcmllcy55KCkpOwogICAg
ICAgICB9CiAgICAgICAgIHF1YWRzLmFwcGVuZChsb2NhbFRvQWJzb2x1dGVRdWFkKEZsb2F0UmVj
dChib3VuZGFyaWVzKSkpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuY3BwCShyZXZpc2lvbiA3
NzI2MCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmds
ZUxpbmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOTMsNyArMzkzLDcgQEAgdm9pZCBSZW5kZXJU
ZXh0Q29udHJvbFNpbmdsZUxpbmU6OmZvcndhcgogI2VuZGlmCiAKICAgICBGbG9hdFBvaW50IGxv
Y2FsUG9pbnQgPSBpbm5lclRleHRSZW5kZXJlci0+YWJzb2x1dGVUb0xvY2FsKHN0YXRpY19jYXN0
PE1vdXNlRXZlbnQqPihldmVudCktPmFic29sdXRlTG9jYXRpb24oKSwgZmFsc2UsIHRydWUpOwot
ICAgIGludCB0ZXh0UmlnaHQgPSBpbm5lclRleHRSZW5kZXJlci0+Ym9yZGVyQm94UmVjdCgpLnJp
Z2h0KCk7CisgICAgaW50IHRleHRSaWdodCA9IGlubmVyVGV4dFJlbmRlcmVyLT5ib3JkZXJCb3hS
ZWN0KCkubWF4WCgpOwogCiAgICAgaWYgKG1fcmVzdWx0c0J1dHRvbiAmJiBsb2NhbFBvaW50Lngo
KSA8IGlubmVyVGV4dFJlbmRlcmVyLT5ib3JkZXJCb3hSZWN0KCkueCgpKQogICAgICAgICBtX3Jl
c3VsdHNCdXR0b24tPmRlZmF1bHRFdmVudEhhbmRsZXIoZXZlbnQpOwpJbmRleDogU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5tbQkocmV2aXNpb24gNzcyNjApCisrKyBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMubW0JKHdvcmtpbmcgY29weSkK
QEAgLTEwNDEsMjAgKzEwNDEsMjAgQEAgdm9pZCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRNZW51TGlz
dEJ1dHRvbgogICAgIEZsb2F0UmVjdCB0b3BHcmFkaWVudChyLngoKSwgci55KCksIHIud2lkdGgo
KSwgci5oZWlnaHQoKSAvIDIuMGYpOwogICAgIHN0cnVjdCBDR0Z1bmN0aW9uQ2FsbGJhY2tzIHRv
cENhbGxiYWNrcyA9IHsgMCwgVG9wR3JhZGllbnRJbnRlcnBvbGF0ZSwgTlVMTCB9OwogICAgIFJl
dGFpblB0cjxDR0Z1bmN0aW9uUmVmPiB0b3BGdW5jdGlvbihBZG9wdENGLCBDR0Z1bmN0aW9uQ3Jl
YXRlKE5VTEwsIDEsIE5VTEwsIDQsIE5VTEwsICZ0b3BDYWxsYmFja3MpKTsKLSAgICBSZXRhaW5Q
dHI8Q0dTaGFkaW5nUmVmPiB0b3BTaGFkaW5nKEFkb3B0Q0YsIENHU2hhZGluZ0NyZWF0ZUF4aWFs
KGNzcGFjZSwgQ0dQb2ludE1ha2UodG9wR3JhZGllbnQueCgpLCB0b3BHcmFkaWVudC55KCkpLCBD
R1BvaW50TWFrZSh0b3BHcmFkaWVudC54KCksIHRvcEdyYWRpZW50LmJvdHRvbSgpKSwgdG9wRnVu
Y3Rpb24uZ2V0KCksIGZhbHNlLCBmYWxzZSkpOworICAgIFJldGFpblB0cjxDR1NoYWRpbmdSZWY+
IHRvcFNoYWRpbmcoQWRvcHRDRiwgQ0dTaGFkaW5nQ3JlYXRlQXhpYWwoY3NwYWNlLCBDR1BvaW50
TWFrZSh0b3BHcmFkaWVudC54KCksIHRvcEdyYWRpZW50LnkoKSksIENHUG9pbnRNYWtlKHRvcEdy
YWRpZW50LngoKSwgdG9wR3JhZGllbnQubWF4WSgpKSwgdG9wRnVuY3Rpb24uZ2V0KCksIGZhbHNl
LCBmYWxzZSkpOwogCiAgICAgRmxvYXRSZWN0IGJvdHRvbUdyYWRpZW50KHIueCgpICsgcmFkaXVz
LCByLnkoKSArIHIuaGVpZ2h0KCkgLyAyLjBmLCByLndpZHRoKCkgLSAyLjBmICogcmFkaXVzLCBy
LmhlaWdodCgpIC8gMi4wZik7CiAgICAgc3RydWN0IENHRnVuY3Rpb25DYWxsYmFja3MgYm90dG9t
Q2FsbGJhY2tzID0geyAwLCBCb3R0b21HcmFkaWVudEludGVycG9sYXRlLCBOVUxMIH07CiAgICAg
UmV0YWluUHRyPENHRnVuY3Rpb25SZWY+IGJvdHRvbUZ1bmN0aW9uKEFkb3B0Q0YsIENHRnVuY3Rp
b25DcmVhdGUoTlVMTCwgMSwgTlVMTCwgNCwgTlVMTCwgJmJvdHRvbUNhbGxiYWNrcykpOwotICAg
IFJldGFpblB0cjxDR1NoYWRpbmdSZWY+IGJvdHRvbVNoYWRpbmcoQWRvcHRDRiwgQ0dTaGFkaW5n
Q3JlYXRlQXhpYWwoY3NwYWNlLCBDR1BvaW50TWFrZShib3R0b21HcmFkaWVudC54KCksICBib3R0
b21HcmFkaWVudC55KCkpLCBDR1BvaW50TWFrZShib3R0b21HcmFkaWVudC54KCksIGJvdHRvbUdy
YWRpZW50LmJvdHRvbSgpKSwgYm90dG9tRnVuY3Rpb24uZ2V0KCksIGZhbHNlLCBmYWxzZSkpOwor
ICAgIFJldGFpblB0cjxDR1NoYWRpbmdSZWY+IGJvdHRvbVNoYWRpbmcoQWRvcHRDRiwgQ0dTaGFk
aW5nQ3JlYXRlQXhpYWwoY3NwYWNlLCBDR1BvaW50TWFrZShib3R0b21HcmFkaWVudC54KCksICBi
b3R0b21HcmFkaWVudC55KCkpLCBDR1BvaW50TWFrZShib3R0b21HcmFkaWVudC54KCksIGJvdHRv
bUdyYWRpZW50Lm1heFkoKSksIGJvdHRvbUZ1bmN0aW9uLmdldCgpLCBmYWxzZSwgZmFsc2UpKTsK
IAogICAgIHN0cnVjdCBDR0Z1bmN0aW9uQ2FsbGJhY2tzIG1haW5DYWxsYmFja3MgPSB7IDAsIE1h
aW5HcmFkaWVudEludGVycG9sYXRlLCBOVUxMIH07CiAgICAgUmV0YWluUHRyPENHRnVuY3Rpb25S
ZWY+IG1haW5GdW5jdGlvbihBZG9wdENGLCBDR0Z1bmN0aW9uQ3JlYXRlKE5VTEwsIDEsIE5VTEws
IDQsIE5VTEwsICZtYWluQ2FsbGJhY2tzKSk7Ci0gICAgUmV0YWluUHRyPENHU2hhZGluZ1JlZj4g
bWFpblNoYWRpbmcoQWRvcHRDRiwgQ0dTaGFkaW5nQ3JlYXRlQXhpYWwoY3NwYWNlLCBDR1BvaW50
TWFrZShyLngoKSwgIHIueSgpKSwgQ0dQb2ludE1ha2Uoci54KCksIHIuYm90dG9tKCkpLCBtYWlu
RnVuY3Rpb24uZ2V0KCksIGZhbHNlLCBmYWxzZSkpOworICAgIFJldGFpblB0cjxDR1NoYWRpbmdS
ZWY+IG1haW5TaGFkaW5nKEFkb3B0Q0YsIENHU2hhZGluZ0NyZWF0ZUF4aWFsKGNzcGFjZSwgQ0dQ
b2ludE1ha2Uoci54KCksICByLnkoKSksIENHUG9pbnRNYWtlKHIueCgpLCByLm1heFkoKSksIG1h
aW5GdW5jdGlvbi5nZXQoKSwgZmFsc2UsIGZhbHNlKSk7CiAKICAgICBSZXRhaW5QdHI8Q0dTaGFk
aW5nUmVmPiBsZWZ0U2hhZGluZyhBZG9wdENGLCBDR1NoYWRpbmdDcmVhdGVBeGlhbChjc3BhY2Us
IENHUG9pbnRNYWtlKHIueCgpLCAgci55KCkpLCBDR1BvaW50TWFrZShyLngoKSArIHJhZGl1cywg
ci55KCkpLCBtYWluRnVuY3Rpb24uZ2V0KCksIGZhbHNlLCBmYWxzZSkpOwogCi0gICAgUmV0YWlu
UHRyPENHU2hhZGluZ1JlZj4gcmlnaHRTaGFkaW5nKEFkb3B0Q0YsIENHU2hhZGluZ0NyZWF0ZUF4
aWFsKGNzcGFjZSwgQ0dQb2ludE1ha2Uoci5yaWdodCgpLCAgci55KCkpLCBDR1BvaW50TWFrZShy
LnJpZ2h0KCkgLSByYWRpdXMsIHIueSgpKSwgbWFpbkZ1bmN0aW9uLmdldCgpLCBmYWxzZSwgZmFs
c2UpKTsKKyAgICBSZXRhaW5QdHI8Q0dTaGFkaW5nUmVmPiByaWdodFNoYWRpbmcoQWRvcHRDRiwg
Q0dTaGFkaW5nQ3JlYXRlQXhpYWwoY3NwYWNlLCBDR1BvaW50TWFrZShyLm1heFgoKSwgIHIueSgp
KSwgQ0dQb2ludE1ha2Uoci5tYXhYKCkgLSByYWRpdXMsIHIueSgpKSwgbWFpbkZ1bmN0aW9uLmdl
dCgpLCBmYWxzZSwgZmFsc2UpKTsKICAgICBwYWludEluZm8uY29udGV4dC0+c2F2ZSgpOwogICAg
IENHQ29udGV4dENsaXBUb1JlY3QoY29udGV4dCwgcik7CiAgICAgcGFpbnRJbmZvLmNvbnRleHQt
PmFkZFJvdW5kZWRSZWN0Q2xpcChib3JkZXIpOwpAQCAtMTA5OSw3ICsxMDk5LDcgQEAgYm9vbCBS
ZW5kZXJUaGVtZU1hYzo6cGFpbnRNZW51TGlzdEJ1dHRvbgogICAgIGZsb2F0IGNlbnRlclkgPSBi
b3VuZHMueSgpICsgYm91bmRzLmhlaWdodCgpIC8gMi4wZjsKICAgICBmbG9hdCBhcnJvd0hlaWdo
dCA9IGJhc2VBcnJvd0hlaWdodCAqIGZvbnRTY2FsZTsKICAgICBmbG9hdCBhcnJvd1dpZHRoID0g
YmFzZUFycm93V2lkdGggKiBmb250U2NhbGU7Ci0gICAgZmxvYXQgbGVmdEVkZ2UgPSBib3VuZHMu
cmlnaHQoKSAtIGFycm93UGFkZGluZ1JpZ2h0ICogby0+c3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgp
IC0gYXJyb3dXaWR0aDsKKyAgICBmbG9hdCBsZWZ0RWRnZSA9IGJvdW5kcy5tYXhYKCkgLSBhcnJv
d1BhZGRpbmdSaWdodCAqIG8tPnN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKSAtIGFycm93V2lkdGg7
CiAgICAgZmxvYXQgc3BhY2VCZXR3ZWVuQXJyb3dzID0gYmFzZVNwYWNlQmV0d2VlbkFycm93cyAq
IGZvbnRTY2FsZTsKIAogICAgIGlmIChib3VuZHMud2lkdGgoKSA8IGFycm93V2lkdGggKyBhcnJv
d1BhZGRpbmdMZWZ0ICogby0+c3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgpKQpAQCAtMTEzOCwxMSAr
MTEzOCwxMSBAQCBib29sIFJlbmRlclRoZW1lTWFjOjpwYWludE1lbnVMaXN0QnV0dG9uCiAgICAg
cGFpbnRJbmZvLmNvbnRleHQtPnNldFN0cm9rZVN0eWxlKFNvbGlkU3Ryb2tlKTsKICAgICBwYWlu
dEluZm8uY29udGV4dC0+c2V0U3Ryb2tlQ29sb3IobGVmdFNlcGFyYXRvckNvbG9yLCBDb2xvclNw
YWNlRGV2aWNlUkdCKTsKICAgICBwYWludEluZm8uY29udGV4dC0+ZHJhd0xpbmUoSW50UG9pbnQo
bGVmdEVkZ2VPZlNlcGFyYXRvciwgYm91bmRzLnkoKSksCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEludFBvaW50KGxlZnRFZGdlT2ZTZXBhcmF0b3IsIGJvdW5kcy5ib3R0b20oKSkp
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRQb2ludChsZWZ0RWRnZU9mU2Vw
YXJhdG9yLCBib3VuZHMubWF4WSgpKSk7CiAKICAgICBwYWludEluZm8uY29udGV4dC0+c2V0U3Ry
b2tlQ29sb3IocmlnaHRTZXBhcmF0b3JDb2xvciwgQ29sb3JTcGFjZURldmljZVJHQik7CiAgICAg
cGFpbnRJbmZvLmNvbnRleHQtPmRyYXdMaW5lKEludFBvaW50KGxlZnRFZGdlT2ZTZXBhcmF0b3Ig
KyBzZXBhcmF0b3JTcGFjZSwgYm91bmRzLnkoKSksCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEludFBvaW50KGxlZnRFZGdlT2ZTZXBhcmF0b3IgKyBzZXBhcmF0b3JTcGFjZSwgYm91
bmRzLmJvdHRvbSgpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEludFBvaW50
KGxlZnRFZGdlT2ZTZXBhcmF0b3IgKyBzZXBhcmF0b3JTcGFjZSwgYm91bmRzLm1heFkoKSkpOwog
CiAgICAgcGFpbnRJbmZvLmNvbnRleHQtPnJlc3RvcmUoKTsKICAgICByZXR1cm4gZmFsc2U7CkBA
IC0xMjkzLDkgKzEyOTMsOSBAQCBib29sIFJlbmRlclRoZW1lTWFjOjpwYWludFNsaWRlclRyYWNr
KFJlCiAgICAgUmV0YWluUHRyPENHRnVuY3Rpb25SZWY+IG1haW5GdW5jdGlvbihBZG9wdENGLCBD
R0Z1bmN0aW9uQ3JlYXRlKE5VTEwsIDEsIE5VTEwsIDQsIE5VTEwsICZtYWluQ2FsbGJhY2tzKSk7
CiAgICAgUmV0YWluUHRyPENHU2hhZGluZ1JlZj4gbWFpblNoYWRpbmc7CiAgICAgaWYgKG8tPnN0
eWxlKCktPmFwcGVhcmFuY2UoKSA9PSBTbGlkZXJWZXJ0aWNhbFBhcnQpCi0gICAgICAgIG1haW5T
aGFkaW5nLmFkb3B0Q0YoQ0dTaGFkaW5nQ3JlYXRlQXhpYWwoY3NwYWNlLCBDR1BvaW50TWFrZShi
b3VuZHMueCgpLCAgYm91bmRzLmJvdHRvbSgpKSwgQ0dQb2ludE1ha2UoYm91bmRzLnJpZ2h0KCks
IGJvdW5kcy5ib3R0b20oKSksIG1haW5GdW5jdGlvbi5nZXQoKSwgZmFsc2UsIGZhbHNlKSk7Cisg
ICAgICAgIG1haW5TaGFkaW5nLmFkb3B0Q0YoQ0dTaGFkaW5nQ3JlYXRlQXhpYWwoY3NwYWNlLCBD
R1BvaW50TWFrZShib3VuZHMueCgpLCAgYm91bmRzLm1heFkoKSksIENHUG9pbnRNYWtlKGJvdW5k
cy5tYXhYKCksIGJvdW5kcy5tYXhZKCkpLCBtYWluRnVuY3Rpb24uZ2V0KCksIGZhbHNlLCBmYWxz
ZSkpOwogICAgIGVsc2UKLSAgICAgICAgbWFpblNoYWRpbmcuYWRvcHRDRihDR1NoYWRpbmdDcmVh
dGVBeGlhbChjc3BhY2UsIENHUG9pbnRNYWtlKGJvdW5kcy54KCksICBib3VuZHMueSgpKSwgQ0dQ
b2ludE1ha2UoYm91bmRzLngoKSwgYm91bmRzLmJvdHRvbSgpKSwgbWFpbkZ1bmN0aW9uLmdldCgp
LCBmYWxzZSwgZmFsc2UpKTsKKyAgICAgICAgbWFpblNoYWRpbmcuYWRvcHRDRihDR1NoYWRpbmdD
cmVhdGVBeGlhbChjc3BhY2UsIENHUG9pbnRNYWtlKGJvdW5kcy54KCksICBib3VuZHMueSgpKSwg
Q0dQb2ludE1ha2UoYm91bmRzLngoKSwgYm91bmRzLm1heFkoKSksIG1haW5GdW5jdGlvbi5nZXQo
KSwgZmFsc2UsIGZhbHNlKSk7CiAKICAgICBJbnRTaXplIHJhZGl1cyh0cmFja1JhZGl1cywgdHJh
Y2tSYWRpdXMpOwogICAgIHBhaW50SW5mby5jb250ZXh0LT5hZGRSb3VuZGVkUmVjdENsaXAoUm91
bmRlZEludFJlY3QoYm91bmRzLCByYWRpdXMsIHJhZGl1cywgcmFkaXVzLCByYWRpdXMpKTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5jcHAJKHJldmlzaW9uIDc3MjYw
KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZXcuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zMDQsOSArMzA0LDkgQEAgdm9pZCBSZW5kZXJWaWV3Ojpjb21wdXRlUmVjdEZvclJl
cGFpbnQoUgogICAgICAgICAvLyBXZSBoYXZlIHRvIGZsaXAgYnkgaGFuZCBzaW5jZSB0aGUgdmll
dydzIGxvZ2ljYWwgaGVpZ2h0IGhhcyBub3QgYmVlbiBkZXRlcm1pbmVkLiAgV2UKICAgICAgICAg
Ly8gY2FuIHVzZSB0aGUgdmlld3BvcnQgd2lkdGggYW5kIGhlaWdodC4KICAgICAgICAgaWYgKHN0
eWxlKCktPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpCi0gICAgICAgICAgICByZWN0LnNldFko
dmlld0hlaWdodCgpIC0gcmVjdC5ib3R0b20oKSk7CisgICAgICAgICAgICByZWN0LnNldFkodmll
d0hlaWdodCgpIC0gcmVjdC5tYXhZKCkpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICByZWN0
LnNldFgodmlld1dpZHRoKCkgLSByZWN0LnJpZ2h0KCkpOworICAgICAgICAgICAgcmVjdC5zZXRY
KHZpZXdXaWR0aCgpIC0gcmVjdC5tYXhYKCkpOwogICAgIH0KIAogICAgIGlmIChmaXhlZCAmJiBt
X2ZyYW1lVmlldykKQEAgLTY2NCw3ICs2NjQsNyBAQCBpbnQgUmVuZGVyVmlldzo6ZG9jQm90dG9t
KCkgY29uc3QKICAgICBmbGlwRm9yV3JpdGluZ01vZGUob3ZlcmZsb3dSZWN0KTsKICAgICBpZiAo
aGFzVHJhbnNmb3JtKCkpCiAgICAgICAgIG92ZXJmbG93UmVjdCA9IGxheWVyKCktPmN1cnJlbnRU
cmFuc2Zvcm0oKS5tYXBSZWN0KG92ZXJmbG93UmVjdCk7Ci0gICAgcmV0dXJuIG92ZXJmbG93UmVj
dC5ib3R0b20oKTsKKyAgICByZXR1cm4gb3ZlcmZsb3dSZWN0Lm1heFkoKTsKIH0KIAogaW50IFJl
bmRlclZpZXc6OmRvY0xlZnQoKSBjb25zdApAQCAtNjgyLDcgKzY4Miw3IEBAIGludCBSZW5kZXJW
aWV3Ojpkb2NSaWdodCgpIGNvbnN0CiAgICAgZmxpcEZvcldyaXRpbmdNb2RlKG92ZXJmbG93UmVj
dCk7CiAgICAgaWYgKGhhc1RyYW5zZm9ybSgpKQogICAgICAgICBvdmVyZmxvd1JlY3QgPSBsYXll
cigpLT5jdXJyZW50VHJhbnNmb3JtKCkubWFwUmVjdChvdmVyZmxvd1JlY3QpOwotICAgIHJldHVy
biBvdmVyZmxvd1JlY3QucmlnaHQoKTsKKyAgICByZXR1cm4gb3ZlcmZsb3dSZWN0Lm1heFgoKTsK
IH0KIAogaW50IFJlbmRlclZpZXc6OnZpZXdIZWlnaHQoKSBjb25zdApJbmRleDogU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1Jvb3RJbmxpbmVCb3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9Sb290SW5saW5lQm94LmNwcAkocmV2aXNpb24gNzcyNjApCisrKyBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUm9vdElubGluZUJveC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTU0NCwxNCArNTQ0LDE0IEBAIEludFJlY3QgUm9vdElubGluZUJveDo6cGFkZGVkTGF5b3V0
T3ZlcmYKICAgICAKICAgICBpZiAoaXNIb3Jpem9udGFsKCkpIHsKICAgICAgICAgaWYgKGlzTGVm
dFRvUmlnaHREaXJlY3Rpb24oKSkKLSAgICAgICAgICAgIGxpbmVMYXlvdXRPdmVyZmxvdy5zaGlm
dFJpZ2h0RWRnZVRvKG1heChsaW5lTGF5b3V0T3ZlcmZsb3cucmlnaHQoKSwgbG9naWNhbFJpZ2h0
KCkgKyBlbmRQYWRkaW5nKSk7CisgICAgICAgICAgICBsaW5lTGF5b3V0T3ZlcmZsb3cuc2hpZnRN
YXhYRWRnZVRvKG1heChsaW5lTGF5b3V0T3ZlcmZsb3cubWF4WCgpLCBsb2dpY2FsUmlnaHQoKSAr
IGVuZFBhZGRpbmcpKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgbGluZUxheW91dE92ZXJm
bG93LnNoaWZ0TGVmdEVkZ2VUbyhtaW4obGluZUxheW91dE92ZXJmbG93LngoKSwgbG9naWNhbExl
ZnQoKSAtIGVuZFBhZGRpbmcpKTsKKyAgICAgICAgICAgIGxpbmVMYXlvdXRPdmVyZmxvdy5zaGlm
dE1pblhFZGdlVG8obWluKGxpbmVMYXlvdXRPdmVyZmxvdy54KCksIGxvZ2ljYWxMZWZ0KCkgLSBl
bmRQYWRkaW5nKSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgaWYgKGlzTGVmdFRvUmlnaHREaXJl
Y3Rpb24oKSkKLSAgICAgICAgICAgIGxpbmVMYXlvdXRPdmVyZmxvdy5zaGlmdEJvdHRvbUVkZ2VU
byhtYXgobGluZUxheW91dE92ZXJmbG93LmJvdHRvbSgpLCBsb2dpY2FsUmlnaHQoKSArIGVuZFBh
ZGRpbmcpKTsKKyAgICAgICAgICAgIGxpbmVMYXlvdXRPdmVyZmxvdy5zaGlmdE1heFlFZGdlVG8o
bWF4KGxpbmVMYXlvdXRPdmVyZmxvdy5tYXhZKCksIGxvZ2ljYWxSaWdodCgpICsgZW5kUGFkZGlu
ZykpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBsaW5lTGF5b3V0T3ZlcmZsb3cuc2hpZnRU
b3BFZGdlVG8obWluKGxpbmVMYXlvdXRPdmVyZmxvdy55KCksIGxvZ2ljYWxSaWdodCgpIC0gZW5k
UGFkZGluZykpOworICAgICAgICAgICAgbGluZUxheW91dE92ZXJmbG93LnNoaWZ0TWluWUVkZ2VU
byhtaW4obGluZUxheW91dE92ZXJmbG93LnkoKSwgbG9naWNhbFJpZ2h0KCkgLSBlbmRQYWRkaW5n
KSk7CiAgICAgfQogICAgIAogICAgIHJldHVybiBsaW5lTGF5b3V0T3ZlcmZsb3c7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0lubGluZVRleHQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHSW5saW5lVGV4
dC5jcHAJKHJldmlzaW9uIDc3MjYwKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9S
ZW5kZXJTVkdJbmxpbmVUZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAzLDEyICsxMDMsMTIg
QEAgSW50UmVjdCBSZW5kZXJTVkdJbmxpbmVUZXh0Ojpsb2NhbENhcmV0UgogICAgIC8vIFVzZSB0
aGUgZWRnZSBvZiB0aGUgc2VsZWN0aW9uIHJlY3QgdG8gZGV0ZXJtaW5lIHRoZSBjYXJldCByZWN0
LgogICAgIGlmIChzdGF0aWNfY2FzdDx1bnNpZ25lZD4oY2FyZXRPZmZzZXQpIDwgdGV4dEJveC0+
c3RhcnQoKSArIHRleHRCb3gtPmxlbigpKSB7CiAgICAgICAgIEludFJlY3QgcmVjdCA9IHRleHRC
b3gtPnNlbGVjdGlvblJlY3QoMCwgMCwgY2FyZXRPZmZzZXQsIGNhcmV0T2Zmc2V0ICsgMSk7Ci0g
ICAgICAgIGludCB4ID0gYm94LT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyByZWN0LngoKSA6
IHJlY3QucmlnaHQoKTsKKyAgICAgICAgaW50IHggPSBib3gtPmlzTGVmdFRvUmlnaHREaXJlY3Rp
b24oKSA/IHJlY3QueCgpIDogcmVjdC5tYXhYKCk7CiAgICAgICAgIHJldHVybiBJbnRSZWN0KHgs
IHJlY3QueSgpLCBjYXJldFdpZHRoLCByZWN0LmhlaWdodCgpKTsKICAgICB9CiAKICAgICBJbnRS
ZWN0IHJlY3QgPSB0ZXh0Qm94LT5zZWxlY3Rpb25SZWN0KDAsIDAsIGNhcmV0T2Zmc2V0IC0gMSwg
Y2FyZXRPZmZzZXQpOwotICAgIGludCB4ID0gYm94LT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkg
PyByZWN0LnJpZ2h0KCkgOiByZWN0LngoKTsKKyAgICBpbnQgeCA9IGJveC0+aXNMZWZ0VG9SaWdo
dERpcmVjdGlvbigpID8gcmVjdC5tYXhYKCkgOiByZWN0LngoKTsKICAgICByZXR1cm4gSW50UmVj
dCh4LCByZWN0LnkoKSwgY2FyZXRXaWR0aCwgcmVjdC5oZWlnaHQoKSk7CiB9CiAKSW5kZXg6IFNv
dXJjZS9XZWJLaXQyL1BsYXRmb3JtL1JlZ2lvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdDIvUGxhdGZvcm0vUmVnaW9uLmNwcAkocmV2aXNpb24gNzcyNjApCisrKyBTb3VyY2UvV2Vi
S2l0Mi9QbGF0Zm9ybS9SZWdpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Myw4ICs3Myw4IEBA
IFJlZ2lvbjo6U2hhcGU6OlNoYXBlKGNvbnN0IEludFJlY3QmIHJlY3QKIHsKICAgICBhcHBlbmRT
cGFuKHJlY3QueSgpKTsKICAgICBhcHBlbmRTZWdtZW50KHJlY3QueCgpKTsKLSAgICBhcHBlbmRT
ZWdtZW50KHJlY3QucmlnaHQoKSk7Ci0gICAgYXBwZW5kU3BhbihyZWN0LmJvdHRvbSgpKTsKKyAg
ICBhcHBlbmRTZWdtZW50KHJlY3QubWF4WCgpKTsKKyAgICBhcHBlbmRTcGFuKHJlY3QubWF4WSgp
KTsKIH0KIAogdm9pZCBSZWdpb246OlNoYXBlOjphcHBlbmRTcGFuKGludCB5KQpJbmRleDogU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0ZpbmRJbmRpY2F0b3IuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9GaW5kSW5kaWNhdG9yLmNwcAkocmV2aXNpb24gNzcyNjAp
CisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvRmluZEluZGljYXRvci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTE1Nyw3ICsxNTcsNyBAQCB2b2lkIEZpbmRJbmRpY2F0b3I6OmRyYXcoR3JhcGhp
Y3NDb250ZXh0CiAgICAgICAgIGdyYXBoaWNzQ29udGV4dC5zYXZlKCk7CiAgICAgICAgIEZsb2F0
UmVjdCBpbm5lclBhdGhSZWN0ID0gaW5mbGF0ZVJlY3QodGV4dFJlY3QsIGhvcml6b250YWxQYWRk
aW5nSW5zaWRlTGlnaHRCb3JkZXIsIHZlcnRpY2FsUGFkZGluZ0luc2lkZUxpZ2h0Qm9yZGVyKTsK
ICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LmNsaXAocGF0aFdpdGhSb3VuZGVkUmVjdChpbm5lclBh
dGhSZWN0LCBjb3JuZXJSYWRpdXMpKTsKLSAgICAgICAgUmVmUHRyPEdyYWRpZW50PiBncmFkaWVu
dCA9IEdyYWRpZW50OjpjcmVhdGUoRmxvYXRQb2ludChpbm5lclBhdGhSZWN0LngoKSwgaW5uZXJQ
YXRoUmVjdC55KCkpLCBGbG9hdFBvaW50KGlubmVyUGF0aFJlY3QueCgpLCBpbm5lclBhdGhSZWN0
LmJvdHRvbSgpKSk7CisgICAgICAgIFJlZlB0cjxHcmFkaWVudD4gZ3JhZGllbnQgPSBHcmFkaWVu
dDo6Y3JlYXRlKEZsb2F0UG9pbnQoaW5uZXJQYXRoUmVjdC54KCksIGlubmVyUGF0aFJlY3QueSgp
KSwgRmxvYXRQb2ludChpbm5lclBhdGhSZWN0LngoKSwgaW5uZXJQYXRoUmVjdC5tYXhZKCkpKTsK
ICAgICAgICAgZ3JhZGllbnQtPmFkZENvbG9yU3RvcCgwLCBncmFkaWVudExpZ2h0Q29sb3IoKSk7
CiAgICAgICAgIGdyYWRpZW50LT5hZGRDb2xvclN0b3AoMSwgZ3JhZGllbnREYXJrQ29sb3IoKSk7
CiAgICAgICAgIGdyYXBoaWNzQ29udGV4dC5zZXRGaWxsR3JhZGllbnQoZ3JhZGllbnQpOwpJbmRl
eDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvV0tQcmludGluZ1ZpZXcubW0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvV0tQcmludGluZ1Zp
ZXcubW0JKHJldmlzaW9uIDc3MjYwKQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9t
YWMvV0tQcmludGluZ1ZpZXcubW0JKHdvcmtpbmcgY29weSkKQEAgLTIzMyw4ICsyMzMsOCBAQCBz
dGF0aWMgdm9pZCBwYWdlRGlkQ29tcHV0ZVBhZ2VSZWN0cyhjb25zCiAKICAgICAgICAgY29uc3Qg
SW50UmVjdCYgbGFzdFByaW50aW5nUGFnZVJlY3QgPSB2aWV3LT5fcHJpbnRpbmdQYWdlUmVjdHNb
dmlldy0+X3ByaW50aW5nUGFnZVJlY3RzLnNpemUoKSAtIDFdOwogICAgICAgICBOU1JlY3QgbmV3
RnJhbWVTaXplID0gTlNNYWtlUmVjdCgwLCAwLCAKLSAgICAgICAgICAgIGNlaWwobGFzdFByaW50
aW5nUGFnZVJlY3QucmlnaHQoKSAqIHZpZXctPl90b3RhbFNjYWxlRmFjdG9yRm9yUHJpbnRpbmcp
LCAKLSAgICAgICAgICAgIGNlaWwobGFzdFByaW50aW5nUGFnZVJlY3QuYm90dG9tKCkgKiB2aWV3
LT5fdG90YWxTY2FsZUZhY3RvckZvclByaW50aW5nKSk7CisgICAgICAgICAgICBjZWlsKGxhc3RQ
cmludGluZ1BhZ2VSZWN0Lm1heFgoKSAqIHZpZXctPl90b3RhbFNjYWxlRmFjdG9yRm9yUHJpbnRp
bmcpLCAKKyAgICAgICAgICAgIGNlaWwobGFzdFByaW50aW5nUGFnZVJlY3QubWF4WSgpICogdmll
dy0+X3RvdGFsU2NhbGVGYWN0b3JGb3JQcmludGluZykpOwogICAgICAgICBMT0coVmlldywgIldL
UHJpbnRpbmdWaWV3IHNldHRpbmcgZnJhbWUgc2l6ZSB0byB4OiVnIHk6JWcgd2lkdGg6JWcgaGVp
Z2h0OiVnIiwgbmV3RnJhbWVTaXplLm9yaWdpbi54LCBuZXdGcmFtZVNpemUub3JpZ2luLnksIG5l
d0ZyYW1lU2l6ZS5zaXplLndpZHRoLCBuZXdGcmFtZVNpemUuc2l6ZS5oZWlnaHQpOwogICAgICAg
ICBbdmlldyBzZXRGcmFtZTpuZXdGcmFtZVNpemVdOwogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvbWFjL0NodW5rZWRVcGRhdGVEcmF3aW5nQXJlYVByb3h5TWFjLm1tCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvQ2h1bmtlZFVwZGF0ZURyYXdpbmdB
cmVhUHJveHlNYWMubW0JKHJldmlzaW9uIDc3MjYwKQorKysgU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL21hYy9DaHVua2VkVXBkYXRlRHJhd2luZ0FyZWFQcm94eU1hYy5tbQkod29ya2luZyBjb3B5
KQpAQCAtOTcsNyArOTcsNyBAQCB2b2lkIENodW5rZWRVcGRhdGVEcmF3aW5nQXJlYVByb3h5Ojpk
cmF3CiAKICAgICAvLyBGbGlwIHRoZSBkZXN0aW5hdGlvbi4KICAgICBDR0NvbnRleHRTY2FsZUNU
TShtX2JpdG1hcENvbnRleHQuZ2V0KCksIDEsIC0xKTsKLSAgICBDR0NvbnRleHRUcmFuc2xhdGVD
VE0obV9iaXRtYXBDb250ZXh0LmdldCgpLCAwLCAtKHVwZGF0ZUNodW5rUmVjdC55KCkgKyB1cGRh
dGVDaHVua1JlY3QuYm90dG9tKCkpKTsKKyAgICBDR0NvbnRleHRUcmFuc2xhdGVDVE0obV9iaXRt
YXBDb250ZXh0LmdldCgpLCAwLCAtKHVwZGF0ZUNodW5rUmVjdC55KCkgKyB1cGRhdGVDaHVua1Jl
Y3QubWF4WSgpKSk7CiAKICAgICBDR0NvbnRleHREcmF3SW1hZ2UobV9iaXRtYXBDb250ZXh0Lmdl
dCgpLCB1cGRhdGVDaHVua1JlY3QsIGltYWdlLmdldCgpKTsKIApJbmRleDogU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL05ldHNjYXBlUGx1Z2luLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvTmV0c2Nh
cGVQbHVnaW4uY3BwCShyZXZpc2lvbiA3NzI2MCkKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvUGx1Z2lucy9OZXRzY2FwZS9OZXRzY2FwZVBsdWdpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTM1Miw4ICszNTIsOCBAQCB2b2lkIE5ldHNjYXBlUGx1Z2luOjpjYWxsU2V0V2luZG93KCkKICAg
ICBtX25wV2luZG93LmhlaWdodCA9IG1fZnJhbWVSZWN0LmhlaWdodCgpOwogICAgIG1fbnBXaW5k
b3cuY2xpcFJlY3QudG9wID0gbV9jbGlwUmVjdC55KCk7CiAgICAgbV9ucFdpbmRvdy5jbGlwUmVj
dC5sZWZ0ID0gbV9jbGlwUmVjdC54KCk7Ci0gICAgbV9ucFdpbmRvdy5jbGlwUmVjdC5ib3R0b20g
PSBtX2NsaXBSZWN0LmJvdHRvbSgpOwotICAgIG1fbnBXaW5kb3cuY2xpcFJlY3QucmlnaHQgPSBt
X2NsaXBSZWN0LnJpZ2h0KCk7CisgICAgbV9ucFdpbmRvdy5jbGlwUmVjdC5ib3R0b20gPSBtX2Ns
aXBSZWN0Lm1heFkoKTsKKyAgICBtX25wV2luZG93LmNsaXBSZWN0LnJpZ2h0ID0gbV9jbGlwUmVj
dC5tYXhYKCk7CiAKICAgICBOUFBfU2V0V2luZG93KCZtX25wV2luZG93KTsKIH0KSW5kZXg6IFNv
dXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViSFRNTFZpZXcubW0KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJIVE1MVmlldy5tbQkocmV2aXNpb24gNzcyNjApCisr
KyBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkhUTUxWaWV3Lm1tCSh3b3JraW5nIGNvcHkp
CkBAIC0zMTIsNyArMzEyLDcgQEAgc3RhdGljIHZvaWQgc2V0TmVlZHNEaXNwbGF5SW5SZWN0KE5T
VmlldwogICAgIE5TUmVjdCBpbnZhbGlkUmVjdEluV2ViRnJhbWVWaWV3Q29vcmRpbmF0ZXMgPSBb
ZW5jbG9zaW5nV2ViRnJhbWVWaWV3IGNvbnZlcnRSZWN0OmludmFsaWRSZWN0IGZyb21WaWV3OnNl
bGZdOwogICAgIEludFJlY3QgaW52YWxpZFJlY3RJbkZyYW1lVmlld0Nvb3JkaW5hdGVzKGludmFs
aWRSZWN0SW5XZWJGcmFtZVZpZXdDb29yZGluYXRlcyk7CiAgICAgaWYgKCFbZW5jbG9zaW5nV2Vi
RnJhbWVWaWV3IGlzRmxpcHBlZF0pCi0gICAgICAgIGludmFsaWRSZWN0SW5GcmFtZVZpZXdDb29y
ZGluYXRlcy5zZXRZKGZyYW1lVmlldy0+ZnJhbWVSZWN0KCkuc2l6ZSgpLmhlaWdodCgpIC0gaW52
YWxpZFJlY3RJbkZyYW1lVmlld0Nvb3JkaW5hdGVzLmJvdHRvbSgpKTsKKyAgICAgICAgaW52YWxp
ZFJlY3RJbkZyYW1lVmlld0Nvb3JkaW5hdGVzLnNldFkoZnJhbWVWaWV3LT5mcmFtZVJlY3QoKS5z
aXplKCkuaGVpZ2h0KCkgLSBpbnZhbGlkUmVjdEluRnJhbWVWaWV3Q29vcmRpbmF0ZXMubWF4WSgp
KTsKIAogICAgIGZyYW1lVmlldy0+aW52YWxpZGF0ZVJlY3QoaW52YWxpZFJlY3RJbkZyYW1lVmll
d0Nvb3JkaW5hdGVzKTsKIH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>80807</attachid>
            <date>2011-02-01 12:49:24 -0800</date>
            <delta_ts>2011-02-01 12:54:53 -0800</delta_ts>
            <desc>Step 1: Convert most of WebCore and WebKit without getting rid of the methods yet.</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>108115</size>
            <attacher name="Dave Hyatt">hyatt</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9i
amVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nl
c3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcAkocmV2aXNpb24gNzcyNjApCisrKyBTb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yNTE5LDcgKzI1MTksNyBAQCBJbnRSZWN0IEFjY2Vzc2liaWxpdHlSZW5kZXJP
YmplY3Q6OmJvdW5kCiAgICAgb3VycmVjdC51bml0ZShyZWN0Mik7CiAgICAgCiAgICAgLy8gaWYg
dGhlIHJlY3RhbmdsZSBzcGFucyBsaW5lcyBhbmQgY29udGFpbnMgbXVsdGlwbGUgdGV4dCBjaGFy
cywgdXNlIHRoZSByYW5nZSdzIGJvdW5kaW5nIGJveCBpbnRlYWQKLSAgICBpZiAocmVjdDEuYm90
dG9tKCkgIT0gcmVjdDIuYm90dG9tKCkpIHsKKyAgICBpZiAocmVjdDEubWF4WSgpICE9IHJlY3Qy
Lm1heFkoKSkgewogICAgICAgICBSZWZQdHI8UmFuZ2U+IGRhdGFSYW5nZSA9IG1ha2VSYW5nZShy
YW5nZS5zdGFydCwgcmFuZ2UuZW5kKTsKICAgICAgICAgSW50UmVjdCBib3VuZGluZ0JveCA9IGRh
dGFSYW5nZS0+Ym91bmRpbmdCb3goKTsKICAgICAgICAgU3RyaW5nIHJhbmdlU3RyaW5nID0gcGxh
aW5UZXh0KGRhdGFSYW5nZS5nZXQoKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L21hYy9BY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlci5tbQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9BY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlci5t
bQkocmV2aXNpb24gNzcyNjApCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9B
Y2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlci5tbQkod29ya2luZyBjb3B5KQpAQCAtMTEyNSw3ICsx
MTI1LDcgQEAgLSAoTlNWYWx1ZSopcG9zaXRpb24KICAgICAgICAgcG9pbnQueSA9IHNjcmVlbkhl
aWdodCAtIChwb2ludC55ICsgcmVtb3RlUG9zaXRpb24ueSArIHJlY3QuaGVpZ2h0KCkgLSBzY3Jv
bGxQb3NpdGlvbi55KTsKICAgICB9IGVsc2UgewogICAgICAgICAvLyBUaGUgQ29jb2EgYWNjZXNz
aWJpbGl0eSBBUEkgd2FudHMgdGhlIGxvd2VyLWxlZnQgY29ybmVyLgotICAgICAgICBwb2ludCA9
IE5TTWFrZVBvaW50KHJlY3QueCgpLCByZWN0LmJvdHRvbSgpKTsKKyAgICAgICAgcG9pbnQgPSBO
U01ha2VQb2ludChyZWN0LngoKSwgcmVjdC5tYXhZKCkpOwogICAgICAgICAKICAgICAgICAgaWYg
KGZyYW1lVmlldykgewogICAgICAgICAgICAgTlNWaWV3KiB2aWV3ID0gZnJhbWVWaWV3LT5kb2N1
bWVudFZpZXcoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9DbGllbnRSZWN0LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0NsaWVudFJlY3QuaAkocmV2aXNpb24gNzcyNjAp
CisrKyBTb3VyY2UvV2ViQ29yZS9kb20vQ2xpZW50UmVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC00
Miw4ICs0Miw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgc3RhdGljIFBhc3NSZWZQ
dHI8Q2xpZW50UmVjdD4gY3JlYXRlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkgeyByZXR1cm4gYWRv
cHRSZWYobmV3IENsaWVudFJlY3QocmVjdCkpOyB9CiAKICAgICAgICAgZmxvYXQgdG9wKCkgY29u
c3QgeyByZXR1cm4gbV9yZWN0LnkoKTsgfQotICAgICAgICBmbG9hdCByaWdodCgpIGNvbnN0IHsg
cmV0dXJuIG1fcmVjdC5yaWdodCgpOyB9Ci0gICAgICAgIGZsb2F0IGJvdHRvbSgpIGNvbnN0IHsg
cmV0dXJuIG1fcmVjdC5ib3R0b20oKTsgfQorICAgICAgICBmbG9hdCByaWdodCgpIGNvbnN0IHsg
cmV0dXJuIG1fcmVjdC5tYXhYKCk7IH0KKyAgICAgICAgZmxvYXQgYm90dG9tKCkgY29uc3QgeyBy
ZXR1cm4gbV9yZWN0Lm1heFkoKTsgfQogICAgICAgICBmbG9hdCBsZWZ0KCkgY29uc3QgeyByZXR1
cm4gbV9yZWN0LngoKTsgfQogICAgICAgICBmbG9hdCB3aWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1f
cmVjdC53aWR0aCgpOyB9CiAgICAgICAgIGZsb2F0IGhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIG1f
cmVjdC5oZWlnaHQoKTsgfQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxl
bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxl
bWVudC5jcHAJKHJldmlzaW9uIDc3MjYwKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2Fu
dmFzRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0NCwxMCArMzQ0LDEwIEBAIFN0cmlu
ZyBIVE1MQ2FudmFzRWxlbWVudDo6dG9EYXRhVVJMKGNvbnMKIAogSW50UmVjdCBIVE1MQ2FudmFz
RWxlbWVudDo6Y29udmVydExvZ2ljYWxUb0RldmljZShjb25zdCBGbG9hdFJlY3QmIGxvZ2ljYWxS
ZWN0KSBjb25zdAogewotICAgIGZsb2F0IGxlZnQgPSBmbG9vcmYobG9naWNhbFJlY3QubGVmdCgp
ICogbV9wYWdlU2NhbGVGYWN0b3IpOwotICAgIGZsb2F0IHRvcCA9IGZsb29yZihsb2dpY2FsUmVj
dC50b3AoKSAqIG1fcGFnZVNjYWxlRmFjdG9yKTsKLSAgICBmbG9hdCByaWdodCA9IGNlaWxmKGxv
Z2ljYWxSZWN0LnJpZ2h0KCkgKiBtX3BhZ2VTY2FsZUZhY3Rvcik7Ci0gICAgZmxvYXQgYm90dG9t
ID0gY2VpbGYobG9naWNhbFJlY3QuYm90dG9tKCkgKiBtX3BhZ2VTY2FsZUZhY3Rvcik7CisgICAg
ZmxvYXQgbGVmdCA9IGZsb29yZihsb2dpY2FsUmVjdC54KCkgKiBtX3BhZ2VTY2FsZUZhY3Rvcik7
CisgICAgZmxvYXQgdG9wID0gZmxvb3JmKGxvZ2ljYWxSZWN0LnkoKSAqIG1fcGFnZVNjYWxlRmFj
dG9yKTsKKyAgICBmbG9hdCByaWdodCA9IGNlaWxmKGxvZ2ljYWxSZWN0Lm1heFgoKSAqIG1fcGFn
ZVNjYWxlRmFjdG9yKTsKKyAgICBmbG9hdCBib3R0b20gPSBjZWlsZihsb2dpY2FsUmVjdC5tYXhZ
KCkgKiBtX3BhZ2VTY2FsZUZhY3Rvcik7CiAgICAgCiAgICAgcmV0dXJuIEludFJlY3QoSW50UG9p
bnQobGVmdCwgdG9wKSwgY29udmVydFRvVmFsaWREZXZpY2VTaXplKHJpZ2h0IC0gbGVmdCwgYm90
dG9tIC0gdG9wKSk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwv
Y2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAJKHJldmlzaW9uIDc3MjYwKQorKysg
U291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTEwNSw4ICsxMTA1LDggQEAgc3RhdGljIEludFNpemUgc2l6ZShI
VE1MVmlkZW9FbGVtZW50KiB2aQogCiBzdGF0aWMgaW5saW5lIEZsb2F0UmVjdCBub3JtYWxpemVS
ZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKLSAgICByZXR1cm4gRmxvYXRSZWN0KG1pbihy
ZWN0LngoKSwgcmVjdC5yaWdodCgpKSwKLSAgICAgICAgbWluKHJlY3QueSgpLCByZWN0LmJvdHRv
bSgpKSwKKyAgICByZXR1cm4gRmxvYXRSZWN0KG1pbihyZWN0LngoKSwgcmVjdC5tYXhYKCkpLAor
ICAgICAgICBtaW4ocmVjdC55KCksIHJlY3QubWF4WSgpKSwKICAgICAgICAgbWF4KHJlY3Qud2lk
dGgoKSwgLXJlY3Qud2lkdGgoKSksCiAgICAgICAgIG1heChyZWN0LmhlaWdodCgpLCAtcmVjdC5o
ZWlnaHQoKSkpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckFn
ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
QWdlbnQuY3BwCShyZXZpc2lvbiA3NzI2MCkKKysrIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JBZ2VudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyNzQsNyArMTI3NCw3IEBAIHZv
aWQgSW5zcGVjdG9yQWdlbnQ6OmRyYXdFbGVtZW50VGl0bGUoR3IKICAgICBmb250LnVwZGF0ZSgw
KTsKIAogICAgIFRleHRSdW4gbm9kZVRpdGxlUnVuKG5vZGVUaXRsZSk7Ci0gICAgSW50UG9pbnQg
dGl0bGVCYXNlUG9pbnQgPSBib3VuZGluZ0JveC5ib3R0b21MZWZ0KCk7CisgICAgSW50UG9pbnQg
dGl0bGVCYXNlUG9pbnQgPSBJbnRQb2ludChib3VuZGluZ0JveC54KCksIGJvdW5kaW5nQm94Lm1h
eFkoKSAtIDEpOwogICAgIHRpdGxlQmFzZVBvaW50Lm1vdmUocmVjdEluZmxhdGVQeCwgcmVjdElu
ZmxhdGVQeCk7CiAgICAgSW50UmVjdCB0aXRsZVJlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KGZvbnQu
c2VsZWN0aW9uUmVjdEZvclRleHQobm9kZVRpdGxlUnVuLCB0aXRsZUJhc2VQb2ludCwgZm9udEhl
aWdodFB4KSk7CiAgICAgdGl0bGVSZWN0LmluZmxhdGUocmVjdEluZmxhdGVQeCk7CkBAIC0xMjg0
LDE5ICsxMjg0LDE5IEBAIHZvaWQgSW5zcGVjdG9yQWdlbnQ6OmRyYXdFbGVtZW50VGl0bGUoR3IK
ICAgICBpbnQgZHkgPSBib3JkZXJXaWR0aFB4OwogCiAgICAgLy8gSWYgdGhlIHRpcCBzdGlja3Mg
YmV5b25kIHRoZSByaWdodCBvZiBvdmVybGF5UmVjdCwgcmlnaHQtYWxpZ24gdGhlIHRpcCB3aXRo
IHRoZSBzYWlkIGJvdW5kYXJ5LgotICAgIGlmICh0aXRsZVJlY3QucmlnaHQoKSA+IG92ZXJsYXlS
ZWN0LnJpZ2h0KCkpCi0gICAgICAgIGR4ID0gb3ZlcmxheVJlY3QucmlnaHQoKSAtIHRpdGxlUmVj
dC5yaWdodCgpOworICAgIGlmICh0aXRsZVJlY3QubWF4WCgpID4gb3ZlcmxheVJlY3QubWF4WCgp
KQorICAgICAgICBkeCA9IG92ZXJsYXlSZWN0Lm1heFgoKSAtIHRpdGxlUmVjdC5tYXhYKCk7CiAK
ICAgICAvLyBJZiB0aGUgdGlwIHN0aWNrcyBiZXlvbmQgdGhlIGxlZnQgb2Ygb3ZlcmxheVJlY3Qs
IGxlZnQtYWxpZ24gdGhlIHRpcCB3aXRoIHRoZSBzYWlkIGJvdW5kYXJ5LgogICAgIGlmICh0aXRs
ZVJlY3QueCgpICsgZHggPCBvdmVybGF5UmVjdC54KCkpCiAgICAgICAgIGR4ID0gb3ZlcmxheVJl
Y3QueCgpIC0gdGl0bGVSZWN0LngoKSAtIGJvcmRlcldpZHRoUHg7CiAKICAgICAvLyBJZiB0aGUg
dGlwIHN0aWNrcyBiZXlvbmQgdGhlIGJvdHRvbSBvZiBvdmVybGF5UmVjdCwgc2hvdyB0aGUgdGlw
IGF0IHRvcCBvZiBib3VuZGluZyBib3guCi0gICAgaWYgKHRpdGxlUmVjdC5ib3R0b20oKSA+IG92
ZXJsYXlSZWN0LmJvdHRvbSgpKSB7Ci0gICAgICAgIGR5ID0gYm91bmRpbmdCb3gueSgpIC0gdGl0
bGVSZWN0LmJvdHRvbSgpIC0gYm9yZGVyV2lkdGhQeDsKKyAgICBpZiAodGl0bGVSZWN0Lm1heFko
KSA+IG92ZXJsYXlSZWN0Lm1heFkoKSkgeworICAgICAgICBkeSA9IGJvdW5kaW5nQm94LnkoKSAt
IHRpdGxlUmVjdC5tYXhZKCkgLSBib3JkZXJXaWR0aFB4OwogICAgICAgICAvLyBJZiB0aGUgdGlw
IHN0aWxsIHN0aWNrcyBiZXlvbmQgdGhlIGJvdHRvbSBvZiBvdmVybGF5UmVjdCwgYm90dG9tLWFs
aWduIHRoZSB0aXAgd2l0aCB0aGUgc2FpZCBib3VuZGFyeS4KLSAgICAgICAgaWYgKHRpdGxlUmVj
dC5ib3R0b20oKSArIGR5ID4gb3ZlcmxheVJlY3QuYm90dG9tKCkpCi0gICAgICAgICAgICBkeSA9
IG92ZXJsYXlSZWN0LmJvdHRvbSgpIC0gdGl0bGVSZWN0LmJvdHRvbSgpOworICAgICAgICBpZiAo
dGl0bGVSZWN0Lm1heFkoKSArIGR5ID4gb3ZlcmxheVJlY3QubWF4WSgpKQorICAgICAgICAgICAg
ZHkgPSBvdmVybGF5UmVjdC5tYXhZKCkgLSB0aXRsZVJlY3QubWF4WSgpOwogICAgIH0KIAogICAg
IC8vIElmIHRoZSB0aXAgc3RpY2tzIGJleW9uZCB0aGUgdG9wIG9mIG92ZXJsYXlSZWN0LCBzaG93
IHRoZSB0aXAgYXQgdG9wIG9mIG92ZXJsYXlSZWN0LgpJbmRleDogU291cmNlL1dlYkNvcmUvcGFn
ZS9ET01XaW5kb3cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2lu
ZG93LmNwcAkocmV2aXNpb24gNzcyNjApCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRv
dy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0Miw4ICszNDIsOCBAQCB2b2lkIERPTVdpbmRvdzo6
YWRqdXN0V2luZG93UmVjdChjb25zdCBGCiAgICAgd2luZG93LnNldEhlaWdodChtaW4obWF4KDEw
MC4wZiwgd2luZG93LmhlaWdodCgpKSwgc2NyZWVuLmhlaWdodCgpKSk7CiAgICAgCiAgICAgLy8g
Q29uc3RyYWluIHRoZSB3aW5kb3cgcG9zaXRpb24gdG8gdGhlIHNjcmVlbi4KLSAgICB3aW5kb3cu
c2V0WChtYXgoc2NyZWVuLngoKSwgbWluKHdpbmRvdy54KCksIHNjcmVlbi5yaWdodCgpIC0gd2lu
ZG93LndpZHRoKCkpKSk7Ci0gICAgd2luZG93LnNldFkobWF4KHNjcmVlbi55KCksIG1pbih3aW5k
b3cueSgpLCBzY3JlZW4uYm90dG9tKCkgLSB3aW5kb3cuaGVpZ2h0KCkpKSk7CisgICAgd2luZG93
LnNldFgobWF4KHNjcmVlbi54KCksIG1pbih3aW5kb3cueCgpLCBzY3JlZW4ubWF4WCgpIC0gd2lu
ZG93LndpZHRoKCkpKSk7CisgICAgd2luZG93LnNldFkobWF4KHNjcmVlbi55KCksIG1pbih3aW5k
b3cueSgpLCBzY3JlZW4ubWF4WSgpIC0gd2luZG93LmhlaWdodCgpKSkpOwogfQogCiAvLyBGSVhN
RTogV2UgY2FuIHJlbW92ZSB0aGlzIGZ1bmN0aW9uIG9uY2UgVjggc2hvd01vZGFsRGlhbG9nIGlz
IGNoYW5nZWQgdG8gdXNlIERPTVdpbmRvdy4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvRHJh
Z0NvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRHJhZ0Nv
bnRyb2xsZXIuY3BwCShyZXZpc2lvbiA3NzI2MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRHJh
Z0NvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NDQsOSArNjQ0LDkgQEAgc3RhdGlj
IEludFBvaW50IGRyYWdMb2NGb3JESFRNTERyYWcoY29ucwogc3RhdGljIEludFBvaW50IGRyYWdM
b2NGb3JTZWxlY3Rpb25EcmFnKEZyYW1lKiBzcmMpCiB7CiAgICAgSW50UmVjdCBkcmFnZ2luZ1Jl
Y3QgPSBlbmNsb3NpbmdJbnRSZWN0KHNyYy0+c2VsZWN0aW9uKCktPmJvdW5kcygpKTsKLSAgICBp
bnQgeHBvcyA9IGRyYWdnaW5nUmVjdC5yaWdodCgpOworICAgIGludCB4cG9zID0gZHJhZ2dpbmdS
ZWN0Lm1heFgoKTsKICAgICB4cG9zID0gZHJhZ2dpbmdSZWN0LngoKSA8IHhwb3MgPyBkcmFnZ2lu
Z1JlY3QueCgpIDogeHBvczsKLSAgICBpbnQgeXBvcyA9IGRyYWdnaW5nUmVjdC5ib3R0b20oKTsK
KyAgICBpbnQgeXBvcyA9IGRyYWdnaW5nUmVjdC5tYXhZKCk7CiAjaWYgUExBVEZPUk0oTUFDKQog
ICAgIC8vIERlYWwgd2l0aCBmbGlwcGVkIGNvb3JkaW5hdGVzIG9uIE1hYwogICAgIHlwb3MgPSBk
cmFnZ2luZ1JlY3QueSgpID4geXBvcyA/IGRyYWdnaW5nUmVjdC55KCkgOiB5cG9zOwpJbmRleDog
U291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAkocmV2aXNpb24gNzcyNjApCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxMTEs
MTIgKzIxMTEsMTIgQEAgYm9vbCBFdmVudEhhbmRsZXI6OnNlbmRDb250ZXh0TWVudUV2ZW50Rgog
ICAgICAgICBSZWZQdHI8UmFuZ2U+IHNlbGVjdGlvbiA9IHNlbGVjdGlvbkNvbnRyb2xsZXItPnRv
Tm9ybWFsaXplZFJhbmdlKCk7CiAgICAgICAgIEludFJlY3QgZmlyc3RSZWN0ID0gbV9mcmFtZS0+
ZWRpdG9yKCktPmZpcnN0UmVjdEZvclJhbmdlKHNlbGVjdGlvbi5nZXQoKSk7CiAKLSAgICAgICAg
aW50IHggPSByaWdodEFsaWduZWQgPyBmaXJzdFJlY3QucmlnaHQoKSA6IGZpcnN0UmVjdC54KCk7
Ci0gICAgICAgIGxvY2F0aW9uID0gSW50UG9pbnQoeCwgZmlyc3RSZWN0LmJvdHRvbSgpKTsKKyAg
ICAgICAgaW50IHggPSByaWdodEFsaWduZWQgPyBmaXJzdFJlY3QubWF4WCgpIDogZmlyc3RSZWN0
LngoKTsKKyAgICAgICAgbG9jYXRpb24gPSBJbnRQb2ludCh4LCBmaXJzdFJlY3QubWF4WSgpKTsK
ICAgICB9IGVsc2UgaWYgKGZvY3VzZWROb2RlKSB7CiAgICAgICAgIFJlbmRlckJveE1vZGVsT2Jq
ZWN0KiBib3ggPSBmb2N1c2VkTm9kZS0+cmVuZGVyQm94TW9kZWxPYmplY3QoKTsKICAgICAgICAg
SW50UmVjdCBjbGlwcGVkUmVjdCA9IGJveC0+YWJzb2x1dGVDbGlwcGVkT3ZlcmZsb3dSZWN0KCk7
Ci0gICAgICAgIGxvY2F0aW9uID0gY2xpcHBlZFJlY3QuYm90dG9tTGVmdCgpOworICAgICAgICBs
b2NhdGlvbiA9IEludFBvaW50KGNsaXBwZWRSZWN0LngoKSwgY2xpcHBlZFJlY3QubWF4WSgpIC0g
MSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgbG9jYXRpb24gPSBJbnRQb2ludCgKICAgICAgICAg
ICAgIHJpZ2h0QWxpZ25lZCA/IHZpZXctPmNvbnRlbnRzV2lkdGgoKSAtIGtDb250ZXh0TWVudU1h
cmdpbiA6IGtDb250ZXh0TWVudU1hcmdpbiwKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvUHJp
bnRDb250ZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL1ByaW50Q29u
dGV4dC5jcHAJKHJldmlzaW9uIDc3MjYwKQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9QcmludENv
bnRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzUsMjQgKzEzNSwyNCBAQCB2b2lkIFByaW50
Q29udGV4dDo6Y29tcHV0ZVBhZ2VSZWN0c1dpdGhQCiAgICAgaW50IGJsb2NrRGlyZWN0aW9uRW5k
OwogICAgIGlmIChpc0hvcml6b250YWwpIHsKICAgICAgICAgaWYgKHZpZXctPnN0eWxlKCktPmlz
RmxpcHBlZEJsb2Nrc1dyaXRpbmdNb2RlKCkpIHsKLSAgICAgICAgICAgIGJsb2NrRGlyZWN0aW9u
U3RhcnQgPSBkb2NSZWN0LmJvdHRvbSgpOworICAgICAgICAgICAgYmxvY2tEaXJlY3Rpb25TdGFy
dCA9IGRvY1JlY3QubWF4WSgpOwogICAgICAgICAgICAgYmxvY2tEaXJlY3Rpb25FbmQgPSBkb2NS
ZWN0LnkoKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGJsb2NrRGlyZWN0aW9uU3Rh
cnQgPSBkb2NSZWN0LnkoKTsKLSAgICAgICAgICAgIGJsb2NrRGlyZWN0aW9uRW5kID0gZG9jUmVj
dC5ib3R0b20oKTsKKyAgICAgICAgICAgIGJsb2NrRGlyZWN0aW9uRW5kID0gZG9jUmVjdC5tYXhZ
KCk7CiAgICAgICAgIH0KLSAgICAgICAgaW5saW5lRGlyZWN0aW9uU3RhcnQgPSB2aWV3LT5zdHls
ZSgpLT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyBkb2NSZWN0LngoKSA6IGRvY1JlY3Qucmln
aHQoKTsKLSAgICAgICAgaW5saW5lRGlyZWN0aW9uRW5kID0gdmlldy0+c3R5bGUoKS0+aXNMZWZ0
VG9SaWdodERpcmVjdGlvbigpID8gZG9jUmVjdC5yaWdodCgpIDogZG9jUmVjdC54KCk7CisgICAg
ICAgIGlubGluZURpcmVjdGlvblN0YXJ0ID0gdmlldy0+c3R5bGUoKS0+aXNMZWZ0VG9SaWdodERp
cmVjdGlvbigpID8gZG9jUmVjdC54KCkgOiBkb2NSZWN0Lm1heFgoKTsKKyAgICAgICAgaW5saW5l
RGlyZWN0aW9uRW5kID0gdmlldy0+c3R5bGUoKS0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpID8g
ZG9jUmVjdC5tYXhYKCkgOiBkb2NSZWN0LngoKTsKICAgICB9IGVsc2UgewogICAgICAgICBpZiAo
dmlldy0+c3R5bGUoKS0+aXNGbGlwcGVkQmxvY2tzV3JpdGluZ01vZGUoKSkgewotICAgICAgICAg
ICAgYmxvY2tEaXJlY3Rpb25TdGFydCA9IGRvY1JlY3QucmlnaHQoKTsKKyAgICAgICAgICAgIGJs
b2NrRGlyZWN0aW9uU3RhcnQgPSBkb2NSZWN0Lm1heFgoKTsKICAgICAgICAgICAgIGJsb2NrRGly
ZWN0aW9uRW5kID0gZG9jUmVjdC54KCk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBi
bG9ja0RpcmVjdGlvblN0YXJ0ID0gZG9jUmVjdC54KCk7Ci0gICAgICAgICAgICBibG9ja0RpcmVj
dGlvbkVuZCA9IGRvY1JlY3QucmlnaHQoKTsKKyAgICAgICAgICAgIGJsb2NrRGlyZWN0aW9uRW5k
ID0gZG9jUmVjdC5tYXhYKCk7CiAgICAgICAgIH0KLSAgICAgICAgaW5saW5lRGlyZWN0aW9uU3Rh
cnQgPSB2aWV3LT5zdHlsZSgpLT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyBkb2NSZWN0Lnko
KSA6IGRvY1JlY3QuYm90dG9tKCk7Ci0gICAgICAgIGlubGluZURpcmVjdGlvbkVuZCA9IHZpZXct
PnN0eWxlKCktPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/IGRvY1JlY3QuYm90dG9tKCkgOiBk
b2NSZWN0LnkoKTsKKyAgICAgICAgaW5saW5lRGlyZWN0aW9uU3RhcnQgPSB2aWV3LT5zdHlsZSgp
LT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyBkb2NSZWN0LnkoKSA6IGRvY1JlY3QubWF4WSgp
OworICAgICAgICBpbmxpbmVEaXJlY3Rpb25FbmQgPSB2aWV3LT5zdHlsZSgpLT5pc0xlZnRUb1Jp
Z2h0RGlyZWN0aW9uKCkgPyBkb2NSZWN0Lm1heFkoKSA6IGRvY1JlY3QueSgpOwogICAgIH0KIAog
ICAgIHVuc2lnbmVkIHBhZ2VDb3VudCA9IGNlaWxmKChmbG9hdClkb2NMb2dpY2FsSGVpZ2h0IC8g
cGFnZUxvZ2ljYWxIZWlnaHQpOwpAQCAtMjc0LDcgKzI3NCw3IEBAIGludCBQcmludENvbnRleHQ6
OnBhZ2VOdW1iZXJGb3JFbGVtZW50KEUKICAgICBzaXplX3QgcGFnZU51bWJlciA9IDA7CiAgICAg
Zm9yICg7IHBhZ2VOdW1iZXIgPCBwcmludENvbnRleHQucGFnZUNvdW50KCk7IHBhZ2VOdW1iZXIr
KykgewogICAgICAgICBjb25zdCBJbnRSZWN0JiBwYWdlID0gcHJpbnRDb250ZXh0LnBhZ2VSZWN0
KHBhZ2VOdW1iZXIpOwotICAgICAgICBpZiAocGFnZS54KCkgPD0gbGVmdCAmJiBsZWZ0IDwgcGFn
ZS5yaWdodCgpICYmIHBhZ2UueSgpIDw9IHRvcCAmJiB0b3AgPCBwYWdlLmJvdHRvbSgpKQorICAg
ICAgICBpZiAocGFnZS54KCkgPD0gbGVmdCAmJiBsZWZ0IDwgcGFnZS5tYXhYKCkgJiYgcGFnZS55
KCkgPD0gdG9wICYmIHRvcCA8IHBhZ2UubWF4WSgpKQogICAgICAgICAgICAgcmV0dXJuIHBhZ2VO
dW1iZXI7CiAgICAgfQogICAgIHJldHVybiAtMTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2Uv
U3BhdGlhbE5hdmlnYXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2Uv
U3BhdGlhbE5hdmlnYXRpb24uY3BwCShyZXZpc2lvbiA3NzI2MCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BhZ2UvU3BhdGlhbE5hdmlnYXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjcsNyArMTI3
LDcgQEAgc3RhdGljIGlubGluZSBpbnQgbWlkZGxlKEZvY3VzRGlyZWN0aW9uIAogCiBzdGF0aWMg
aW5saW5lIGludCBlbmQoRm9jdXNEaXJlY3Rpb24gZGlyZWN0aW9uLCBjb25zdCBJbnRSZWN0JiBy
ZWN0KQogewotICAgIHJldHVybiBpc0hvcml6b250YWxNb3ZlKGRpcmVjdGlvbikgPyByZWN0LmJv
dHRvbSgpIDogcmVjdC5yaWdodCgpOworICAgIHJldHVybiBpc0hvcml6b250YWxNb3ZlKGRpcmVj
dGlvbikgPyByZWN0Lm1heFkoKSA6IHJlY3QubWF4WCgpOwogfQogCiAvLyBUaGlzIG1ldGhvZCBj
aGVja3MgaWYgcmVjdHMgfGF8IGFuZCB8YnwgYXJlIGZ1bGx5IGFsaWduZWQgZWl0aGVyIHZlcnRp
Y2FsbHkgb3IKQEAgLTE0NCwxMSArMTQ0LDExIEBAIHN0YXRpYyBib29sIGFyZVJlY3RzRnVsbHlB
bGlnbmVkKEZvY3VzRGkKICAgICBzd2l0Y2ggKGRpcmVjdGlvbikgewogICAgIGNhc2UgRm9jdXNE
aXJlY3Rpb25MZWZ0OgogICAgICAgICBhU3RhcnQgPSBhLngoKTsKLSAgICAgICAgYkVuZCA9IGIu
cmlnaHQoKTsKKyAgICAgICAgYkVuZCA9IGIubWF4WCgpOwogICAgICAgICBicmVhazsKICAgICBj
YXNlIEZvY3VzRGlyZWN0aW9uUmlnaHQ6CiAgICAgICAgIGFTdGFydCA9IGIueCgpOwotICAgICAg
ICBiRW5kID0gYS5yaWdodCgpOworICAgICAgICBiRW5kID0gYS5tYXhYKCk7CiAgICAgICAgIGJy
ZWFrOwogICAgIGNhc2UgRm9jdXNEaXJlY3Rpb25VcDoKICAgICAgICAgYVN0YXJ0ID0gYS55KCk7
CkBAIC0yNDUsMTMgKzI0NSwxMyBAQCBzdGF0aWMgYm9vbCBhcmVSZWN0c01vcmVUaGFuRnVsbFNj
cmVlbkFwCiAKICAgICBzd2l0Y2ggKGRpcmVjdGlvbikgewogICAgIGNhc2UgRm9jdXNEaXJlY3Rp
b25MZWZ0OgotICAgICAgICByZXR1cm4gY3VyUmVjdC54KCkgLSB0YXJnZXRSZWN0LnJpZ2h0KCkg
PiB2aWV3U2l6ZS53aWR0aCgpOworICAgICAgICByZXR1cm4gY3VyUmVjdC54KCkgLSB0YXJnZXRS
ZWN0Lm1heFgoKSA+IHZpZXdTaXplLndpZHRoKCk7CiAgICAgY2FzZSBGb2N1c0RpcmVjdGlvblJp
Z2h0OgotICAgICAgICByZXR1cm4gdGFyZ2V0UmVjdC54KCkgLSBjdXJSZWN0LnJpZ2h0KCkgPiB2
aWV3U2l6ZS53aWR0aCgpOworICAgICAgICByZXR1cm4gdGFyZ2V0UmVjdC54KCkgLSBjdXJSZWN0
Lm1heFgoKSA+IHZpZXdTaXplLndpZHRoKCk7CiAgICAgY2FzZSBGb2N1c0RpcmVjdGlvblVwOgot
ICAgICAgICByZXR1cm4gY3VyUmVjdC55KCkgLSB0YXJnZXRSZWN0LmJvdHRvbSgpID4gdmlld1Np
emUuaGVpZ2h0KCk7CisgICAgICAgIHJldHVybiBjdXJSZWN0LnkoKSAtIHRhcmdldFJlY3QubWF4
WSgpID4gdmlld1NpemUuaGVpZ2h0KCk7CiAgICAgY2FzZSBGb2N1c0RpcmVjdGlvbkRvd246Ci0g
ICAgICAgIHJldHVybiB0YXJnZXRSZWN0LnkoKSAtIGN1clJlY3QuYm90dG9tKCkgPiB2aWV3U2l6
ZS5oZWlnaHQoKTsKKyAgICAgICAgcmV0dXJuIHRhcmdldFJlY3QueSgpIC0gY3VyUmVjdC5tYXhZ
KCkgPiB2aWV3U2l6ZS5oZWlnaHQoKTsKICAgICBkZWZhdWx0OgogICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0yNjEsMjYgKzI2MSwyNiBAQCBz
dGF0aWMgYm9vbCBhcmVSZWN0c01vcmVUaGFuRnVsbFNjcmVlbkFwCiAvLyBSZXR1cm4gdHJ1ZSBp
ZiByZWN0IHxhfCBpcyBiZWxvdyB8YnwuIEZhbHNlIG90aGVyd2lzZS4KIHN0YXRpYyBpbmxpbmUg
Ym9vbCBiZWxvdyhjb25zdCBJbnRSZWN0JiBhLCBjb25zdCBJbnRSZWN0JiBiKQogewotICAgIHJl
dHVybiBhLnkoKSA+IGIuYm90dG9tKCk7CisgICAgcmV0dXJuIGEueSgpID4gYi5tYXhZKCk7CiB9
CiAKIC8vIFJldHVybiB0cnVlIGlmIHJlY3QgfGF8IGlzIG9uIHRoZSByaWdodCBvZiB8YnwuIEZh
bHNlIG90aGVyd2lzZS4KIHN0YXRpYyBpbmxpbmUgYm9vbCByaWdodE9mKGNvbnN0IEludFJlY3Qm
IGEsIGNvbnN0IEludFJlY3QmIGIpCiB7Ci0gICAgcmV0dXJuIGEueCgpID4gYi5yaWdodCgpOwor
ICAgIHJldHVybiBhLngoKSA+IGIubWF4WCgpOwogfQogCiBzdGF0aWMgYm9vbCBpc1JlY3RJbkRp
cmVjdGlvbihGb2N1c0RpcmVjdGlvbiBkaXJlY3Rpb24sIGNvbnN0IEludFJlY3QmIGN1clJlY3Qs
IGNvbnN0IEludFJlY3QmIHRhcmdldFJlY3QpCiB7CiAgICAgc3dpdGNoIChkaXJlY3Rpb24pIHsK
ICAgICBjYXNlIEZvY3VzRGlyZWN0aW9uTGVmdDoKLSAgICAgICAgcmV0dXJuIHRhcmdldFJlY3Qu
cmlnaHQoKSA8PSBjdXJSZWN0LngoKTsKKyAgICAgICAgcmV0dXJuIHRhcmdldFJlY3QubWF4WCgp
IDw9IGN1clJlY3QueCgpOwogICAgIGNhc2UgRm9jdXNEaXJlY3Rpb25SaWdodDoKLSAgICAgICAg
cmV0dXJuIHRhcmdldFJlY3QueCgpID49IGN1clJlY3QucmlnaHQoKTsKKyAgICAgICAgcmV0dXJu
IHRhcmdldFJlY3QueCgpID49IGN1clJlY3QubWF4WCgpOwogICAgIGNhc2UgRm9jdXNEaXJlY3Rp
b25VcDoKLSAgICAgICAgcmV0dXJuIHRhcmdldFJlY3QuYm90dG9tKCkgPD0gY3VyUmVjdC55KCk7
CisgICAgICAgIHJldHVybiB0YXJnZXRSZWN0Lm1heFkoKSA8PSBjdXJSZWN0LnkoKTsKICAgICBj
YXNlIEZvY3VzRGlyZWN0aW9uRG93bjoKLSAgICAgICAgcmV0dXJuIHRhcmdldFJlY3QueSgpID49
IGN1clJlY3QuYm90dG9tKCk7CisgICAgICAgIHJldHVybiB0YXJnZXRSZWN0LnkoKSA+PSBjdXJS
ZWN0Lm1heFkoKTsKICAgICBkZWZhdWx0OgogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNTQ0LDE4ICs1NDQsMTggQEAgdm9pZCBlbnRyeUFu
ZEV4aXRQb2ludHNGb3JEaXJlY3Rpb24oRm9jdQogICAgIHN3aXRjaCAoZGlyZWN0aW9uKSB7CiAg
ICAgY2FzZSBGb2N1c0RpcmVjdGlvbkxlZnQ6CiAgICAgICAgIGV4aXRQb2ludC5zZXRYKHN0YXJ0
aW5nUmVjdC54KCkpOwotICAgICAgICBlbnRyeVBvaW50LnNldFgocG90ZW50aWFsUmVjdC5yaWdo
dCgpKTsKKyAgICAgICAgZW50cnlQb2ludC5zZXRYKHBvdGVudGlhbFJlY3QubWF4WCgpKTsKICAg
ICAgICAgYnJlYWs7CiAgICAgY2FzZSBGb2N1c0RpcmVjdGlvblVwOgogICAgICAgICBleGl0UG9p
bnQuc2V0WShzdGFydGluZ1JlY3QueSgpKTsKLSAgICAgICAgZW50cnlQb2ludC5zZXRZKHBvdGVu
dGlhbFJlY3QuYm90dG9tKCkpOworICAgICAgICBlbnRyeVBvaW50LnNldFkocG90ZW50aWFsUmVj
dC5tYXhZKCkpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEZvY3VzRGlyZWN0aW9uUmlnaHQ6
Ci0gICAgICAgIGV4aXRQb2ludC5zZXRYKHN0YXJ0aW5nUmVjdC5yaWdodCgpKTsKKyAgICAgICAg
ZXhpdFBvaW50LnNldFgoc3RhcnRpbmdSZWN0Lm1heFgoKSk7CiAgICAgICAgIGVudHJ5UG9pbnQu
c2V0WChwb3RlbnRpYWxSZWN0LngoKSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgRm9jdXNE
aXJlY3Rpb25Eb3duOgotICAgICAgICBleGl0UG9pbnQuc2V0WShzdGFydGluZ1JlY3QuYm90dG9t
KCkpOworICAgICAgICBleGl0UG9pbnQuc2V0WShzdGFydGluZ1JlY3QubWF4WSgpKTsKICAgICAg
ICAgZW50cnlQb2ludC5zZXRZKHBvdGVudGlhbFJlY3QueSgpKTsKICAgICAgICAgYnJlYWs7CiAg
ICAgZGVmYXVsdDoKQEAgLTU2Nyw5ICs1NjcsOSBAQCB2b2lkIGVudHJ5QW5kRXhpdFBvaW50c0Zv
ckRpcmVjdGlvbihGb2N1CiAgICAgY2FzZSBGb2N1c0RpcmVjdGlvblJpZ2h0OgogICAgICAgICBp
ZiAoYmVsb3coc3RhcnRpbmdSZWN0LCBwb3RlbnRpYWxSZWN0KSkgewogICAgICAgICAgICAgZXhp
dFBvaW50LnNldFkoc3RhcnRpbmdSZWN0LnkoKSk7Ci0gICAgICAgICAgICBlbnRyeVBvaW50LnNl
dFkocG90ZW50aWFsUmVjdC5ib3R0b20oKSk7CisgICAgICAgICAgICBlbnRyeVBvaW50LnNldFko
cG90ZW50aWFsUmVjdC5tYXhZKCkpOwogICAgICAgICB9IGVsc2UgaWYgKGJlbG93KHBvdGVudGlh
bFJlY3QsIHN0YXJ0aW5nUmVjdCkpIHsKLSAgICAgICAgICAgIGV4aXRQb2ludC5zZXRZKHN0YXJ0
aW5nUmVjdC5ib3R0b20oKSk7CisgICAgICAgICAgICBleGl0UG9pbnQuc2V0WShzdGFydGluZ1Jl
Y3QubWF4WSgpKTsKICAgICAgICAgICAgIGVudHJ5UG9pbnQuc2V0WShwb3RlbnRpYWxSZWN0Lnko
KSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBleGl0UG9pbnQuc2V0WShtYXgoc3Rh
cnRpbmdSZWN0LnkoKSwgcG90ZW50aWFsUmVjdC55KCkpKTsKQEAgLTU4MCw5ICs1ODAsOSBAQCB2
b2lkIGVudHJ5QW5kRXhpdFBvaW50c0ZvckRpcmVjdGlvbihGb2N1CiAgICAgY2FzZSBGb2N1c0Rp
cmVjdGlvbkRvd246CiAgICAgICAgIGlmIChyaWdodE9mKHN0YXJ0aW5nUmVjdCwgcG90ZW50aWFs
UmVjdCkpIHsKICAgICAgICAgICAgIGV4aXRQb2ludC5zZXRYKHN0YXJ0aW5nUmVjdC54KCkpOwot
ICAgICAgICAgICAgZW50cnlQb2ludC5zZXRYKHBvdGVudGlhbFJlY3QucmlnaHQoKSk7CisgICAg
ICAgICAgICBlbnRyeVBvaW50LnNldFgocG90ZW50aWFsUmVjdC5tYXhYKCkpOwogICAgICAgICB9
IGVsc2UgaWYgKHJpZ2h0T2YocG90ZW50aWFsUmVjdCwgc3RhcnRpbmdSZWN0KSkgewotICAgICAg
ICAgICAgZXhpdFBvaW50LnNldFgoc3RhcnRpbmdSZWN0LnJpZ2h0KCkpOworICAgICAgICAgICAg
ZXhpdFBvaW50LnNldFgoc3RhcnRpbmdSZWN0Lm1heFgoKSk7CiAgICAgICAgICAgICBlbnRyeVBv
aW50LnNldFgocG90ZW50aWFsUmVjdC54KCkpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAg
ICAgZXhpdFBvaW50LnNldFgobWF4KHN0YXJ0aW5nUmVjdC54KCksIHBvdGVudGlhbFJlY3QueCgp
KSk7CkBAIC02NzUsMTEgKzY3NSwxMSBAQCBJbnRSZWN0IHZpcnR1YWxSZWN0Rm9yRGlyZWN0aW9u
KEZvY3VzRGlyCiAgICAgSW50UmVjdCB2aXJ0dWFsU3RhcnRpbmdSZWN0ID0gc3RhcnRpbmdSZWN0
OwogICAgIHN3aXRjaCAoZGlyZWN0aW9uKSB7CiAgICAgY2FzZSBGb2N1c0RpcmVjdGlvbkxlZnQ6
Ci0gICAgICAgIHZpcnR1YWxTdGFydGluZ1JlY3Quc2V0WCh2aXJ0dWFsU3RhcnRpbmdSZWN0LnJp
Z2h0KCkgLSB3aWR0aCk7CisgICAgICAgIHZpcnR1YWxTdGFydGluZ1JlY3Quc2V0WCh2aXJ0dWFs
U3RhcnRpbmdSZWN0Lm1heFgoKSAtIHdpZHRoKTsKICAgICAgICAgdmlydHVhbFN0YXJ0aW5nUmVj
dC5zZXRXaWR0aCh3aWR0aCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgRm9jdXNEaXJlY3Rp
b25VcDoKLSAgICAgICAgdmlydHVhbFN0YXJ0aW5nUmVjdC5zZXRZKHZpcnR1YWxTdGFydGluZ1Jl
Y3QuYm90dG9tKCkgLSB3aWR0aCk7CisgICAgICAgIHZpcnR1YWxTdGFydGluZ1JlY3Quc2V0WSh2
aXJ0dWFsU3RhcnRpbmdSZWN0Lm1heFkoKSAtIHdpZHRoKTsKICAgICAgICAgdmlydHVhbFN0YXJ0
aW5nUmVjdC5zZXRIZWlnaHQod2lkdGgpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEZvY3Vz
RGlyZWN0aW9uUmlnaHQ6CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL1dpbmRvd0ZlYXR1cmVz
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL1dpbmRvd0ZlYXR1cmVzLmNw
cAkocmV2aXNpb24gNzcyNjApCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL1dpbmRvd0ZlYXR1cmVz
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTg2LDkgKzE4Niw5IEBAIFdpbmRvd0ZlYXR1cmVzOjpX
aW5kb3dGZWF0dXJlcyhjb25zdCBTdHIKICAgICB3aWR0aCA9IGZsb2F0RmVhdHVyZShmZWF0dXJl
cywgImRpYWxvZ3dpZHRoIiwgMTAwLCBzY3JlZW5BdmFpbGFibGVSZWN0LndpZHRoKCksIDYyMCk7
IC8vIGRlZmF1bHQgaGVyZSBjYW1lIGZyb20gZnJhbWUgc2l6ZSBvZiBkaWFsb2cgaW4gTWFjSUUK
ICAgICBoZWlnaHQgPSBmbG9hdEZlYXR1cmUoZmVhdHVyZXMsICJkaWFsb2doZWlnaHQiLCAxMDAs
IHNjcmVlbkF2YWlsYWJsZVJlY3QuaGVpZ2h0KCksIDQ1MCk7IC8vIGRlZmF1bHQgaGVyZSBjYW1l
IGZyb20gZnJhbWUgc2l6ZSBvZiBkaWFsb2cgaW4gTWFjSUUKIAotICAgIHggPSBmbG9hdEZlYXR1
cmUoZmVhdHVyZXMsICJkaWFsb2dsZWZ0Iiwgc2NyZWVuQXZhaWxhYmxlUmVjdC54KCksIHNjcmVl
bkF2YWlsYWJsZVJlY3QucmlnaHQoKSAtIHdpZHRoLCAtMSk7CisgICAgeCA9IGZsb2F0RmVhdHVy
ZShmZWF0dXJlcywgImRpYWxvZ2xlZnQiLCBzY3JlZW5BdmFpbGFibGVSZWN0LngoKSwgc2NyZWVu
QXZhaWxhYmxlUmVjdC5tYXhYKCkgLSB3aWR0aCwgLTEpOwogICAgIHhTZXQgPSB4ID4gMDsKLSAg
ICB5ID0gZmxvYXRGZWF0dXJlKGZlYXR1cmVzLCAiZGlhbG9ndG9wIiwgc2NyZWVuQXZhaWxhYmxl
UmVjdC55KCksIHNjcmVlbkF2YWlsYWJsZVJlY3QuYm90dG9tKCkgLSBoZWlnaHQsIC0xKTsKKyAg
ICB5ID0gZmxvYXRGZWF0dXJlKGZlYXR1cmVzLCAiZGlhbG9ndG9wIiwgc2NyZWVuQXZhaWxhYmxl
UmVjdC55KCksIHNjcmVlbkF2YWlsYWJsZVJlY3QubWF4WSgpIC0gaGVpZ2h0LCAtMSk7CiAgICAg
eVNldCA9IHkgPiAwOwogCiAgICAgaWYgKGJvb2xGZWF0dXJlKGZlYXR1cmVzLCAiY2VudGVyIiwg
dHJ1ZSkpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbFZpZXcuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbFZpZXcuY3BwCShyZXZp
c2lvbiA3NzI2MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbFZpZXcuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC05MjIsNyArOTIyLDcgQEAgdm9pZCBTY3JvbGxWaWV3OjpjYWxjdWxh
dGVPdmVyaGFuZ0FyZWFzRgogICAgIH0gZWxzZSBpZiAoc2Nyb2xsWSgpID4gY29udGVudHNIZWln
aHQoKSAtIHZpc2libGVDb250ZW50UmVjdCh0cnVlKS5oZWlnaHQoKSkgewogICAgICAgICBpbnQg
aGVpZ2h0ID0gc2Nyb2xsWSgpIC0gKGNvbnRlbnRzSGVpZ2h0KCkgLSB2aXNpYmxlQ29udGVudFJl
Y3QodHJ1ZSkuaGVpZ2h0KCkpOwogICAgICAgICBob3Jpem9udGFsT3ZlcmhhbmdSZWN0ID0gZnJh
bWVSZWN0KCk7Ci0gICAgICAgIGhvcml6b250YWxPdmVyaGFuZ1JlY3Quc2V0WShmcmFtZVJlY3Qo
KS5ib3R0b20oKSAtIGhlaWdodCk7CisgICAgICAgIGhvcml6b250YWxPdmVyaGFuZ1JlY3Quc2V0
WShmcmFtZVJlY3QoKS5tYXhZKCkgLSBoZWlnaHQpOwogICAgICAgICBob3Jpem9udGFsT3Zlcmhh
bmdSZWN0LnNldEhlaWdodChoZWlnaHQpOwogICAgIH0KIApAQCAtOTM4LDcgKzkzOCw3IEBAIHZv
aWQgU2Nyb2xsVmlldzo6Y2FsY3VsYXRlT3ZlcmhhbmdBcmVhc0YKICAgICAgICAgaW50IHdpZHRo
ID0gc2Nyb2xsWCgpIC0gKGNvbnRlbnRzV2lkdGgoKSAtIHZpc2libGVDb250ZW50UmVjdCh0cnVl
KS53aWR0aCgpKTsKICAgICAgICAgdmVydGljYWxPdmVyaGFuZ1JlY3Quc2V0V2lkdGgod2lkdGgp
OwogICAgICAgICB2ZXJ0aWNhbE92ZXJoYW5nUmVjdC5zZXRIZWlnaHQoZnJhbWVSZWN0KCkuaGVp
Z2h0KCkgLSBob3Jpem9udGFsT3ZlcmhhbmdSZWN0LmhlaWdodCgpKTsKLSAgICAgICAgdmVydGlj
YWxPdmVyaGFuZ1JlY3Quc2V0WChmcmFtZVJlY3QoKS5yaWdodCgpIC0gd2lkdGgpOworICAgICAg
ICB2ZXJ0aWNhbE92ZXJoYW5nUmVjdC5zZXRYKGZyYW1lUmVjdCgpLm1heFgoKSAtIHdpZHRoKTsK
ICAgICAgICAgaWYgKGhvcml6b250YWxPdmVyaGFuZ1JlY3QueSgpID09IGZyYW1lUmVjdCgpLnko
KSkKICAgICAgICAgICAgIHZlcnRpY2FsT3ZlcmhhbmdSZWN0LnNldFkoZnJhbWVSZWN0KCkueSgp
ICsgaG9yaXpvbnRhbE92ZXJoYW5nUmVjdC5oZWlnaHQoKSk7CiAgICAgICAgIGVsc2UKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGJhci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFyLmNwcAkocmV2aXNpb24gNzcyNjApCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
OTMsMTQgKzM5MywxNCBAQCB2b2lkIFNjcm9sbGJhcjo6c2V0RnJhbWVSZWN0KGNvbnN0IEludFJl
CiAgICAgICAgIEludFJlY3QgcmVzaXplclJlY3QgPSB2aWV3LT5jb252ZXJ0RnJvbUNvbnRhaW5p
bmdXaW5kb3codmlldy0+d2luZG93UmVzaXplclJlY3QoKSk7CiAgICAgICAgIGlmIChyZWN0Lmlu
dGVyc2VjdHMocmVzaXplclJlY3QpKSB7CiAgICAgICAgICAgICBpZiAob3JpZW50YXRpb24oKSA9
PSBIb3Jpem9udGFsU2Nyb2xsYmFyKSB7Ci0gICAgICAgICAgICAgICAgaW50IG92ZXJsYXAgPSBy
ZWN0LnJpZ2h0KCkgLSByZXNpemVyUmVjdC54KCk7Ci0gICAgICAgICAgICAgICAgaWYgKG92ZXJs
YXAgPiAwICYmIHJlc2l6ZXJSZWN0LnJpZ2h0KCkgPj0gcmVjdC5yaWdodCgpKSB7CisgICAgICAg
ICAgICAgICAgaW50IG92ZXJsYXAgPSByZWN0Lm1heFgoKSAtIHJlc2l6ZXJSZWN0LngoKTsKKyAg
ICAgICAgICAgICAgICBpZiAob3ZlcmxhcCA+IDAgJiYgcmVzaXplclJlY3QubWF4WCgpID49IHJl
Y3QubWF4WCgpKSB7CiAgICAgICAgICAgICAgICAgICAgIGFkanVzdGVkUmVjdC5zZXRXaWR0aChy
ZWN0LndpZHRoKCkgLSBvdmVybGFwKTsKICAgICAgICAgICAgICAgICAgICAgb3ZlcmxhcHNSZXNp
emVyID0gdHJ1ZTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgICAgIGludCBvdmVybGFwID0gcmVjdC5ib3R0b20oKSAtIHJlc2l6ZXJSZWN0Lnko
KTsKLSAgICAgICAgICAgICAgICBpZiAob3ZlcmxhcCA+IDAgJiYgcmVzaXplclJlY3QuYm90dG9t
KCkgPj0gcmVjdC5ib3R0b20oKSkgeworICAgICAgICAgICAgICAgIGludCBvdmVybGFwID0gcmVj
dC5tYXhZKCkgLSByZXNpemVyUmVjdC55KCk7CisgICAgICAgICAgICAgICAgaWYgKG92ZXJsYXAg
PiAwICYmIHJlc2l6ZXJSZWN0Lm1heFkoKSA+PSByZWN0Lm1heFkoKSkgewogICAgICAgICAgICAg
ICAgICAgICBhZGp1c3RlZFJlY3Quc2V0SGVpZ2h0KHJlY3QuaGVpZ2h0KCkgLSBvdmVybGFwKTsK
ICAgICAgICAgICAgICAgICAgICAgb3ZlcmxhcHNSZXNpemVyID0gdHJ1ZTsKICAgICAgICAgICAg
ICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXJUaGVtZUNvbXBv
c2l0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFy
VGhlbWVDb21wb3NpdGUuY3BwCShyZXZpc2lvbiA3NzI2MCkKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL1Njcm9sbGJhclRoZW1lQ29tcG9zaXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQ4
LDExICsyNDgsMTEgQEAgdm9pZCBTY3JvbGxiYXJUaGVtZUNvbXBvc2l0ZTo6c3BsaXRUcmFjawog
ICAgIGlmIChzY3JvbGxiYXItPm9yaWVudGF0aW9uKCkgPT0gSG9yaXpvbnRhbFNjcm9sbGJhcikg
ewogICAgICAgICB0aHVtYlJlY3QgPSBJbnRSZWN0KHRyYWNrUmVjdC54KCkgKyB0aHVtYlBvcywg
dHJhY2tSZWN0LnkoKSArICh0cmFja1JlY3QuaGVpZ2h0KCkgLSB0aGlja25lc3MpIC8gMiwgdGh1
bWJMZW5ndGgoc2Nyb2xsYmFyKSwgdGhpY2tuZXNzKTsgCiAgICAgICAgIGJlZm9yZVRodW1iUmVj
dCA9IEludFJlY3QodHJhY2tSZWN0LngoKSwgdHJhY2tSZWN0LnkoKSwgdGh1bWJQb3MgKyB0aHVt
YlJlY3Qud2lkdGgoKSAvIDIsIHRyYWNrUmVjdC5oZWlnaHQoKSk7IAotICAgICAgICBhZnRlclRo
dW1iUmVjdCA9IEludFJlY3QodHJhY2tSZWN0LngoKSArIGJlZm9yZVRodW1iUmVjdC53aWR0aCgp
LCB0cmFja1JlY3QueSgpLCB0cmFja1JlY3QucmlnaHQoKSAtIGJlZm9yZVRodW1iUmVjdC5yaWdo
dCgpLCB0cmFja1JlY3QuaGVpZ2h0KCkpOworICAgICAgICBhZnRlclRodW1iUmVjdCA9IEludFJl
Y3QodHJhY2tSZWN0LngoKSArIGJlZm9yZVRodW1iUmVjdC53aWR0aCgpLCB0cmFja1JlY3QueSgp
LCB0cmFja1JlY3QubWF4WCgpIC0gYmVmb3JlVGh1bWJSZWN0Lm1heFgoKSwgdHJhY2tSZWN0Lmhl
aWdodCgpKTsKICAgICB9IGVsc2UgewogICAgICAgICB0aHVtYlJlY3QgPSBJbnRSZWN0KHRyYWNr
UmVjdC54KCkgKyAodHJhY2tSZWN0LndpZHRoKCkgLSB0aGlja25lc3MpIC8gMiwgdHJhY2tSZWN0
LnkoKSArIHRodW1iUG9zLCB0aGlja25lc3MsIHRodW1iTGVuZ3RoKHNjcm9sbGJhcikpOwogICAg
ICAgICBiZWZvcmVUaHVtYlJlY3QgPSBJbnRSZWN0KHRyYWNrUmVjdC54KCksIHRyYWNrUmVjdC55
KCksIHRyYWNrUmVjdC53aWR0aCgpLCB0aHVtYlBvcyArIHRodW1iUmVjdC5oZWlnaHQoKSAvIDIp
OyAKLSAgICAgICAgYWZ0ZXJUaHVtYlJlY3QgPSBJbnRSZWN0KHRyYWNrUmVjdC54KCksIHRyYWNr
UmVjdC55KCkgKyBiZWZvcmVUaHVtYlJlY3QuaGVpZ2h0KCksIHRyYWNrUmVjdC53aWR0aCgpLCB0
cmFja1JlY3QuYm90dG9tKCkgLSBiZWZvcmVUaHVtYlJlY3QuYm90dG9tKCkpOworICAgICAgICBh
ZnRlclRodW1iUmVjdCA9IEludFJlY3QodHJhY2tSZWN0LngoKSwgdHJhY2tSZWN0LnkoKSArIGJl
Zm9yZVRodW1iUmVjdC5oZWlnaHQoKSwgdHJhY2tSZWN0LndpZHRoKCksIHRyYWNrUmVjdC5tYXhZ
KCkgLSBiZWZvcmVUaHVtYlJlY3QubWF4WSgpKTsKICAgICB9CiB9CiAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UXVhZC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UXVhZC5oCShyZXZpc2lvbiA3NzI2MCkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UXVhZC5oCSh3b3JraW5n
IGNvcHkpCkBAIC01NCw5ICs1NCw5IEBAIHB1YmxpYzoKIAogICAgIEZsb2F0UXVhZChjb25zdCBG
bG9hdFJlY3QmIGluUmVjdCkKICAgICAgICAgOiBtX3AxKGluUmVjdC5sb2NhdGlvbigpKQotICAg
ICAgICAsIG1fcDIoaW5SZWN0LnJpZ2h0KCksIGluUmVjdC55KCkpCi0gICAgICAgICwgbV9wMyhp
blJlY3QucmlnaHQoKSwgaW5SZWN0LmJvdHRvbSgpKQotICAgICAgICAsIG1fcDQoaW5SZWN0Lngo
KSwgaW5SZWN0LmJvdHRvbSgpKQorICAgICAgICAsIG1fcDIoaW5SZWN0Lm1heFgoKSwgaW5SZWN0
LnkoKSkKKyAgICAgICAgLCBtX3AzKGluUmVjdC5tYXhYKCksIGluUmVjdC5tYXhZKCkpCisgICAg
ICAgICwgbV9wNChpblJlY3QueCgpLCBpblJlY3QubWF4WSgpKQogICAgIHsKICAgICB9CiAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UmVjdC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRSZWN0LmNwcAko
cmV2aXNpb24gNzcyNjApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9h
dFJlY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MSwyMiArNTEsMjIgQEAgYm9vbCBGbG9hdFJl
Y3Q6OmludGVyc2VjdHMoY29uc3QgRmxvYXRSZQogewogICAgIC8vIENoZWNraW5nIGVtcHRpbmVz
cyBoYW5kbGVzIG5lZ2F0aXZlIHdpZHRocyBhcyB3ZWxsIGFzIHplcm8uCiAgICAgcmV0dXJuICFp
c0VtcHR5KCkgJiYgIW90aGVyLmlzRW1wdHkoKQotICAgICAgICAmJiB4KCkgPCBvdGhlci5yaWdo
dCgpICYmIG90aGVyLngoKSA8IHJpZ2h0KCkKLSAgICAgICAgJiYgeSgpIDwgb3RoZXIuYm90dG9t
KCkgJiYgb3RoZXIueSgpIDwgYm90dG9tKCk7CisgICAgICAgICYmIHgoKSA8IG90aGVyLm1heFgo
KSAmJiBvdGhlci54KCkgPCBtYXhYKCkKKyAgICAgICAgJiYgeSgpIDwgb3RoZXIubWF4WSgpICYm
IG90aGVyLnkoKSA8IG1heFkoKTsKIH0KIAogYm9vbCBGbG9hdFJlY3Q6OmNvbnRhaW5zKGNvbnN0
IEZsb2F0UmVjdCYgb3RoZXIpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIHgoKSA8PSBvdGhlci54KCkg
JiYgcmlnaHQoKSA+PSBvdGhlci5yaWdodCgpCi0gICAgICAgICYmIHkoKSA8PSBvdGhlci55KCkg
JiYgYm90dG9tKCkgPj0gb3RoZXIuYm90dG9tKCk7CisgICAgcmV0dXJuIHgoKSA8PSBvdGhlci54
KCkgJiYgbWF4WCgpID49IG90aGVyLm1heFgoKQorICAgICAgICAmJiB5KCkgPD0gb3RoZXIueSgp
ICYmIG1heFkoKSA+PSBvdGhlci5tYXhZKCk7CiB9CiAKIHZvaWQgRmxvYXRSZWN0OjppbnRlcnNl
Y3QoY29uc3QgRmxvYXRSZWN0JiBvdGhlcikKIHsKICAgICBmbG9hdCBsID0gbWF4KHgoKSwgb3Ro
ZXIueCgpKTsKICAgICBmbG9hdCB0ID0gbWF4KHkoKSwgb3RoZXIueSgpKTsKLSAgICBmbG9hdCBy
ID0gbWluKHJpZ2h0KCksIG90aGVyLnJpZ2h0KCkpOwotICAgIGZsb2F0IGIgPSBtaW4oYm90dG9t
KCksIG90aGVyLmJvdHRvbSgpKTsKKyAgICBmbG9hdCByID0gbWluKG1heFgoKSwgb3RoZXIubWF4
WCgpKTsKKyAgICBmbG9hdCBiID0gbWluKG1heFkoKSwgb3RoZXIubWF4WSgpKTsKIAogICAgIC8v
IFJldHVybiBhIGNsZWFuIGVtcHR5IHJlY3RhbmdsZSBmb3Igbm9uLWludGVyc2VjdGluZyBjYXNl
cy4KICAgICBpZiAobCA+PSByIHx8IHQgPj0gYikgewpAQCAtOTEsOCArOTEsOCBAQCB2b2lkIEZs
b2F0UmVjdDo6dW5pdGUoY29uc3QgRmxvYXRSZWN0JiBvCiAKICAgICBmbG9hdCBsID0gbWluKHgo
KSwgb3RoZXIueCgpKTsKICAgICBmbG9hdCB0ID0gbWluKHkoKSwgb3RoZXIueSgpKTsKLSAgICBm
bG9hdCByID0gbWF4KHJpZ2h0KCksIG90aGVyLnJpZ2h0KCkpOwotICAgIGZsb2F0IGIgPSBtYXgo
Ym90dG9tKCksIG90aGVyLmJvdHRvbSgpKTsKKyAgICBmbG9hdCByID0gbWF4KG1heFgoKSwgb3Ro
ZXIubWF4WCgpKTsKKyAgICBmbG9hdCBiID0gbWF4KG1heFkoKSwgb3RoZXIubWF4WSgpKTsKIAog
ICAgIHNldExvY2F0aW9uQW5kU2l6ZUZyb21FZGdlcyhsLCB0LCByLCBiKTsKIH0KQEAgLTE4MCw4
ICsxODAsOCBAQCBJbnRSZWN0IGVuY2xvc2luZ0ludFJlY3QoY29uc3QgRmxvYXRSZWN0CiB7CiAg
ICAgZmxvYXQgbGVmdCA9IGZsb29yZihyZWN0LngoKSk7CiAgICAgZmxvYXQgdG9wID0gZmxvb3Jm
KHJlY3QueSgpKTsKLSAgICBmbG9hdCB3aWR0aCA9IGNlaWxmKHJlY3QucmlnaHQoKSkgLSBsZWZ0
OwotICAgIGZsb2F0IGhlaWdodCA9IGNlaWxmKHJlY3QuYm90dG9tKCkpIC0gdG9wOworICAgIGZs
b2F0IHdpZHRoID0gY2VpbGYocmVjdC5tYXhYKCkpIC0gbGVmdDsKKyAgICBmbG9hdCBoZWlnaHQg
PSBjZWlsZihyZWN0Lm1heFkoKSkgLSB0b3A7CiAgICAgcmV0dXJuIEludFJlY3Qoc2FmZUZsb2F0
VG9JbnQobGVmdCksIHNhZmVGbG9hdFRvSW50KHRvcCksIAogICAgICAgICAgICAgICAgICAgIHNh
ZmVGbG9hdFRvSW50KHdpZHRoKSwgc2FmZUZsb2F0VG9JbnQoaGVpZ2h0KSk7CiB9CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3QuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3QuaAkocmV2aXNpb24g
NzcyNjApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3QuaAko
d29ya2luZyBjb3B5KQpAQCAtOTAsNiArOTAsOCBAQCBwdWJsaWM6CiAKICAgICBmbG9hdCB4KCkg
Y29uc3QgeyByZXR1cm4gbV9sb2NhdGlvbi54KCk7IH0KICAgICBmbG9hdCB5KCkgY29uc3QgeyBy
ZXR1cm4gbV9sb2NhdGlvbi55KCk7IH0KKyAgICBmbG9hdCBtYXhYKCkgY29uc3QgeyByZXR1cm4g
eCgpICsgd2lkdGgoKTsgfQorICAgIGZsb2F0IG1heFkoKSBjb25zdCB7IHJldHVybiB5KCkgKyBo
ZWlnaHQoKTsgfQogICAgIGZsb2F0IHdpZHRoKCkgY29uc3QgeyByZXR1cm4gbV9zaXplLndpZHRo
KCk7IH0KICAgICBmbG9hdCBoZWlnaHQoKSBjb25zdCB7IHJldHVybiBtX3NpemUuaGVpZ2h0KCk7
IH0KIApAQCAtMTE5LDcgKzEyMSw3IEBAIHB1YmxpYzoKICAgICAvLyBOb3RlLCB0aGlzIGRvZXNu
J3QgbWF0Y2ggd2hhdCBJbnRSZWN0Ojpjb250YWlucyhJbnRQb2ludCYpIGRvZXM7IHRoZSBpbnQg
dmVyc2lvbgogICAgIC8vIGlzIHJlYWxseSBjaGVja2luZyBmb3IgY29udGFpbm1lbnQgb2YgMXgx
IHJlY3QsIGJ1dCB0aGF0IGRvZXNuJ3QgbWFrZSBzZW5zZSB3aXRoIGZsb2F0cy4KICAgICBib29s
IGNvbnRhaW5zKGZsb2F0IHB4LCBmbG9hdCBweSkgY29uc3QKLSAgICAgICAgeyByZXR1cm4gcHgg
Pj0geCgpICYmIHB4IDw9IHJpZ2h0KCkgJiYgcHkgPj0geSgpICYmIHB5IDw9IGJvdHRvbSgpOyB9
CisgICAgICAgIHsgcmV0dXJuIHB4ID49IHgoKSAmJiBweCA8PSBtYXhYKCkgJiYgcHkgPj0geSgp
ICYmIHB5IDw9IG1heFkoKTsgfQogICAgIGJvb2wgY29udGFpbnMoY29uc3QgRmxvYXRQb2ludCYg
cG9pbnQpIGNvbnN0IHsgcmV0dXJuIGNvbnRhaW5zKHBvaW50LngoKSwgcG9pbnQueSgpKTsgfQog
CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ludFJlY3QuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ludFJlY3QuY3Bw
CShyZXZpc2lvbiA3NzI2MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0lu
dFJlY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NCwyMiArNDQsMjIgQEAgYm9vbCBJbnRSZWN0
OjppbnRlcnNlY3RzKGNvbnN0IEludFJlY3QmIAogewogICAgIC8vIENoZWNraW5nIGVtcHRpbmVz
cyBoYW5kbGVzIG5lZ2F0aXZlIHdpZHRocyBhcyB3ZWxsIGFzIHplcm8uCiAgICAgcmV0dXJuICFp
c0VtcHR5KCkgJiYgIW90aGVyLmlzRW1wdHkoKQotICAgICAgICAmJiB4KCkgPCBvdGhlci5yaWdo
dCgpICYmIG90aGVyLngoKSA8IHJpZ2h0KCkKLSAgICAgICAgJiYgeSgpIDwgb3RoZXIuYm90dG9t
KCkgJiYgb3RoZXIueSgpIDwgYm90dG9tKCk7CisgICAgICAgICYmIHgoKSA8IG90aGVyLm1heFgo
KSAmJiBvdGhlci54KCkgPCBtYXhYKCkKKyAgICAgICAgJiYgeSgpIDwgb3RoZXIubWF4WSgpICYm
IG90aGVyLnkoKSA8IG1heFkoKTsKIH0KIAogYm9vbCBJbnRSZWN0Ojpjb250YWlucyhjb25zdCBJ
bnRSZWN0JiBvdGhlcikgY29uc3QKIHsKLSAgICByZXR1cm4geCgpIDw9IG90aGVyLngoKSAmJiBy
aWdodCgpID49IG90aGVyLnJpZ2h0KCkKLSAgICAgICAgJiYgeSgpIDw9IG90aGVyLnkoKSAmJiBi
b3R0b20oKSA+PSBvdGhlci5ib3R0b20oKTsKKyAgICByZXR1cm4geCgpIDw9IG90aGVyLngoKSAm
JiBtYXhYKCkgPj0gb3RoZXIubWF4WCgpCisgICAgICAgICYmIHkoKSA8PSBvdGhlci55KCkgJiYg
bWF4WSgpID49IG90aGVyLm1heFkoKTsKIH0KIAogdm9pZCBJbnRSZWN0OjppbnRlcnNlY3QoY29u
c3QgSW50UmVjdCYgb3RoZXIpCiB7CiAgICAgaW50IGwgPSBtYXgoeCgpLCBvdGhlci54KCkpOwog
ICAgIGludCB0ID0gbWF4KHkoKSwgb3RoZXIueSgpKTsKLSAgICBpbnQgciA9IG1pbihyaWdodCgp
LCBvdGhlci5yaWdodCgpKTsKLSAgICBpbnQgYiA9IG1pbihib3R0b20oKSwgb3RoZXIuYm90dG9t
KCkpOworICAgIGludCByID0gbWluKG1heFgoKSwgb3RoZXIubWF4WCgpKTsKKyAgICBpbnQgYiA9
IG1pbihtYXhZKCksIG90aGVyLm1heFkoKSk7CiAKICAgICAvLyBSZXR1cm4gYSBjbGVhbiBlbXB0
eSByZWN0YW5nbGUgZm9yIG5vbi1pbnRlcnNlY3RpbmcgY2FzZXMuCiAgICAgaWYgKGwgPj0gciB8
fCB0ID49IGIpIHsKQEAgLTg3LDggKzg3LDggQEAgdm9pZCBJbnRSZWN0Ojp1bml0ZShjb25zdCBJ
bnRSZWN0JiBvdGhlcgogCiAgICAgaW50IGwgPSBtaW4oeCgpLCBvdGhlci54KCkpOwogICAgIGlu
dCB0ID0gbWluKHkoKSwgb3RoZXIueSgpKTsKLSAgICBpbnQgciA9IG1heChyaWdodCgpLCBvdGhl
ci5yaWdodCgpKTsKLSAgICBpbnQgYiA9IG1heChib3R0b20oKSwgb3RoZXIuYm90dG9tKCkpOwor
ICAgIGludCByID0gbWF4KG1heFgoKSwgb3RoZXIubWF4WCgpKTsKKyAgICBpbnQgYiA9IG1heCht
YXhZKCksIG90aGVyLm1heFkoKSk7CiAKICAgICBtX2xvY2F0aW9uLnNldFgobCk7CiAgICAgbV9s
b2NhdGlvbi5zZXRZKHQpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
SW50UmVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0ludFJlY3QuaAkocmV2aXNpb24gNzcyNjApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9JbnRSZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTkxLDYgKzkxLDggQEAgcHVibGlj
OgogCiAgICAgaW50IHgoKSBjb25zdCB7IHJldHVybiBtX2xvY2F0aW9uLngoKTsgfQogICAgIGlu
dCB5KCkgY29uc3QgeyByZXR1cm4gbV9sb2NhdGlvbi55KCk7IH0KKyAgICBpbnQgbWF4WCgpIGNv
bnN0IHsgcmV0dXJuIHgoKSArIHdpZHRoKCk7IH0KKyAgICBpbnQgbWF4WSgpIGNvbnN0IHsgcmV0
dXJuIHkoKSArIGhlaWdodCgpOyB9CiAgICAgaW50IHdpZHRoKCkgY29uc3QgeyByZXR1cm4gbV9z
aXplLndpZHRoKCk7IH0KICAgICBpbnQgaGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gbV9zaXplLmhl
aWdodCgpOyB9CiAKQEAgLTk5LDEzICsxMDEsNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRXaWR0
aChpbnQgd2lkdGgpIHsgbV9zaXplLnNldFdpZHRoKHdpZHRoKTsgfQogICAgIHZvaWQgc2V0SGVp
Z2h0KGludCBoZWlnaHQpIHsgbV9zaXplLnNldEhlaWdodChoZWlnaHQpOyB9CiAKLSAgICAvLyBC
ZSBjYXJlZnVsIHdpdGggdGhlc2UgZnVuY3Rpb25zLiAgVGhlIHBvaW50IGlzIGNvbnNpZGVyZWQg
dG8gYmUgdG8gdGhlIHJpZ2h0IGFuZCBiZWxvdy4gIFRoZXNlIGFyZSBub3QKLSAgICAvLyBzdWJz
dGl0dXRlcyBmb3IgcmlnaHQoKSBhbmQgYm90dG9tKCkuCi0gICAgSW50UG9pbnQgdG9wTGVmdCgp
IGNvbnN0IHsgcmV0dXJuIG1fbG9jYXRpb247IH0KLSAgICBJbnRQb2ludCB0b3BSaWdodCgpIGNv
bnN0IHsgcmV0dXJuIEludFBvaW50KHJpZ2h0KCkgLSAxLCB5KCkpOyB9Ci0gICAgSW50UG9pbnQg
Ym90dG9tTGVmdCgpIGNvbnN0IHsgcmV0dXJuIEludFBvaW50KHgoKSwgYm90dG9tKCkgLSAxKTsg
fQotICAgIEludFBvaW50IGJvdHRvbVJpZ2h0KCkgY29uc3QgeyByZXR1cm4gSW50UG9pbnQocmln
aHQoKSAtIDEsIGJvdHRvbSgpIC0gMSk7IH0KLQogICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsg
cmV0dXJuIG1fc2l6ZS5pc0VtcHR5KCk7IH0KIAogICAgIGludCByaWdodCgpIGNvbnN0IHsgcmV0
dXJuIHgoKSArIHdpZHRoKCk7IH0KQEAgLTExOCwyNiArMTEzLDI2IEBAIHB1YmxpYzoKICAgICB2
b2lkIG1vdmUoY29uc3QgSW50U2l6ZSYgcykgeyBtX2xvY2F0aW9uICs9IHM7IH0gCiAgICAgdm9p
ZCBtb3ZlKGludCBkeCwgaW50IGR5KSB7IG1fbG9jYXRpb24ubW92ZShkeCwgZHkpOyB9IAogICAg
IAotICAgIHZvaWQgc2hpZnRMZWZ0RWRnZVRvKGludCBlZGdlKQorICAgIHZvaWQgc2hpZnRYRWRn
ZVRvKGludCBlZGdlKQogICAgIHsKICAgICAgICAgaW50IGRlbHRhID0gZWRnZSAtIHgoKTsKICAg
ICAgICAgc2V0WChlZGdlKTsKICAgICAgICAgc2V0V2lkdGgoc3RkOjptYXgoMCwgd2lkdGgoKSAt
IGRlbHRhKSk7CiAgICAgfQotICAgIHZvaWQgc2hpZnRSaWdodEVkZ2VUbyhpbnQgZWRnZSkKKyAg
ICB2b2lkIHNoaWZ0TWF4WEVkZ2VUbyhpbnQgZWRnZSkKICAgICB7Ci0gICAgICAgIGludCBkZWx0
YSA9IGVkZ2UgLSByaWdodCgpOworICAgICAgICBpbnQgZGVsdGEgPSBlZGdlIC0gbWF4WCgpOwog
ICAgICAgICBzZXRXaWR0aChzdGQ6Om1heCgwLCB3aWR0aCgpICsgZGVsdGEpKTsKICAgICB9Ci0g
ICAgdm9pZCBzaGlmdFRvcEVkZ2VUbyhpbnQgZWRnZSkKKyAgICB2b2lkIHNoaWZ0WUVkZ2VUbyhp
bnQgZWRnZSkKICAgICB7CiAgICAgICAgIGludCBkZWx0YSA9IGVkZ2UgLSB5KCk7CiAgICAgICAg
IHNldFkoZWRnZSk7CiAgICAgICAgIHNldEhlaWdodChzdGQ6Om1heCgwLCBoZWlnaHQoKSAtIGRl
bHRhKSk7CiAgICAgfQotICAgIHZvaWQgc2hpZnRCb3R0b21FZGdlVG8oaW50IGVkZ2UpCisgICAg
dm9pZCBzaGlmdE1heFlFZGdlVG8oaW50IGVkZ2UpCiAgICAgewotICAgICAgICBpbnQgZGVsdGEg
PSBlZGdlIC0gYm90dG9tKCk7CisgICAgICAgIGludCBkZWx0YSA9IGVkZ2UgLSBtYXhZKCk7CiAg
ICAgICAgIHNldEhlaWdodChzdGQ6Om1heCgwLCBoZWlnaHQoKSArIGRlbHRhKSk7CiAgICAgfQog
CkBAIC0xNDcsNyArMTQyLDcgQEAgcHVibGljOgogICAgIC8vIFRoaXMgY2hlY2tzIHRvIHNlZSBp
ZiB0aGUgcmVjdCBjb250YWlucyB4LHkgaW4gdGhlIHRyYWRpdGlvbmFsIHNlbnNlLgogICAgIC8v
IEVxdWl2YWxlbnQgdG8gY2hlY2tpbmcgaWYgdGhlIHJlY3QgY29udGFpbnMgYSAxeDEgcmVjdCBi
ZWxvdyBhbmQgdG8gdGhlIHJpZ2h0IG9mIChweCxweSkuCiAgICAgYm9vbCBjb250YWlucyhpbnQg
cHgsIGludCBweSkgY29uc3QKLSAgICAgICAgeyByZXR1cm4gcHggPj0geCgpICYmIHB4IDwgcmln
aHQoKSAmJiBweSA+PSB5KCkgJiYgcHkgPCBib3R0b20oKTsgfQorICAgICAgICB7IHJldHVybiBw
eCA+PSB4KCkgJiYgcHggPCBtYXhYKCkgJiYgcHkgPj0geSgpICYmIHB5IDwgbWF4WSgpOyB9CiAg
ICAgYm9vbCBjb250YWlucyhjb25zdCBJbnRQb2ludCYgcG9pbnQpIGNvbnN0IHsgcmV0dXJuIGNv
bnRhaW5zKHBvaW50LngoKSwgcG9pbnQueSgpKTsgfQogCiAgICAgdm9pZCBpbnRlcnNlY3QoY29u
c3QgSW50UmVjdCYpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvV2lk
dGhJdGVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvV2lkdGhJdGVyYXRvci5jcHAJKHJldmlzaW9uIDc3MjYwKQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvV2lkdGhJdGVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTI1NSw5ICsyNTUsOSBAQCB2b2lkIFdpZHRoSXRlcmF0b3I6OmFkdmFuY2UoaW50IG9mZnNldCwg
CiAgICAgICAgIGxhc3RSb3VuZGluZ1dpZHRoID0gd2lkdGggLSBvbGRXaWR0aDsKIAogICAgICAg
ICBpZiAobV9hY2NvdW50Rm9yR2x5cGhCb3VuZHMpIHsKLSAgICAgICAgICAgIG1fbWF4R2x5cGhC
b3VuZGluZ0JveFkgPSBtYXgobV9tYXhHbHlwaEJvdW5kaW5nQm94WSwgYm91bmRzLmJvdHRvbSgp
KTsKKyAgICAgICAgICAgIG1fbWF4R2x5cGhCb3VuZGluZ0JveFkgPSBtYXgobV9tYXhHbHlwaEJv
dW5kaW5nQm94WSwgYm91bmRzLm1heFkoKSk7CiAgICAgICAgICAgICBtX21pbkdseXBoQm91bmRp
bmdCb3hZID0gbWluKG1fbWluR2x5cGhCb3VuZGluZ0JveFksIGJvdW5kcy55KCkpOwotICAgICAg
ICAgICAgbV9sYXN0R2x5cGhPdmVyZmxvdyA9IG1heDxmbG9hdD4oMCwgYm91bmRzLnJpZ2h0KCkg
LSB3aWR0aCk7CisgICAgICAgICAgICBtX2xhc3RHbHlwaE92ZXJmbG93ID0gbWF4PGZsb2F0Pigw
LCBib3VuZHMubWF4WCgpIC0gd2lkdGgpOwogICAgICAgICB9CiAgICAgfQogCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3ND
b250ZXh0Q0cuY3BwCShyZXZpc2lvbiA3NzI2MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTY2
LDkgKzE2Niw5IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3UmVjdChjb25zdCBJbnQKICAg
ICAgICAgICAgIHNldENHRmlsbENvbG9yKGNvbnRleHQsIHN0cm9rZUNvbG9yKCksIHN0cm9rZUNv
bG9yU3BhY2UoKSk7CiAgICAgICAgIENHUmVjdCByZWN0c1s0XSA9IHsKICAgICAgICAgICAgIEZs
b2F0UmVjdChyZWN0LngoKSwgcmVjdC55KCksIHJlY3Qud2lkdGgoKSwgMSksCi0gICAgICAgICAg
ICBGbG9hdFJlY3QocmVjdC54KCksIHJlY3QuYm90dG9tKCkgLSAxLCByZWN0LndpZHRoKCksIDEp
LAorICAgICAgICAgICAgRmxvYXRSZWN0KHJlY3QueCgpLCByZWN0Lm1heFkoKSAtIDEsIHJlY3Qu
d2lkdGgoKSwgMSksCiAgICAgICAgICAgICBGbG9hdFJlY3QocmVjdC54KCksIHJlY3QueSgpICsg
MSwgMSwgcmVjdC5oZWlnaHQoKSAtIDIpLAotICAgICAgICAgICAgRmxvYXRSZWN0KHJlY3Qucmln
aHQoKSAtIDEsIHJlY3QueSgpICsgMSwgMSwgcmVjdC5oZWlnaHQoKSAtIDIpCisgICAgICAgICAg
ICBGbG9hdFJlY3QocmVjdC5tYXhYKCkgLSAxLCByZWN0LnkoKSArIDEsIDEsIHJlY3QuaGVpZ2h0
KCkgLSAyKQogICAgICAgICB9OwogICAgICAgICBDR0NvbnRleHRGaWxsUmVjdHMoY29udGV4dCwg
cmVjdHMsIDQpOwogICAgICAgICBpZiAob2xkRmlsbENvbG9yICE9IHN0cm9rZUNvbG9yKCkpCkBA
IC01NjQsNyArNTY0LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxQYXRoKGNvbnN0IFBh
dAogICAgICAgICAgICAgICAgIENHQ29udGV4dENsaXAobGF5ZXJDb250ZXh0KTsKIAogICAgICAg
ICAgICAgbV9zdGF0ZS5maWxsR3JhZGllbnQtPnBhaW50KGxheWVyQ29udGV4dCk7Ci0gICAgICAg
ICAgICBDR0NvbnRleHREcmF3TGF5ZXJBdFBvaW50KGNvbnRleHQsIENHUG9pbnRNYWtlKHJlY3Qu
bGVmdCgpLCByZWN0LnRvcCgpKSwgbGF5ZXIpOworICAgICAgICAgICAgQ0dDb250ZXh0RHJhd0xh
eWVyQXRQb2ludChjb250ZXh0LCBDR1BvaW50TWFrZShyZWN0LngoKSwgcmVjdC55KCkpLCBsYXll
cik7CiAgICAgICAgICAgICBDR0xheWVyUmVsZWFzZShsYXllcik7CiAgICAgICAgIH0gZWxzZSB7
CiAgICAgICAgICAgICBDR0NvbnRleHRCZWdpblBhdGgoY29udGV4dCk7CkBAIC02NDYsNyArNjQ2
LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KGNvbnN0IEZsbwogCiAgICAgICAg
ICAgICBDR0NvbnRleHRDb25jYXRDVE0obGF5ZXJDb250ZXh0LCBtX3N0YXRlLmZpbGxHcmFkaWVu
dC0+Z3JhZGllbnRTcGFjZVRyYW5zZm9ybSgpKTsKICAgICAgICAgICAgIG1fc3RhdGUuZmlsbEdy
YWRpZW50LT5wYWludChsYXllckNvbnRleHQpOwotICAgICAgICAgICAgQ0dDb250ZXh0RHJhd0xh
eWVyQXRQb2ludChjb250ZXh0LCBDR1BvaW50TWFrZShyZWN0LmxlZnQoKSwgcmVjdC50b3AoKSks
IGxheWVyKTsKKyAgICAgICAgICAgIENHQ29udGV4dERyYXdMYXllckF0UG9pbnQoY29udGV4dCwg
Q0dQb2ludE1ha2UocmVjdC54KCksIHJlY3QueSgpKSwgbGF5ZXIpOwogICAgICAgICAgICAgQ0dM
YXllclJlbGVhc2UobGF5ZXIpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgQ0dDb250
ZXh0Q2xpcFRvUmVjdChjb250ZXh0LCByZWN0KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0cuY3BwCShyZXZpc2lvbiA3
NzI2MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVy
Q0cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNjcsNyArMjY3LDcgQEAgUGFzc1JlZlB0cjxCeXRl
QXJyYXk+IGdldEltYWdlRGF0YShjb25zdAogICAgIFJlZlB0cjxCeXRlQXJyYXk+IHJlc3VsdCA9
IEJ5dGVBcnJheTo6Y3JlYXRlKHJlY3Qud2lkdGgoKSAqIHJlY3QuaGVpZ2h0KCkgKiA0KTsKICAg
ICB1bnNpZ25lZCBjaGFyKiBkYXRhID0gcmVzdWx0LT5kYXRhKCk7CiAKLSAgICBpZiAocmVjdC54
KCkgPCAwIHx8IHJlY3QueSgpIDwgMCB8fCByZWN0LnJpZ2h0KCkgPiBzaXplLndpZHRoKCkgfHwg
cmVjdC5ib3R0b20oKSA+IHNpemUuaGVpZ2h0KCkpCisgICAgaWYgKHJlY3QueCgpIDwgMCB8fCBy
ZWN0LnkoKSA8IDAgfHwgcmVjdC5tYXhYKCkgPiBzaXplLndpZHRoKCkgfHwgcmVjdC5tYXhZKCkg
PiBzaXplLmhlaWdodCgpKQogICAgICAgICBtZW1zZXQoZGF0YSwgMCwgcmVzdWx0LT5sZW5ndGgo
KSk7CiAKICAgICBpbnQgb3JpZ2lueCA9IHJlY3QueCgpOwpAQCAtMjc2LDcgKzI3Niw3IEBAIFBh
c3NSZWZQdHI8Qnl0ZUFycmF5PiBnZXRJbWFnZURhdGEoY29uc3QKICAgICAgICAgZGVzdHggPSAt
b3JpZ2lueDsKICAgICAgICAgb3JpZ2lueCA9IDA7CiAgICAgfQotICAgIGludCBlbmR4ID0gcmVj
dC5yaWdodCgpOworICAgIGludCBlbmR4ID0gcmVjdC5tYXhYKCk7CiAgICAgaWYgKGVuZHggPiBz
aXplLndpZHRoKCkpCiAgICAgICAgIGVuZHggPSBzaXplLndpZHRoKCk7CiAgICAgaW50IG51bUNv
bHVtbnMgPSBlbmR4IC0gb3JpZ2lueDsKQEAgLTI4Nyw3ICsyODcsNyBAQCBQYXNzUmVmUHRyPEJ5
dGVBcnJheT4gZ2V0SW1hZ2VEYXRhKGNvbnN0CiAgICAgICAgIGRlc3R5ID0gLW9yaWdpbnk7CiAg
ICAgICAgIG9yaWdpbnkgPSAwOwogICAgIH0KLSAgICBpbnQgZW5keSA9IHJlY3QuYm90dG9tKCk7
CisgICAgaW50IGVuZHkgPSByZWN0Lm1heFkoKTsKICAgICBpZiAoZW5keSA+IHNpemUuaGVpZ2h0
KCkpCiAgICAgICAgIGVuZHkgPSBzaXplLmhlaWdodCgpOwogICAgIGludCBudW1Sb3dzID0gZW5k
eSAtIG9yaWdpbnk7CkBAIC0zNzcsOSArMzc3LDkgQEAgdm9pZCBwdXRJbWFnZURhdGEoQnl0ZUFy
cmF5KiYgc291cmNlLCBjbwogICAgIEFTU0VSVChkZXN0eCA+PSAwKTsKICAgICBBU1NFUlQoZGVz
dHggPCBzaXplLndpZHRoKCkpOwogICAgIEFTU0VSVChvcmlnaW54ID49IDApOwotICAgIEFTU0VS
VChvcmlnaW54IDw9IHNvdXJjZVJlY3QucmlnaHQoKSk7CisgICAgQVNTRVJUKG9yaWdpbnggPD0g
c291cmNlUmVjdC5tYXhYKCkpOwogCi0gICAgaW50IGVuZHggPSBkZXN0UG9pbnQueCgpICsgc291
cmNlUmVjdC5yaWdodCgpOworICAgIGludCBlbmR4ID0gZGVzdFBvaW50LngoKSArIHNvdXJjZVJl
Y3QubWF4WCgpOwogICAgIEFTU0VSVChlbmR4IDw9IHNpemUud2lkdGgoKSk7CiAKICAgICBpbnQg
bnVtQ29sdW1ucyA9IGVuZHggLSBkZXN0eDsKQEAgLTM4OSw5ICszODksOSBAQCB2b2lkIHB1dElt
YWdlRGF0YShCeXRlQXJyYXkqJiBzb3VyY2UsIGNvCiAgICAgQVNTRVJUKGRlc3R5ID49IDApOwog
ICAgIEFTU0VSVChkZXN0eSA8IHNpemUuaGVpZ2h0KCkpOwogICAgIEFTU0VSVChvcmlnaW55ID49
IDApOwotICAgIEFTU0VSVChvcmlnaW55IDw9IHNvdXJjZVJlY3QuYm90dG9tKCkpOworICAgIEFT
U0VSVChvcmlnaW55IDw9IHNvdXJjZVJlY3QubWF4WSgpKTsKIAotICAgIGludCBlbmR5ID0gZGVz
dFBvaW50LnkoKSArIHNvdXJjZVJlY3QuYm90dG9tKCk7CisgICAgaW50IGVuZHkgPSBkZXN0UG9p
bnQueSgpICsgc291cmNlUmVjdC5tYXhZKCk7CiAgICAgQVNTRVJUKGVuZHkgPD0gc2l6ZS5oZWln
aHQoKSk7CiAgICAgaW50IG51bVJvd3MgPSBlbmR5IC0gZGVzdHk7CiAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQ0cuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQ0cuY3BwCShyZXZpc2lvbiA3
NzI2MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQ0cuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yMDQsNyArMjA0LDcgQEAgdm9pZCBCaXRtYXBJbWFnZTo6ZHJh
dyhHcmFwaGljc0NvbnRleHQqIAogICAgICAgICAgICAgYWRqdXN0ZWREZXN0UmVjdC5zZXRIZWln
aHQoc3ViaW1hZ2VSZWN0LmhlaWdodCgpIC8geVNjYWxlKTsKIAogICAgICAgICAgICAgaW1hZ2Uu
YWRvcHRDRihDR0ltYWdlQ3JlYXRlV2l0aEltYWdlSW5SZWN0KGltYWdlLmdldCgpLCBzdWJpbWFn
ZVJlY3QpKTsKLSAgICAgICAgICAgIGlmIChjdXJySGVpZ2h0IDwgc3JjUmVjdC5ib3R0b20oKSkg
eworICAgICAgICAgICAgaWYgKGN1cnJIZWlnaHQgPCBzcmNSZWN0Lm1heFkoKSkgewogICAgICAg
ICAgICAgICAgIEFTU0VSVChDR0ltYWdlR2V0SGVpZ2h0KGltYWdlLmdldCgpKSA9PSBjdXJySGVp
Z2h0IC0gQ0dSZWN0SW50ZWdyYWwoc3JjUmVjdCkub3JpZ2luLnkpOwogICAgICAgICAgICAgICAg
IGFkanVzdGVkRGVzdFJlY3Quc2V0SGVpZ2h0KENHSW1hZ2VHZXRIZWlnaHQoaW1hZ2UuZ2V0KCkp
IC8geVNjYWxlKTsKICAgICAgICAgICAgIH0KQEAgLTIyNCw3ICsyMjQsNyBAQCB2b2lkIEJpdG1h
cEltYWdlOjpkcmF3KEdyYXBoaWNzQ29udGV4dCogCiAKICAgICAvLyBGbGlwIHRoZSBjb29yZHMu
CiAgICAgQ0dDb250ZXh0U2NhbGVDVE0oY29udGV4dCwgMSwgLTEpOwotICAgIGFkanVzdGVkRGVz
dFJlY3Quc2V0WSgtYWRqdXN0ZWREZXN0UmVjdC5ib3R0b20oKSk7CisgICAgYWRqdXN0ZWREZXN0
UmVjdC5zZXRZKC1hZGp1c3RlZERlc3RSZWN0Lm1heFkoKSk7CiAKICAgICAvLyBBZGp1c3QgdGhl
IGNvbG9yIHNwYWNlLgogICAgIGltYWdlID0gaW1hZ2VXaXRoQ29sb3JTcGFjZShpbWFnZS5nZXQo
KSwgc3R5bGVDb2xvclNwYWNlKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHAJKHJldmlzaW9uIDc3
MjYwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJF
ZmZlY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTksNyArMTE5LDcgQEAgUGFzc1JlZlB0cjxC
eXRlQXJyYXk+IEZpbHRlckVmZmVjdDo6YXNQcgogaW5saW5lIHZvaWQgRmlsdGVyRWZmZWN0Ojpj
b3B5SW1hZ2VCeXRlcyhCeXRlQXJyYXkqIHNvdXJjZSwgQnl0ZUFycmF5KiBkZXN0aW5hdGlvbiwg
Y29uc3QgSW50UmVjdCYgcmVjdCkKIHsKICAgICAvLyBDb3B5IHRoZSBuZWNlc3NhcnkgbGluZXMu
Ci0gICAgaWYgKHJlY3QueCgpIDwgMCB8fCByZWN0LnkoKSA8IDAgfHwgcmVjdC5ib3R0b20oKSA+
IG1fYWJzb2x1dGVQYWludFJlY3Qud2lkdGgoKSB8fCByZWN0LmJvdHRvbSgpID4gbV9hYnNvbHV0
ZVBhaW50UmVjdC5oZWlnaHQoKSkKKyAgICBpZiAocmVjdC54KCkgPCAwIHx8IHJlY3QueSgpIDwg
MCB8fCByZWN0Lm1heFkoKSA+IG1fYWJzb2x1dGVQYWludFJlY3Qud2lkdGgoKSB8fCByZWN0Lm1h
eFkoKSA+IG1fYWJzb2x1dGVQYWludFJlY3QuaGVpZ2h0KCkpCiAgICAgICAgIG1lbXNldChkZXN0
aW5hdGlvbi0+ZGF0YSgpLCAwLCBkZXN0aW5hdGlvbi0+bGVuZ3RoKCkpOwogCiAgICAgaW50IHhP
cmlnaW4gPSByZWN0LngoKTsKQEAgLTEyOCw3ICsxMjgsNyBAQCBpbmxpbmUgdm9pZCBGaWx0ZXJF
ZmZlY3Q6OmNvcHlJbWFnZUJ5dGVzCiAgICAgICAgIHhEZXN0ID0gLXhPcmlnaW47CiAgICAgICAg
IHhPcmlnaW4gPSAwOwogICAgIH0KLSAgICBpbnQgeEVuZCA9IHJlY3QucmlnaHQoKTsKKyAgICBp
bnQgeEVuZCA9IHJlY3QubWF4WCgpOwogICAgIGlmICh4RW5kID4gbV9hYnNvbHV0ZVBhaW50UmVj
dC53aWR0aCgpKQogICAgICAgICB4RW5kID0gbV9hYnNvbHV0ZVBhaW50UmVjdC53aWR0aCgpOwog
CkBAIC0xMzgsNyArMTM4LDcgQEAgaW5saW5lIHZvaWQgRmlsdGVyRWZmZWN0Ojpjb3B5SW1hZ2VC
eXRlcwogICAgICAgICB5RGVzdCA9IC15T3JpZ2luOwogICAgICAgICB5T3JpZ2luID0gMDsKICAg
ICB9Ci0gICAgaW50IHlFbmQgPSByZWN0LmJvdHRvbSgpOworICAgIGludCB5RW5kID0gcmVjdC5t
YXhZKCk7CiAgICAgaWYgKHlFbmQgPiBtX2Fic29sdXRlUGFpbnRSZWN0LmhlaWdodCgpKQogICAg
ICAgICB5RW5kID0gbV9hYnNvbHV0ZVBhaW50UmVjdC5oZWlnaHQoKTsKIApJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbXBsZXhUZXh0Q29udHJvbGxlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbXBs
ZXhUZXh0Q29udHJvbGxlci5jcHAJKHJldmlzaW9uIDc3MjYwKQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbXBsZXhUZXh0Q29udHJvbGxlci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTU1Myw5ICs1NTMsOSBAQCB2b2lkIENvbXBsZXhUZXh0Q29udHJvbGxlcjo6YWRq
dXN0R2x5cGhzCiAgICAgICAgICAgICBGbG9hdFJlY3QgZ2x5cGhCb3VuZHMgPSBmb250RGF0YS0+
Ym91bmRzRm9yR2x5cGgoZ2x5cGgpOwogICAgICAgICAgICAgZ2x5cGhCb3VuZHMubW92ZShnbHlw
aE9yaWdpbi54LCBnbHlwaE9yaWdpbi55KTsKICAgICAgICAgICAgIG1fbWluR2x5cGhCb3VuZGlu
Z0JveFggPSBtaW4obV9taW5HbHlwaEJvdW5kaW5nQm94WCwgZ2x5cGhCb3VuZHMueCgpKTsKLSAg
ICAgICAgICAgIG1fbWF4R2x5cGhCb3VuZGluZ0JveFggPSBtYXgobV9tYXhHbHlwaEJvdW5kaW5n
Qm94WCwgZ2x5cGhCb3VuZHMucmlnaHQoKSk7CisgICAgICAgICAgICBtX21heEdseXBoQm91bmRp
bmdCb3hYID0gbWF4KG1fbWF4R2x5cGhCb3VuZGluZ0JveFgsIGdseXBoQm91bmRzLm1heFgoKSk7
CiAgICAgICAgICAgICBtX21pbkdseXBoQm91bmRpbmdCb3hZID0gbWluKG1fbWluR2x5cGhCb3Vu
ZGluZ0JveFksIGdseXBoQm91bmRzLnkoKSk7Ci0gICAgICAgICAgICBtX21heEdseXBoQm91bmRp
bmdCb3hZID0gbWF4KG1fbWF4R2x5cGhCb3VuZGluZ0JveFksIGdseXBoQm91bmRzLmJvdHRvbSgp
KTsKKyAgICAgICAgICAgIG1fbWF4R2x5cGhCb3VuZGluZ0JveFkgPSBtYXgobV9tYXhHbHlwaEJv
dW5kaW5nQm94WSwgZ2x5cGhCb3VuZHMubWF4WSgpKTsKICAgICAgICAgICAgIGdseXBoT3JpZ2lu
LnggKz0gYWR2YW5jZS53aWR0aDsKICAgICAgICAgICAgIGdseXBoT3JpZ2luLnkgKz0gYWR2YW5j
ZS5oZWlnaHQ7CiAgICAgICAgICAgICAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL21hYy9TaW1wbGVGb250RGF0YU1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvU2ltcGxlRm9udERhdGFNYWMubW0JKHJldmlzaW9u
IDc3MjYwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL1NpbXBsZUZv
bnREYXRhTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC00NzcsMTMgKzQ3NywxMyBAQCBGbG9hdFJl
Y3QgU2ltcGxlRm9udERhdGE6OnBsYXRmb3JtQm91bmRzCiAjaWZuZGVmIEJVSUxESU5HX09OX1RJ
R0VSCiAgICAgYm91bmRpbmdCb3ggPSBDVEZvbnRHZXRCb3VuZGluZ1JlY3RzRm9yR2x5cGhzKG1f
cGxhdGZvcm1EYXRhLmN0Rm9udCgpLAogICAgICAgICAgICAgICAgICAgICBvcmllbnRhdGlvbigp
ID09IFZlcnRpY2FsID8ga0NURm9udFZlcnRpY2FsT3JpZW50YXRpb24gOiBrQ1RGb250SG9yaXpv
bnRhbE9yaWVudGF0aW9uLCAmZ2x5cGgsIDAsIDEpOwotICAgIGJvdW5kaW5nQm94LnNldFkoLWJv
dW5kaW5nQm94LmJvdHRvbSgpKTsKKyAgICBib3VuZGluZ0JveC5zZXRZKC1ib3VuZGluZ0JveC5t
YXhZKCkpOwogI2Vsc2UKICAgICAvLyBGSVhNRTogQ3VzdG9tIGZvbnRzIGRvbid0IGhhdmUgTlNG
b250cywgc28gdGhpcyBmdW5jdGlvbiBkb2Vzbid0IGNvbXB1dGUgY29ycmVjdCBib3VuZHMgZm9y
IHRoZXNlIG9uIFRpZ2VyLgogICAgIGlmICghbV9wbGF0Zm9ybURhdGEuZm9udCgpKQogICAgICAg
ICByZXR1cm4gYm91bmRpbmdCb3g7CiAgICAgYm91bmRpbmdCb3ggPSBbbV9wbGF0Zm9ybURhdGEu
Zm9udCgpIGJvdW5kaW5nUmVjdEZvckdseXBoOmdseXBoXTsKLSAgICBib3VuZGluZ0JveC5zZXRZ
KC1ib3VuZGluZ0JveC5ib3R0b20oKSk7CisgICAgYm91bmRpbmdCb3guc2V0WSgtYm91bmRpbmdC
b3gubWF4WSgpKTsKICNlbmRpZgogICAgIGlmIChtX3N5bnRoZXRpY0JvbGRPZmZzZXQpCiAgICAg
ICAgIGJvdW5kaW5nQm94LnNldFdpZHRoKGJvdW5kaW5nQm94LndpZHRoKCkgKyBtX3N5bnRoZXRp
Y0JvbGRPZmZzZXQpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJh
bnNmb3Jtcy9BZmZpbmVUcmFuc2Zvcm0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvQWZmaW5lVHJhbnNmb3JtLmNwcAkocmV2aXNp
b24gNzcyNjApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1z
L0FmZmluZVRyYW5zZm9ybS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxNiw5ICszMTYsOSBAQCBG
bG9hdFJlY3QgQWZmaW5lVHJhbnNmb3JtOjptYXBSZWN0KGNvbnN0CiAKICAgICBGbG9hdFF1YWQg
cmVzdWx0OwogICAgIHJlc3VsdC5zZXRQMShtYXBQb2ludChyZWN0LmxvY2F0aW9uKCkpKTsKLSAg
ICByZXN1bHQuc2V0UDIobWFwUG9pbnQoRmxvYXRQb2ludChyZWN0LnJpZ2h0KCksIHJlY3QueSgp
KSkpOwotICAgIHJlc3VsdC5zZXRQMyhtYXBQb2ludChGbG9hdFBvaW50KHJlY3QucmlnaHQoKSwg
cmVjdC5ib3R0b20oKSkpKTsKLSAgICByZXN1bHQuc2V0UDQobWFwUG9pbnQoRmxvYXRQb2ludChy
ZWN0LngoKSwgcmVjdC5ib3R0b20oKSkpKTsKKyAgICByZXN1bHQuc2V0UDIobWFwUG9pbnQoRmxv
YXRQb2ludChyZWN0Lm1heFgoKSwgcmVjdC55KCkpKSk7CisgICAgcmVzdWx0LnNldFAzKG1hcFBv
aW50KEZsb2F0UG9pbnQocmVjdC5tYXhYKCksIHJlY3QubWF4WSgpKSkpOworICAgIHJlc3VsdC5z
ZXRQNChtYXBQb2ludChGbG9hdFBvaW50KHJlY3QueCgpLCByZWN0Lm1heFkoKSkpKTsKICAgICBy
ZXR1cm4gcmVzdWx0LmJvdW5kaW5nQm94KCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2d0ay9SZW5kZXJUaGVtZUd0ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3RrL1JlbmRlclRoZW1lR3RrLmNwcAkocmV2aXNpb24gNzcyNjApCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUmVuZGVyVGhlbWVHdGsuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yNTgsNyArMjU4LDcgQEAgc3RhdGljIEludFBvaW50IGNlbnRlclJlY3RWZXJ0aWNh
bGx5SW5QYQogewogICAgIE5vZGUqIGlucHV0ID0gb2JqZWN0LT5ub2RlKCktPnNoYWRvd0FuY2Vz
dG9yTm9kZSgpOyAvLyBHZXQgdGhlIHJlbmRlcmVyIG9mIDxpbnB1dD4gZWxlbWVudC4KICAgICBp
ZiAoIWlucHV0LT5yZW5kZXJlcigpLT5pc0JveCgpKQotICAgICAgICByZXR1cm4gcmVjdC50b3BM
ZWZ0KCk7CisgICAgICAgIHJldHVybiByZWN0LmxvY2F0aW9uKCk7CiAKICAgICAvLyBJZiBwb3Nz
aWJsZSBjZW50ZXIgdGhlIHktY29vcmRpbmF0ZSBvZiB0aGUgcmVjdCB2ZXJ0aWNhbGx5IGluIHRo
ZSBwYXJlbnQgaW5wdXQgZWxlbWVudC4KICAgICAvLyBXZSBhbHNvIGFkZCBvbmUgcGl4ZWwgaGVy
ZSB0byBlbnN1cmUgdGhhdCB0aGUgeSBjb29yZGluYXRlIGlzIHJvdW5kZWQgdXAgZm9yIGJveCBo
ZWlnaHRzCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2lkZ2V0TWFjLm1tCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9XaWRnZXRNYWMubW0JKHJl
dmlzaW9uIDc3MjYwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1dpZGdldE1hYy5t
bQkod29ya2luZyBjb3B5KQpAQCAtMjUyLDcgKzI1Miw3IEBAIHZvaWQgV2lkZ2V0OjpwYWludChH
cmFwaGljc0NvbnRleHQqIHAsIGMKICAgICAgICAgSW50UmVjdCBkaXJ0eVJlY3QgPSByOwogICAg
ICAgICBkaXJ0eVJlY3QubW92ZSgtdHJhbnNmb3JtT3JpZ2luLngoKSwgLXRyYW5zZm9ybU9yaWdp
bi55KCkpOwogICAgICAgICBpZiAoIVt2aWV3IGlzRmxpcHBlZF0pCi0gICAgICAgICAgICBkaXJ0
eVJlY3Quc2V0WShbdmlldyBib3VuZHNdLnNpemUuaGVpZ2h0IC0gZGlydHlSZWN0LmJvdHRvbSgp
KTsKKyAgICAgICAgICAgIGRpcnR5UmVjdC5zZXRZKFt2aWV3IGJvdW5kc10uc2l6ZS5oZWlnaHQg
LSBkaXJ0eVJlY3QubWF4WSgpKTsKIAogICAgICAgICBbdmlldyBkaXNwbGF5UmVjdElnbm9yaW5n
T3BhY2l0eTpkaXJ0eVJlY3RdOwogCkBAIC0yOTYsNyArMjk2LDcgQEAgdm9pZCBXaWRnZXQ6OnBh
aW50KEdyYXBoaWNzQ29udGV4dCogcCwgYwogICAgICAgICBJbnRSZWN0IGRpcnR5UmVjdCA9IHI7
CiAgICAgICAgIGRpcnR5UmVjdC5tb3ZlKC10cmFuc2Zvcm1PcmlnaW4ueCgpLCAtdHJhbnNmb3Jt
T3JpZ2luLnkoKSk7CiAgICAgICAgIGlmICghW3ZpZXcgaXNGbGlwcGVkXSkKLSAgICAgICAgICAg
IGRpcnR5UmVjdC5zZXRZKFt2aWV3IGJvdW5kc10uc2l6ZS5oZWlnaHQgLSBkaXJ0eVJlY3QuYm90
dG9tKCkpOworICAgICAgICAgICAgZGlydHlSZWN0LnNldFkoW3ZpZXcgYm91bmRzXS5zaXplLmhl
aWdodCAtIGRpcnR5UmVjdC5tYXhZKCkpOwogCiAgICAgICAgIEJFR0lOX0JMT0NLX09CSkNfRVhD
RVBUSU9OUzsKICAgICAgICAgewpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGlu
ZUZsb3dCb3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Jbmxp
bmVGbG93Qm94LmNwcAkocmV2aXNpb24gNzcyNjApCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvSW5saW5lRmxvd0JveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcxOCwxNCArNzE4LDE0IEBA
IHZvaWQgSW5saW5lRmxvd0JveDo6YWRkQm94U2hhZG93VmlzdWFsT3YKICAgICByZW5kZXJlcigp
LT5zdHlsZShtX2ZpcnN0TGluZSktPmdldEJveFNoYWRvd0Jsb2NrRGlyZWN0aW9uRXh0ZW50KGJv
eFNoYWRvd0xvZ2ljYWxUb3AsIGJveFNoYWRvd0xvZ2ljYWxCb3R0b20pOwogICAgIAogICAgIGlu
dCBsb2dpY2FsVG9wVmlzdWFsT3ZlcmZsb3cgPSBtaW4obG9naWNhbFRvcCgpICsgYm94U2hhZG93
TG9naWNhbFRvcCwgbG9naWNhbFZpc3VhbE92ZXJmbG93LnkoKSk7Ci0gICAgaW50IGxvZ2ljYWxC
b3R0b21WaXN1YWxPdmVyZmxvdyA9IG1heChsb2dpY2FsQm90dG9tKCkgKyBib3hTaGFkb3dMb2dp
Y2FsQm90dG9tLCBsb2dpY2FsVmlzdWFsT3ZlcmZsb3cuYm90dG9tKCkpOworICAgIGludCBsb2dp
Y2FsQm90dG9tVmlzdWFsT3ZlcmZsb3cgPSBtYXgobG9naWNhbEJvdHRvbSgpICsgYm94U2hhZG93
TG9naWNhbEJvdHRvbSwgbG9naWNhbFZpc3VhbE92ZXJmbG93Lm1heFkoKSk7CiAgICAgCiAgICAg
aW50IGJveFNoYWRvd0xvZ2ljYWxMZWZ0OwogICAgIGludCBib3hTaGFkb3dMb2dpY2FsUmlnaHQ7
CiAgICAgcmVuZGVyZXIoKS0+c3R5bGUobV9maXJzdExpbmUpLT5nZXRCb3hTaGFkb3dJbmxpbmVE
aXJlY3Rpb25FeHRlbnQoYm94U2hhZG93TG9naWNhbExlZnQsIGJveFNoYWRvd0xvZ2ljYWxSaWdo
dCk7CiAKICAgICBpbnQgbG9naWNhbExlZnRWaXN1YWxPdmVyZmxvdyA9IG1pbihsb2dpY2FsTGVm
dCgpICsgYm94U2hhZG93TG9naWNhbExlZnQsIGxvZ2ljYWxWaXN1YWxPdmVyZmxvdy54KCkpOwot
ICAgIGludCBsb2dpY2FsUmlnaHRWaXN1YWxPdmVyZmxvdyA9IG1heChsb2dpY2FsUmlnaHQoKSAr
IGJveFNoYWRvd0xvZ2ljYWxSaWdodCwgbG9naWNhbFZpc3VhbE92ZXJmbG93LnJpZ2h0KCkpOwor
ICAgIGludCBsb2dpY2FsUmlnaHRWaXN1YWxPdmVyZmxvdyA9IG1heChsb2dpY2FsUmlnaHQoKSAr
IGJveFNoYWRvd0xvZ2ljYWxSaWdodCwgbG9naWNhbFZpc3VhbE92ZXJmbG93Lm1heFgoKSk7CiAg
ICAgCiAgICAgbG9naWNhbFZpc3VhbE92ZXJmbG93ID0gSW50UmVjdChsb2dpY2FsTGVmdFZpc3Vh
bE92ZXJmbG93LCBsb2dpY2FsVG9wVmlzdWFsT3ZlcmZsb3csCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBsb2dpY2FsUmlnaHRWaXN1YWxPdmVyZmxvdyAtIGxvZ2ljYWxMZWZ0
VmlzdWFsT3ZlcmZsb3csIGxvZ2ljYWxCb3R0b21WaXN1YWxPdmVyZmxvdyAtIGxvZ2ljYWxUb3BW
aXN1YWxPdmVyZmxvdyk7CkBAIC03ODAsOSArNzgwLDkgQEAgdm9pZCBJbmxpbmVGbG93Qm94Ojph
ZGRUZXh0Qm94VmlzdWFsT3ZlcgogICAgIGludCBjaGlsZE92ZXJmbG93TG9naWNhbFJpZ2h0ID0g
bWF4KHRleHRTaGFkb3dMb2dpY2FsUmlnaHQgKyByaWdodEdseXBoT3ZlcmZsb3csIHJpZ2h0R2x5
cGhPdmVyZmxvdyk7CiAKICAgICBpbnQgbG9naWNhbFRvcFZpc3VhbE92ZXJmbG93ID0gbWluKHRl
eHRCb3gtPmxvZ2ljYWxUb3AoKSArIGNoaWxkT3ZlcmZsb3dMb2dpY2FsVG9wLCBsb2dpY2FsVmlz
dWFsT3ZlcmZsb3cueSgpKTsKLSAgICBpbnQgbG9naWNhbEJvdHRvbVZpc3VhbE92ZXJmbG93ID0g
bWF4KHRleHRCb3gtPmxvZ2ljYWxCb3R0b20oKSArIGNoaWxkT3ZlcmZsb3dMb2dpY2FsQm90dG9t
LCBsb2dpY2FsVmlzdWFsT3ZlcmZsb3cuYm90dG9tKCkpOworICAgIGludCBsb2dpY2FsQm90dG9t
VmlzdWFsT3ZlcmZsb3cgPSBtYXgodGV4dEJveC0+bG9naWNhbEJvdHRvbSgpICsgY2hpbGRPdmVy
Zmxvd0xvZ2ljYWxCb3R0b20sIGxvZ2ljYWxWaXN1YWxPdmVyZmxvdy5tYXhZKCkpOwogICAgIGlu
dCBsb2dpY2FsTGVmdFZpc3VhbE92ZXJmbG93ID0gbWluKHRleHRCb3gtPmxvZ2ljYWxMZWZ0KCkg
KyBjaGlsZE92ZXJmbG93TG9naWNhbExlZnQsIGxvZ2ljYWxWaXN1YWxPdmVyZmxvdy54KCkpOwot
ICAgIGludCBsb2dpY2FsUmlnaHRWaXN1YWxPdmVyZmxvdyA9IG1heCh0ZXh0Qm94LT5sb2dpY2Fs
UmlnaHQoKSArIGNoaWxkT3ZlcmZsb3dMb2dpY2FsUmlnaHQsIGxvZ2ljYWxWaXN1YWxPdmVyZmxv
dy5yaWdodCgpKTsKKyAgICBpbnQgbG9naWNhbFJpZ2h0VmlzdWFsT3ZlcmZsb3cgPSBtYXgodGV4
dEJveC0+bG9naWNhbFJpZ2h0KCkgKyBjaGlsZE92ZXJmbG93TG9naWNhbFJpZ2h0LCBsb2dpY2Fs
VmlzdWFsT3ZlcmZsb3cubWF4WCgpKTsKICAgICAKICAgICBsb2dpY2FsVmlzdWFsT3ZlcmZsb3cg
PSBJbnRSZWN0KGxvZ2ljYWxMZWZ0VmlzdWFsT3ZlcmZsb3csIGxvZ2ljYWxUb3BWaXN1YWxPdmVy
ZmxvdywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2ljYWxSaWdodFZp
c3VhbE92ZXJmbG93IC0gbG9naWNhbExlZnRWaXN1YWxPdmVyZmxvdywgbG9naWNhbEJvdHRvbVZp
c3VhbE92ZXJmbG93IC0gbG9naWNhbFRvcFZpc3VhbE92ZXJmbG93KTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHAJKHJldmlzaW9uIDc3MjYwKQorKysg
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xNjksNyArMTY5LDcgQEAgSW50UmVjdCBJbmxpbmVUZXh0Qm94OjpzZWxlY3Rpb25SZWN0
KGludAogICAgIGludCBsb2dpY2FsV2lkdGggPSByLndpZHRoKCk7CiAgICAgaWYgKHIueCgpID4g
bV9sb2dpY2FsV2lkdGgpCiAgICAgICAgIGxvZ2ljYWxXaWR0aCAgPSAwOwotICAgIGVsc2UgaWYg
KHIucmlnaHQoKSA+IG1fbG9naWNhbFdpZHRoKQorICAgIGVsc2UgaWYgKHIubWF4WCgpID4gbV9s
b2dpY2FsV2lkdGgpCiAgICAgICAgIGxvZ2ljYWxXaWR0aCA9IG1fbG9naWNhbFdpZHRoIC0gci54
KCk7CiAgICAgCiAgICAgSW50UG9pbnQgdG9wUG9pbnQgPSBpc0hvcml6b250YWwoKSA/IEludFBv
aW50KHR4ICsgbV94ICsgci54KCksIHR5ICsgc2VsVG9wKSA6IEludFBvaW50KHR4ICsgc2VsVG9w
LCB0eSArIG1feSArIHIueCgpKTsKQEAgLTQ0Miw3ICs0NDIsNyBAQCB2b2lkIElubGluZVRleHRC
b3g6OnBhaW50KFBhaW50SW5mbyYgcGFpCiAgICAgaW50IGxvZ2ljYWxTdGFydCA9IGxvZ2ljYWxM
ZWZ0KCkgLSBsb2dpY2FsTGVmdE92ZXJmbG93ICsgKGlzSG9yaXpvbnRhbCgpID8gdHggOiB0eSk7
CiAgICAgaW50IGxvZ2ljYWxFeHRlbnQgPSBsb2dpY2FsV2lkdGgoKSArIGxvZ2ljYWxMZWZ0T3Zl
cmZsb3cgKyBsb2dpY2FsUmlnaHRPdmVyZmxvdzsKICAgICAKLSAgICBpbnQgcGFpbnRFbmQgPSBp
c0hvcml6b250YWwoKSA/IHBhaW50SW5mby5yZWN0LnJpZ2h0KCkgOiBwYWludEluZm8ucmVjdC5i
b3R0b20oKTsKKyAgICBpbnQgcGFpbnRFbmQgPSBpc0hvcml6b250YWwoKSA/IHBhaW50SW5mby5y
ZWN0Lm1heFgoKSA6IHBhaW50SW5mby5yZWN0Lm1heFkoKTsKICAgICBpbnQgcGFpbnRTdGFydCA9
IGlzSG9yaXpvbnRhbCgpID8gcGFpbnRJbmZvLnJlY3QueCgpIDogcGFpbnRJbmZvLnJlY3QueSgp
OwogICAgIAogICAgIGlmIChsb2dpY2FsU3RhcnQgPj0gcGFpbnRFbmQgfHwgbG9naWNhbFN0YXJ0
ICsgbG9naWNhbEV4dGVudCA8PSBwYWludFN0YXJ0KQpAQCAtNDkxLDkgKzQ5MSw5IEBAIHZvaWQg
SW5saW5lVGV4dEJveDo6cGFpbnQoUGFpbnRJbmZvJiBwYWkKICAgICBib29sIHNob3VsZFJvdGF0
ZSA9ICFpc0hvcml6b250YWwoKSAmJiAoIWNvbWJpbmVkVGV4dCB8fCAhY29tYmluZWRUZXh0LT5p
c0NvbWJpbmVkKCkpOwogICAgIGlmIChzaG91bGRSb3RhdGUpIHsKICAgICAgICAgY29udGV4dC0+
c2F2ZSgpOwotICAgICAgICBjb250ZXh0LT50cmFuc2xhdGUoYm94UmVjdC54KCksIGJveFJlY3Qu
Ym90dG9tKCkpOworICAgICAgICBjb250ZXh0LT50cmFuc2xhdGUoYm94UmVjdC54KCksIGJveFJl
Y3QubWF4WSgpKTsKICAgICAgICAgY29udGV4dC0+cm90YXRlKHN0YXRpY19jYXN0PGZsb2F0Pihk
ZWcycmFkKDkwLikpKTsKLSAgICAgICAgY29udGV4dC0+dHJhbnNsYXRlKC1ib3hSZWN0LngoKSwg
LWJveFJlY3QuYm90dG9tKCkpOworICAgICAgICBjb250ZXh0LT50cmFuc2xhdGUoLWJveFJlY3Qu
eCgpLCAtYm94UmVjdC5tYXhZKCkpOwogICAgIH0KICAgICAKICAgICAKQEAgLTEyMTYsNyArMTIx
Niw3IEBAIGludCBJbmxpbmVUZXh0Qm94Ojpwb3NpdGlvbkZvck9mZnNldChpbnQKICAgICBpbnQg
dG8gPSAhaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpID8gbV9sZW4gOiBvZmZzZXQgLSBtX3N0YXJ0
OwogICAgIC8vIEZJWE1FOiBEbyB3ZSBuZWVkIHRvIGFkZCByaWdodEJlYXJpbmcgaGVyZT8KICAg
ICByZXR1cm4gZW5jbG9zaW5nSW50UmVjdChmLnNlbGVjdGlvblJlY3RGb3JUZXh0KFRleHRSdW4o
dGV4dC0+dGV4dCgpLT5jaGFyYWN0ZXJzKCkgKyBtX3N0YXJ0LCBtX2xlbiwgdGV4dFJlbmRlcmVy
KCktPmFsbG93VGFicygpLCB0ZXh0UG9zKCksIG1fZXhwYW5zaW9uLCB0cmFpbGluZ0V4cGFuc2lv
bkJlaGF2aW9yKCksICFpc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCksIG1fZGlyT3ZlcnJpZGUpLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW50UG9p
bnQobG9naWNhbExlZnQoKSwgMCksIDAsIGZyb20sIHRvKSkucmlnaHQoKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEludFBvaW50KGxvZ2ljYWxM
ZWZ0KCksIDApLCAwLCBmcm9tLCB0bykpLm1heFgoKTsKIH0KIAogYm9vbCBJbmxpbmVUZXh0Qm94
Ojpjb250YWluc0NhcmV0T2Zmc2V0KGludCBvZmZzZXQpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAJKHJldmlzaW9uIDc3MjYwKQorKysgU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTMy
NSwxMyArMTMyNSwxMyBAQCB2b2lkIFJlbmRlckJsb2NrOjphZGRPdmVyZmxvd0Zyb21DaGlsZHJl
CiAgICAgICAgICAgICBJbnRSZWN0IGxhc3RSZWN0ID0gY29sdW1uUmVjdEF0KGNvbEluZm8sIGNv
bHVtbkNvdW50KGNvbEluZm8pIC0gMSk7CiAgICAgICAgICAgICBpZiAoc3R5bGUoKS0+aXNIb3Jp
em9udGFsV3JpdGluZ01vZGUoKSkgewogICAgICAgICAgICAgICAgIGludCBvdmVyZmxvd0xlZnQg
PSAhc3R5bGUoKS0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpID8gbWluKDAsIGxhc3RSZWN0Lngo
KSkgOiAwOwotICAgICAgICAgICAgICAgIGludCBvdmVyZmxvd1JpZ2h0ID0gc3R5bGUoKS0+aXNM
ZWZ0VG9SaWdodERpcmVjdGlvbigpID8gbWF4KHdpZHRoKCksIGxhc3RSZWN0LnJpZ2h0KCkpIDog
MDsKKyAgICAgICAgICAgICAgICBpbnQgb3ZlcmZsb3dSaWdodCA9IHN0eWxlKCktPmlzTGVmdFRv
UmlnaHREaXJlY3Rpb24oKSA/IG1heCh3aWR0aCgpLCBsYXN0UmVjdC5tYXhYKCkpIDogMDsKICAg
ICAgICAgICAgICAgICBpbnQgb3ZlcmZsb3dIZWlnaHQgPSBib3JkZXJCZWZvcmUoKSArIHBhZGRp
bmdCZWZvcmUoKSArIGNvbEluZm8tPmNvbHVtbkhlaWdodCgpOwogICAgICAgICAgICAgICAgIGFk
ZExheW91dE92ZXJmbG93KEludFJlY3Qob3ZlcmZsb3dMZWZ0LCAwLCBvdmVyZmxvd1JpZ2h0IC0g
b3ZlcmZsb3dMZWZ0LCBvdmVyZmxvd0hlaWdodCkpOwogICAgICAgICAgICAgfSBlbHNlIHsKICAg
ICAgICAgICAgICAgICBJbnRSZWN0IGxhc3RSZWN0ID0gY29sdW1uUmVjdEF0KGNvbEluZm8sIGNv
bHVtbkNvdW50KGNvbEluZm8pIC0gMSk7CiAgICAgICAgICAgICAgICAgaW50IG92ZXJmbG93VG9w
ID0gIXN0eWxlKCktPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/IG1pbigwLCBsYXN0UmVjdC55
KCkpIDogMDsKLSAgICAgICAgICAgICAgICBpbnQgb3ZlcmZsb3dCb3R0b20gPSBzdHlsZSgpLT5p
c0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyBtYXgoaGVpZ2h0KCksIGxhc3RSZWN0LmJvdHRvbSgp
KSA6IDA7CisgICAgICAgICAgICAgICAgaW50IG92ZXJmbG93Qm90dG9tID0gc3R5bGUoKS0+aXNM
ZWZ0VG9SaWdodERpcmVjdGlvbigpID8gbWF4KGhlaWdodCgpLCBsYXN0UmVjdC5tYXhZKCkpIDog
MDsKICAgICAgICAgICAgICAgICBpbnQgb3ZlcmZsb3dXaWR0aCA9IGJvcmRlckJlZm9yZSgpICsg
cGFkZGluZ0JlZm9yZSgpICsgY29sSW5mby0+Y29sdW1uSGVpZ2h0KCk7CiAgICAgICAgICAgICAg
ICAgYWRkTGF5b3V0T3ZlcmZsb3coSW50UmVjdCgwLCBvdmVyZmxvd1RvcCwgb3ZlcmZsb3dXaWR0
aCwgb3ZlcmZsb3dCb3R0b20gLSBvdmVyZmxvd1RvcCkpOwogICAgICAgICAgICAgfQpAQCAtMjM0
NywxNCArMjM0NywxNCBAQCB2b2lkIFJlbmRlckJsb2NrOjpwYWludENoaWxkcmVuKFBhaW50SW5m
CiAgICAgICAgIGJvb2wgY2hlY2tCZWZvcmVBbHdheXMgPSAhY2hpbGRyZW5JbmxpbmUoKSAmJiAo
dXNlUHJpbnRSZWN0ICYmIGNoaWxkLT5zdHlsZSgpLT5wYWdlQnJlYWtCZWZvcmUoKSA9PSBQQkFM
V0FZUyk7CiAgICAgICAgIGlmIChjaGVja0JlZm9yZUFsd2F5cwogICAgICAgICAgICAgJiYgKHR5
ICsgY2hpbGQtPnkoKSkgPiBwYWludEluZm8ucmVjdC55KCkKLSAgICAgICAgICAgICYmICh0eSAr
IGNoaWxkLT55KCkpIDwgcGFpbnRJbmZvLnJlY3QuYm90dG9tKCkpIHsKKyAgICAgICAgICAgICYm
ICh0eSArIGNoaWxkLT55KCkpIDwgcGFpbnRJbmZvLnJlY3QubWF4WSgpKSB7CiAgICAgICAgICAg
ICB2aWV3KCktPnNldEJlc3RUcnVuY2F0ZWRBdCh0eSArIGNoaWxkLT55KCksIHRoaXMsIHRydWUp
OwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKCFjaGlsZC0+
aXNGbG9hdGluZygpICYmIGNoaWxkLT5pc1JlcGxhY2VkKCkgJiYgdXNlUHJpbnRSZWN0ICYmIGNo
aWxkLT5oZWlnaHQoKSA8PSByZW5kZXJWaWV3LT5wcmludFJlY3QoKS5oZWlnaHQoKSkgewogICAg
ICAgICAgICAgLy8gUGFnaW5hdGUgYmxvY2stbGV2ZWwgcmVwbGFjZWQgZWxlbWVudHMuCi0gICAg
ICAgICAgICBpZiAodHkgKyBjaGlsZC0+eSgpICsgY2hpbGQtPmhlaWdodCgpID4gcmVuZGVyVmll
dy0+cHJpbnRSZWN0KCkuYm90dG9tKCkpIHsKKyAgICAgICAgICAgIGlmICh0eSArIGNoaWxkLT55
KCkgKyBjaGlsZC0+aGVpZ2h0KCkgPiByZW5kZXJWaWV3LT5wcmludFJlY3QoKS5tYXhZKCkpIHsK
ICAgICAgICAgICAgICAgICBpZiAodHkgKyBjaGlsZC0+eSgpIDwgcmVuZGVyVmlldy0+dHJ1bmNh
dGVkQXQoKSkKICAgICAgICAgICAgICAgICAgICAgcmVuZGVyVmlldy0+c2V0QmVzdFRydW5jYXRl
ZEF0KHR5ICsgY2hpbGQtPnkoKSwgY2hpbGQpOwogICAgICAgICAgICAgICAgIC8vIElmIHdlIHdl
cmUgYWJsZSB0byB0cnVuY2F0ZSwgZG9uJ3QgcGFpbnQuCkBAIC0yMzcxLDcgKzIzNzEsNyBAQCB2
b2lkIFJlbmRlckJsb2NrOjpwYWludENoaWxkcmVuKFBhaW50SW5mCiAgICAgICAgIGJvb2wgY2hl
Y2tBZnRlckFsd2F5cyA9ICFjaGlsZHJlbklubGluZSgpICYmICh1c2VQcmludFJlY3QgJiYgY2hp
bGQtPnN0eWxlKCktPnBhZ2VCcmVha0FmdGVyKCkgPT0gUEJBTFdBWVMpOwogICAgICAgICBpZiAo
Y2hlY2tBZnRlckFsd2F5cwogICAgICAgICAgICAgJiYgKHR5ICsgY2hpbGQtPnkoKSArIGNoaWxk
LT5oZWlnaHQoKSkgPiBwYWludEluZm8ucmVjdC55KCkKLSAgICAgICAgICAgICYmICh0eSArIGNo
aWxkLT55KCkgKyBjaGlsZC0+aGVpZ2h0KCkpIDwgcGFpbnRJbmZvLnJlY3QuYm90dG9tKCkpIHsK
KyAgICAgICAgICAgICYmICh0eSArIGNoaWxkLT55KCkgKyBjaGlsZC0+aGVpZ2h0KCkpIDwgcGFp
bnRJbmZvLnJlY3QubWF4WSgpKSB7CiAgICAgICAgICAgICB2aWV3KCktPnNldEJlc3RUcnVuY2F0
ZWRBdCh0eSArIGNoaWxkLT55KCkgKyBjaGlsZC0+aGVpZ2h0KCkgKyBtYXgoMCwgY2hpbGQtPmNv
bGxhcHNlZE1hcmdpbkFmdGVyKCkpLCB0aGlzLCB0cnVlKTsKICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgfQpAQCAtMjUzNyw3ICsyNTM3LDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6cGFpbnRF
bGxpcHNpc0JveGVzKFBhaQogICAgICAgICAvLyBpbnRlcnNlY3QuCiAgICAgICAgIGludCB5UG9z
ID0gdHkgKyBmaXJzdExpbmVCb3goKS0+eSgpOwogICAgICAgICBpbnQgaCA9IGxhc3RMaW5lQm94
KCktPnkoKSArIGxhc3RMaW5lQm94KCktPmxvZ2ljYWxIZWlnaHQoKSAtIGZpcnN0TGluZUJveCgp
LT55KCk7Ci0gICAgICAgIGlmICh5UG9zID49IHBhaW50SW5mby5yZWN0LmJvdHRvbSgpIHx8IHlQ
b3MgKyBoIDw9IHBhaW50SW5mby5yZWN0LnkoKSkKKyAgICAgICAgaWYgKHlQb3MgPj0gcGFpbnRJ
bmZvLnJlY3QubWF4WSgpIHx8IHlQb3MgKyBoIDw9IHBhaW50SW5mby5yZWN0LnkoKSkKICAgICAg
ICAgICAgIHJldHVybjsKIAogICAgICAgICAvLyBTZWUgaWYgb3VyIGJveGVzIGludGVyc2VjdCB3
aXRoIHRoZSBkaXJ0eSByZWN0LiAgSWYgc28sIHRoZW4gd2UgcGFpbnQKQEAgLTI1NDYsNyArMjU0
Niw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OnBhaW50RWxsaXBzaXNCb3hlcyhQYWkKICAgICAgICAg
Zm9yIChSb290SW5saW5lQm94KiBjdXJyID0gZmlyc3RSb290Qm94KCk7IGN1cnI7IGN1cnIgPSBj
dXJyLT5uZXh0Um9vdEJveCgpKSB7CiAgICAgICAgICAgICB5UG9zID0gdHkgKyBjdXJyLT55KCk7
CiAgICAgICAgICAgICBoID0gY3Vyci0+bG9naWNhbEhlaWdodCgpOwotICAgICAgICAgICAgaWYg
KGN1cnItPmVsbGlwc2lzQm94KCkgJiYgeVBvcyA8IHBhaW50SW5mby5yZWN0LmJvdHRvbSgpICYm
IHlQb3MgKyBoID4gcGFpbnRJbmZvLnJlY3QueSgpKQorICAgICAgICAgICAgaWYgKGN1cnItPmVs
bGlwc2lzQm94KCkgJiYgeVBvcyA8IHBhaW50SW5mby5yZWN0Lm1heFkoKSAmJiB5UG9zICsgaCA+
IHBhaW50SW5mby5yZWN0LnkoKSkKICAgICAgICAgICAgICAgICBjdXJyLT5wYWludEVsbGlwc2lz
Qm94KHBhaW50SW5mbywgdHgsIHR5KTsKICAgICAgICAgfQogICAgIH0KQEAgLTI4MTYsOCArMjgx
Niw4IEBAIEdhcFJlY3RzIFJlbmRlckJsb2NrOjppbmxpbmVTZWxlY3Rpb25HYXAKICAgICAgICAg
SW50UmVjdCBsb2dpY2FsUmVjdChjdXJyLT5sb2dpY2FsTGVmdCgpLCBzZWxUb3AsIGN1cnItPmxv
Z2ljYWxXaWR0aCgpLCBzZWxUb3AgKyBzZWxIZWlnaHQpOwogICAgICAgICBsb2dpY2FsUmVjdC5t
b3ZlKHN0eWxlKCktPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBvZmZzZXRGcm9tUm9vdEJs
b2NrIDogSW50U2l6ZShvZmZzZXRGcm9tUm9vdEJsb2NrLmhlaWdodCgpLCBvZmZzZXRGcm9tUm9v
dEJsb2NrLndpZHRoKCkpKTsKICAgICAgICAgSW50UmVjdCBwaHlzaWNhbFJlY3QgPSByb290Qmxv
Y2stPmxvZ2ljYWxSZWN0VG9QaHlzaWNhbFJlY3Qocm9vdEJsb2NrUGh5c2ljYWxQb3NpdGlvbiwg
bG9naWNhbFJlY3QpOwotICAgICAgICBpZiAoIXBhaW50SW5mbyB8fCAoc3R5bGUoKS0+aXNIb3Jp
em9udGFsV3JpdGluZ01vZGUoKSAmJiBwaHlzaWNhbFJlY3QueSgpIDwgcGFpbnRJbmZvLT5yZWN0
LmJvdHRvbSgpICYmIHBoeXNpY2FsUmVjdC5ib3R0b20oKSA+IHBhaW50SW5mby0+cmVjdC55KCkp
Ci0gICAgICAgICAgICB8fCAoIXN0eWxlKCktPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgJiYg
cGh5c2ljYWxSZWN0LngoKSA8IHBhaW50SW5mby0+cmVjdC5yaWdodCgpICYmIHBoeXNpY2FsUmVj
dC5yaWdodCgpID4gcGFpbnRJbmZvLT5yZWN0LngoKSkpCisgICAgICAgIGlmICghcGFpbnRJbmZv
IHx8IChzdHlsZSgpLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpICYmIHBoeXNpY2FsUmVjdC55
KCkgPCBwYWludEluZm8tPnJlY3QubWF4WSgpICYmIHBoeXNpY2FsUmVjdC5tYXhZKCkgPiBwYWlu
dEluZm8tPnJlY3QueSgpKQorICAgICAgICAgICAgfHwgKCFzdHlsZSgpLT5pc0hvcml6b250YWxX
cml0aW5nTW9kZSgpICYmIHBoeXNpY2FsUmVjdC54KCkgPCBwYWludEluZm8tPnJlY3QubWF4WCgp
ICYmIHBoeXNpY2FsUmVjdC5tYXhYKCkgPiBwYWludEluZm8tPnJlY3QueCgpKSkKICAgICAgICAg
ICAgIHJlc3VsdC51bml0ZShjdXJyLT5saW5lU2VsZWN0aW9uR2FwKHJvb3RCbG9jaywgcm9vdEJs
b2NrUGh5c2ljYWxQb3NpdGlvbiwgb2Zmc2V0RnJvbVJvb3RCbG9jaywgc2VsVG9wLCBzZWxIZWln
aHQsIHBhaW50SW5mbykpOwogCiAgICAgICAgIGxhc3RTZWxlY3RlZExpbmUgPSBjdXJyOwpAQCAt
NDMyMiw3ICs0MzIyLDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6YWRqdXN0UG9pbnRUb0NvbHVtbkNv
bgogICAgICAgICBJbnRSZWN0IGNvbFJlY3QgPSBjb2x1bW5SZWN0QXQoY29sSW5mbywgaSk7CiAg
ICAgICAgIGlmIChzdHlsZSgpLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpKSB7CiAgICAgICAg
ICAgICBJbnRSZWN0IGdhcEFuZENvbHVtblJlY3QoY29sUmVjdC54KCkgLSBoYWxmQ29sR2FwLCBj
b2xSZWN0LnkoKSwgY29sUmVjdC53aWR0aCgpICsgY29sR2FwLCBjb2xSZWN0LmhlaWdodCgpKTsK
LSAgICAgICAgICAgIGlmIChwb2ludC54KCkgPj0gZ2FwQW5kQ29sdW1uUmVjdC54KCkgJiYgcG9p
bnQueCgpIDwgZ2FwQW5kQ29sdW1uUmVjdC5yaWdodCgpKSB7CisgICAgICAgICAgICBpZiAocG9p
bnQueCgpID49IGdhcEFuZENvbHVtblJlY3QueCgpICYmIHBvaW50LngoKSA8IGdhcEFuZENvbHVt
blJlY3QubWF4WCgpKSB7CiAgICAgICAgICAgICAgICAgLy8gRklYTUU6IFRoZSBjbGFtcGluZyB0
aGF0IGZvbGxvd3MgaXMgbm90IGNvbXBsZXRlbHkgcmlnaHQgZm9yIHJpZ2h0LXRvLWxlZnQKICAg
ICAgICAgICAgICAgICAvLyBjb250ZW50LgogICAgICAgICAgICAgICAgIC8vIENsYW1wIGV2ZXJ5
dGhpbmcgYWJvdmUgdGhlIGNvbHVtbiB0byBpdHMgdG9wIGxlZnQuCkBAIC00MzMwLDcgKzQzMzAs
NyBAQCB2b2lkIFJlbmRlckJsb2NrOjphZGp1c3RQb2ludFRvQ29sdW1uQ29uCiAgICAgICAgICAg
ICAgICAgICAgIHBvaW50ID0gZ2FwQW5kQ29sdW1uUmVjdC5sb2NhdGlvbigpOwogICAgICAgICAg
ICAgICAgIC8vIENsYW1wIGV2ZXJ5dGhpbmcgYmVsb3cgdGhlIGNvbHVtbiB0byB0aGUgbmV4dCBj
b2x1bW4ncyB0b3AgbGVmdC4gSWYgdGhlcmUgaXMKICAgICAgICAgICAgICAgICAvLyBubyBuZXh0
IGNvbHVtbiwgdGhpcyBzdGlsbCBtYXBzIHRvIGp1c3QgYWZ0ZXIgdGhpcyBjb2x1bW4uCi0gICAg
ICAgICAgICAgICAgZWxzZSBpZiAocG9pbnQueSgpID49IGdhcEFuZENvbHVtblJlY3QuYm90dG9t
KCkpIHsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChwb2ludC55KCkgPj0gZ2FwQW5kQ29sdW1u
UmVjdC5tYXhZKCkpIHsKICAgICAgICAgICAgICAgICAgICAgcG9pbnQgPSBnYXBBbmRDb2x1bW5S
ZWN0LmxvY2F0aW9uKCk7CiAgICAgICAgICAgICAgICAgICAgIHBvaW50Lm1vdmUoMCwgZ2FwQW5k
Q29sdW1uUmVjdC5oZWlnaHQoKSk7CiAgICAgICAgICAgICAgICAgfQpAQCAtNDM0NCw3ICs0MzQ0
LDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6YWRqdXN0UG9pbnRUb0NvbHVtbkNvbgogICAgICAgICAg
ICAgbG9naWNhbE9mZnNldCArPSBjb2xSZWN0LmhlaWdodCgpOwogICAgICAgICB9IGVsc2Ugewog
ICAgICAgICAgICAgSW50UmVjdCBnYXBBbmRDb2x1bW5SZWN0KGNvbFJlY3QueCgpLCBjb2xSZWN0
LnkoKSAtIGhhbGZDb2xHYXAsIGNvbFJlY3Qud2lkdGgoKSwgY29sUmVjdC5oZWlnaHQoKSArIGNv
bEdhcCk7Ci0gICAgICAgICAgICBpZiAocG9pbnQueSgpID49IGdhcEFuZENvbHVtblJlY3QueSgp
ICYmIHBvaW50LnkoKSA8IGdhcEFuZENvbHVtblJlY3QuYm90dG9tKCkpIHsKKyAgICAgICAgICAg
IGlmIChwb2ludC55KCkgPj0gZ2FwQW5kQ29sdW1uUmVjdC55KCkgJiYgcG9pbnQueSgpIDwgZ2Fw
QW5kQ29sdW1uUmVjdC5tYXhZKCkpIHsKICAgICAgICAgICAgICAgICAvLyBGSVhNRTogVGhlIGNs
YW1waW5nIHRoYXQgZm9sbG93cyBpcyBub3QgY29tcGxldGVseSByaWdodCBmb3IgcmlnaHQtdG8t
bGVmdAogICAgICAgICAgICAgICAgIC8vIGNvbnRlbnQuCiAgICAgICAgICAgICAgICAgLy8gQ2xh
bXAgZXZlcnl0aGluZyBhYm92ZSB0aGUgY29sdW1uIHRvIGl0cyB0b3AgbGVmdC4KQEAgLTQzNTIs
NyArNDM1Miw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmFkanVzdFBvaW50VG9Db2x1bW5Db24KICAg
ICAgICAgICAgICAgICAgICAgcG9pbnQgPSBnYXBBbmRDb2x1bW5SZWN0LmxvY2F0aW9uKCk7CiAg
ICAgICAgICAgICAgICAgLy8gQ2xhbXAgZXZlcnl0aGluZyBiZWxvdyB0aGUgY29sdW1uIHRvIHRo
ZSBuZXh0IGNvbHVtbidzIHRvcCBsZWZ0LiBJZiB0aGVyZSBpcwogICAgICAgICAgICAgICAgIC8v
IG5vIG5leHQgY29sdW1uLCB0aGlzIHN0aWxsIG1hcHMgdG8ganVzdCBhZnRlciB0aGlzIGNvbHVt
bi4KLSAgICAgICAgICAgICAgICBlbHNlIGlmIChwb2ludC54KCkgPj0gZ2FwQW5kQ29sdW1uUmVj
dC5yaWdodCgpKSB7CisgICAgICAgICAgICAgICAgZWxzZSBpZiAocG9pbnQueCgpID49IGdhcEFu
ZENvbHVtblJlY3QubWF4WCgpKSB7CiAgICAgICAgICAgICAgICAgICAgIHBvaW50ID0gZ2FwQW5k
Q29sdW1uUmVjdC5sb2NhdGlvbigpOwogICAgICAgICAgICAgICAgICAgICBwb2ludC5tb3ZlKGdh
cEFuZENvbHVtblJlY3Qud2lkdGgoKSwgMCk7CiAgICAgICAgICAgICAgICAgfQpAQCAtNDQyOSw5
ICs0NDI5LDkgQEAgdm9pZCBSZW5kZXJCbG9jazo6ZmxpcEZvcldyaXRpbmdNb2RlSW5jbAogICAg
IGludCBjb2x1bW5Mb2dpY2FsSGVpZ2h0ID0gY29sSW5mby0+Y29sdW1uSGVpZ2h0KCk7CiAgICAg
aW50IGV4cGFuZGVkTG9naWNhbEhlaWdodCA9IGJvcmRlckJlZm9yZSgpICsgcGFkZGluZ0JlZm9y
ZSgpICsgY29sdW1uQ291bnQoY29sSW5mbykgKiBjb2x1bW5Mb2dpY2FsSGVpZ2h0ICsgYm9yZGVy
QWZ0ZXIoKSArIHBhZGRpbmdBZnRlcigpICsgc2Nyb2xsYmFyTG9naWNhbEhlaWdodCgpOwogICAg
IGlmIChzdHlsZSgpLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpKQotICAgICAgICByZWN0LnNl
dFkoZXhwYW5kZWRMb2dpY2FsSGVpZ2h0IC0gcmVjdC5ib3R0b20oKSk7CisgICAgICAgIHJlY3Qu
c2V0WShleHBhbmRlZExvZ2ljYWxIZWlnaHQgLSByZWN0Lm1heFkoKSk7CiAgICAgZWxzZQotICAg
ICAgICByZWN0LnNldFgoZXhwYW5kZWRMb2dpY2FsSGVpZ2h0IC0gcmVjdC5yaWdodCgpKTsKKyAg
ICAgICAgcmVjdC5zZXRYKGV4cGFuZGVkTG9naWNhbEhlaWdodCAtIHJlY3QubWF4WCgpKTsKIH0K
IAogdm9pZCBSZW5kZXJCbG9jazo6YWRqdXN0Rm9yQ29sdW1ucyhJbnRTaXplJiBvZmZzZXQsIGNv
bnN0IEludFBvaW50JiBwb2ludCkgY29uc3QKQEAgLTQ0NTksMTIgKzQ0NTksMTIgQEAgdm9pZCBS
ZW5kZXJCbG9jazo6YWRqdXN0Rm9yQ29sdW1ucyhJbnRTaQogCiAgICAgICAgIC8vIE5vdyB3ZSdy
ZSBpbiB0aGUgc2FtZSBjb29yZGluYXRlIHNwYWNlIGFzIHRoZSBwb2ludC4gIFNlZSBpZiBpdCBp
cyBpbnNpZGUgdGhlIHJlY3RhbmdsZS4KICAgICAgICAgaWYgKHN0eWxlKCktPmlzSG9yaXpvbnRh
bFdyaXRpbmdNb2RlKCkpIHsKLSAgICAgICAgICAgIGlmIChwb2ludC55KCkgPj0gc2xpY2VSZWN0
LnkoKSAmJiBwb2ludC55KCkgPCBzbGljZVJlY3QuYm90dG9tKCkpIHsKKyAgICAgICAgICAgIGlm
IChwb2ludC55KCkgPj0gc2xpY2VSZWN0LnkoKSAmJiBwb2ludC55KCkgPCBzbGljZVJlY3QubWF4
WSgpKSB7CiAgICAgICAgICAgICAgICAgb2Zmc2V0LmV4cGFuZChjb2x1bW5SZWN0QXQoY29sSW5m
bywgaSkueCgpIC0gbG9naWNhbExlZnQsIC1sb2dpY2FsT2Zmc2V0KTsKICAgICAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBp
ZiAocG9pbnQueCgpID49IHNsaWNlUmVjdC54KCkgJiYgcG9pbnQueCgpIDwgc2xpY2VSZWN0LnJp
Z2h0KCkpIHsKKyAgICAgICAgICAgIGlmIChwb2ludC54KCkgPj0gc2xpY2VSZWN0LngoKSAmJiBw
b2ludC54KCkgPCBzbGljZVJlY3QubWF4WCgpKSB7CiAgICAgICAgICAgICAgICAgb2Zmc2V0LmV4
cGFuZCgtbG9naWNhbE9mZnNldCwgY29sdW1uUmVjdEF0KGNvbEluZm8sIGkpLnkoKSAtIGxvZ2lj
YWxMZWZ0KTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suaAkocmV2aXNpb24gNzcyNjApCisrKyBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAt
Mzk4LDkgKzM5OCw5IEBAIHByaXZhdGU6CiAgICAgICAgIHZvaWQgc2V0SXNQbGFjZWQoYm9vbCBw
bGFjZWQgPSB0cnVlKSB7IG1faXNQbGFjZWQgPSBwbGFjZWQ7IH0KIAogICAgICAgICBpbnQgbGVm
dCgpIGNvbnN0IHsgQVNTRVJUKGlzUGxhY2VkKCkpOyByZXR1cm4gbV9mcmFtZVJlY3QueCgpOyB9
Ci0gICAgICAgIGludCByaWdodCgpIGNvbnN0IHsgQVNTRVJUKGlzUGxhY2VkKCkpOyByZXR1cm4g
bV9mcmFtZVJlY3QucmlnaHQoKTsgfQorICAgICAgICBpbnQgcmlnaHQoKSBjb25zdCB7IEFTU0VS
VChpc1BsYWNlZCgpKTsgcmV0dXJuIG1fZnJhbWVSZWN0Lm1heFgoKTsgfQogICAgICAgICBpbnQg
dG9wKCkgY29uc3QgeyBBU1NFUlQoaXNQbGFjZWQoKSk7IHJldHVybiBtX2ZyYW1lUmVjdC55KCk7
IH0KLSAgICAgICAgaW50IGJvdHRvbSgpIGNvbnN0IHsgQVNTRVJUKGlzUGxhY2VkKCkpOyByZXR1
cm4gbV9mcmFtZVJlY3QuYm90dG9tKCk7IH0KKyAgICAgICAgaW50IGJvdHRvbSgpIGNvbnN0IHsg
QVNTRVJUKGlzUGxhY2VkKCkpOyByZXR1cm4gbV9mcmFtZVJlY3QubWF4WSgpOyB9CiAgICAgICAg
IGludCB3aWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fZnJhbWVSZWN0LndpZHRoKCk7IH0KICAgICAg
ICAgaW50IGhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIG1fZnJhbWVSZWN0LmhlaWdodCgpOyB9CiAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCShyZXZpc2lvbiA3NzI2
MCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC01NDgsMTYgKzU0OCwxNiBAQCBJbnRSZWN0IFJlbmRlckJveDo6cmVmbGVjdGVkUmVj
dChjb25zdCBJCiAgICAgSW50UmVjdCByZXN1bHQgPSByOwogICAgIHN3aXRjaCAoc3R5bGUoKS0+
Ym94UmVmbGVjdCgpLT5kaXJlY3Rpb24oKSkgewogICAgICAgICBjYXNlIFJlZmxlY3Rpb25CZWxv
dzoKLSAgICAgICAgICAgIHJlc3VsdC5zZXRZKGJveC5ib3R0b20oKSArIHJlZmxlY3Rpb25PZmZz
ZXQoKSArIChib3guYm90dG9tKCkgLSByLmJvdHRvbSgpKSk7CisgICAgICAgICAgICByZXN1bHQu
c2V0WShib3gubWF4WSgpICsgcmVmbGVjdGlvbk9mZnNldCgpICsgKGJveC5tYXhZKCkgLSByLm1h
eFkoKSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgUmVmbGVjdGlvbkFib3Zl
OgotICAgICAgICAgICAgcmVzdWx0LnNldFkoYm94LnkoKSAtIHJlZmxlY3Rpb25PZmZzZXQoKSAt
IGJveC5oZWlnaHQoKSArIChib3guYm90dG9tKCkgLSByLmJvdHRvbSgpKSk7CisgICAgICAgICAg
ICByZXN1bHQuc2V0WShib3gueSgpIC0gcmVmbGVjdGlvbk9mZnNldCgpIC0gYm94LmhlaWdodCgp
ICsgKGJveC5tYXhZKCkgLSByLm1heFkoKSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IGNhc2UgUmVmbGVjdGlvbkxlZnQ6Ci0gICAgICAgICAgICByZXN1bHQuc2V0WChib3gueCgpIC0g
cmVmbGVjdGlvbk9mZnNldCgpIC0gYm94LndpZHRoKCkgKyAoYm94LnJpZ2h0KCkgLSByLnJpZ2h0
KCkpKTsKKyAgICAgICAgICAgIHJlc3VsdC5zZXRYKGJveC54KCkgLSByZWZsZWN0aW9uT2Zmc2V0
KCkgLSBib3gud2lkdGgoKSArIChib3gubWF4WCgpIC0gci5tYXhYKCkpKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICBjYXNlIFJlZmxlY3Rpb25SaWdodDoKLSAgICAgICAgICAgIHJlc3Vs
dC5zZXRYKGJveC5yaWdodCgpICsgcmVmbGVjdGlvbk9mZnNldCgpICsgKGJveC5yaWdodCgpIC0g
ci5yaWdodCgpKSk7CisgICAgICAgICAgICByZXN1bHQuc2V0WChib3gubWF4WCgpICsgcmVmbGVj
dGlvbk9mZnNldCgpICsgKGJveC5tYXhYKCkgLSByLm1heFgoKSkpOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgfQogICAgIHJldHVybiByZXN1bHQ7CkBAIC0yOTg3LDcgKzI5ODcsNyBAQCBJbnRS
ZWN0IFJlbmRlckJveDo6bG9jYWxDYXJldFJlY3QoSW5saW5lCiAgICAgICAgIHJlY3Quc2V0SGVp
Z2h0KGZvbnRIZWlnaHQpOwogCiAgICAgaWYgKGV4dHJhV2lkdGhUb0VuZE9mTGluZSkKLSAgICAg
ICAgKmV4dHJhV2lkdGhUb0VuZE9mTGluZSA9IHgoKSArIHdpZHRoKCkgLSByZWN0LnJpZ2h0KCk7
CisgICAgICAgICpleHRyYVdpZHRoVG9FbmRPZkxpbmUgPSB4KCkgKyB3aWR0aCgpIC0gcmVjdC5t
YXhYKCk7CiAKICAgICAvLyBNb3ZlIHRvIGxvY2FsIGNvb3JkcwogICAgIHJlY3QubW92ZSgteCgp
LCAteSgpKTsKQEAgLTMxMDgsOSArMzEwOCw5IEBAIHZvaWQgUmVuZGVyQm94OjphZGRTaGFkb3dP
dmVyZmxvdygpCiAgICAgc3R5bGUoKS0+Z2V0Qm94U2hhZG93RXh0ZW50KHNoYWRvd1RvcCwgc2hh
ZG93UmlnaHQsIHNoYWRvd0JvdHRvbSwgc2hhZG93TGVmdCk7CiAgICAgSW50UmVjdCBib3JkZXJC
b3ggPSBib3JkZXJCb3hSZWN0KCk7CiAgICAgaW50IG92ZXJmbG93TGVmdCA9IGJvcmRlckJveC54
KCkgKyBzaGFkb3dMZWZ0OwotICAgIGludCBvdmVyZmxvd1JpZ2h0ID0gYm9yZGVyQm94LnJpZ2h0
KCkgKyBzaGFkb3dSaWdodDsKKyAgICBpbnQgb3ZlcmZsb3dSaWdodCA9IGJvcmRlckJveC5tYXhY
KCkgKyBzaGFkb3dSaWdodDsKICAgICBpbnQgb3ZlcmZsb3dUb3AgPSBib3JkZXJCb3gueSgpICsg
c2hhZG93VG9wOwotICAgIGludCBvdmVyZmxvd0JvdHRvbSA9IGJvcmRlckJveC5ib3R0b20oKSAr
IHNoYWRvd0JvdHRvbTsKKyAgICBpbnQgb3ZlcmZsb3dCb3R0b20gPSBib3JkZXJCb3gubWF4WSgp
ICsgc2hhZG93Qm90dG9tOwogICAgIGFkZFZpc3VhbE92ZXJmbG93KEludFJlY3Qob3ZlcmZsb3dM
ZWZ0LCBvdmVyZmxvd1RvcCwgb3ZlcmZsb3dSaWdodCAtIG92ZXJmbG93TGVmdCwgb3ZlcmZsb3dC
b3R0b20gLSBvdmVyZmxvd1RvcCkpOwogfQogCkBAIC0zMTQ5LDEzICszMTQ5LDEzIEBAIHZvaWQg
UmVuZGVyQm94OjphZGRMYXlvdXRPdmVyZmxvdyhjb25zdCAKICAgICAgICAgYm9vbCBoYXNMZWZ0
T3ZlcmZsb3cgPSAhc3R5bGUoKS0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpICYmIHN0eWxlKCkt
PmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCk7CiAgICAgICAgIAogICAgICAgICBpZiAoIWhhc1Rv
cE92ZXJmbG93KQotICAgICAgICAgICAgb3ZlcmZsb3dSZWN0LnNoaWZ0VG9wRWRnZVRvKG1heChv
dmVyZmxvd1JlY3QueSgpLCBjbGllbnRCb3gueSgpKSk7CisgICAgICAgICAgICBvdmVyZmxvd1Jl
Y3Quc2hpZnRNaW5ZRWRnZVRvKG1heChvdmVyZmxvd1JlY3QueSgpLCBjbGllbnRCb3gueSgpKSk7
CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIG92ZXJmbG93UmVjdC5zaGlmdEJvdHRvbUVkZ2VU
byhtaW4ob3ZlcmZsb3dSZWN0LmJvdHRvbSgpLCBjbGllbnRCb3guYm90dG9tKCkpKTsKKyAgICAg
ICAgICAgIG92ZXJmbG93UmVjdC5zaGlmdE1heFlFZGdlVG8obWluKG92ZXJmbG93UmVjdC5tYXhZ
KCksIGNsaWVudEJveC5tYXhZKCkpKTsKICAgICAgICAgaWYgKCFoYXNMZWZ0T3ZlcmZsb3cpCi0g
ICAgICAgICAgICBvdmVyZmxvd1JlY3Quc2hpZnRMZWZ0RWRnZVRvKG1heChvdmVyZmxvd1JlY3Qu
eCgpLCBjbGllbnRCb3gueCgpKSk7CisgICAgICAgICAgICBvdmVyZmxvd1JlY3Quc2hpZnRNaW5Y
RWRnZVRvKG1heChvdmVyZmxvd1JlY3QueCgpLCBjbGllbnRCb3gueCgpKSk7CiAgICAgICAgIGVs
c2UKLSAgICAgICAgICAgIG92ZXJmbG93UmVjdC5zaGlmdFJpZ2h0RWRnZVRvKG1pbihvdmVyZmxv
d1JlY3QucmlnaHQoKSwgY2xpZW50Qm94LnJpZ2h0KCkpKTsKKyAgICAgICAgICAgIG92ZXJmbG93
UmVjdC5zaGlmdE1heFhFZGdlVG8obWluKG92ZXJmbG93UmVjdC5tYXhYKCksIGNsaWVudEJveC5t
YXhYKCkpKTsKICAgICAgICAgCiAgICAgICAgIC8vIE5vdyByZS10ZXN0IHdpdGggdGhlIGFkanVz
dGVkIHJlY3RhbmdsZSBhbmQgc2VlIGlmIGl0IGhhcyBiZWNvbWUgdW5yZWFjaGFibGUgb3IgZnVs
bHkKICAgICAgICAgLy8gY29udGFpbmVkLgpAQCAtMzI0NCw5ICszMjQ0LDkgQEAgSW50UmVjdCBS
ZW5kZXJCb3g6OnZpc3VhbE92ZXJmbG93UmVjdEZvcgogICAgIC8vIFdlIGFyZSBwdXR0aW5nIG91
cnNlbHZlcyBpbnRvIG91ciBwYXJlbnQncyBjb29yZGluYXRlIHNwYWNlLiAgSWYgdGhlcmUgaXMg
YSBmbGlwcGVkIGJsb2NrIG1pc21hdGNoCiAgICAgLy8gaW4gYSBwYXJ0aWN1bGFyIGF4aXMsIHRo
ZW4gd2UgaGF2ZSB0byBmbGlwIHRoZSByZWN0IGFsb25nIHRoYXQgYXhpcy4KICAgICBpZiAoc3R5
bGUoKS0+d3JpdGluZ01vZGUoKSA9PSBSaWdodFRvTGVmdFdyaXRpbmdNb2RlIHx8IHBhcmVudFN0
eWxlLT53cml0aW5nTW9kZSgpID09IFJpZ2h0VG9MZWZ0V3JpdGluZ01vZGUpCi0gICAgICAgIHJl
Y3Quc2V0WCh3aWR0aCgpIC0gcmVjdC5yaWdodCgpKTsKKyAgICAgICAgcmVjdC5zZXRYKHdpZHRo
KCkgLSByZWN0Lm1heFgoKSk7CiAgICAgZWxzZSBpZiAoc3R5bGUoKS0+d3JpdGluZ01vZGUoKSA9
PSBCb3R0b21Ub1RvcFdyaXRpbmdNb2RlIHx8IHBhcmVudFN0eWxlLT53cml0aW5nTW9kZSgpID09
IEJvdHRvbVRvVG9wV3JpdGluZ01vZGUpCi0gICAgICAgIHJlY3Quc2V0WShoZWlnaHQoKSAtIHJl
Y3QuYm90dG9tKCkpOworICAgICAgICByZWN0LnNldFkoaGVpZ2h0KCkgLSByZWN0Lm1heFkoKSk7
CiAKICAgICByZXR1cm4gcmVjdDsKIH0KQEAgLTMyOTAsOSArMzI5MCw5IEBAIEludFJlY3QgUmVu
ZGVyQm94OjpsYXlvdXRPdmVyZmxvd1JlY3RGb3IKICAgICAvLyBXZSBhcmUgcHV0dGluZyBvdXJz
ZWx2ZXMgaW50byBvdXIgcGFyZW50J3MgY29vcmRpbmF0ZSBzcGFjZS4gIElmIHRoZXJlIGlzIGEg
ZmxpcHBlZCBibG9jayBtaXNtYXRjaAogICAgIC8vIGluIGEgcGFydGljdWxhciBheGlzLCB0aGVu
IHdlIGhhdmUgdG8gZmxpcCB0aGUgcmVjdCBhbG9uZyB0aGF0IGF4aXMuCiAgICAgaWYgKHN0eWxl
KCktPndyaXRpbmdNb2RlKCkgPT0gUmlnaHRUb0xlZnRXcml0aW5nTW9kZSB8fCBwYXJlbnRTdHls
ZS0+d3JpdGluZ01vZGUoKSA9PSBSaWdodFRvTGVmdFdyaXRpbmdNb2RlKQotICAgICAgICByZWN0
LnNldFgod2lkdGgoKSAtIHJlY3QucmlnaHQoKSk7CisgICAgICAgIHJlY3Quc2V0WCh3aWR0aCgp
IC0gcmVjdC5tYXhYKCkpOwogICAgIGVsc2UgaWYgKHN0eWxlKCktPndyaXRpbmdNb2RlKCkgPT0g
Qm90dG9tVG9Ub3BXcml0aW5nTW9kZSB8fCBwYXJlbnRTdHlsZS0+d3JpdGluZ01vZGUoKSA9PSBC
b3R0b21Ub1RvcFdyaXRpbmdNb2RlKQotICAgICAgICByZWN0LnNldFkoaGVpZ2h0KCkgLSByZWN0
LmJvdHRvbSgpKTsKKyAgICAgICAgcmVjdC5zZXRZKGhlaWdodCgpIC0gcmVjdC5tYXhZKCkpOwog
CiAgICAgcmV0dXJuIHJlY3Q7CiB9CkBAIC0zMzE1LDkgKzMzMTUsOSBAQCB2b2lkIFJlbmRlckJv
eDo6ZmxpcEZvcldyaXRpbmdNb2RlKEludFJlCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChz
dHlsZSgpLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpKQotICAgICAgICByZWN0LnNldFkoaGVp
Z2h0KCkgLSByZWN0LmJvdHRvbSgpKTsKKyAgICAgICAgcmVjdC5zZXRZKGhlaWdodCgpIC0gcmVj
dC5tYXhZKCkpOwogICAgIGVsc2UKLSAgICAgICAgcmVjdC5zZXRYKHdpZHRoKCkgLSByZWN0LnJp
Z2h0KCkpOworICAgICAgICByZWN0LnNldFgod2lkdGgoKSAtIHJlY3QubWF4WCgpKTsKIH0KIAog
aW50IFJlbmRlckJveDo6ZmxpcEZvcldyaXRpbmdNb2RlKGludCBwb3NpdGlvbikgY29uc3QKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGcmFtZVNldC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZyYW1lU2V0LmNwcAkocmV2aXNp
b24gNzcyNjApCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRnJhbWVTZXQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC05Myw4ICs5Myw4IEBAIHZvaWQgUmVuZGVyRnJhbWVTZXQ6OnBh
aW50Q29sdW1uQm9yZGVyKGMKICAgICAvLyBOb3cgc3Ryb2tlIHRoZSBlZGdlcyBidXQgb25seSBp
ZiB3ZSBoYXZlIGVub3VnaCByb29tIHRvIHBhaW50IGJvdGggZWRnZXMgd2l0aCBhIGxpdHRsZQog
ICAgIC8vIGJpdCBvZiB0aGUgZmlsbCBjb2xvciBzaG93aW5nIHRocm91Z2guCiAgICAgaWYgKGJv
cmRlclJlY3Qud2lkdGgoKSA+PSAzKSB7Ci0gICAgICAgIGNvbnRleHQtPmZpbGxSZWN0KEludFJl
Y3QoYm9yZGVyUmVjdC50b3BMZWZ0KCksIEludFNpemUoMSwgaGVpZ2h0KCkpKSwgYm9yZGVyU3Rh
cnRFZGdlQ29sb3IoKSwgY29sb3JTcGFjZSk7Ci0gICAgICAgIGNvbnRleHQtPmZpbGxSZWN0KElu
dFJlY3QoYm9yZGVyUmVjdC50b3BSaWdodCgpLCBJbnRTaXplKDEsIGhlaWdodCgpKSksIGJvcmRl
ckVuZEVkZ2VDb2xvcigpLCBjb2xvclNwYWNlKTsKKyAgICAgICAgY29udGV4dC0+ZmlsbFJlY3Qo
SW50UmVjdChib3JkZXJSZWN0LmxvY2F0aW9uKCksIEludFNpemUoMSwgaGVpZ2h0KCkpKSwgYm9y
ZGVyU3RhcnRFZGdlQ29sb3IoKSwgY29sb3JTcGFjZSk7CisgICAgICAgIGNvbnRleHQtPmZpbGxS
ZWN0KEludFJlY3QoSW50UG9pbnQoYm9yZGVyUmVjdC5tYXhYKCkgLSAxLCBib3JkZXJSZWN0Lnko
KSksIEludFNpemUoMSwgaGVpZ2h0KCkpKSwgYm9yZGVyRW5kRWRnZUNvbG9yKCksIGNvbG9yU3Bh
Y2UpOwogICAgIH0KIH0KIApAQCAtMTEzLDggKzExMyw4IEBAIHZvaWQgUmVuZGVyRnJhbWVTZXQ6
OnBhaW50Um93Qm9yZGVyKGNvbnMKICAgICAvLyBOb3cgc3Ryb2tlIHRoZSBlZGdlcyBidXQgb25s
eSBpZiB3ZSBoYXZlIGVub3VnaCByb29tIHRvIHBhaW50IGJvdGggZWRnZXMgd2l0aCBhIGxpdHRs
ZQogICAgIC8vIGJpdCBvZiB0aGUgZmlsbCBjb2xvciBzaG93aW5nIHRocm91Z2guCiAgICAgaWYg
KGJvcmRlclJlY3QuaGVpZ2h0KCkgPj0gMykgewotICAgICAgICBjb250ZXh0LT5maWxsUmVjdChJ
bnRSZWN0KGJvcmRlclJlY3QudG9wTGVmdCgpLCBJbnRTaXplKHdpZHRoKCksIDEpKSwgYm9yZGVy
U3RhcnRFZGdlQ29sb3IoKSwgY29sb3JTcGFjZSk7Ci0gICAgICAgIGNvbnRleHQtPmZpbGxSZWN0
KEludFJlY3QoYm9yZGVyUmVjdC5ib3R0b21MZWZ0KCksIEludFNpemUod2lkdGgoKSwgMSkpLCBi
b3JkZXJFbmRFZGdlQ29sb3IoKSwgY29sb3JTcGFjZSk7CisgICAgICAgIGNvbnRleHQtPmZpbGxS
ZWN0KEludFJlY3QoYm9yZGVyUmVjdC5sb2NhdGlvbigpLCBJbnRTaXplKHdpZHRoKCksIDEpKSwg
Ym9yZGVyU3RhcnRFZGdlQ29sb3IoKSwgY29sb3JTcGFjZSk7CisgICAgICAgIGNvbnRleHQtPmZp
bGxSZWN0KEludFJlY3QoSW50UG9pbnQoYm9yZGVyUmVjdC54KCksIGJvcmRlclJlY3QubWF4WSgp
IC0gMSksIEludFNpemUod2lkdGgoKSwgMSkpLCBib3JkZXJFbmRFZGdlQ29sb3IoKSwgY29sb3JT
cGFjZSk7CiAgICAgfQogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
SW5saW5lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
SW5saW5lLmNwcAkocmV2aXNpb24gNzcyNjApCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVySW5saW5lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAzNywzMCArMTAzNywzMCBAQCB2
b2lkIFJlbmRlcklubGluZTo6cGFpbnRPdXRsaW5lRm9yTGluZShHCiAKICAgICBpbnQgdCA9IHR5
ICsgdGhpc2xpbmUueSgpIC0gb2Zmc2V0OwogICAgIGludCBsID0gdHggKyB0aGlzbGluZS54KCkg
LSBvZmZzZXQ7Ci0gICAgaW50IGIgPSB0eSArIHRoaXNsaW5lLmJvdHRvbSgpICsgb2Zmc2V0Owot
ICAgIGludCByID0gdHggKyB0aGlzbGluZS5yaWdodCgpICsgb2Zmc2V0OworICAgIGludCBiID0g
dHkgKyB0aGlzbGluZS5tYXhZKCkgKyBvZmZzZXQ7CisgICAgaW50IHIgPSB0eCArIHRoaXNsaW5l
Lm1heFgoKSArIG9mZnNldDsKICAgICAKICAgICAvLyBsZWZ0IGVkZ2UKICAgICBkcmF3TGluZUZv
ckJveFNpZGUoZ3JhcGhpY3NDb250ZXh0LAogICAgICAgICAgICAgICAgbCAtIG93LAotICAgICAg
ICAgICAgICAgdCAtIChsYXN0bGluZS5pc0VtcHR5KCkgfHwgdGhpc2xpbmUueCgpIDwgbGFzdGxp
bmUueCgpIHx8IChsYXN0bGluZS5yaWdodCgpIC0gMSkgPD0gdGhpc2xpbmUueCgpID8gb3cgOiAw
KSwKKyAgICAgICAgICAgICAgIHQgLSAobGFzdGxpbmUuaXNFbXB0eSgpIHx8IHRoaXNsaW5lLngo
KSA8IGxhc3RsaW5lLngoKSB8fCAobGFzdGxpbmUubWF4WCgpIC0gMSkgPD0gdGhpc2xpbmUueCgp
ID8gb3cgOiAwKSwKICAgICAgICAgICAgICAgIGwsCi0gICAgICAgICAgICAgICBiICsgKG5leHRs
aW5lLmlzRW1wdHkoKSB8fCB0aGlzbGluZS54KCkgPD0gbmV4dGxpbmUueCgpIHx8IChuZXh0bGlu
ZS5yaWdodCgpIC0gMSkgPD0gdGhpc2xpbmUueCgpID8gb3cgOiAwKSwKKyAgICAgICAgICAgICAg
IGIgKyAobmV4dGxpbmUuaXNFbXB0eSgpIHx8IHRoaXNsaW5lLngoKSA8PSBuZXh0bGluZS54KCkg
fHwgKG5leHRsaW5lLm1heFgoKSAtIDEpIDw9IHRoaXNsaW5lLngoKSA/IG93IDogMCksCiAgICAg
ICAgICAgICAgICBCU0xlZnQsCiAgICAgICAgICAgICAgICBvYywgb3MsCi0gICAgICAgICAgICAg
ICAobGFzdGxpbmUuaXNFbXB0eSgpIHx8IHRoaXNsaW5lLngoKSA8IGxhc3RsaW5lLngoKSB8fCAo
bGFzdGxpbmUucmlnaHQoKSAtIDEpIDw9IHRoaXNsaW5lLngoKSA/IG93IDogLW93KSwKLSAgICAg
ICAgICAgICAgIChuZXh0bGluZS5pc0VtcHR5KCkgfHwgdGhpc2xpbmUueCgpIDw9IG5leHRsaW5l
LngoKSB8fCAobmV4dGxpbmUucmlnaHQoKSAtIDEpIDw9IHRoaXNsaW5lLngoKSA/IG93IDogLW93
KSk7CisgICAgICAgICAgICAgICAobGFzdGxpbmUuaXNFbXB0eSgpIHx8IHRoaXNsaW5lLngoKSA8
IGxhc3RsaW5lLngoKSB8fCAobGFzdGxpbmUubWF4WCgpIC0gMSkgPD0gdGhpc2xpbmUueCgpID8g
b3cgOiAtb3cpLAorICAgICAgICAgICAgICAgKG5leHRsaW5lLmlzRW1wdHkoKSB8fCB0aGlzbGlu
ZS54KCkgPD0gbmV4dGxpbmUueCgpIHx8IChuZXh0bGluZS5tYXhYKCkgLSAxKSA8PSB0aGlzbGlu
ZS54KCkgPyBvdyA6IC1vdykpOwogICAgIAogICAgIC8vIHJpZ2h0IGVkZ2UKICAgICBkcmF3TGlu
ZUZvckJveFNpZGUoZ3JhcGhpY3NDb250ZXh0LAogICAgICAgICAgICAgICAgciwKLSAgICAgICAg
ICAgICAgIHQgLSAobGFzdGxpbmUuaXNFbXB0eSgpIHx8IGxhc3RsaW5lLnJpZ2h0KCkgPCB0aGlz
bGluZS5yaWdodCgpIHx8ICh0aGlzbGluZS5yaWdodCgpIC0gMSkgPD0gbGFzdGxpbmUueCgpID8g
b3cgOiAwKSwKKyAgICAgICAgICAgICAgIHQgLSAobGFzdGxpbmUuaXNFbXB0eSgpIHx8IGxhc3Rs
aW5lLm1heFgoKSA8IHRoaXNsaW5lLm1heFgoKSB8fCAodGhpc2xpbmUubWF4WCgpIC0gMSkgPD0g
bGFzdGxpbmUueCgpID8gb3cgOiAwKSwKICAgICAgICAgICAgICAgIHIgKyBvdywKLSAgICAgICAg
ICAgICAgIGIgKyAobmV4dGxpbmUuaXNFbXB0eSgpIHx8IG5leHRsaW5lLnJpZ2h0KCkgPD0gdGhp
c2xpbmUucmlnaHQoKSB8fCAodGhpc2xpbmUucmlnaHQoKSAtIDEpIDw9IG5leHRsaW5lLngoKSA/
IG93IDogMCksCisgICAgICAgICAgICAgICBiICsgKG5leHRsaW5lLmlzRW1wdHkoKSB8fCBuZXh0
bGluZS5tYXhYKCkgPD0gdGhpc2xpbmUubWF4WCgpIHx8ICh0aGlzbGluZS5tYXhYKCkgLSAxKSA8
PSBuZXh0bGluZS54KCkgPyBvdyA6IDApLAogICAgICAgICAgICAgICAgQlNSaWdodCwKICAgICAg
ICAgICAgICAgIG9jLCBvcywKLSAgICAgICAgICAgICAgIChsYXN0bGluZS5pc0VtcHR5KCkgfHwg
bGFzdGxpbmUucmlnaHQoKSA8IHRoaXNsaW5lLnJpZ2h0KCkgfHwgKHRoaXNsaW5lLnJpZ2h0KCkg
LSAxKSA8PSBsYXN0bGluZS54KCkgPyBvdyA6IC1vdyksCi0gICAgICAgICAgICAgICAobmV4dGxp
bmUuaXNFbXB0eSgpIHx8IG5leHRsaW5lLnJpZ2h0KCkgPD0gdGhpc2xpbmUucmlnaHQoKSB8fCAo
dGhpc2xpbmUucmlnaHQoKSAtIDEpIDw9IG5leHRsaW5lLngoKSA/IG93IDogLW93KSk7CisgICAg
ICAgICAgICAgICAobGFzdGxpbmUuaXNFbXB0eSgpIHx8IGxhc3RsaW5lLm1heFgoKSA8IHRoaXNs
aW5lLm1heFgoKSB8fCAodGhpc2xpbmUubWF4WCgpIC0gMSkgPD0gbGFzdGxpbmUueCgpID8gb3cg
OiAtb3cpLAorICAgICAgICAgICAgICAgKG5leHRsaW5lLmlzRW1wdHkoKSB8fCBuZXh0bGluZS5t
YXhYKCkgPD0gdGhpc2xpbmUubWF4WCgpIHx8ICh0aGlzbGluZS5tYXhYKCkgLSAxKSA8PSBuZXh0
bGluZS54KCkgPyBvdyA6IC1vdykpOwogICAgIC8vIHVwcGVyIGVkZ2UKICAgICBpZiAodGhpc2xp
bmUueCgpIDwgbGFzdGxpbmUueCgpKQogICAgICAgICBkcmF3TGluZUZvckJveFNpZGUoZ3JhcGhp
Y3NDb250ZXh0LApAQCAtMTA3MiwxNCArMTA3MiwxNCBAQCB2b2lkIFJlbmRlcklubGluZTo6cGFp
bnRPdXRsaW5lRm9yTGluZShHCiAgICAgICAgICAgICAgICAgICAgb3csCiAgICAgICAgICAgICAg
ICAgICAgKCFsYXN0bGluZS5pc0VtcHR5KCkgJiYgdHggKyBsYXN0bGluZS54KCkgKyAxIDwgciAr
IG93KSA/IC1vdyA6IG93KTsKICAgICAKLSAgICBpZiAobGFzdGxpbmUucmlnaHQoKSA8IHRoaXNs
aW5lLnJpZ2h0KCkpCisgICAgaWYgKGxhc3RsaW5lLm1heFgoKSA8IHRoaXNsaW5lLm1heFgoKSkK
ICAgICAgICAgZHJhd0xpbmVGb3JCb3hTaWRlKGdyYXBoaWNzQ29udGV4dCwKLSAgICAgICAgICAg
ICAgICAgICBtYXgobGFzdGxpbmUuaXNFbXB0eSgpID8gLTEwMDAwMDAgOiB0eCArIGxhc3RsaW5l
LnJpZ2h0KCksIGwgLSBvdyksCisgICAgICAgICAgICAgICAgICAgbWF4KGxhc3RsaW5lLmlzRW1w
dHkoKSA/IC0xMDAwMDAwIDogdHggKyBsYXN0bGluZS5tYXhYKCksIGwgLSBvdyksCiAgICAgICAg
ICAgICAgICAgICAgdCAtIG93LAogICAgICAgICAgICAgICAgICAgIHIgKyBvdywKICAgICAgICAg
ICAgICAgICAgICB0ICwKICAgICAgICAgICAgICAgICAgICBCU1RvcCwgb2MsIG9zLAotICAgICAg
ICAgICAgICAgICAgICghbGFzdGxpbmUuaXNFbXB0eSgpICYmIGwgLSBvdyA8IHR4ICsgbGFzdGxp
bmUucmlnaHQoKSkgPyAtb3cgOiBvdywKKyAgICAgICAgICAgICAgICAgICAoIWxhc3RsaW5lLmlz
RW1wdHkoKSAmJiBsIC0gb3cgPCB0eCArIGxhc3RsaW5lLm1heFgoKSkgPyAtb3cgOiBvdywKICAg
ICAgICAgICAgICAgICAgICBvdyk7CiAgICAgCiAgICAgLy8gbG93ZXIgZWRnZQpAQCAtMTA5Mywx
NCArMTA5MywxNCBAQCB2b2lkIFJlbmRlcklubGluZTo6cGFpbnRPdXRsaW5lRm9yTGluZShHCiAg
ICAgICAgICAgICAgICAgICAgb3csCiAgICAgICAgICAgICAgICAgICAgKCFuZXh0bGluZS5pc0Vt
cHR5KCkgJiYgdHggKyBuZXh0bGluZS54KCkgKyAxIDwgciArIG93KSA/IC1vdyA6IG93KTsKICAg
ICAKLSAgICBpZiAobmV4dGxpbmUucmlnaHQoKSA8IHRoaXNsaW5lLnJpZ2h0KCkpCisgICAgaWYg
KG5leHRsaW5lLm1heFgoKSA8IHRoaXNsaW5lLm1heFgoKSkKICAgICAgICAgZHJhd0xpbmVGb3JC
b3hTaWRlKGdyYXBoaWNzQ29udGV4dCwKLSAgICAgICAgICAgICAgICAgICBtYXgoIW5leHRsaW5l
LmlzRW1wdHkoKSA/IHR4ICsgbmV4dGxpbmUucmlnaHQoKSA6IC0xMDAwMDAwLCBsIC0gb3cpLAor
ICAgICAgICAgICAgICAgICAgIG1heCghbmV4dGxpbmUuaXNFbXB0eSgpID8gdHggKyBuZXh0bGlu
ZS5tYXhYKCkgOiAtMTAwMDAwMCwgbCAtIG93KSwKICAgICAgICAgICAgICAgICAgICBiLAogICAg
ICAgICAgICAgICAgICAgIHIgKyBvdywKICAgICAgICAgICAgICAgICAgICBiICsgb3csCiAgICAg
ICAgICAgICAgICAgICAgQlNCb3R0b20sIG9jLCBvcywKLSAgICAgICAgICAgICAgICAgICAoIW5l
eHRsaW5lLmlzRW1wdHkoKSAmJiBsIC0gb3cgPCB0eCArIG5leHRsaW5lLnJpZ2h0KCkpID8gLW93
IDogb3csCisgICAgICAgICAgICAgICAgICAgKCFuZXh0bGluZS5pc0VtcHR5KCkgJiYgbCAtIG93
IDwgdHggKyBuZXh0bGluZS5tYXhYKCkpID8gLW93IDogb3csCiAgICAgICAgICAgICAgICAgICAg
b3cpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAJ
KHJldmlzaW9uIDc3MjYwKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTUxNiw3ICsxNTE2LDcgQEAgSW50UmVjdCBSZW5kZXJM
YXllcjo6Z2V0UmVjdFRvRXhwb3NlKGNvbgogICAgICAgICBzY3JvbGxYID0gU2Nyb2xsQWxpZ25t
ZW50OjpnZXRIaWRkZW5CZWhhdmlvcihhbGlnblgpOwogICAgIC8vIElmIHdlJ3JlIHRyeWluZyB0
byBhbGlnbiB0byB0aGUgY2xvc2VzdCBlZGdlLCBhbmQgdGhlIGV4cG9zZVJlY3QgaXMgZnVydGhl
ciByaWdodAogICAgIC8vIHRoYW4gdGhlIHZpc2libGVSZWN0LCBhbmQgbm90IGJpZ2dlciB0aGFu
IHRoZSB2aXNpYmxlIGFyZWEsIHRoZW4gYWxpZ24gd2l0aCB0aGUgcmlnaHQuCi0gICAgaWYgKHNj
cm9sbFggPT0gYWxpZ25Ub0Nsb3Nlc3RFZGdlICYmIGV4cG9zZVJlY3QucmlnaHQoKSA+IHZpc2li
bGVSZWN0LnJpZ2h0KCkgJiYgZXhwb3NlUmVjdC53aWR0aCgpIDwgdmlzaWJsZVJlY3Qud2lkdGgo
KSkKKyAgICBpZiAoc2Nyb2xsWCA9PSBhbGlnblRvQ2xvc2VzdEVkZ2UgJiYgZXhwb3NlUmVjdC5t
YXhYKCkgPiB2aXNpYmxlUmVjdC5tYXhYKCkgJiYgZXhwb3NlUmVjdC53aWR0aCgpIDwgdmlzaWJs
ZVJlY3Qud2lkdGgoKSkKICAgICAgICAgc2Nyb2xsWCA9IGFsaWduUmlnaHQ7CiAKICAgICAvLyBH
aXZlbiB0aGUgWCBiZWhhdmlvciwgY29tcHV0ZSB0aGUgWCBjb29yZGluYXRlLgpAQCAtMTUyNCw3
ICsxNTI0LDcgQEAgSW50UmVjdCBSZW5kZXJMYXllcjo6Z2V0UmVjdFRvRXhwb3NlKGNvbgogICAg
IGlmIChzY3JvbGxYID09IG5vU2Nyb2xsKSAKICAgICAgICAgeCA9IHZpc2libGVSZWN0LngoKTsK
ICAgICBlbHNlIGlmIChzY3JvbGxYID09IGFsaWduUmlnaHQpCi0gICAgICAgIHggPSBleHBvc2VS
ZWN0LnJpZ2h0KCkgLSB2aXNpYmxlUmVjdC53aWR0aCgpOworICAgICAgICB4ID0gZXhwb3NlUmVj
dC5tYXhYKCkgLSB2aXNpYmxlUmVjdC53aWR0aCgpOwogICAgIGVsc2UgaWYgKHNjcm9sbFggPT0g
YWxpZ25DZW50ZXIpCiAgICAgICAgIHggPSBleHBvc2VSZWN0LngoKSArIChleHBvc2VSZWN0Lndp
ZHRoKCkgLSB2aXNpYmxlUmVjdC53aWR0aCgpKSAvIDI7CiAgICAgZWxzZQpAQCAtMTU0OSw3ICsx
NTQ5LDcgQEAgSW50UmVjdCBSZW5kZXJMYXllcjo6Z2V0UmVjdFRvRXhwb3NlKGNvbgogICAgICAg
ICBzY3JvbGxZID0gU2Nyb2xsQWxpZ25tZW50OjpnZXRIaWRkZW5CZWhhdmlvcihhbGlnblkpOwog
ICAgIC8vIElmIHdlJ3JlIHRyeWluZyB0byBhbGlnbiB0byB0aGUgY2xvc2VzdCBlZGdlLCBhbmQg
dGhlIGV4cG9zZVJlY3QgaXMgZnVydGhlciBkb3duCiAgICAgLy8gdGhhbiB0aGUgdmlzaWJsZVJl
Y3QsIGFuZCBub3QgYmlnZ2VyIHRoYW4gdGhlIHZpc2libGUgYXJlYSwgdGhlbiBhbGlnbiB3aXRo
IHRoZSBib3R0b20uCi0gICAgaWYgKHNjcm9sbFkgPT0gYWxpZ25Ub0Nsb3Nlc3RFZGdlICYmIGV4
cG9zZVJlY3QuYm90dG9tKCkgPiB2aXNpYmxlUmVjdC5ib3R0b20oKSAmJiBleHBvc2VSZWN0Lmhl
aWdodCgpIDwgdmlzaWJsZVJlY3QuaGVpZ2h0KCkpCisgICAgaWYgKHNjcm9sbFkgPT0gYWxpZ25U
b0Nsb3Nlc3RFZGdlICYmIGV4cG9zZVJlY3QubWF4WSgpID4gdmlzaWJsZVJlY3QubWF4WSgpICYm
IGV4cG9zZVJlY3QuaGVpZ2h0KCkgPCB2aXNpYmxlUmVjdC5oZWlnaHQoKSkKICAgICAgICAgc2Ny
b2xsWSA9IGFsaWduQm90dG9tOwogCiAgICAgLy8gR2l2ZW4gdGhlIFkgYmVoYXZpb3IsIGNvbXB1
dGUgdGhlIFkgY29vcmRpbmF0ZS4KQEAgLTE1NTcsNyArMTU1Nyw3IEBAIEludFJlY3QgUmVuZGVy
TGF5ZXI6OmdldFJlY3RUb0V4cG9zZShjb24KICAgICBpZiAoc2Nyb2xsWSA9PSBub1Njcm9sbCkg
CiAgICAgICAgIHkgPSB2aXNpYmxlUmVjdC55KCk7CiAgICAgZWxzZSBpZiAoc2Nyb2xsWSA9PSBh
bGlnbkJvdHRvbSkKLSAgICAgICAgeSA9IGV4cG9zZVJlY3QuYm90dG9tKCkgLSB2aXNpYmxlUmVj
dC5oZWlnaHQoKTsKKyAgICAgICAgeSA9IGV4cG9zZVJlY3QubWF4WSgpIC0gdmlzaWJsZVJlY3Qu
aGVpZ2h0KCk7CiAgICAgZWxzZSBpZiAoc2Nyb2xsWSA9PSBhbGlnbkNlbnRlcikKICAgICAgICAg
eSA9IGV4cG9zZVJlY3QueSgpICsgKGV4cG9zZVJlY3QuaGVpZ2h0KCkgLSB2aXNpYmxlUmVjdC5o
ZWlnaHQoKSkgLyAyOwogICAgIGVsc2UKQEAgLTE2OTQsOCArMTY5NCw4IEBAIHN0YXRpYyBJbnRS
ZWN0IGNvcm5lclJlY3QoY29uc3QgUmVuZGVyTGEKICAgICAgICAgaG9yaXpvbnRhbFRoaWNrbmVz
cyA9IGxheWVyLT52ZXJ0aWNhbFNjcm9sbGJhcigpLT53aWR0aCgpOwogICAgICAgICB2ZXJ0aWNh
bFRoaWNrbmVzcyA9IGxheWVyLT5ob3Jpem9udGFsU2Nyb2xsYmFyKCktPmhlaWdodCgpOwogICAg
IH0KLSAgICByZXR1cm4gSW50UmVjdChib3VuZHMucmlnaHQoKSAtIGhvcml6b250YWxUaGlja25l
c3MgLSBsYXllci0+cmVuZGVyZXIoKS0+c3R5bGUoKS0+Ym9yZGVyUmlnaHRXaWR0aCgpLCAKLSAg
ICAgICAgICAgICAgICAgICBib3VuZHMuYm90dG9tKCkgLSB2ZXJ0aWNhbFRoaWNrbmVzcyAtIGxh
eWVyLT5yZW5kZXJlcigpLT5zdHlsZSgpLT5ib3JkZXJCb3R0b21XaWR0aCgpLAorICAgIHJldHVy
biBJbnRSZWN0KGJvdW5kcy5tYXhYKCkgLSBob3Jpem9udGFsVGhpY2tuZXNzIC0gbGF5ZXItPnJl
bmRlcmVyKCktPnN0eWxlKCktPmJvcmRlclJpZ2h0V2lkdGgoKSwgCisgICAgICAgICAgICAgICAg
ICAgYm91bmRzLm1heFkoKSAtIHZlcnRpY2FsVGhpY2tuZXNzIC0gbGF5ZXItPnJlbmRlcmVyKCkt
PnN0eWxlKCktPmJvcmRlckJvdHRvbVdpZHRoKCksCiAgICAgICAgICAgICAgICAgICAgaG9yaXpv
bnRhbFRoaWNrbmVzcywgdmVydGljYWxUaGlja25lc3MpOwogfQogCkBAIC0xOTExLDE0ICsxOTEx
LDE0IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnBvc2l0aW9uT3ZlcmZsb3dDb250cm8KICAgICBJbnRS
ZWN0IHNjcm9sbENvcm5lcihzY3JvbGxDb3JuZXJSZWN0KHRoaXMsIGJvcmRlckJveCkpOwogICAg
IEludFJlY3QgYWJzQm91bmRzKGJvcmRlckJveC54KCkgKyB0eCwgYm9yZGVyQm94LnkoKSArIHR5
LCBib3JkZXJCb3gud2lkdGgoKSwgYm9yZGVyQm94LmhlaWdodCgpKTsKICAgICBpZiAobV92QmFy
KQotICAgICAgICBtX3ZCYXItPnNldEZyYW1lUmVjdChJbnRSZWN0KGFic0JvdW5kcy5yaWdodCgp
IC0gYm94LT5ib3JkZXJSaWdodCgpIC0gbV92QmFyLT53aWR0aCgpLAorICAgICAgICBtX3ZCYXIt
PnNldEZyYW1lUmVjdChJbnRSZWN0KGFic0JvdW5kcy5tYXhYKCkgLSBib3gtPmJvcmRlclJpZ2h0
KCkgLSBtX3ZCYXItPndpZHRoKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYWJzQm91bmRzLnkoKSArIGJveC0+Ym9yZGVyVG9wKCksCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbV92QmFyLT53aWR0aCgpLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGFic0JvdW5kcy5oZWlnaHQoKSAtIChib3gtPmJvcmRlclRvcCgpICsg
Ym94LT5ib3JkZXJCb3R0b20oKSkgLSBzY3JvbGxDb3JuZXIuaGVpZ2h0KCkpKTsKIAogICAgIGlm
IChtX2hCYXIpCiAgICAgICAgIG1faEJhci0+c2V0RnJhbWVSZWN0KEludFJlY3QoYWJzQm91bmRz
LngoKSArIGJveC0+Ym9yZGVyTGVmdCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGFic0JvdW5kcy5ib3R0b20oKSAtIGJveC0+Ym9yZGVyQm90dG9tKCkgLSBtX2hCYXIt
PmhlaWdodCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFic0JvdW5k
cy5tYXhZKCkgLSBib3gtPmJvcmRlckJvdHRvbSgpIC0gbV9oQmFyLT5oZWlnaHQoKSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhYnNCb3VuZHMud2lkdGgoKSAtIChib3gt
PmJvcmRlckxlZnQoKSArIGJveC0+Ym9yZGVyUmlnaHQoKSkgLSBzY3JvbGxDb3JuZXIud2lkdGgo
KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2hCYXItPmhlaWdodCgp
KSk7CiAgICAgCkBAIC0xOTU1LDcgKzE5NTUsNyBAQCBpbnQgUmVuZGVyTGF5ZXI6Om92ZXJmbG93
Qm90dG9tKCkgY29uc3QKICAgICBSZW5kZXJCb3gqIGJveCA9IHJlbmRlckJveCgpOwogICAgIElu
dFJlY3Qgb3ZlcmZsb3dSZWN0KGJveC0+bGF5b3V0T3ZlcmZsb3dSZWN0KCkpOwogICAgIGJveC0+
ZmxpcEZvcldyaXRpbmdNb2RlKG92ZXJmbG93UmVjdCk7Ci0gICAgcmV0dXJuIG92ZXJmbG93UmVj
dC5ib3R0b20oKTsKKyAgICByZXR1cm4gb3ZlcmZsb3dSZWN0Lm1heFkoKTsKIH0KIAogaW50IFJl
bmRlckxheWVyOjpvdmVyZmxvd0xlZnQoKSBjb25zdApAQCAtMTk3MSw3ICsxOTcxLDcgQEAgaW50
IFJlbmRlckxheWVyOjpvdmVyZmxvd1JpZ2h0KCkgY29uc3QKICAgICBSZW5kZXJCb3gqIGJveCA9
IHJlbmRlckJveCgpOwogICAgIEludFJlY3Qgb3ZlcmZsb3dSZWN0KGJveC0+bGF5b3V0T3ZlcmZs
b3dSZWN0KCkpOwogICAgIGJveC0+ZmxpcEZvcldyaXRpbmdNb2RlKG92ZXJmbG93UmVjdCk7Ci0g
ICAgcmV0dXJuIG92ZXJmbG93UmVjdC5yaWdodCgpOworICAgIHJldHVybiBvdmVyZmxvd1JlY3Qu
bWF4WCgpOwogfQogCiB2b2lkIFJlbmRlckxheWVyOjpjb21wdXRlU2Nyb2xsRGltZW5zaW9ucyhi
b29sKiBuZWVkSEJhciwgYm9vbCogbmVlZFZCYXIpCkBAIC0yMTk3LDcgKzIxOTcsNyBAQCB2b2lk
IFJlbmRlckxheWVyOjpwYWludFJlc2l6ZXIoR3JhcGhpY3NDCiAKICAgICAvLyBQYWludCB0aGUg
cmVzaXplciBjb250cm9sLgogICAgIERFRklORV9TVEFUSUNfTE9DQUwoUmVmUHRyPEltYWdlPiwg
cmVzaXplQ29ybmVySW1hZ2UsIChJbWFnZTo6bG9hZFBsYXRmb3JtUmVzb3VyY2UoInRleHRBcmVh
UmVzaXplQ29ybmVyIikpKTsKLSAgICBJbnRQb2ludCBpbWFnZVBvaW50KGFic1JlY3QucmlnaHQo
KSAtIHJlc2l6ZUNvcm5lckltYWdlLT53aWR0aCgpLCBhYnNSZWN0LmJvdHRvbSgpIC0gcmVzaXpl
Q29ybmVySW1hZ2UtPmhlaWdodCgpKTsKKyAgICBJbnRQb2ludCBpbWFnZVBvaW50KGFic1JlY3Qu
bWF4WCgpIC0gcmVzaXplQ29ybmVySW1hZ2UtPndpZHRoKCksIGFic1JlY3QubWF4WSgpIC0gcmVz
aXplQ29ybmVySW1hZ2UtPmhlaWdodCgpKTsKICAgICBjb250ZXh0LT5kcmF3SW1hZ2UocmVzaXpl
Q29ybmVySW1hZ2UuZ2V0KCksIGJveC0+c3R5bGUoKS0+Y29sb3JTcGFjZSgpLCBpbWFnZVBvaW50
KTsKIAogICAgIC8vIERyYXcgYSBmcmFtZSBhcm91bmQgdGhlIHJlc2l6ZXIgKDFweCBncmV5IGxp
bmUpIGlmIHRoZXJlIGFyZSBhbnkgc2Nyb2xsYmFycyBwcmVzZW50LgpJbmRleDogU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpbmVCb3hMaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGluZUJveExpc3QuY3BwCShyZXZpc2lvbiA3NzI2
MCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaW5lQm94TGlzdC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTE2MCwxMSArMTYwLDExIEBAIGJvb2wgUmVuZGVyTGluZUJveExpc3Q6
OnJhbmdlSW50ZXJzZWN0c1IKICAgICAKICAgICBpZiAocmVuZGVyZXItPnN0eWxlKCktPmlzSG9y
aXpvbnRhbFdyaXRpbmdNb2RlKCkpIHsKICAgICAgICAgcGh5c2ljYWxTdGFydCArPSB0eTsKLSAg
ICAgICAgaWYgKHBoeXNpY2FsU3RhcnQgPj0gcmVjdC5ib3R0b20oKSB8fCBwaHlzaWNhbFN0YXJ0
ICsgcGh5c2ljYWxFeHRlbnQgPD0gcmVjdC55KCkpCisgICAgICAgIGlmIChwaHlzaWNhbFN0YXJ0
ID49IHJlY3QubWF4WSgpIHx8IHBoeXNpY2FsU3RhcnQgKyBwaHlzaWNhbEV4dGVudCA8PSByZWN0
LnkoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9IGVsc2UgewogICAgICAgICBw
aHlzaWNhbFN0YXJ0ICs9IHR4OwotICAgICAgICBpZiAocGh5c2ljYWxTdGFydCA+PSByZWN0LnJp
Z2h0KCkgfHwgcGh5c2ljYWxTdGFydCArIHBoeXNpY2FsRXh0ZW50IDw9IHJlY3QueCgpKQorICAg
ICAgICBpZiAocGh5c2ljYWxTdGFydCA+PSByZWN0Lm1heFgoKSB8fCBwaHlzaWNhbFN0YXJ0ICsg
cGh5c2ljYWxFeHRlbnQgPD0gcmVjdC54KCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgfQogICAgIApAQCAtMjM5LDExICsyMzksMTEgQEAgdm9pZCBSZW5kZXJMaW5lQm94TGlzdDo6
cGFpbnQoUmVuZGVyQm94TQogICAgICAgICAgICAgICAgIGJvdHRvbUZvclBhZ2luYXRpb25DaGVj
ayA9IG1heChib3R0b21Gb3JQYWdpbmF0aW9uQ2hlY2ssIGN1cnItPnJvb3QoKS0+bGluZUJvdHRv
bSgpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChib3R0b21Gb3JQYWdpbmF0aW9u
Q2hlY2sgLSB0b3BGb3JQYWdpbmF0aW9uQ2hlY2sgPD0gdi0+cHJpbnRSZWN0KCkuaGVpZ2h0KCkp
IHsKLSAgICAgICAgICAgICAgICBpZiAodHkgKyBib3R0b21Gb3JQYWdpbmF0aW9uQ2hlY2sgPiB2
LT5wcmludFJlY3QoKS5ib3R0b20oKSkgeworICAgICAgICAgICAgICAgIGlmICh0eSArIGJvdHRv
bUZvclBhZ2luYXRpb25DaGVjayA+IHYtPnByaW50UmVjdCgpLm1heFkoKSkgewogICAgICAgICAg
ICAgICAgICAgICBpZiAoUm9vdElubGluZUJveCogbmV4dFJvb3RCb3ggPSBjdXJyLT5yb290KCkt
Pm5leHRSb290Qm94KCkpCiAgICAgICAgICAgICAgICAgICAgICAgICBib3R0b21Gb3JQYWdpbmF0
aW9uQ2hlY2sgPSBtaW4oYm90dG9tRm9yUGFnaW5hdGlvbkNoZWNrLCBtaW4obmV4dFJvb3RCb3gt
PnRvcFZpc3VhbE92ZXJmbG93KCksIG5leHRSb290Qm94LT5saW5lVG9wKCkpKTsKICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKHR5ICsgYm90dG9tRm9yUGFnaW5hdGlvbkNo
ZWNrID4gdi0+cHJpbnRSZWN0KCkuYm90dG9tKCkpIHsKKyAgICAgICAgICAgICAgICBpZiAodHkg
KyBib3R0b21Gb3JQYWdpbmF0aW9uQ2hlY2sgPiB2LT5wcmludFJlY3QoKS5tYXhZKCkpIHsKICAg
ICAgICAgICAgICAgICAgICAgaWYgKHR5ICsgdG9wRm9yUGFnaW5hdGlvbkNoZWNrIDwgdi0+dHJ1
bmNhdGVkQXQoKSkKICAgICAgICAgICAgICAgICAgICAgICAgIHYtPnNldEJlc3RUcnVuY2F0ZWRB
dCh0eSArIHRvcEZvclBhZ2luYXRpb25DaGVjaywgcmVuZGVyZXIpOwogICAgICAgICAgICAgICAg
ICAgICAvLyBJZiB3ZSB3ZXJlIGFibGUgdG8gdHJ1bmNhdGUsIGRvbid0IHBhaW50LgpJbmRleDog
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RJdGVtLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEl0ZW0uY3BwCShyZXZpc2lvbiA3
NzI2MCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0SXRlbS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI5NywxMiArMjk3LDEyIEBAIHZvaWQgUmVuZGVyTGlzdEl0ZW06OnBv
c2l0aW9uTGlzdE1hcmtlcigKICAgICAgICAgICAgIGZvciAoSW5saW5lRmxvd0JveCogYm94ID0g
bV9tYXJrZXItPmlubGluZUJveFdyYXBwZXIoKS0+cGFyZW50KCk7IGJveDsgYm94ID0gYm94LT5w
YXJlbnQoKSkgewogICAgICAgICAgICAgICAgIEludFJlY3QgbmV3TG9naWNhbFZpc3VhbE92ZXJm
bG93UmVjdCA9IGJveC0+bG9naWNhbFZpc3VhbE92ZXJmbG93UmVjdCgpOwogICAgICAgICAgICAg
ICAgIEludFJlY3QgbmV3TG9naWNhbExheW91dE92ZXJmbG93UmVjdCA9IGJveC0+bG9naWNhbExh
eW91dE92ZXJmbG93UmVjdCgpOwotICAgICAgICAgICAgICAgIGlmIChtYXJrZXJMb2dpY2FsTGVm
dCArIG1fbWFya2VyLT5sb2dpY2FsV2lkdGgoKSA+IG5ld0xvZ2ljYWxWaXN1YWxPdmVyZmxvd1Jl
Y3QucmlnaHQoKSAmJiAhaGl0U2VsZlBhaW50aW5nTGF5ZXIpIHsKKyAgICAgICAgICAgICAgICBp
ZiAobWFya2VyTG9naWNhbExlZnQgKyBtX21hcmtlci0+bG9naWNhbFdpZHRoKCkgPiBuZXdMb2dp
Y2FsVmlzdWFsT3ZlcmZsb3dSZWN0Lm1heFgoKSAmJiAhaGl0U2VsZlBhaW50aW5nTGF5ZXIpIHsK
ICAgICAgICAgICAgICAgICAgICAgbmV3TG9naWNhbFZpc3VhbE92ZXJmbG93UmVjdC5zZXRXaWR0
aChtYXJrZXJMb2dpY2FsTGVmdCArIG1fbWFya2VyLT5sb2dpY2FsV2lkdGgoKSAtIGJveC0+bG9n
aWNhbExlZnRWaXN1YWxPdmVyZmxvdygpKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKGJveCA9
PSByb290KQogICAgICAgICAgICAgICAgICAgICAgICAgYWRqdXN0T3ZlcmZsb3cgPSB0cnVlOwog
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAobWFya2VyTG9naWNhbExlZnQg
KyBtX21hcmtlci0+bG9naWNhbFdpZHRoKCkgPiBuZXdMb2dpY2FsTGF5b3V0T3ZlcmZsb3dSZWN0
LnJpZ2h0KCkpIHsKKyAgICAgICAgICAgICAgICBpZiAobWFya2VyTG9naWNhbExlZnQgKyBtX21h
cmtlci0+bG9naWNhbFdpZHRoKCkgPiBuZXdMb2dpY2FsTGF5b3V0T3ZlcmZsb3dSZWN0Lm1heFgo
KSkgewogICAgICAgICAgICAgICAgICAgICBuZXdMb2dpY2FsTGF5b3V0T3ZlcmZsb3dSZWN0LnNl
dFdpZHRoKG1hcmtlckxvZ2ljYWxMZWZ0ICsgbV9tYXJrZXItPmxvZ2ljYWxXaWR0aCgpIC0gYm94
LT5sb2dpY2FsTGVmdExheW91dE92ZXJmbG93KCkpOwogICAgICAgICAgICAgICAgICAgICBpZiAo
Ym94ID09IHJvb3QpCiAgICAgICAgICAgICAgICAgICAgICAgICBhZGp1c3RPdmVyZmxvdyA9IHRy
dWU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdE1hcmtlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RNYXJrZXIu
Y3BwCShyZXZpc2lvbiA3NzI2MCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJM
aXN0TWFya2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI2MCw5ICsxMjYwLDkgQEAgdm9pZCBS
ZW5kZXJMaXN0TWFya2VyOjpwYWludChQYWludEluZm8mIAogICAgICAgICBtYXJrZXIgPSBtYXJr
ZXIudHJhbnNwb3NlZFJlY3QoKTsKICAgICAgICAgbWFya2VyLm1vdmUoYm94LngoKSwgYm94Lnko
KSAtIGxvZ2ljYWxIZWlnaHQoKSk7CiAgICAgICAgIGNvbnRleHQtPnNhdmUoKTsKLSAgICAgICAg
Y29udGV4dC0+dHJhbnNsYXRlKG1hcmtlci54KCksIG1hcmtlci5ib3R0b20oKSk7CisgICAgICAg
IGNvbnRleHQtPnRyYW5zbGF0ZShtYXJrZXIueCgpLCBtYXJrZXIubWF4WSgpKTsKICAgICAgICAg
Y29udGV4dC0+cm90YXRlKHN0YXRpY19jYXN0PGZsb2F0PihkZWcycmFkKDkwLikpKTsKLSAgICAg
ICAgY29udGV4dC0+dHJhbnNsYXRlKC1tYXJrZXIueCgpLCAtbWFya2VyLmJvdHRvbSgpKTsKKyAg
ICAgICAgY29udGV4dC0+dHJhbnNsYXRlKC1tYXJrZXIueCgpLCAtbWFya2VyLm1heFkoKSk7CiAg
ICAgfQogCiAgICAgSW50UG9pbnQgdGV4dE9yaWdpbiA9IEludFBvaW50KG1hcmtlci54KCksIG1h
cmtlci55KCkgKyBzdHlsZSgpLT5mb250TWV0cmljcygpLmFzY2VudCgpKTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCShyZXZpc2lvbiA3NzI2MCkKKysr
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xMzc4LDExICsxMzc4LDExIEBAIGJvb2wgUmVuZGVyT2JqZWN0OjpyZXBhaW50QWZ0ZXJM
YXlvdXRJZk4KICAgICBlbHNlIGlmIChkZWx0YUxlZnQgPCAwKQogICAgICAgICByZXBhaW50VXNp
bmdDb250YWluZXIocmVwYWludENvbnRhaW5lciwgSW50UmVjdChuZXdCb3VuZHMueCgpLCBuZXdC
b3VuZHMueSgpLCAtZGVsdGFMZWZ0LCBuZXdCb3VuZHMuaGVpZ2h0KCkpKTsKIAotICAgIGludCBk
ZWx0YVJpZ2h0ID0gbmV3Qm91bmRzLnJpZ2h0KCkgLSBvbGRCb3VuZHMucmlnaHQoKTsKKyAgICBp
bnQgZGVsdGFSaWdodCA9IG5ld0JvdW5kcy5tYXhYKCkgLSBvbGRCb3VuZHMubWF4WCgpOwogICAg
IGlmIChkZWx0YVJpZ2h0ID4gMCkKLSAgICAgICAgcmVwYWludFVzaW5nQ29udGFpbmVyKHJlcGFp
bnRDb250YWluZXIsIEludFJlY3Qob2xkQm91bmRzLnJpZ2h0KCksIG5ld0JvdW5kcy55KCksIGRl
bHRhUmlnaHQsIG5ld0JvdW5kcy5oZWlnaHQoKSkpOworICAgICAgICByZXBhaW50VXNpbmdDb250
YWluZXIocmVwYWludENvbnRhaW5lciwgSW50UmVjdChvbGRCb3VuZHMubWF4WCgpLCBuZXdCb3Vu
ZHMueSgpLCBkZWx0YVJpZ2h0LCBuZXdCb3VuZHMuaGVpZ2h0KCkpKTsKICAgICBlbHNlIGlmIChk
ZWx0YVJpZ2h0IDwgMCkKLSAgICAgICAgcmVwYWludFVzaW5nQ29udGFpbmVyKHJlcGFpbnRDb250
YWluZXIsIEludFJlY3QobmV3Qm91bmRzLnJpZ2h0KCksIG9sZEJvdW5kcy55KCksIC1kZWx0YVJp
Z2h0LCBvbGRCb3VuZHMuaGVpZ2h0KCkpKTsKKyAgICAgICAgcmVwYWludFVzaW5nQ29udGFpbmVy
KHJlcGFpbnRDb250YWluZXIsIEludFJlY3QobmV3Qm91bmRzLm1heFgoKSwgb2xkQm91bmRzLnko
KSwgLWRlbHRhUmlnaHQsIG9sZEJvdW5kcy5oZWlnaHQoKSkpOwogCiAgICAgaW50IGRlbHRhVG9w
ID0gbmV3Qm91bmRzLnkoKSAtIG9sZEJvdW5kcy55KCk7CiAgICAgaWYgKGRlbHRhVG9wID4gMCkK
QEAgLTEzOTAsMTEgKzEzOTAsMTEgQEAgYm9vbCBSZW5kZXJPYmplY3Q6OnJlcGFpbnRBZnRlckxh
eW91dElmTgogICAgIGVsc2UgaWYgKGRlbHRhVG9wIDwgMCkKICAgICAgICAgcmVwYWludFVzaW5n
Q29udGFpbmVyKHJlcGFpbnRDb250YWluZXIsIEludFJlY3QobmV3Qm91bmRzLngoKSwgbmV3Qm91
bmRzLnkoKSwgbmV3Qm91bmRzLndpZHRoKCksIC1kZWx0YVRvcCkpOwogCi0gICAgaW50IGRlbHRh
Qm90dG9tID0gbmV3Qm91bmRzLmJvdHRvbSgpIC0gb2xkQm91bmRzLmJvdHRvbSgpOworICAgIGlu
dCBkZWx0YUJvdHRvbSA9IG5ld0JvdW5kcy5tYXhZKCkgLSBvbGRCb3VuZHMubWF4WSgpOwogICAg
IGlmIChkZWx0YUJvdHRvbSA+IDApCi0gICAgICAgIHJlcGFpbnRVc2luZ0NvbnRhaW5lcihyZXBh
aW50Q29udGFpbmVyLCBJbnRSZWN0KG5ld0JvdW5kcy54KCksIG9sZEJvdW5kcy5ib3R0b20oKSwg
bmV3Qm91bmRzLndpZHRoKCksIGRlbHRhQm90dG9tKSk7CisgICAgICAgIHJlcGFpbnRVc2luZ0Nv
bnRhaW5lcihyZXBhaW50Q29udGFpbmVyLCBJbnRSZWN0KG5ld0JvdW5kcy54KCksIG9sZEJvdW5k
cy5tYXhZKCksIG5ld0JvdW5kcy53aWR0aCgpLCBkZWx0YUJvdHRvbSkpOwogICAgIGVsc2UgaWYg
KGRlbHRhQm90dG9tIDwgMCkKLSAgICAgICAgcmVwYWludFVzaW5nQ29udGFpbmVyKHJlcGFpbnRD
b250YWluZXIsIEludFJlY3Qob2xkQm91bmRzLngoKSwgbmV3Qm91bmRzLmJvdHRvbSgpLCBvbGRC
b3VuZHMud2lkdGgoKSwgLWRlbHRhQm90dG9tKSk7CisgICAgICAgIHJlcGFpbnRVc2luZ0NvbnRh
aW5lcihyZXBhaW50Q29udGFpbmVyLCBJbnRSZWN0KG9sZEJvdW5kcy54KCksIG5ld0JvdW5kcy5t
YXhZKCksIG9sZEJvdW5kcy53aWR0aCgpLCAtZGVsdGFCb3R0b20pKTsKIAogICAgIGlmIChuZXdP
dXRsaW5lQm94ID09IG9sZE91dGxpbmVCb3gpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTE0
MTYsNyArMTQxNiw3IEBAIGJvb2wgUmVuZGVyT2JqZWN0OjpyZXBhaW50QWZ0ZXJMYXlvdXRJZk4K
ICAgICAgICAgICAgIG5ld091dGxpbmVCb3gueSgpLAogICAgICAgICAgICAgd2lkdGggKyBib3Jk
ZXJXaWR0aCwKICAgICAgICAgICAgIG1heChuZXdPdXRsaW5lQm94LmhlaWdodCgpLCBvbGRPdXRs
aW5lQm94LmhlaWdodCgpKSk7Ci0gICAgICAgIGludCByaWdodCA9IG1pbihuZXdCb3VuZHMucmln
aHQoKSwgb2xkQm91bmRzLnJpZ2h0KCkpOworICAgICAgICBpbnQgcmlnaHQgPSBtaW4obmV3Qm91
bmRzLm1heFgoKSwgb2xkQm91bmRzLm1heFgoKSk7CiAgICAgICAgIGlmIChyaWdodFJlY3QueCgp
IDwgcmlnaHQpIHsKICAgICAgICAgICAgIHJpZ2h0UmVjdC5zZXRXaWR0aChtaW4ocmlnaHRSZWN0
LndpZHRoKCksIHJpZ2h0IC0gcmlnaHRSZWN0LngoKSkpOwogICAgICAgICAgICAgcmVwYWludFVz
aW5nQ29udGFpbmVyKHJlcGFpbnRDb250YWluZXIsIHJpZ2h0UmVjdCk7CkBAIC0xNDMyLDEwICsx
NDMyLDEwIEBAIGJvb2wgUmVuZGVyT2JqZWN0OjpyZXBhaW50QWZ0ZXJMYXlvdXRJZk4KICAgICAg
ICAgaW50IGJveEhlaWdodCA9IGlzQm94KCkgPyB0b1JlbmRlckJveCh0aGlzKS0+aGVpZ2h0KCkg
OiAwOwogICAgICAgICBpbnQgYm9yZGVySGVpZ2h0ID0gbWF4KC1vdXRsaW5lU3R5bGUtPm91dGxp
bmVPZmZzZXQoKSwgbWF4KGJvcmRlckJvdHRvbSwgbWF4KHN0eWxlKCktPmJvcmRlckJvdHRvbUxl
ZnRSYWRpdXMoKS5oZWlnaHQoKS5jYWxjVmFsdWUoYm94SGVpZ2h0KSwgc3R5bGUoKS0+Ym9yZGVy
Qm90dG9tUmlnaHRSYWRpdXMoKS5oZWlnaHQoKS5jYWxjVmFsdWUoYm94SGVpZ2h0KSkpKSArIG1h
eChvdywgc2hhZG93Qm90dG9tKTsKICAgICAgICAgSW50UmVjdCBib3R0b21SZWN0KG5ld091dGxp
bmVCb3gueCgpLAotICAgICAgICAgICAgbWluKG5ld091dGxpbmVCb3guYm90dG9tKCksIG9sZE91
dGxpbmVCb3guYm90dG9tKCkpIC0gYm9yZGVySGVpZ2h0LAorICAgICAgICAgICAgbWluKG5ld091
dGxpbmVCb3gubWF4WSgpLCBvbGRPdXRsaW5lQm94Lm1heFkoKSkgLSBib3JkZXJIZWlnaHQsCiAg
ICAgICAgICAgICBtYXgobmV3T3V0bGluZUJveC53aWR0aCgpLCBvbGRPdXRsaW5lQm94LndpZHRo
KCkpLAogICAgICAgICAgICAgaGVpZ2h0ICsgYm9yZGVySGVpZ2h0KTsKLSAgICAgICAgaW50IGJv
dHRvbSA9IG1pbihuZXdCb3VuZHMuYm90dG9tKCksIG9sZEJvdW5kcy5ib3R0b20oKSk7CisgICAg
ICAgIGludCBib3R0b20gPSBtaW4obmV3Qm91bmRzLm1heFkoKSwgb2xkQm91bmRzLm1heFkoKSk7
CiAgICAgICAgIGlmIChib3R0b21SZWN0LnkoKSA8IGJvdHRvbSkgewogICAgICAgICAgICAgYm90
dG9tUmVjdC5zZXRIZWlnaHQobWluKGJvdHRvbVJlY3QuaGVpZ2h0KCksIGJvdHRvbSAtIGJvdHRv
bVJlY3QueSgpKSk7CiAgICAgICAgICAgICByZXBhaW50VXNpbmdDb250YWluZXIocmVwYWludENv
bnRhaW5lciwgYm90dG9tUmVjdCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyT3ZlcmZsb3cuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyT3ZlcmZsb3cuaAkocmV2aXNpb24gNzcyNjApCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyT3ZlcmZsb3cuaAkod29ya2luZyBjb3B5KQpAQCAtNDIsMTMgKzQyLDEzIEBAIGNs
YXNzIFJlbmRlck92ZXJmbG93IHsKIHB1YmxpYzoKICAgICBSZW5kZXJPdmVyZmxvdyhjb25zdCBJ
bnRSZWN0JiBsYXlvdXRSZWN0LCBjb25zdCBJbnRSZWN0JiB2aXN1YWxSZWN0KSAKICAgICAgICAg
OiBtX3RvcExheW91dE92ZXJmbG93KGxheW91dFJlY3QueSgpKQotICAgICAgICAsIG1fYm90dG9t
TGF5b3V0T3ZlcmZsb3cobGF5b3V0UmVjdC5ib3R0b20oKSkKKyAgICAgICAgLCBtX2JvdHRvbUxh
eW91dE92ZXJmbG93KGxheW91dFJlY3QubWF4WSgpKQogICAgICAgICAsIG1fbGVmdExheW91dE92
ZXJmbG93KGxheW91dFJlY3QueCgpKQotICAgICAgICAsIG1fcmlnaHRMYXlvdXRPdmVyZmxvdyhs
YXlvdXRSZWN0LnJpZ2h0KCkpCisgICAgICAgICwgbV9yaWdodExheW91dE92ZXJmbG93KGxheW91
dFJlY3QubWF4WCgpKQogICAgICAgICAsIG1fdG9wVmlzdWFsT3ZlcmZsb3codmlzdWFsUmVjdC55
KCkpCi0gICAgICAgICwgbV9ib3R0b21WaXN1YWxPdmVyZmxvdyh2aXN1YWxSZWN0LmJvdHRvbSgp
KQorICAgICAgICAsIG1fYm90dG9tVmlzdWFsT3ZlcmZsb3codmlzdWFsUmVjdC5tYXhZKCkpCiAg
ICAgICAgICwgbV9sZWZ0VmlzdWFsT3ZlcmZsb3codmlzdWFsUmVjdC54KCkpCi0gICAgICAgICwg
bV9yaWdodFZpc3VhbE92ZXJmbG93KHZpc3VhbFJlY3QucmlnaHQoKSkKKyAgICAgICAgLCBtX3Jp
Z2h0VmlzdWFsT3ZlcmZsb3codmlzdWFsUmVjdC5tYXhYKCkpCiAgICAgewogICAgIH0KICAgIApA
QCAtMTIyLDQxICsxMjIsNDEgQEAgaW5saW5lIHZvaWQgUmVuZGVyT3ZlcmZsb3c6Om1vdmUoaW50
IGR4LAogaW5saW5lIHZvaWQgUmVuZGVyT3ZlcmZsb3c6OmFkZExheW91dE92ZXJmbG93KGNvbnN0
IEludFJlY3QmIHJlY3QpCiB7CiAgICAgbV90b3BMYXlvdXRPdmVyZmxvdyA9IHN0ZDo6bWluKHJl
Y3QueSgpLCBtX3RvcExheW91dE92ZXJmbG93KTsKLSAgICBtX2JvdHRvbUxheW91dE92ZXJmbG93
ID0gc3RkOjptYXgocmVjdC5ib3R0b20oKSwgbV9ib3R0b21MYXlvdXRPdmVyZmxvdyk7CisgICAg
bV9ib3R0b21MYXlvdXRPdmVyZmxvdyA9IHN0ZDo6bWF4KHJlY3QubWF4WSgpLCBtX2JvdHRvbUxh
eW91dE92ZXJmbG93KTsKICAgICBtX2xlZnRMYXlvdXRPdmVyZmxvdyA9IHN0ZDo6bWluKHJlY3Qu
eCgpLCBtX2xlZnRMYXlvdXRPdmVyZmxvdyk7Ci0gICAgbV9yaWdodExheW91dE92ZXJmbG93ID0g
c3RkOjptYXgocmVjdC5yaWdodCgpLCBtX3JpZ2h0TGF5b3V0T3ZlcmZsb3cpOworICAgIG1fcmln
aHRMYXlvdXRPdmVyZmxvdyA9IHN0ZDo6bWF4KHJlY3QubWF4WCgpLCBtX3JpZ2h0TGF5b3V0T3Zl
cmZsb3cpOwogfQogCiBpbmxpbmUgdm9pZCBSZW5kZXJPdmVyZmxvdzo6YWRkVmlzdWFsT3ZlcmZs
b3coY29uc3QgSW50UmVjdCYgcmVjdCkKIHsKICAgICBtX3RvcFZpc3VhbE92ZXJmbG93ID0gc3Rk
OjptaW4ocmVjdC55KCksIG1fdG9wVmlzdWFsT3ZlcmZsb3cpOwotICAgIG1fYm90dG9tVmlzdWFs
T3ZlcmZsb3cgPSBzdGQ6Om1heChyZWN0LmJvdHRvbSgpLCBtX2JvdHRvbVZpc3VhbE92ZXJmbG93
KTsKKyAgICBtX2JvdHRvbVZpc3VhbE92ZXJmbG93ID0gc3RkOjptYXgocmVjdC5tYXhZKCksIG1f
Ym90dG9tVmlzdWFsT3ZlcmZsb3cpOwogICAgIG1fbGVmdFZpc3VhbE92ZXJmbG93ID0gc3RkOjpt
aW4ocmVjdC54KCksIG1fbGVmdFZpc3VhbE92ZXJmbG93KTsKLSAgICBtX3JpZ2h0VmlzdWFsT3Zl
cmZsb3cgPSBzdGQ6Om1heChyZWN0LnJpZ2h0KCksIG1fcmlnaHRWaXN1YWxPdmVyZmxvdyk7Cisg
ICAgbV9yaWdodFZpc3VhbE92ZXJmbG93ID0gc3RkOjptYXgocmVjdC5tYXhYKCksIG1fcmlnaHRW
aXN1YWxPdmVyZmxvdyk7CiB9CiAKIGlubGluZSB2b2lkIFJlbmRlck92ZXJmbG93OjpzZXRMYXlv
dXRPdmVyZmxvdyhjb25zdCBJbnRSZWN0JiByZWN0KQogewogICAgIG1fdG9wTGF5b3V0T3ZlcmZs
b3cgPSByZWN0LnkoKTsKLSAgICBtX2JvdHRvbUxheW91dE92ZXJmbG93ID0gcmVjdC5ib3R0b20o
KTsKKyAgICBtX2JvdHRvbUxheW91dE92ZXJmbG93ID0gcmVjdC5tYXhZKCk7CiAgICAgbV9sZWZ0
TGF5b3V0T3ZlcmZsb3cgPSByZWN0LngoKTsKLSAgICBtX3JpZ2h0TGF5b3V0T3ZlcmZsb3cgPSBy
ZWN0LnJpZ2h0KCk7CisgICAgbV9yaWdodExheW91dE92ZXJmbG93ID0gcmVjdC5tYXhYKCk7CiB9
CiAKIGlubGluZSB2b2lkIFJlbmRlck92ZXJmbG93OjpzZXRWaXN1YWxPdmVyZmxvdyhjb25zdCBJ
bnRSZWN0JiByZWN0KQogewogICAgIG1fdG9wVmlzdWFsT3ZlcmZsb3cgPSByZWN0LnkoKTsKLSAg
ICBtX2JvdHRvbVZpc3VhbE92ZXJmbG93ID0gcmVjdC5ib3R0b20oKTsKKyAgICBtX2JvdHRvbVZp
c3VhbE92ZXJmbG93ID0gcmVjdC5tYXhZKCk7CiAgICAgbV9sZWZ0VmlzdWFsT3ZlcmZsb3cgPSBy
ZWN0LngoKTsKLSAgICBtX3JpZ2h0VmlzdWFsT3ZlcmZsb3cgPSByZWN0LnJpZ2h0KCk7CisgICAg
bV9yaWdodFZpc3VhbE92ZXJmbG93ID0gcmVjdC5tYXhYKCk7CiB9CiAKIGlubGluZSB2b2lkIFJl
bmRlck92ZXJmbG93OjpyZXNldExheW91dE92ZXJmbG93KGNvbnN0IEludFJlY3QmIHJlY3QpCiB7
CiAgICAgbV90b3BMYXlvdXRPdmVyZmxvdyA9IHJlY3QueSgpOwotICAgIG1fYm90dG9tTGF5b3V0
T3ZlcmZsb3cgPSByZWN0LmJvdHRvbSgpOworICAgIG1fYm90dG9tTGF5b3V0T3ZlcmZsb3cgPSBy
ZWN0Lm1heFkoKTsKICAgICBtX2xlZnRMYXlvdXRPdmVyZmxvdyA9IHJlY3QueCgpOwotICAgIG1f
cmlnaHRMYXlvdXRPdmVyZmxvdyA9IHJlY3QucmlnaHQoKTsKKyAgICBtX3JpZ2h0TGF5b3V0T3Zl
cmZsb3cgPSByZWN0Lm1heFgoKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDog
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJlcGxhY2VkLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVwbGFjZWQuY3BwCShyZXZpc2lvbiA3
NzI2MCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSZXBsYWNlZC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTE4Miw5ICsxODIsOSBAQCBib29sIFJlbmRlclJlcGxhY2VkOjpzaG91
bGRQYWludChQYWludEluCiAgICAgfQogICAgIAogICAgIGludCBvcyA9IDIgKiBtYXhpbWFsT3V0
bGluZVNpemUocGFpbnRJbmZvLnBoYXNlKTsKLSAgICBpZiAoY3VycmVudFRYICsgbGVmdFZpc3Vh
bE92ZXJmbG93KCkgPj0gcGFpbnRJbmZvLnJlY3QucmlnaHQoKSArIG9zIHx8IGN1cnJlbnRUWCAr
IHJpZ2h0VmlzdWFsT3ZlcmZsb3coKSA8PSBwYWludEluZm8ucmVjdC54KCkgLSBvcykKKyAgICBp
ZiAoY3VycmVudFRYICsgbGVmdFZpc3VhbE92ZXJmbG93KCkgPj0gcGFpbnRJbmZvLnJlY3QubWF4
WCgpICsgb3MgfHwgY3VycmVudFRYICsgcmlnaHRWaXN1YWxPdmVyZmxvdygpIDw9IHBhaW50SW5m
by5yZWN0LngoKSAtIG9zKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKHRvcCA+PSBw
YWludEluZm8ucmVjdC5ib3R0b20oKSArIG9zIHx8IGJvdHRvbSA8PSBwYWludEluZm8ucmVjdC55
KCkgLSBvcykKKyAgICBpZiAodG9wID49IHBhaW50SW5mby5yZWN0Lm1heFkoKSArIG9zIHx8IGJv
dHRvbSA8PSBwYWludEluZm8ucmVjdC55KCkgLSBvcykKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
CiAgICAgcmV0dXJuIHRydWU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
U2Nyb2xsYmFyVGhlbWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJTY3JvbGxiYXJUaGVtZS5jcHAJKHJldmlzaW9uIDc3MjYwKQorKysgU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclNjcm9sbGJhclRoZW1lLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtOTgsMTAgKzk4LDEwIEBAIEludFJlY3QgUmVuZGVyU2Nyb2xsYmFyVGhlbWU6OmNvbnN0cmFp
blQKICAgICBJbnRSZWN0IHJlc3VsdCA9IHJlY3Q7CiAgICAgaWYgKHNjcm9sbGJhci0+b3JpZW50
YXRpb24oKSA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyKSB7CiAgICAgICAgIHJlc3VsdC5zZXRYKGJh
Y2tSZWN0LngoKSk7Ci0gICAgICAgIHJlc3VsdC5zZXRXaWR0aChmb3J3YXJkUmVjdC5yaWdodCgp
IC0gYmFja1JlY3QueCgpKTsKKyAgICAgICAgcmVzdWx0LnNldFdpZHRoKGZvcndhcmRSZWN0Lm1h
eFgoKSAtIGJhY2tSZWN0LngoKSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgcmVzdWx0LnNldFko
YmFja1JlY3QueSgpKTsKLSAgICAgICAgcmVzdWx0LnNldEhlaWdodChmb3J3YXJkUmVjdC5ib3R0
b20oKSAtIGJhY2tSZWN0LnkoKSk7CisgICAgICAgIHJlc3VsdC5zZXRIZWlnaHQoZm9yd2FyZFJl
Y3QubWF4WSgpIC0gYmFja1JlY3QueSgpKTsKICAgICB9CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlLmNwcAkocmV2aXNpb24g
NzcyNjApCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00NTQsOSArNDU0LDkgQEAgdm9pZCBSZW5kZXJUYWJsZTo6cGFpbnQoUGFp
bnRJbmZvJiBwYWludAogICAgIFBhaW50UGhhc2UgcGFpbnRQaGFzZSA9IHBhaW50SW5mby5waGFz
ZTsKIAogICAgIGludCBvcyA9IDIgKiBtYXhpbWFsT3V0bGluZVNpemUocGFpbnRQaGFzZSk7Ci0g
ICAgaWYgKHR5ICsgdG9wVmlzdWFsT3ZlcmZsb3coKSA+PSBwYWludEluZm8ucmVjdC5ib3R0b20o
KSArIG9zIHx8IHR5ICsgYm90dG9tVmlzdWFsT3ZlcmZsb3coKSA8PSBwYWludEluZm8ucmVjdC55
KCkgLSBvcykKKyAgICBpZiAodHkgKyB0b3BWaXN1YWxPdmVyZmxvdygpID49IHBhaW50SW5mby5y
ZWN0Lm1heFkoKSArIG9zIHx8IHR5ICsgYm90dG9tVmlzdWFsT3ZlcmZsb3coKSA8PSBwYWludElu
Zm8ucmVjdC55KCkgLSBvcykKICAgICAgICAgcmV0dXJuOwotICAgIGlmICh0eCArIGxlZnRWaXN1
YWxPdmVyZmxvdygpID49IHBhaW50SW5mby5yZWN0LnJpZ2h0KCkgKyBvcyB8fCB0eCArIHJpZ2h0
VmlzdWFsT3ZlcmZsb3coKSA8PSBwYWludEluZm8ucmVjdC54KCkgLSBvcykKKyAgICBpZiAodHgg
KyBsZWZ0VmlzdWFsT3ZlcmZsb3coKSA+PSBwYWludEluZm8ucmVjdC5tYXhYKCkgKyBvcyB8fCB0
eCArIHJpZ2h0VmlzdWFsT3ZlcmZsb3coKSA8PSBwYWludEluZm8ucmVjdC54KCkgLSBvcykKICAg
ICAgICAgcmV0dXJuOwogCiAgICAgYm9vbCBwdXNoZWRDbGlwID0gcHVzaENvbnRlbnRzQ2xpcChw
YWludEluZm8sIHR4LCB0eSk7ICAgIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclRhYmxlQ2VsbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRhYmxlQ2VsbC5jcHAJKHJldmlzaW9uIDc3MjYwKQorKysgU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclRhYmxlQ2VsbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgwMyw4ICs4
MDMsOCBAQCB2b2lkIFJlbmRlclRhYmxlQ2VsbDo6cGFpbnQoUGFpbnRJbmZvJiBwCiAgICAgICAg
IHR4ICs9IHgoKTsKICAgICAgICAgdHkgKz0geSgpOwogICAgICAgICBpbnQgb3MgPSAyICogbWF4
aW1hbE91dGxpbmVTaXplKHBhaW50SW5mby5waGFzZSk7Ci0gICAgICAgIGlmICh0eSAtIHRhYmxl
KCktPm91dGVyQm9yZGVyVG9wKCkgPCBwYWludEluZm8ucmVjdC5ib3R0b20oKSArIG9zICYmCi0g
ICAgICAgICAgICB0eSArIGhlaWdodCgpICsgdGFibGUoKS0+b3V0ZXJCb3JkZXJCb3R0b20oKSA+
IHBhaW50SW5mby5yZWN0LnkoKSAtIG9zKQorICAgICAgICBpZiAodHkgLSB0YWJsZSgpLT5vdXRl
ckJvcmRlclRvcCgpIDwgcGFpbnRJbmZvLnJlY3QubWF4WSgpICsgb3MKKyAgICAgICAgICAgICYm
IHR5ICsgaGVpZ2h0KCkgKyB0YWJsZSgpLT5vdXRlckJvcmRlckJvdHRvbSgpID4gcGFpbnRJbmZv
LnJlY3QueSgpIC0gb3MpCiAgICAgICAgICAgICBwYWludENvbGxhcHNlZEJvcmRlcihwYWludElu
Zm8uY29udGV4dCwgdHgsIHR5LCB3aWR0aCgpLCBoZWlnaHQoKSk7CiAgICAgICAgIHJldHVybjsK
ICAgICB9IApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlv
bi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxl
U2VjdGlvbi5jcHAJKHJldmlzaW9uIDc3MjYwKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRhYmxlU2VjdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk2NCw5ICs5NjQsOSBA
QCB2b2lkIFJlbmRlclRhYmxlU2VjdGlvbjo6cGFpbnRPYmplY3QoUGFpCiAgICAgbG9jYWxSZXBh
aW50UmVjdC5tb3ZlKC10eCwgLXR5KTsKICAgICBpZiAoc3R5bGUoKS0+aXNGbGlwcGVkQmxvY2tz
V3JpdGluZ01vZGUoKSkgewogICAgICAgICBpZiAoc3R5bGUoKS0+aXNIb3Jpem9udGFsV3JpdGlu
Z01vZGUoKSkKLSAgICAgICAgICAgIGxvY2FsUmVwYWludFJlY3Quc2V0WShoZWlnaHQoKSAtIGxv
Y2FsUmVwYWludFJlY3QuYm90dG9tKCkpOworICAgICAgICAgICAgbG9jYWxSZXBhaW50UmVjdC5z
ZXRZKGhlaWdodCgpIC0gbG9jYWxSZXBhaW50UmVjdC5tYXhZKCkpOwogICAgICAgICBlbHNlCi0g
ICAgICAgICAgICBsb2NhbFJlcGFpbnRSZWN0LnNldFgod2lkdGgoKSAtIGxvY2FsUmVwYWludFJl
Y3QucmlnaHQoKSk7CisgICAgICAgICAgICBsb2NhbFJlcGFpbnRSZWN0LnNldFgod2lkdGgoKSAt
IGxvY2FsUmVwYWludFJlY3QubWF4WCgpKTsKICAgICB9CiAKICAgICAvLyBJZiBzb21lIGNlbGwg
b3ZlcmZsb3dzLCBqdXN0IHBhaW50IGFsbCBvZiB0aGVtLgpAQCAtOTgxLDcgKzk4MSw3IEBAIHZv
aWQgUmVuZGVyVGFibGVTZWN0aW9uOjpwYWludE9iamVjdChQYWkKICAgICAgICAgaWYgKHN0YXJ0
cm93ID09IG1fcm93UG9zLnNpemUoKSB8fCAoc3RhcnRyb3cgPiAwICYmIChtX3Jvd1Bvc1tzdGFy
dHJvd10gPiAgYmVmb3JlKSkpCiAgICAgICAgICAgLS1zdGFydHJvdzsKIAotICAgICAgICBpbnQg
YWZ0ZXIgPSAoc3R5bGUoKS0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IGxvY2FsUmVwYWlu
dFJlY3QuYm90dG9tKCkgOiBsb2NhbFJlcGFpbnRSZWN0LnJpZ2h0KCkpICsgb3M7CisgICAgICAg
IGludCBhZnRlciA9IChzdHlsZSgpLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gbG9jYWxS
ZXBhaW50UmVjdC5tYXhZKCkgOiBsb2NhbFJlcGFpbnRSZWN0Lm1heFgoKSkgKyBvczsKICAgICAg
ICAgZW5kcm93ID0gc3RkOjpsb3dlcl9ib3VuZChtX3Jvd1Bvcy5iZWdpbigpLCBtX3Jvd1Bvcy5l
bmQoKSwgYWZ0ZXIpIC0gbV9yb3dQb3MuYmVnaW4oKTsKICAgICAgICAgaWYgKGVuZHJvdyA9PSBt
X3Jvd1Bvcy5zaXplKCkpCiAgICAgICAgICAgLS1lbmRyb3c7CkBAIC0xMDAwLDcgKzEwMDAsNyBA
QCB2b2lkIFJlbmRlclRhYmxlU2VjdGlvbjo6cGFpbnRPYmplY3QoUGFpCiAgICAgICAgIGlmICgo
c3RhcnRjb2wgPT0gY29sdW1uUG9zLnNpemUoKSkgfHwgKHN0YXJ0Y29sID4gMCAmJiAoY29sdW1u
UG9zW3N0YXJ0Y29sXSA+IHN0YXJ0KSkpCiAgICAgICAgICAgICAtLXN0YXJ0Y29sOwogCi0gICAg
ICAgIGludCBlbmQgPSAoc3R5bGUoKS0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IGxvY2Fs
UmVwYWludFJlY3QucmlnaHQoKSA6IGxvY2FsUmVwYWludFJlY3QuYm90dG9tKCkpICsgb3M7Cisg
ICAgICAgIGludCBlbmQgPSAoc3R5bGUoKS0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IGxv
Y2FsUmVwYWludFJlY3QubWF4WCgpIDogbG9jYWxSZXBhaW50UmVjdC5tYXhZKCkpICsgb3M7CiAg
ICAgICAgIGVuZGNvbCA9IHN0ZDo6bG93ZXJfYm91bmQoY29sdW1uUG9zLmJlZ2luKCksIGNvbHVt
blBvcy5lbmQoKSwgZW5kKSAtIGNvbHVtblBvcy5iZWdpbigpOwogICAgICAgICBpZiAoZW5kY29s
ID09IGNvbHVtblBvcy5zaXplKCkpCiAgICAgICAgICAgICAtLWVuZGNvbDsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHAJKHJldmlzaW9uIDc3MjYwKQorKysgU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
NDgsOSArMzQ4LDkgQEAgdm9pZCBSZW5kZXJUZXh0OjphYnNvbHV0ZVF1YWRzKFZlY3RvcjxGbAog
ICAgICAgICBJbnRSZWN0IGVsbGlwc2lzUmVjdCA9IChvcHRpb24gPT0gQ2xpcFRvRWxsaXBzaXMp
ID8gZWxsaXBzaXNSZWN0Rm9yQm94KGJveCwgMCwgdGV4dExlbmd0aCgpKSA6IEludFJlY3QoKTsK
ICAgICAgICAgaWYgKCFlbGxpcHNpc1JlY3QuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICBpZiAo
c3R5bGUoKS0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkKLSAgICAgICAgICAgICAgICBib3Vu
ZGFyaWVzLnNldFdpZHRoKGVsbGlwc2lzUmVjdC5yaWdodCgpIC0gYm91bmRhcmllcy54KCkpOwor
ICAgICAgICAgICAgICAgIGJvdW5kYXJpZXMuc2V0V2lkdGgoZWxsaXBzaXNSZWN0Lm1heFgoKSAt
IGJvdW5kYXJpZXMueCgpKTsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBib3Vu
ZGFyaWVzLnNldEhlaWdodChlbGxpcHNpc1JlY3QuYm90dG9tKCkgLSBib3VuZGFyaWVzLnkoKSk7
CisgICAgICAgICAgICAgICAgYm91bmRhcmllcy5zZXRIZWlnaHQoZWxsaXBzaXNSZWN0Lm1heFko
KSAtIGJvdW5kYXJpZXMueSgpKTsKICAgICAgICAgfQogICAgICAgICBxdWFkcy5hcHBlbmQobG9j
YWxUb0Fic29sdXRlUXVhZChGbG9hdFJlY3QoYm91bmRhcmllcykpKTsKICAgICB9CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xT
aW5nbGVMaW5lLmNwcAkocmV2aXNpb24gNzcyNjApCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzkz
LDcgKzM5Myw3IEBAIHZvaWQgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpmb3J3YXIKICNl
bmRpZgogCiAgICAgRmxvYXRQb2ludCBsb2NhbFBvaW50ID0gaW5uZXJUZXh0UmVuZGVyZXItPmFi
c29sdXRlVG9Mb2NhbChzdGF0aWNfY2FzdDxNb3VzZUV2ZW50Kj4oZXZlbnQpLT5hYnNvbHV0ZUxv
Y2F0aW9uKCksIGZhbHNlLCB0cnVlKTsKLSAgICBpbnQgdGV4dFJpZ2h0ID0gaW5uZXJUZXh0UmVu
ZGVyZXItPmJvcmRlckJveFJlY3QoKS5yaWdodCgpOworICAgIGludCB0ZXh0UmlnaHQgPSBpbm5l
clRleHRSZW5kZXJlci0+Ym9yZGVyQm94UmVjdCgpLm1heFgoKTsKIAogICAgIGlmIChtX3Jlc3Vs
dHNCdXR0b24gJiYgbG9jYWxQb2ludC54KCkgPCBpbm5lclRleHRSZW5kZXJlci0+Ym9yZGVyQm94
UmVjdCgpLngoKSkKICAgICAgICAgbV9yZXN1bHRzQnV0dG9uLT5kZWZhdWx0RXZlbnRIYW5kbGVy
KGV2ZW50KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5t
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMu
bW0JKHJldmlzaW9uIDc3MjYwKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRo
ZW1lTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xMDQxLDIwICsxMDQxLDIwIEBAIHZvaWQgUmVu
ZGVyVGhlbWVNYWM6OnBhaW50TWVudUxpc3RCdXR0b24KICAgICBGbG9hdFJlY3QgdG9wR3JhZGll
bnQoci54KCksIHIueSgpLCByLndpZHRoKCksIHIuaGVpZ2h0KCkgLyAyLjBmKTsKICAgICBzdHJ1
Y3QgQ0dGdW5jdGlvbkNhbGxiYWNrcyB0b3BDYWxsYmFja3MgPSB7IDAsIFRvcEdyYWRpZW50SW50
ZXJwb2xhdGUsIE5VTEwgfTsKICAgICBSZXRhaW5QdHI8Q0dGdW5jdGlvblJlZj4gdG9wRnVuY3Rp
b24oQWRvcHRDRiwgQ0dGdW5jdGlvbkNyZWF0ZShOVUxMLCAxLCBOVUxMLCA0LCBOVUxMLCAmdG9w
Q2FsbGJhY2tzKSk7Ci0gICAgUmV0YWluUHRyPENHU2hhZGluZ1JlZj4gdG9wU2hhZGluZyhBZG9w
dENGLCBDR1NoYWRpbmdDcmVhdGVBeGlhbChjc3BhY2UsIENHUG9pbnRNYWtlKHRvcEdyYWRpZW50
LngoKSwgdG9wR3JhZGllbnQueSgpKSwgQ0dQb2ludE1ha2UodG9wR3JhZGllbnQueCgpLCB0b3BH
cmFkaWVudC5ib3R0b20oKSksIHRvcEZ1bmN0aW9uLmdldCgpLCBmYWxzZSwgZmFsc2UpKTsKKyAg
ICBSZXRhaW5QdHI8Q0dTaGFkaW5nUmVmPiB0b3BTaGFkaW5nKEFkb3B0Q0YsIENHU2hhZGluZ0Ny
ZWF0ZUF4aWFsKGNzcGFjZSwgQ0dQb2ludE1ha2UodG9wR3JhZGllbnQueCgpLCB0b3BHcmFkaWVu
dC55KCkpLCBDR1BvaW50TWFrZSh0b3BHcmFkaWVudC54KCksIHRvcEdyYWRpZW50Lm1heFkoKSks
IHRvcEZ1bmN0aW9uLmdldCgpLCBmYWxzZSwgZmFsc2UpKTsKIAogICAgIEZsb2F0UmVjdCBib3R0
b21HcmFkaWVudChyLngoKSArIHJhZGl1cywgci55KCkgKyByLmhlaWdodCgpIC8gMi4wZiwgci53
aWR0aCgpIC0gMi4wZiAqIHJhZGl1cywgci5oZWlnaHQoKSAvIDIuMGYpOwogICAgIHN0cnVjdCBD
R0Z1bmN0aW9uQ2FsbGJhY2tzIGJvdHRvbUNhbGxiYWNrcyA9IHsgMCwgQm90dG9tR3JhZGllbnRJ
bnRlcnBvbGF0ZSwgTlVMTCB9OwogICAgIFJldGFpblB0cjxDR0Z1bmN0aW9uUmVmPiBib3R0b21G
dW5jdGlvbihBZG9wdENGLCBDR0Z1bmN0aW9uQ3JlYXRlKE5VTEwsIDEsIE5VTEwsIDQsIE5VTEws
ICZib3R0b21DYWxsYmFja3MpKTsKLSAgICBSZXRhaW5QdHI8Q0dTaGFkaW5nUmVmPiBib3R0b21T
aGFkaW5nKEFkb3B0Q0YsIENHU2hhZGluZ0NyZWF0ZUF4aWFsKGNzcGFjZSwgQ0dQb2ludE1ha2Uo
Ym90dG9tR3JhZGllbnQueCgpLCAgYm90dG9tR3JhZGllbnQueSgpKSwgQ0dQb2ludE1ha2UoYm90
dG9tR3JhZGllbnQueCgpLCBib3R0b21HcmFkaWVudC5ib3R0b20oKSksIGJvdHRvbUZ1bmN0aW9u
LmdldCgpLCBmYWxzZSwgZmFsc2UpKTsKKyAgICBSZXRhaW5QdHI8Q0dTaGFkaW5nUmVmPiBib3R0
b21TaGFkaW5nKEFkb3B0Q0YsIENHU2hhZGluZ0NyZWF0ZUF4aWFsKGNzcGFjZSwgQ0dQb2ludE1h
a2UoYm90dG9tR3JhZGllbnQueCgpLCAgYm90dG9tR3JhZGllbnQueSgpKSwgQ0dQb2ludE1ha2Uo
Ym90dG9tR3JhZGllbnQueCgpLCBib3R0b21HcmFkaWVudC5tYXhZKCkpLCBib3R0b21GdW5jdGlv
bi5nZXQoKSwgZmFsc2UsIGZhbHNlKSk7CiAKICAgICBzdHJ1Y3QgQ0dGdW5jdGlvbkNhbGxiYWNr
cyBtYWluQ2FsbGJhY2tzID0geyAwLCBNYWluR3JhZGllbnRJbnRlcnBvbGF0ZSwgTlVMTCB9Owog
ICAgIFJldGFpblB0cjxDR0Z1bmN0aW9uUmVmPiBtYWluRnVuY3Rpb24oQWRvcHRDRiwgQ0dGdW5j
dGlvbkNyZWF0ZShOVUxMLCAxLCBOVUxMLCA0LCBOVUxMLCAmbWFpbkNhbGxiYWNrcykpOwotICAg
IFJldGFpblB0cjxDR1NoYWRpbmdSZWY+IG1haW5TaGFkaW5nKEFkb3B0Q0YsIENHU2hhZGluZ0Ny
ZWF0ZUF4aWFsKGNzcGFjZSwgQ0dQb2ludE1ha2Uoci54KCksICByLnkoKSksIENHUG9pbnRNYWtl
KHIueCgpLCByLmJvdHRvbSgpKSwgbWFpbkZ1bmN0aW9uLmdldCgpLCBmYWxzZSwgZmFsc2UpKTsK
KyAgICBSZXRhaW5QdHI8Q0dTaGFkaW5nUmVmPiBtYWluU2hhZGluZyhBZG9wdENGLCBDR1NoYWRp
bmdDcmVhdGVBeGlhbChjc3BhY2UsIENHUG9pbnRNYWtlKHIueCgpLCAgci55KCkpLCBDR1BvaW50
TWFrZShyLngoKSwgci5tYXhZKCkpLCBtYWluRnVuY3Rpb24uZ2V0KCksIGZhbHNlLCBmYWxzZSkp
OwogCiAgICAgUmV0YWluUHRyPENHU2hhZGluZ1JlZj4gbGVmdFNoYWRpbmcoQWRvcHRDRiwgQ0dT
aGFkaW5nQ3JlYXRlQXhpYWwoY3NwYWNlLCBDR1BvaW50TWFrZShyLngoKSwgIHIueSgpKSwgQ0dQ
b2ludE1ha2Uoci54KCkgKyByYWRpdXMsIHIueSgpKSwgbWFpbkZ1bmN0aW9uLmdldCgpLCBmYWxz
ZSwgZmFsc2UpKTsKIAotICAgIFJldGFpblB0cjxDR1NoYWRpbmdSZWY+IHJpZ2h0U2hhZGluZyhB
ZG9wdENGLCBDR1NoYWRpbmdDcmVhdGVBeGlhbChjc3BhY2UsIENHUG9pbnRNYWtlKHIucmlnaHQo
KSwgIHIueSgpKSwgQ0dQb2ludE1ha2Uoci5yaWdodCgpIC0gcmFkaXVzLCByLnkoKSksIG1haW5G
dW5jdGlvbi5nZXQoKSwgZmFsc2UsIGZhbHNlKSk7CisgICAgUmV0YWluUHRyPENHU2hhZGluZ1Jl
Zj4gcmlnaHRTaGFkaW5nKEFkb3B0Q0YsIENHU2hhZGluZ0NyZWF0ZUF4aWFsKGNzcGFjZSwgQ0dQ
b2ludE1ha2Uoci5tYXhYKCksICByLnkoKSksIENHUG9pbnRNYWtlKHIubWF4WCgpIC0gcmFkaXVz
LCByLnkoKSksIG1haW5GdW5jdGlvbi5nZXQoKSwgZmFsc2UsIGZhbHNlKSk7CiAgICAgcGFpbnRJ
bmZvLmNvbnRleHQtPnNhdmUoKTsKICAgICBDR0NvbnRleHRDbGlwVG9SZWN0KGNvbnRleHQsIHIp
OwogICAgIHBhaW50SW5mby5jb250ZXh0LT5hZGRSb3VuZGVkUmVjdENsaXAoYm9yZGVyKTsKQEAg
LTEwOTksNyArMTA5OSw3IEBAIGJvb2wgUmVuZGVyVGhlbWVNYWM6OnBhaW50TWVudUxpc3RCdXR0
b24KICAgICBmbG9hdCBjZW50ZXJZID0gYm91bmRzLnkoKSArIGJvdW5kcy5oZWlnaHQoKSAvIDIu
MGY7CiAgICAgZmxvYXQgYXJyb3dIZWlnaHQgPSBiYXNlQXJyb3dIZWlnaHQgKiBmb250U2NhbGU7
CiAgICAgZmxvYXQgYXJyb3dXaWR0aCA9IGJhc2VBcnJvd1dpZHRoICogZm9udFNjYWxlOwotICAg
IGZsb2F0IGxlZnRFZGdlID0gYm91bmRzLnJpZ2h0KCkgLSBhcnJvd1BhZGRpbmdSaWdodCAqIG8t
PnN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKSAtIGFycm93V2lkdGg7CisgICAgZmxvYXQgbGVmdEVk
Z2UgPSBib3VuZHMubWF4WCgpIC0gYXJyb3dQYWRkaW5nUmlnaHQgKiBvLT5zdHlsZSgpLT5lZmZl
Y3RpdmVab29tKCkgLSBhcnJvd1dpZHRoOwogICAgIGZsb2F0IHNwYWNlQmV0d2VlbkFycm93cyA9
IGJhc2VTcGFjZUJldHdlZW5BcnJvd3MgKiBmb250U2NhbGU7CiAKICAgICBpZiAoYm91bmRzLndp
ZHRoKCkgPCBhcnJvd1dpZHRoICsgYXJyb3dQYWRkaW5nTGVmdCAqIG8tPnN0eWxlKCktPmVmZmVj
dGl2ZVpvb20oKSkKQEAgLTExMzgsMTEgKzExMzgsMTEgQEAgYm9vbCBSZW5kZXJUaGVtZU1hYzo6
cGFpbnRNZW51TGlzdEJ1dHRvbgogICAgIHBhaW50SW5mby5jb250ZXh0LT5zZXRTdHJva2VTdHls
ZShTb2xpZFN0cm9rZSk7CiAgICAgcGFpbnRJbmZvLmNvbnRleHQtPnNldFN0cm9rZUNvbG9yKGxl
ZnRTZXBhcmF0b3JDb2xvciwgQ29sb3JTcGFjZURldmljZVJHQik7CiAgICAgcGFpbnRJbmZvLmNv
bnRleHQtPmRyYXdMaW5lKEludFBvaW50KGxlZnRFZGdlT2ZTZXBhcmF0b3IsIGJvdW5kcy55KCkp
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRQb2ludChsZWZ0RWRnZU9mU2Vw
YXJhdG9yLCBib3VuZHMuYm90dG9tKCkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgSW50UG9pbnQobGVmdEVkZ2VPZlNlcGFyYXRvciwgYm91bmRzLm1heFkoKSkpOwogCiAgICAg
cGFpbnRJbmZvLmNvbnRleHQtPnNldFN0cm9rZUNvbG9yKHJpZ2h0U2VwYXJhdG9yQ29sb3IsIENv
bG9yU3BhY2VEZXZpY2VSR0IpOwogICAgIHBhaW50SW5mby5jb250ZXh0LT5kcmF3TGluZShJbnRQ
b2ludChsZWZ0RWRnZU9mU2VwYXJhdG9yICsgc2VwYXJhdG9yU3BhY2UsIGJvdW5kcy55KCkpLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRQb2ludChsZWZ0RWRnZU9mU2VwYXJh
dG9yICsgc2VwYXJhdG9yU3BhY2UsIGJvdW5kcy5ib3R0b20oKSkpOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBJbnRQb2ludChsZWZ0RWRnZU9mU2VwYXJhdG9yICsgc2VwYXJhdG9y
U3BhY2UsIGJvdW5kcy5tYXhZKCkpKTsKIAogICAgIHBhaW50SW5mby5jb250ZXh0LT5yZXN0b3Jl
KCk7CiAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTI5Myw5ICsxMjkzLDkgQEAgYm9vbCBSZW5kZXJU
aGVtZU1hYzo6cGFpbnRTbGlkZXJUcmFjayhSZQogICAgIFJldGFpblB0cjxDR0Z1bmN0aW9uUmVm
PiBtYWluRnVuY3Rpb24oQWRvcHRDRiwgQ0dGdW5jdGlvbkNyZWF0ZShOVUxMLCAxLCBOVUxMLCA0
LCBOVUxMLCAmbWFpbkNhbGxiYWNrcykpOwogICAgIFJldGFpblB0cjxDR1NoYWRpbmdSZWY+IG1h
aW5TaGFkaW5nOwogICAgIGlmIChvLT5zdHlsZSgpLT5hcHBlYXJhbmNlKCkgPT0gU2xpZGVyVmVy
dGljYWxQYXJ0KQotICAgICAgICBtYWluU2hhZGluZy5hZG9wdENGKENHU2hhZGluZ0NyZWF0ZUF4
aWFsKGNzcGFjZSwgQ0dQb2ludE1ha2UoYm91bmRzLngoKSwgIGJvdW5kcy5ib3R0b20oKSksIENH
UG9pbnRNYWtlKGJvdW5kcy5yaWdodCgpLCBib3VuZHMuYm90dG9tKCkpLCBtYWluRnVuY3Rpb24u
Z2V0KCksIGZhbHNlLCBmYWxzZSkpOworICAgICAgICBtYWluU2hhZGluZy5hZG9wdENGKENHU2hh
ZGluZ0NyZWF0ZUF4aWFsKGNzcGFjZSwgQ0dQb2ludE1ha2UoYm91bmRzLngoKSwgIGJvdW5kcy5t
YXhZKCkpLCBDR1BvaW50TWFrZShib3VuZHMubWF4WCgpLCBib3VuZHMubWF4WSgpKSwgbWFpbkZ1
bmN0aW9uLmdldCgpLCBmYWxzZSwgZmFsc2UpKTsKICAgICBlbHNlCi0gICAgICAgIG1haW5TaGFk
aW5nLmFkb3B0Q0YoQ0dTaGFkaW5nQ3JlYXRlQXhpYWwoY3NwYWNlLCBDR1BvaW50TWFrZShib3Vu
ZHMueCgpLCAgYm91bmRzLnkoKSksIENHUG9pbnRNYWtlKGJvdW5kcy54KCksIGJvdW5kcy5ib3R0
b20oKSksIG1haW5GdW5jdGlvbi5nZXQoKSwgZmFsc2UsIGZhbHNlKSk7CisgICAgICAgIG1haW5T
aGFkaW5nLmFkb3B0Q0YoQ0dTaGFkaW5nQ3JlYXRlQXhpYWwoY3NwYWNlLCBDR1BvaW50TWFrZShi
b3VuZHMueCgpLCAgYm91bmRzLnkoKSksIENHUG9pbnRNYWtlKGJvdW5kcy54KCksIGJvdW5kcy5t
YXhZKCkpLCBtYWluRnVuY3Rpb24uZ2V0KCksIGZhbHNlLCBmYWxzZSkpOwogCiAgICAgSW50U2l6
ZSByYWRpdXModHJhY2tSYWRpdXMsIHRyYWNrUmFkaXVzKTsKICAgICBwYWludEluZm8uY29udGV4
dC0+YWRkUm91bmRlZFJlY3RDbGlwKFJvdW5kZWRJbnRSZWN0KGJvdW5kcywgcmFkaXVzLCByYWRp
dXMsIHJhZGl1cywgcmFkaXVzKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVmlldy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clZpZXcuY3BwCShyZXZpc2lvbiA3NzI2MCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJWaWV3LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzA0LDkgKzMwNCw5IEBAIHZvaWQgUmVu
ZGVyVmlldzo6Y29tcHV0ZVJlY3RGb3JSZXBhaW50KFIKICAgICAgICAgLy8gV2UgaGF2ZSB0byBm
bGlwIGJ5IGhhbmQgc2luY2UgdGhlIHZpZXcncyBsb2dpY2FsIGhlaWdodCBoYXMgbm90IGJlZW4g
ZGV0ZXJtaW5lZC4gIFdlCiAgICAgICAgIC8vIGNhbiB1c2UgdGhlIHZpZXdwb3J0IHdpZHRoIGFu
ZCBoZWlnaHQuCiAgICAgICAgIGlmIChzdHlsZSgpLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgp
KQotICAgICAgICAgICAgcmVjdC5zZXRZKHZpZXdIZWlnaHQoKSAtIHJlY3QuYm90dG9tKCkpOwor
ICAgICAgICAgICAgcmVjdC5zZXRZKHZpZXdIZWlnaHQoKSAtIHJlY3QubWF4WSgpKTsKICAgICAg
ICAgZWxzZQotICAgICAgICAgICAgcmVjdC5zZXRYKHZpZXdXaWR0aCgpIC0gcmVjdC5yaWdodCgp
KTsKKyAgICAgICAgICAgIHJlY3Quc2V0WCh2aWV3V2lkdGgoKSAtIHJlY3QubWF4WCgpKTsKICAg
ICB9CiAKICAgICBpZiAoZml4ZWQgJiYgbV9mcmFtZVZpZXcpCkBAIC02NjQsNyArNjY0LDcgQEAg
aW50IFJlbmRlclZpZXc6OmRvY0JvdHRvbSgpIGNvbnN0CiAgICAgZmxpcEZvcldyaXRpbmdNb2Rl
KG92ZXJmbG93UmVjdCk7CiAgICAgaWYgKGhhc1RyYW5zZm9ybSgpKQogICAgICAgICBvdmVyZmxv
d1JlY3QgPSBsYXllcigpLT5jdXJyZW50VHJhbnNmb3JtKCkubWFwUmVjdChvdmVyZmxvd1JlY3Qp
OwotICAgIHJldHVybiBvdmVyZmxvd1JlY3QuYm90dG9tKCk7CisgICAgcmV0dXJuIG92ZXJmbG93
UmVjdC5tYXhZKCk7CiB9CiAKIGludCBSZW5kZXJWaWV3Ojpkb2NMZWZ0KCkgY29uc3QKQEAgLTY4
Miw3ICs2ODIsNyBAQCBpbnQgUmVuZGVyVmlldzo6ZG9jUmlnaHQoKSBjb25zdAogICAgIGZsaXBG
b3JXcml0aW5nTW9kZShvdmVyZmxvd1JlY3QpOwogICAgIGlmIChoYXNUcmFuc2Zvcm0oKSkKICAg
ICAgICAgb3ZlcmZsb3dSZWN0ID0gbGF5ZXIoKS0+Y3VycmVudFRyYW5zZm9ybSgpLm1hcFJlY3Qo
b3ZlcmZsb3dSZWN0KTsKLSAgICByZXR1cm4gb3ZlcmZsb3dSZWN0LnJpZ2h0KCk7CisgICAgcmV0
dXJuIG92ZXJmbG93UmVjdC5tYXhYKCk7CiB9CiAKIGludCBSZW5kZXJWaWV3Ojp2aWV3SGVpZ2h0
KCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Sb290SW5saW5lQm94LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUm9vdElubGluZUJveC5j
cHAJKHJldmlzaW9uIDc3MjYwKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jvb3RJbmxp
bmVCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NDQsMTQgKzU0NCwxNCBAQCBJbnRSZWN0IFJv
b3RJbmxpbmVCb3g6OnBhZGRlZExheW91dE92ZXJmCiAgICAgCiAgICAgaWYgKGlzSG9yaXpvbnRh
bCgpKSB7CiAgICAgICAgIGlmIChpc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkpCi0gICAgICAgICAg
ICBsaW5lTGF5b3V0T3ZlcmZsb3cuc2hpZnRSaWdodEVkZ2VUbyhtYXgobGluZUxheW91dE92ZXJm
bG93LnJpZ2h0KCksIGxvZ2ljYWxSaWdodCgpICsgZW5kUGFkZGluZykpOworICAgICAgICAgICAg
bGluZUxheW91dE92ZXJmbG93LnNoaWZ0TWF4WEVkZ2VUbyhtYXgobGluZUxheW91dE92ZXJmbG93
Lm1heFgoKSwgbG9naWNhbFJpZ2h0KCkgKyBlbmRQYWRkaW5nKSk7CiAgICAgICAgIGVsc2UKLSAg
ICAgICAgICAgIGxpbmVMYXlvdXRPdmVyZmxvdy5zaGlmdExlZnRFZGdlVG8obWluKGxpbmVMYXlv
dXRPdmVyZmxvdy54KCksIGxvZ2ljYWxMZWZ0KCkgLSBlbmRQYWRkaW5nKSk7CisgICAgICAgICAg
ICBsaW5lTGF5b3V0T3ZlcmZsb3cuc2hpZnRNaW5YRWRnZVRvKG1pbihsaW5lTGF5b3V0T3ZlcmZs
b3cueCgpLCBsb2dpY2FsTGVmdCgpIC0gZW5kUGFkZGluZykpOwogICAgIH0gZWxzZSB7CiAgICAg
ICAgIGlmIChpc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkpCi0gICAgICAgICAgICBsaW5lTGF5b3V0
T3ZlcmZsb3cuc2hpZnRCb3R0b21FZGdlVG8obWF4KGxpbmVMYXlvdXRPdmVyZmxvdy5ib3R0b20o
KSwgbG9naWNhbFJpZ2h0KCkgKyBlbmRQYWRkaW5nKSk7CisgICAgICAgICAgICBsaW5lTGF5b3V0
T3ZlcmZsb3cuc2hpZnRNYXhZRWRnZVRvKG1heChsaW5lTGF5b3V0T3ZlcmZsb3cubWF4WSgpLCBs
b2dpY2FsUmlnaHQoKSArIGVuZFBhZGRpbmcpKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAg
bGluZUxheW91dE92ZXJmbG93LnNoaWZ0VG9wRWRnZVRvKG1pbihsaW5lTGF5b3V0T3ZlcmZsb3cu
eSgpLCBsb2dpY2FsUmlnaHQoKSAtIGVuZFBhZGRpbmcpKTsKKyAgICAgICAgICAgIGxpbmVMYXlv
dXRPdmVyZmxvdy5zaGlmdE1pbllFZGdlVG8obWluKGxpbmVMYXlvdXRPdmVyZmxvdy55KCksIGxv
Z2ljYWxSaWdodCgpIC0gZW5kUGFkZGluZykpOwogICAgIH0KICAgICAKICAgICByZXR1cm4gbGlu
ZUxheW91dE92ZXJmbG93OwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5k
ZXJTVkdJbmxpbmVUZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1JlbmRlclNWR0lubGluZVRleHQuY3BwCShyZXZpc2lvbiA3NzI2MCkKKysrIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHSW5saW5lVGV4dC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEwMywxMiArMTAzLDEyIEBAIEludFJlY3QgUmVuZGVyU1ZHSW5saW5lVGV4dDo6
bG9jYWxDYXJldFIKICAgICAvLyBVc2UgdGhlIGVkZ2Ugb2YgdGhlIHNlbGVjdGlvbiByZWN0IHRv
IGRldGVybWluZSB0aGUgY2FyZXQgcmVjdC4KICAgICBpZiAoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+
KGNhcmV0T2Zmc2V0KSA8IHRleHRCb3gtPnN0YXJ0KCkgKyB0ZXh0Qm94LT5sZW4oKSkgewogICAg
ICAgICBJbnRSZWN0IHJlY3QgPSB0ZXh0Qm94LT5zZWxlY3Rpb25SZWN0KDAsIDAsIGNhcmV0T2Zm
c2V0LCBjYXJldE9mZnNldCArIDEpOwotICAgICAgICBpbnQgeCA9IGJveC0+aXNMZWZ0VG9SaWdo
dERpcmVjdGlvbigpID8gcmVjdC54KCkgOiByZWN0LnJpZ2h0KCk7CisgICAgICAgIGludCB4ID0g
Ym94LT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyByZWN0LngoKSA6IHJlY3QubWF4WCgpOwog
ICAgICAgICByZXR1cm4gSW50UmVjdCh4LCByZWN0LnkoKSwgY2FyZXRXaWR0aCwgcmVjdC5oZWln
aHQoKSk7CiAgICAgfQogCiAgICAgSW50UmVjdCByZWN0ID0gdGV4dEJveC0+c2VsZWN0aW9uUmVj
dCgwLCAwLCBjYXJldE9mZnNldCAtIDEsIGNhcmV0T2Zmc2V0KTsKLSAgICBpbnQgeCA9IGJveC0+
aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpID8gcmVjdC5yaWdodCgpIDogcmVjdC54KCk7CisgICAg
aW50IHggPSBib3gtPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/IHJlY3QubWF4WCgpIDogcmVj
dC54KCk7CiAgICAgcmV0dXJuIEludFJlY3QoeCwgcmVjdC55KCksIGNhcmV0V2lkdGgsIHJlY3Qu
aGVpZ2h0KCkpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9SZWdpb24uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL1JlZ2lvbi5jcHAJKHJldmlz
aW9uIDc3MjYwKQorKysgU291cmNlL1dlYktpdDIvUGxhdGZvcm0vUmVnaW9uLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNzMsOCArNzMsOCBAQCBSZWdpb246OlNoYXBlOjpTaGFwZShjb25zdCBJbnRS
ZWN0JiByZWN0CiB7CiAgICAgYXBwZW5kU3BhbihyZWN0LnkoKSk7CiAgICAgYXBwZW5kU2VnbWVu
dChyZWN0LngoKSk7Ci0gICAgYXBwZW5kU2VnbWVudChyZWN0LnJpZ2h0KCkpOwotICAgIGFwcGVu
ZFNwYW4ocmVjdC5ib3R0b20oKSk7CisgICAgYXBwZW5kU2VnbWVudChyZWN0Lm1heFgoKSk7Cisg
ICAgYXBwZW5kU3BhbihyZWN0Lm1heFkoKSk7CiB9CiAKIHZvaWQgUmVnaW9uOjpTaGFwZTo6YXBw
ZW5kU3BhbihpbnQgeSkKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9GaW5kSW5kaWNh
dG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvRmluZEluZGlj
YXRvci5jcHAJKHJldmlzaW9uIDc3MjYwKQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Zp
bmRJbmRpY2F0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTcsNyArMTU3LDcgQEAgdm9pZCBG
aW5kSW5kaWNhdG9yOjpkcmF3KEdyYXBoaWNzQ29udGV4dAogICAgICAgICBncmFwaGljc0NvbnRl
eHQuc2F2ZSgpOwogICAgICAgICBGbG9hdFJlY3QgaW5uZXJQYXRoUmVjdCA9IGluZmxhdGVSZWN0
KHRleHRSZWN0LCBob3Jpem9udGFsUGFkZGluZ0luc2lkZUxpZ2h0Qm9yZGVyLCB2ZXJ0aWNhbFBh
ZGRpbmdJbnNpZGVMaWdodEJvcmRlcik7CiAgICAgICAgIGdyYXBoaWNzQ29udGV4dC5jbGlwKHBh
dGhXaXRoUm91bmRlZFJlY3QoaW5uZXJQYXRoUmVjdCwgY29ybmVyUmFkaXVzKSk7Ci0gICAgICAg
IFJlZlB0cjxHcmFkaWVudD4gZ3JhZGllbnQgPSBHcmFkaWVudDo6Y3JlYXRlKEZsb2F0UG9pbnQo
aW5uZXJQYXRoUmVjdC54KCksIGlubmVyUGF0aFJlY3QueSgpKSwgRmxvYXRQb2ludChpbm5lclBh
dGhSZWN0LngoKSwgaW5uZXJQYXRoUmVjdC5ib3R0b20oKSkpOworICAgICAgICBSZWZQdHI8R3Jh
ZGllbnQ+IGdyYWRpZW50ID0gR3JhZGllbnQ6OmNyZWF0ZShGbG9hdFBvaW50KGlubmVyUGF0aFJl
Y3QueCgpLCBpbm5lclBhdGhSZWN0LnkoKSksIEZsb2F0UG9pbnQoaW5uZXJQYXRoUmVjdC54KCks
IGlubmVyUGF0aFJlY3QubWF4WSgpKSk7CiAgICAgICAgIGdyYWRpZW50LT5hZGRDb2xvclN0b3Ao
MCwgZ3JhZGllbnRMaWdodENvbG9yKCkpOwogICAgICAgICBncmFkaWVudC0+YWRkQ29sb3JTdG9w
KDEsIGdyYWRpZW50RGFya0NvbG9yKCkpOwogICAgICAgICBncmFwaGljc0NvbnRleHQuc2V0Rmls
bEdyYWRpZW50KGdyYWRpZW50KTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
bWFjL1dLUHJpbnRpbmdWaWV3Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvbWFjL1dLUHJpbnRpbmdWaWV3Lm1tCShyZXZpc2lvbiA3NzI2MCkKKysrIFNvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1dLUHJpbnRpbmdWaWV3Lm1tCSh3b3JraW5nIGNv
cHkpCkBAIC0yMzMsOCArMjMzLDggQEAgc3RhdGljIHZvaWQgcGFnZURpZENvbXB1dGVQYWdlUmVj
dHMoY29ucwogCiAgICAgICAgIGNvbnN0IEludFJlY3QmIGxhc3RQcmludGluZ1BhZ2VSZWN0ID0g
dmlldy0+X3ByaW50aW5nUGFnZVJlY3RzW3ZpZXctPl9wcmludGluZ1BhZ2VSZWN0cy5zaXplKCkg
LSAxXTsKICAgICAgICAgTlNSZWN0IG5ld0ZyYW1lU2l6ZSA9IE5TTWFrZVJlY3QoMCwgMCwgCi0g
ICAgICAgICAgICBjZWlsKGxhc3RQcmludGluZ1BhZ2VSZWN0LnJpZ2h0KCkgKiB2aWV3LT5fdG90
YWxTY2FsZUZhY3RvckZvclByaW50aW5nKSwgCi0gICAgICAgICAgICBjZWlsKGxhc3RQcmludGlu
Z1BhZ2VSZWN0LmJvdHRvbSgpICogdmlldy0+X3RvdGFsU2NhbGVGYWN0b3JGb3JQcmludGluZykp
OworICAgICAgICAgICAgY2VpbChsYXN0UHJpbnRpbmdQYWdlUmVjdC5tYXhYKCkgKiB2aWV3LT5f
dG90YWxTY2FsZUZhY3RvckZvclByaW50aW5nKSwgCisgICAgICAgICAgICBjZWlsKGxhc3RQcmlu
dGluZ1BhZ2VSZWN0Lm1heFkoKSAqIHZpZXctPl90b3RhbFNjYWxlRmFjdG9yRm9yUHJpbnRpbmcp
KTsKICAgICAgICAgTE9HKFZpZXcsICJXS1ByaW50aW5nVmlldyBzZXR0aW5nIGZyYW1lIHNpemUg
dG8geDolZyB5OiVnIHdpZHRoOiVnIGhlaWdodDolZyIsIG5ld0ZyYW1lU2l6ZS5vcmlnaW4ueCwg
bmV3RnJhbWVTaXplLm9yaWdpbi55LCBuZXdGcmFtZVNpemUuc2l6ZS53aWR0aCwgbmV3RnJhbWVT
aXplLnNpemUuaGVpZ2h0KTsKICAgICAgICAgW3ZpZXcgc2V0RnJhbWU6bmV3RnJhbWVTaXplXTsK
IApJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9DaHVua2VkVXBkYXRlRHJhd2lu
Z0FyZWFQcm94eU1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
bWFjL0NodW5rZWRVcGRhdGVEcmF3aW5nQXJlYVByb3h5TWFjLm1tCShyZXZpc2lvbiA3NzI2MCkK
KysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvQ2h1bmtlZFVwZGF0ZURyYXdpbmdBcmVh
UHJveHlNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTk3LDcgKzk3LDcgQEAgdm9pZCBDaHVua2Vk
VXBkYXRlRHJhd2luZ0FyZWFQcm94eTo6ZHJhdwogCiAgICAgLy8gRmxpcCB0aGUgZGVzdGluYXRp
b24uCiAgICAgQ0dDb250ZXh0U2NhbGVDVE0obV9iaXRtYXBDb250ZXh0LmdldCgpLCAxLCAtMSk7
Ci0gICAgQ0dDb250ZXh0VHJhbnNsYXRlQ1RNKG1fYml0bWFwQ29udGV4dC5nZXQoKSwgMCwgLSh1
cGRhdGVDaHVua1JlY3QueSgpICsgdXBkYXRlQ2h1bmtSZWN0LmJvdHRvbSgpKSk7CisgICAgQ0dD
b250ZXh0VHJhbnNsYXRlQ1RNKG1fYml0bWFwQ29udGV4dC5nZXQoKSwgMCwgLSh1cGRhdGVDaHVu
a1JlY3QueSgpICsgdXBkYXRlQ2h1bmtSZWN0Lm1heFkoKSkpOwogCiAgICAgQ0dDb250ZXh0RHJh
d0ltYWdlKG1fYml0bWFwQ29udGV4dC5nZXQoKSwgdXBkYXRlQ2h1bmtSZWN0LCBpbWFnZS5nZXQo
KSk7CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9O
ZXRzY2FwZVBsdWdpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9QbHVnaW5zL05ldHNjYXBlL05ldHNjYXBlUGx1Z2luLmNwcAkocmV2aXNpb24gNzcyNjApCisr
KyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvTmV0c2NhcGVQbHVn
aW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNTIsOCArMzUyLDggQEAgdm9pZCBOZXRzY2FwZVBs
dWdpbjo6Y2FsbFNldFdpbmRvdygpCiAgICAgbV9ucFdpbmRvdy5oZWlnaHQgPSBtX2ZyYW1lUmVj
dC5oZWlnaHQoKTsKICAgICBtX25wV2luZG93LmNsaXBSZWN0LnRvcCA9IG1fY2xpcFJlY3QueSgp
OwogICAgIG1fbnBXaW5kb3cuY2xpcFJlY3QubGVmdCA9IG1fY2xpcFJlY3QueCgpOwotICAgIG1f
bnBXaW5kb3cuY2xpcFJlY3QuYm90dG9tID0gbV9jbGlwUmVjdC5ib3R0b20oKTsKLSAgICBtX25w
V2luZG93LmNsaXBSZWN0LnJpZ2h0ID0gbV9jbGlwUmVjdC5yaWdodCgpOworICAgIG1fbnBXaW5k
b3cuY2xpcFJlY3QuYm90dG9tID0gbV9jbGlwUmVjdC5tYXhZKCk7CisgICAgbV9ucFdpbmRvdy5j
bGlwUmVjdC5yaWdodCA9IG1fY2xpcFJlY3QubWF4WCgpOwogCiAgICAgTlBQX1NldFdpbmRvdygm
bV9ucFdpbmRvdyk7CiB9CkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkhUTUxW
aWV3Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViSFRNTFZp
ZXcubW0JKHJldmlzaW9uIDc3MjYwKQorKysgU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJI
VE1MVmlldy5tbQkod29ya2luZyBjb3B5KQpAQCAtMzEyLDcgKzMxMiw3IEBAIHN0YXRpYyB2b2lk
IHNldE5lZWRzRGlzcGxheUluUmVjdChOU1ZpZXcKICAgICBOU1JlY3QgaW52YWxpZFJlY3RJbldl
YkZyYW1lVmlld0Nvb3JkaW5hdGVzID0gW2VuY2xvc2luZ1dlYkZyYW1lVmlldyBjb252ZXJ0UmVj
dDppbnZhbGlkUmVjdCBmcm9tVmlldzpzZWxmXTsKICAgICBJbnRSZWN0IGludmFsaWRSZWN0SW5G
cmFtZVZpZXdDb29yZGluYXRlcyhpbnZhbGlkUmVjdEluV2ViRnJhbWVWaWV3Q29vcmRpbmF0ZXMp
OwogICAgIGlmICghW2VuY2xvc2luZ1dlYkZyYW1lVmlldyBpc0ZsaXBwZWRdKQotICAgICAgICBp
bnZhbGlkUmVjdEluRnJhbWVWaWV3Q29vcmRpbmF0ZXMuc2V0WShmcmFtZVZpZXctPmZyYW1lUmVj
dCgpLnNpemUoKS5oZWlnaHQoKSAtIGludmFsaWRSZWN0SW5GcmFtZVZpZXdDb29yZGluYXRlcy5i
b3R0b20oKSk7CisgICAgICAgIGludmFsaWRSZWN0SW5GcmFtZVZpZXdDb29yZGluYXRlcy5zZXRZ
KGZyYW1lVmlldy0+ZnJhbWVSZWN0KCkuc2l6ZSgpLmhlaWdodCgpIC0gaW52YWxpZFJlY3RJbkZy
YW1lVmlld0Nvb3JkaW5hdGVzLm1heFkoKSk7CiAKICAgICBmcmFtZVZpZXctPmludmFsaWRhdGVS
ZWN0KGludmFsaWRSZWN0SW5GcmFtZVZpZXdDb29yZGluYXRlcyk7CiB9Cg==
</data>
<flag name="review"
          id="72303"
          type_id="1"
          status="-"
          setter="oliver"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>80808</attachid>
            <date>2011-02-01 12:54:53 -0800</date>
            <delta_ts>2011-02-01 13:12:58 -0800</delta_ts>
            <desc>Step 1: Convert most of WebCore and WebKit without getting rid of the methods yet.</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>108103</size>
            <attacher name="Dave Hyatt">hyatt</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9i
amVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nl
c3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcAkocmV2aXNpb24gNzcyNzgpCisrKyBTb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yNTE5LDcgKzI1MTksNyBAQCBJbnRSZWN0IEFjY2Vzc2liaWxpdHlSZW5kZXJP
YmplY3Q6OmJvdW5kCiAgICAgb3VycmVjdC51bml0ZShyZWN0Mik7CiAgICAgCiAgICAgLy8gaWYg
dGhlIHJlY3RhbmdsZSBzcGFucyBsaW5lcyBhbmQgY29udGFpbnMgbXVsdGlwbGUgdGV4dCBjaGFy
cywgdXNlIHRoZSByYW5nZSdzIGJvdW5kaW5nIGJveCBpbnRlYWQKLSAgICBpZiAocmVjdDEuYm90
dG9tKCkgIT0gcmVjdDIuYm90dG9tKCkpIHsKKyAgICBpZiAocmVjdDEubWF4WSgpICE9IHJlY3Qy
Lm1heFkoKSkgewogICAgICAgICBSZWZQdHI8UmFuZ2U+IGRhdGFSYW5nZSA9IG1ha2VSYW5nZShy
YW5nZS5zdGFydCwgcmFuZ2UuZW5kKTsKICAgICAgICAgSW50UmVjdCBib3VuZGluZ0JveCA9IGRh
dGFSYW5nZS0+Ym91bmRpbmdCb3goKTsKICAgICAgICAgU3RyaW5nIHJhbmdlU3RyaW5nID0gcGxh
aW5UZXh0KGRhdGFSYW5nZS5nZXQoKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L21hYy9BY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlci5tbQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9BY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlci5t
bQkocmV2aXNpb24gNzcyNzgpCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9B
Y2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlci5tbQkod29ya2luZyBjb3B5KQpAQCAtMTEyNSw3ICsx
MTI1LDcgQEAgLSAoTlNWYWx1ZSopcG9zaXRpb24KICAgICAgICAgcG9pbnQueSA9IHNjcmVlbkhl
aWdodCAtIChwb2ludC55ICsgcmVtb3RlUG9zaXRpb24ueSArIHJlY3QuaGVpZ2h0KCkgLSBzY3Jv
bGxQb3NpdGlvbi55KTsKICAgICB9IGVsc2UgewogICAgICAgICAvLyBUaGUgQ29jb2EgYWNjZXNz
aWJpbGl0eSBBUEkgd2FudHMgdGhlIGxvd2VyLWxlZnQgY29ybmVyLgotICAgICAgICBwb2ludCA9
IE5TTWFrZVBvaW50KHJlY3QueCgpLCByZWN0LmJvdHRvbSgpKTsKKyAgICAgICAgcG9pbnQgPSBO
U01ha2VQb2ludChyZWN0LngoKSwgcmVjdC5tYXhZKCkpOwogICAgICAgICAKICAgICAgICAgaWYg
KGZyYW1lVmlldykgewogICAgICAgICAgICAgTlNWaWV3KiB2aWV3ID0gZnJhbWVWaWV3LT5kb2N1
bWVudFZpZXcoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9DbGllbnRSZWN0LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0NsaWVudFJlY3QuaAkocmV2aXNpb24gNzcyNzgp
CisrKyBTb3VyY2UvV2ViQ29yZS9kb20vQ2xpZW50UmVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC00
Miw4ICs0Miw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgc3RhdGljIFBhc3NSZWZQ
dHI8Q2xpZW50UmVjdD4gY3JlYXRlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkgeyByZXR1cm4gYWRv
cHRSZWYobmV3IENsaWVudFJlY3QocmVjdCkpOyB9CiAKICAgICAgICAgZmxvYXQgdG9wKCkgY29u
c3QgeyByZXR1cm4gbV9yZWN0LnkoKTsgfQotICAgICAgICBmbG9hdCByaWdodCgpIGNvbnN0IHsg
cmV0dXJuIG1fcmVjdC5yaWdodCgpOyB9Ci0gICAgICAgIGZsb2F0IGJvdHRvbSgpIGNvbnN0IHsg
cmV0dXJuIG1fcmVjdC5ib3R0b20oKTsgfQorICAgICAgICBmbG9hdCByaWdodCgpIGNvbnN0IHsg
cmV0dXJuIG1fcmVjdC5tYXhYKCk7IH0KKyAgICAgICAgZmxvYXQgYm90dG9tKCkgY29uc3QgeyBy
ZXR1cm4gbV9yZWN0Lm1heFkoKTsgfQogICAgICAgICBmbG9hdCBsZWZ0KCkgY29uc3QgeyByZXR1
cm4gbV9yZWN0LngoKTsgfQogICAgICAgICBmbG9hdCB3aWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1f
cmVjdC53aWR0aCgpOyB9CiAgICAgICAgIGZsb2F0IGhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIG1f
cmVjdC5oZWlnaHQoKTsgfQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxl
bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxl
bWVudC5jcHAJKHJldmlzaW9uIDc3Mjc4KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2Fu
dmFzRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0NCwxMCArMzQ0LDEwIEBAIFN0cmlu
ZyBIVE1MQ2FudmFzRWxlbWVudDo6dG9EYXRhVVJMKGNvbnMKIAogSW50UmVjdCBIVE1MQ2FudmFz
RWxlbWVudDo6Y29udmVydExvZ2ljYWxUb0RldmljZShjb25zdCBGbG9hdFJlY3QmIGxvZ2ljYWxS
ZWN0KSBjb25zdAogewotICAgIGZsb2F0IGxlZnQgPSBmbG9vcmYobG9naWNhbFJlY3QubGVmdCgp
ICogbV9wYWdlU2NhbGVGYWN0b3IpOwotICAgIGZsb2F0IHRvcCA9IGZsb29yZihsb2dpY2FsUmVj
dC50b3AoKSAqIG1fcGFnZVNjYWxlRmFjdG9yKTsKLSAgICBmbG9hdCByaWdodCA9IGNlaWxmKGxv
Z2ljYWxSZWN0LnJpZ2h0KCkgKiBtX3BhZ2VTY2FsZUZhY3Rvcik7Ci0gICAgZmxvYXQgYm90dG9t
ID0gY2VpbGYobG9naWNhbFJlY3QuYm90dG9tKCkgKiBtX3BhZ2VTY2FsZUZhY3Rvcik7CisgICAg
ZmxvYXQgbGVmdCA9IGZsb29yZihsb2dpY2FsUmVjdC54KCkgKiBtX3BhZ2VTY2FsZUZhY3Rvcik7
CisgICAgZmxvYXQgdG9wID0gZmxvb3JmKGxvZ2ljYWxSZWN0LnkoKSAqIG1fcGFnZVNjYWxlRmFj
dG9yKTsKKyAgICBmbG9hdCByaWdodCA9IGNlaWxmKGxvZ2ljYWxSZWN0Lm1heFgoKSAqIG1fcGFn
ZVNjYWxlRmFjdG9yKTsKKyAgICBmbG9hdCBib3R0b20gPSBjZWlsZihsb2dpY2FsUmVjdC5tYXhZ
KCkgKiBtX3BhZ2VTY2FsZUZhY3Rvcik7CiAgICAgCiAgICAgcmV0dXJuIEludFJlY3QoSW50UG9p
bnQobGVmdCwgdG9wKSwgY29udmVydFRvVmFsaWREZXZpY2VTaXplKHJpZ2h0IC0gbGVmdCwgYm90
dG9tIC0gdG9wKSk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwv
Y2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAJKHJldmlzaW9uIDc3Mjc4KQorKysg
U291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTEwNSw4ICsxMTA1LDggQEAgc3RhdGljIEludFNpemUgc2l6ZShI
VE1MVmlkZW9FbGVtZW50KiB2aQogCiBzdGF0aWMgaW5saW5lIEZsb2F0UmVjdCBub3JtYWxpemVS
ZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKLSAgICByZXR1cm4gRmxvYXRSZWN0KG1pbihy
ZWN0LngoKSwgcmVjdC5yaWdodCgpKSwKLSAgICAgICAgbWluKHJlY3QueSgpLCByZWN0LmJvdHRv
bSgpKSwKKyAgICByZXR1cm4gRmxvYXRSZWN0KG1pbihyZWN0LngoKSwgcmVjdC5tYXhYKCkpLAor
ICAgICAgICBtaW4ocmVjdC55KCksIHJlY3QubWF4WSgpKSwKICAgICAgICAgbWF4KHJlY3Qud2lk
dGgoKSwgLXJlY3Qud2lkdGgoKSksCiAgICAgICAgIG1heChyZWN0LmhlaWdodCgpLCAtcmVjdC5o
ZWlnaHQoKSkpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckFn
ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
QWdlbnQuY3BwCShyZXZpc2lvbiA3NzI3OCkKKysrIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JBZ2VudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyNzQsNyArMTI3NCw3IEBAIHZv
aWQgSW5zcGVjdG9yQWdlbnQ6OmRyYXdFbGVtZW50VGl0bGUoR3IKICAgICBmb250LnVwZGF0ZSgw
KTsKIAogICAgIFRleHRSdW4gbm9kZVRpdGxlUnVuKG5vZGVUaXRsZSk7Ci0gICAgSW50UG9pbnQg
dGl0bGVCYXNlUG9pbnQgPSBib3VuZGluZ0JveC5ib3R0b21MZWZ0KCk7CisgICAgSW50UG9pbnQg
dGl0bGVCYXNlUG9pbnQgPSBJbnRQb2ludChib3VuZGluZ0JveC54KCksIGJvdW5kaW5nQm94Lm1h
eFkoKSAtIDEpOwogICAgIHRpdGxlQmFzZVBvaW50Lm1vdmUocmVjdEluZmxhdGVQeCwgcmVjdElu
ZmxhdGVQeCk7CiAgICAgSW50UmVjdCB0aXRsZVJlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KGZvbnQu
c2VsZWN0aW9uUmVjdEZvclRleHQobm9kZVRpdGxlUnVuLCB0aXRsZUJhc2VQb2ludCwgZm9udEhl
aWdodFB4KSk7CiAgICAgdGl0bGVSZWN0LmluZmxhdGUocmVjdEluZmxhdGVQeCk7CkBAIC0xMjg0
LDE5ICsxMjg0LDE5IEBAIHZvaWQgSW5zcGVjdG9yQWdlbnQ6OmRyYXdFbGVtZW50VGl0bGUoR3IK
ICAgICBpbnQgZHkgPSBib3JkZXJXaWR0aFB4OwogCiAgICAgLy8gSWYgdGhlIHRpcCBzdGlja3Mg
YmV5b25kIHRoZSByaWdodCBvZiBvdmVybGF5UmVjdCwgcmlnaHQtYWxpZ24gdGhlIHRpcCB3aXRo
IHRoZSBzYWlkIGJvdW5kYXJ5LgotICAgIGlmICh0aXRsZVJlY3QucmlnaHQoKSA+IG92ZXJsYXlS
ZWN0LnJpZ2h0KCkpCi0gICAgICAgIGR4ID0gb3ZlcmxheVJlY3QucmlnaHQoKSAtIHRpdGxlUmVj
dC5yaWdodCgpOworICAgIGlmICh0aXRsZVJlY3QubWF4WCgpID4gb3ZlcmxheVJlY3QubWF4WCgp
KQorICAgICAgICBkeCA9IG92ZXJsYXlSZWN0Lm1heFgoKSAtIHRpdGxlUmVjdC5tYXhYKCk7CiAK
ICAgICAvLyBJZiB0aGUgdGlwIHN0aWNrcyBiZXlvbmQgdGhlIGxlZnQgb2Ygb3ZlcmxheVJlY3Qs
IGxlZnQtYWxpZ24gdGhlIHRpcCB3aXRoIHRoZSBzYWlkIGJvdW5kYXJ5LgogICAgIGlmICh0aXRs
ZVJlY3QueCgpICsgZHggPCBvdmVybGF5UmVjdC54KCkpCiAgICAgICAgIGR4ID0gb3ZlcmxheVJl
Y3QueCgpIC0gdGl0bGVSZWN0LngoKSAtIGJvcmRlcldpZHRoUHg7CiAKICAgICAvLyBJZiB0aGUg
dGlwIHN0aWNrcyBiZXlvbmQgdGhlIGJvdHRvbSBvZiBvdmVybGF5UmVjdCwgc2hvdyB0aGUgdGlw
IGF0IHRvcCBvZiBib3VuZGluZyBib3guCi0gICAgaWYgKHRpdGxlUmVjdC5ib3R0b20oKSA+IG92
ZXJsYXlSZWN0LmJvdHRvbSgpKSB7Ci0gICAgICAgIGR5ID0gYm91bmRpbmdCb3gueSgpIC0gdGl0
bGVSZWN0LmJvdHRvbSgpIC0gYm9yZGVyV2lkdGhQeDsKKyAgICBpZiAodGl0bGVSZWN0Lm1heFko
KSA+IG92ZXJsYXlSZWN0Lm1heFkoKSkgeworICAgICAgICBkeSA9IGJvdW5kaW5nQm94LnkoKSAt
IHRpdGxlUmVjdC5tYXhZKCkgLSBib3JkZXJXaWR0aFB4OwogICAgICAgICAvLyBJZiB0aGUgdGlw
IHN0aWxsIHN0aWNrcyBiZXlvbmQgdGhlIGJvdHRvbSBvZiBvdmVybGF5UmVjdCwgYm90dG9tLWFs
aWduIHRoZSB0aXAgd2l0aCB0aGUgc2FpZCBib3VuZGFyeS4KLSAgICAgICAgaWYgKHRpdGxlUmVj
dC5ib3R0b20oKSArIGR5ID4gb3ZlcmxheVJlY3QuYm90dG9tKCkpCi0gICAgICAgICAgICBkeSA9
IG92ZXJsYXlSZWN0LmJvdHRvbSgpIC0gdGl0bGVSZWN0LmJvdHRvbSgpOworICAgICAgICBpZiAo
dGl0bGVSZWN0Lm1heFkoKSArIGR5ID4gb3ZlcmxheVJlY3QubWF4WSgpKQorICAgICAgICAgICAg
ZHkgPSBvdmVybGF5UmVjdC5tYXhZKCkgLSB0aXRsZVJlY3QubWF4WSgpOwogICAgIH0KIAogICAg
IC8vIElmIHRoZSB0aXAgc3RpY2tzIGJleW9uZCB0aGUgdG9wIG9mIG92ZXJsYXlSZWN0LCBzaG93
IHRoZSB0aXAgYXQgdG9wIG9mIG92ZXJsYXlSZWN0LgpJbmRleDogU291cmNlL1dlYkNvcmUvcGFn
ZS9ET01XaW5kb3cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2lu
ZG93LmNwcAkocmV2aXNpb24gNzcyNzgpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRv
dy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0Miw4ICszNDIsOCBAQCB2b2lkIERPTVdpbmRvdzo6
YWRqdXN0V2luZG93UmVjdChjb25zdCBGCiAgICAgd2luZG93LnNldEhlaWdodChtaW4obWF4KDEw
MC4wZiwgd2luZG93LmhlaWdodCgpKSwgc2NyZWVuLmhlaWdodCgpKSk7CiAgICAgCiAgICAgLy8g
Q29uc3RyYWluIHRoZSB3aW5kb3cgcG9zaXRpb24gdG8gdGhlIHNjcmVlbi4KLSAgICB3aW5kb3cu
c2V0WChtYXgoc2NyZWVuLngoKSwgbWluKHdpbmRvdy54KCksIHNjcmVlbi5yaWdodCgpIC0gd2lu
ZG93LndpZHRoKCkpKSk7Ci0gICAgd2luZG93LnNldFkobWF4KHNjcmVlbi55KCksIG1pbih3aW5k
b3cueSgpLCBzY3JlZW4uYm90dG9tKCkgLSB3aW5kb3cuaGVpZ2h0KCkpKSk7CisgICAgd2luZG93
LnNldFgobWF4KHNjcmVlbi54KCksIG1pbih3aW5kb3cueCgpLCBzY3JlZW4ubWF4WCgpIC0gd2lu
ZG93LndpZHRoKCkpKSk7CisgICAgd2luZG93LnNldFkobWF4KHNjcmVlbi55KCksIG1pbih3aW5k
b3cueSgpLCBzY3JlZW4ubWF4WSgpIC0gd2luZG93LmhlaWdodCgpKSkpOwogfQogCiAvLyBGSVhN
RTogV2UgY2FuIHJlbW92ZSB0aGlzIGZ1bmN0aW9uIG9uY2UgVjggc2hvd01vZGFsRGlhbG9nIGlz
IGNoYW5nZWQgdG8gdXNlIERPTVdpbmRvdy4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvRHJh
Z0NvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRHJhZ0Nv
bnRyb2xsZXIuY3BwCShyZXZpc2lvbiA3NzI3OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRHJh
Z0NvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NDQsOSArNjQ0LDkgQEAgc3RhdGlj
IEludFBvaW50IGRyYWdMb2NGb3JESFRNTERyYWcoY29ucwogc3RhdGljIEludFBvaW50IGRyYWdM
b2NGb3JTZWxlY3Rpb25EcmFnKEZyYW1lKiBzcmMpCiB7CiAgICAgSW50UmVjdCBkcmFnZ2luZ1Jl
Y3QgPSBlbmNsb3NpbmdJbnRSZWN0KHNyYy0+c2VsZWN0aW9uKCktPmJvdW5kcygpKTsKLSAgICBp
bnQgeHBvcyA9IGRyYWdnaW5nUmVjdC5yaWdodCgpOworICAgIGludCB4cG9zID0gZHJhZ2dpbmdS
ZWN0Lm1heFgoKTsKICAgICB4cG9zID0gZHJhZ2dpbmdSZWN0LngoKSA8IHhwb3MgPyBkcmFnZ2lu
Z1JlY3QueCgpIDogeHBvczsKLSAgICBpbnQgeXBvcyA9IGRyYWdnaW5nUmVjdC5ib3R0b20oKTsK
KyAgICBpbnQgeXBvcyA9IGRyYWdnaW5nUmVjdC5tYXhZKCk7CiAjaWYgUExBVEZPUk0oTUFDKQog
ICAgIC8vIERlYWwgd2l0aCBmbGlwcGVkIGNvb3JkaW5hdGVzIG9uIE1hYwogICAgIHlwb3MgPSBk
cmFnZ2luZ1JlY3QueSgpID4geXBvcyA/IGRyYWdnaW5nUmVjdC55KCkgOiB5cG9zOwpJbmRleDog
U291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAkocmV2aXNpb24gNzcyNzgpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxMzIs
MTIgKzIxMzIsMTIgQEAgYm9vbCBFdmVudEhhbmRsZXI6OnNlbmRDb250ZXh0TWVudUV2ZW50Rgog
ICAgICAgICBSZWZQdHI8UmFuZ2U+IHNlbGVjdGlvbiA9IHNlbGVjdGlvbkNvbnRyb2xsZXItPnRv
Tm9ybWFsaXplZFJhbmdlKCk7CiAgICAgICAgIEludFJlY3QgZmlyc3RSZWN0ID0gbV9mcmFtZS0+
ZWRpdG9yKCktPmZpcnN0UmVjdEZvclJhbmdlKHNlbGVjdGlvbi5nZXQoKSk7CiAKLSAgICAgICAg
aW50IHggPSByaWdodEFsaWduZWQgPyBmaXJzdFJlY3QucmlnaHQoKSA6IGZpcnN0UmVjdC54KCk7
Ci0gICAgICAgIGxvY2F0aW9uID0gSW50UG9pbnQoeCwgZmlyc3RSZWN0LmJvdHRvbSgpKTsKKyAg
ICAgICAgaW50IHggPSByaWdodEFsaWduZWQgPyBmaXJzdFJlY3QubWF4WCgpIDogZmlyc3RSZWN0
LngoKTsKKyAgICAgICAgbG9jYXRpb24gPSBJbnRQb2ludCh4LCBmaXJzdFJlY3QubWF4WSgpKTsK
ICAgICB9IGVsc2UgaWYgKGZvY3VzZWROb2RlKSB7CiAgICAgICAgIFJlbmRlckJveE1vZGVsT2Jq
ZWN0KiBib3ggPSBmb2N1c2VkTm9kZS0+cmVuZGVyQm94TW9kZWxPYmplY3QoKTsKICAgICAgICAg
SW50UmVjdCBjbGlwcGVkUmVjdCA9IGJveC0+YWJzb2x1dGVDbGlwcGVkT3ZlcmZsb3dSZWN0KCk7
Ci0gICAgICAgIGxvY2F0aW9uID0gY2xpcHBlZFJlY3QuYm90dG9tTGVmdCgpOworICAgICAgICBs
b2NhdGlvbiA9IEludFBvaW50KGNsaXBwZWRSZWN0LngoKSwgY2xpcHBlZFJlY3QubWF4WSgpIC0g
MSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgbG9jYXRpb24gPSBJbnRQb2ludCgKICAgICAgICAg
ICAgIHJpZ2h0QWxpZ25lZCA/IHZpZXctPmNvbnRlbnRzV2lkdGgoKSAtIGtDb250ZXh0TWVudU1h
cmdpbiA6IGtDb250ZXh0TWVudU1hcmdpbiwKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvUHJp
bnRDb250ZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL1ByaW50Q29u
dGV4dC5jcHAJKHJldmlzaW9uIDc3Mjc4KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9QcmludENv
bnRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzUsMjQgKzEzNSwyNCBAQCB2b2lkIFByaW50
Q29udGV4dDo6Y29tcHV0ZVBhZ2VSZWN0c1dpdGhQCiAgICAgaW50IGJsb2NrRGlyZWN0aW9uRW5k
OwogICAgIGlmIChpc0hvcml6b250YWwpIHsKICAgICAgICAgaWYgKHZpZXctPnN0eWxlKCktPmlz
RmxpcHBlZEJsb2Nrc1dyaXRpbmdNb2RlKCkpIHsKLSAgICAgICAgICAgIGJsb2NrRGlyZWN0aW9u
U3RhcnQgPSBkb2NSZWN0LmJvdHRvbSgpOworICAgICAgICAgICAgYmxvY2tEaXJlY3Rpb25TdGFy
dCA9IGRvY1JlY3QubWF4WSgpOwogICAgICAgICAgICAgYmxvY2tEaXJlY3Rpb25FbmQgPSBkb2NS
ZWN0LnkoKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGJsb2NrRGlyZWN0aW9uU3Rh
cnQgPSBkb2NSZWN0LnkoKTsKLSAgICAgICAgICAgIGJsb2NrRGlyZWN0aW9uRW5kID0gZG9jUmVj
dC5ib3R0b20oKTsKKyAgICAgICAgICAgIGJsb2NrRGlyZWN0aW9uRW5kID0gZG9jUmVjdC5tYXhZ
KCk7CiAgICAgICAgIH0KLSAgICAgICAgaW5saW5lRGlyZWN0aW9uU3RhcnQgPSB2aWV3LT5zdHls
ZSgpLT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyBkb2NSZWN0LngoKSA6IGRvY1JlY3Qucmln
aHQoKTsKLSAgICAgICAgaW5saW5lRGlyZWN0aW9uRW5kID0gdmlldy0+c3R5bGUoKS0+aXNMZWZ0
VG9SaWdodERpcmVjdGlvbigpID8gZG9jUmVjdC5yaWdodCgpIDogZG9jUmVjdC54KCk7CisgICAg
ICAgIGlubGluZURpcmVjdGlvblN0YXJ0ID0gdmlldy0+c3R5bGUoKS0+aXNMZWZ0VG9SaWdodERp
cmVjdGlvbigpID8gZG9jUmVjdC54KCkgOiBkb2NSZWN0Lm1heFgoKTsKKyAgICAgICAgaW5saW5l
RGlyZWN0aW9uRW5kID0gdmlldy0+c3R5bGUoKS0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpID8g
ZG9jUmVjdC5tYXhYKCkgOiBkb2NSZWN0LngoKTsKICAgICB9IGVsc2UgewogICAgICAgICBpZiAo
dmlldy0+c3R5bGUoKS0+aXNGbGlwcGVkQmxvY2tzV3JpdGluZ01vZGUoKSkgewotICAgICAgICAg
ICAgYmxvY2tEaXJlY3Rpb25TdGFydCA9IGRvY1JlY3QucmlnaHQoKTsKKyAgICAgICAgICAgIGJs
b2NrRGlyZWN0aW9uU3RhcnQgPSBkb2NSZWN0Lm1heFgoKTsKICAgICAgICAgICAgIGJsb2NrRGly
ZWN0aW9uRW5kID0gZG9jUmVjdC54KCk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBi
bG9ja0RpcmVjdGlvblN0YXJ0ID0gZG9jUmVjdC54KCk7Ci0gICAgICAgICAgICBibG9ja0RpcmVj
dGlvbkVuZCA9IGRvY1JlY3QucmlnaHQoKTsKKyAgICAgICAgICAgIGJsb2NrRGlyZWN0aW9uRW5k
ID0gZG9jUmVjdC5tYXhYKCk7CiAgICAgICAgIH0KLSAgICAgICAgaW5saW5lRGlyZWN0aW9uU3Rh
cnQgPSB2aWV3LT5zdHlsZSgpLT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyBkb2NSZWN0Lnko
KSA6IGRvY1JlY3QuYm90dG9tKCk7Ci0gICAgICAgIGlubGluZURpcmVjdGlvbkVuZCA9IHZpZXct
PnN0eWxlKCktPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/IGRvY1JlY3QuYm90dG9tKCkgOiBk
b2NSZWN0LnkoKTsKKyAgICAgICAgaW5saW5lRGlyZWN0aW9uU3RhcnQgPSB2aWV3LT5zdHlsZSgp
LT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyBkb2NSZWN0LnkoKSA6IGRvY1JlY3QubWF4WSgp
OworICAgICAgICBpbmxpbmVEaXJlY3Rpb25FbmQgPSB2aWV3LT5zdHlsZSgpLT5pc0xlZnRUb1Jp
Z2h0RGlyZWN0aW9uKCkgPyBkb2NSZWN0Lm1heFkoKSA6IGRvY1JlY3QueSgpOwogICAgIH0KIAog
ICAgIHVuc2lnbmVkIHBhZ2VDb3VudCA9IGNlaWxmKChmbG9hdClkb2NMb2dpY2FsSGVpZ2h0IC8g
cGFnZUxvZ2ljYWxIZWlnaHQpOwpAQCAtMjc0LDcgKzI3NCw3IEBAIGludCBQcmludENvbnRleHQ6
OnBhZ2VOdW1iZXJGb3JFbGVtZW50KEUKICAgICBzaXplX3QgcGFnZU51bWJlciA9IDA7CiAgICAg
Zm9yICg7IHBhZ2VOdW1iZXIgPCBwcmludENvbnRleHQucGFnZUNvdW50KCk7IHBhZ2VOdW1iZXIr
KykgewogICAgICAgICBjb25zdCBJbnRSZWN0JiBwYWdlID0gcHJpbnRDb250ZXh0LnBhZ2VSZWN0
KHBhZ2VOdW1iZXIpOwotICAgICAgICBpZiAocGFnZS54KCkgPD0gbGVmdCAmJiBsZWZ0IDwgcGFn
ZS5yaWdodCgpICYmIHBhZ2UueSgpIDw9IHRvcCAmJiB0b3AgPCBwYWdlLmJvdHRvbSgpKQorICAg
ICAgICBpZiAocGFnZS54KCkgPD0gbGVmdCAmJiBsZWZ0IDwgcGFnZS5tYXhYKCkgJiYgcGFnZS55
KCkgPD0gdG9wICYmIHRvcCA8IHBhZ2UubWF4WSgpKQogICAgICAgICAgICAgcmV0dXJuIHBhZ2VO
dW1iZXI7CiAgICAgfQogICAgIHJldHVybiAtMTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2Uv
U3BhdGlhbE5hdmlnYXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2Uv
U3BhdGlhbE5hdmlnYXRpb24uY3BwCShyZXZpc2lvbiA3NzI3OCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BhZ2UvU3BhdGlhbE5hdmlnYXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjcsNyArMTI3
LDcgQEAgc3RhdGljIGlubGluZSBpbnQgbWlkZGxlKEZvY3VzRGlyZWN0aW9uIAogCiBzdGF0aWMg
aW5saW5lIGludCBlbmQoRm9jdXNEaXJlY3Rpb24gZGlyZWN0aW9uLCBjb25zdCBJbnRSZWN0JiBy
ZWN0KQogewotICAgIHJldHVybiBpc0hvcml6b250YWxNb3ZlKGRpcmVjdGlvbikgPyByZWN0LmJv
dHRvbSgpIDogcmVjdC5yaWdodCgpOworICAgIHJldHVybiBpc0hvcml6b250YWxNb3ZlKGRpcmVj
dGlvbikgPyByZWN0Lm1heFkoKSA6IHJlY3QubWF4WCgpOwogfQogCiAvLyBUaGlzIG1ldGhvZCBj
aGVja3MgaWYgcmVjdHMgfGF8IGFuZCB8YnwgYXJlIGZ1bGx5IGFsaWduZWQgZWl0aGVyIHZlcnRp
Y2FsbHkgb3IKQEAgLTE0NCwxMSArMTQ0LDExIEBAIHN0YXRpYyBib29sIGFyZVJlY3RzRnVsbHlB
bGlnbmVkKEZvY3VzRGkKICAgICBzd2l0Y2ggKGRpcmVjdGlvbikgewogICAgIGNhc2UgRm9jdXNE
aXJlY3Rpb25MZWZ0OgogICAgICAgICBhU3RhcnQgPSBhLngoKTsKLSAgICAgICAgYkVuZCA9IGIu
cmlnaHQoKTsKKyAgICAgICAgYkVuZCA9IGIubWF4WCgpOwogICAgICAgICBicmVhazsKICAgICBj
YXNlIEZvY3VzRGlyZWN0aW9uUmlnaHQ6CiAgICAgICAgIGFTdGFydCA9IGIueCgpOwotICAgICAg
ICBiRW5kID0gYS5yaWdodCgpOworICAgICAgICBiRW5kID0gYS5tYXhYKCk7CiAgICAgICAgIGJy
ZWFrOwogICAgIGNhc2UgRm9jdXNEaXJlY3Rpb25VcDoKICAgICAgICAgYVN0YXJ0ID0gYS55KCk7
CkBAIC0yNDUsMTMgKzI0NSwxMyBAQCBzdGF0aWMgYm9vbCBhcmVSZWN0c01vcmVUaGFuRnVsbFNj
cmVlbkFwCiAKICAgICBzd2l0Y2ggKGRpcmVjdGlvbikgewogICAgIGNhc2UgRm9jdXNEaXJlY3Rp
b25MZWZ0OgotICAgICAgICByZXR1cm4gY3VyUmVjdC54KCkgLSB0YXJnZXRSZWN0LnJpZ2h0KCkg
PiB2aWV3U2l6ZS53aWR0aCgpOworICAgICAgICByZXR1cm4gY3VyUmVjdC54KCkgLSB0YXJnZXRS
ZWN0Lm1heFgoKSA+IHZpZXdTaXplLndpZHRoKCk7CiAgICAgY2FzZSBGb2N1c0RpcmVjdGlvblJp
Z2h0OgotICAgICAgICByZXR1cm4gdGFyZ2V0UmVjdC54KCkgLSBjdXJSZWN0LnJpZ2h0KCkgPiB2
aWV3U2l6ZS53aWR0aCgpOworICAgICAgICByZXR1cm4gdGFyZ2V0UmVjdC54KCkgLSBjdXJSZWN0
Lm1heFgoKSA+IHZpZXdTaXplLndpZHRoKCk7CiAgICAgY2FzZSBGb2N1c0RpcmVjdGlvblVwOgot
ICAgICAgICByZXR1cm4gY3VyUmVjdC55KCkgLSB0YXJnZXRSZWN0LmJvdHRvbSgpID4gdmlld1Np
emUuaGVpZ2h0KCk7CisgICAgICAgIHJldHVybiBjdXJSZWN0LnkoKSAtIHRhcmdldFJlY3QubWF4
WSgpID4gdmlld1NpemUuaGVpZ2h0KCk7CiAgICAgY2FzZSBGb2N1c0RpcmVjdGlvbkRvd246Ci0g
ICAgICAgIHJldHVybiB0YXJnZXRSZWN0LnkoKSAtIGN1clJlY3QuYm90dG9tKCkgPiB2aWV3U2l6
ZS5oZWlnaHQoKTsKKyAgICAgICAgcmV0dXJuIHRhcmdldFJlY3QueSgpIC0gY3VyUmVjdC5tYXhZ
KCkgPiB2aWV3U2l6ZS5oZWlnaHQoKTsKICAgICBkZWZhdWx0OgogICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0yNjEsMjYgKzI2MSwyNiBAQCBz
dGF0aWMgYm9vbCBhcmVSZWN0c01vcmVUaGFuRnVsbFNjcmVlbkFwCiAvLyBSZXR1cm4gdHJ1ZSBp
ZiByZWN0IHxhfCBpcyBiZWxvdyB8YnwuIEZhbHNlIG90aGVyd2lzZS4KIHN0YXRpYyBpbmxpbmUg
Ym9vbCBiZWxvdyhjb25zdCBJbnRSZWN0JiBhLCBjb25zdCBJbnRSZWN0JiBiKQogewotICAgIHJl
dHVybiBhLnkoKSA+IGIuYm90dG9tKCk7CisgICAgcmV0dXJuIGEueSgpID4gYi5tYXhZKCk7CiB9
CiAKIC8vIFJldHVybiB0cnVlIGlmIHJlY3QgfGF8IGlzIG9uIHRoZSByaWdodCBvZiB8YnwuIEZh
bHNlIG90aGVyd2lzZS4KIHN0YXRpYyBpbmxpbmUgYm9vbCByaWdodE9mKGNvbnN0IEludFJlY3Qm
IGEsIGNvbnN0IEludFJlY3QmIGIpCiB7Ci0gICAgcmV0dXJuIGEueCgpID4gYi5yaWdodCgpOwor
ICAgIHJldHVybiBhLngoKSA+IGIubWF4WCgpOwogfQogCiBzdGF0aWMgYm9vbCBpc1JlY3RJbkRp
cmVjdGlvbihGb2N1c0RpcmVjdGlvbiBkaXJlY3Rpb24sIGNvbnN0IEludFJlY3QmIGN1clJlY3Qs
IGNvbnN0IEludFJlY3QmIHRhcmdldFJlY3QpCiB7CiAgICAgc3dpdGNoIChkaXJlY3Rpb24pIHsK
ICAgICBjYXNlIEZvY3VzRGlyZWN0aW9uTGVmdDoKLSAgICAgICAgcmV0dXJuIHRhcmdldFJlY3Qu
cmlnaHQoKSA8PSBjdXJSZWN0LngoKTsKKyAgICAgICAgcmV0dXJuIHRhcmdldFJlY3QubWF4WCgp
IDw9IGN1clJlY3QueCgpOwogICAgIGNhc2UgRm9jdXNEaXJlY3Rpb25SaWdodDoKLSAgICAgICAg
cmV0dXJuIHRhcmdldFJlY3QueCgpID49IGN1clJlY3QucmlnaHQoKTsKKyAgICAgICAgcmV0dXJu
IHRhcmdldFJlY3QueCgpID49IGN1clJlY3QubWF4WCgpOwogICAgIGNhc2UgRm9jdXNEaXJlY3Rp
b25VcDoKLSAgICAgICAgcmV0dXJuIHRhcmdldFJlY3QuYm90dG9tKCkgPD0gY3VyUmVjdC55KCk7
CisgICAgICAgIHJldHVybiB0YXJnZXRSZWN0Lm1heFkoKSA8PSBjdXJSZWN0LnkoKTsKICAgICBj
YXNlIEZvY3VzRGlyZWN0aW9uRG93bjoKLSAgICAgICAgcmV0dXJuIHRhcmdldFJlY3QueSgpID49
IGN1clJlY3QuYm90dG9tKCk7CisgICAgICAgIHJldHVybiB0YXJnZXRSZWN0LnkoKSA+PSBjdXJS
ZWN0Lm1heFkoKTsKICAgICBkZWZhdWx0OgogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNTQ0LDE4ICs1NDQsMTggQEAgdm9pZCBlbnRyeUFu
ZEV4aXRQb2ludHNGb3JEaXJlY3Rpb24oRm9jdQogICAgIHN3aXRjaCAoZGlyZWN0aW9uKSB7CiAg
ICAgY2FzZSBGb2N1c0RpcmVjdGlvbkxlZnQ6CiAgICAgICAgIGV4aXRQb2ludC5zZXRYKHN0YXJ0
aW5nUmVjdC54KCkpOwotICAgICAgICBlbnRyeVBvaW50LnNldFgocG90ZW50aWFsUmVjdC5yaWdo
dCgpKTsKKyAgICAgICAgZW50cnlQb2ludC5zZXRYKHBvdGVudGlhbFJlY3QubWF4WCgpKTsKICAg
ICAgICAgYnJlYWs7CiAgICAgY2FzZSBGb2N1c0RpcmVjdGlvblVwOgogICAgICAgICBleGl0UG9p
bnQuc2V0WShzdGFydGluZ1JlY3QueSgpKTsKLSAgICAgICAgZW50cnlQb2ludC5zZXRZKHBvdGVu
dGlhbFJlY3QuYm90dG9tKCkpOworICAgICAgICBlbnRyeVBvaW50LnNldFkocG90ZW50aWFsUmVj
dC5tYXhZKCkpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEZvY3VzRGlyZWN0aW9uUmlnaHQ6
Ci0gICAgICAgIGV4aXRQb2ludC5zZXRYKHN0YXJ0aW5nUmVjdC5yaWdodCgpKTsKKyAgICAgICAg
ZXhpdFBvaW50LnNldFgoc3RhcnRpbmdSZWN0Lm1heFgoKSk7CiAgICAgICAgIGVudHJ5UG9pbnQu
c2V0WChwb3RlbnRpYWxSZWN0LngoKSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgRm9jdXNE
aXJlY3Rpb25Eb3duOgotICAgICAgICBleGl0UG9pbnQuc2V0WShzdGFydGluZ1JlY3QuYm90dG9t
KCkpOworICAgICAgICBleGl0UG9pbnQuc2V0WShzdGFydGluZ1JlY3QubWF4WSgpKTsKICAgICAg
ICAgZW50cnlQb2ludC5zZXRZKHBvdGVudGlhbFJlY3QueSgpKTsKICAgICAgICAgYnJlYWs7CiAg
ICAgZGVmYXVsdDoKQEAgLTU2Nyw5ICs1NjcsOSBAQCB2b2lkIGVudHJ5QW5kRXhpdFBvaW50c0Zv
ckRpcmVjdGlvbihGb2N1CiAgICAgY2FzZSBGb2N1c0RpcmVjdGlvblJpZ2h0OgogICAgICAgICBp
ZiAoYmVsb3coc3RhcnRpbmdSZWN0LCBwb3RlbnRpYWxSZWN0KSkgewogICAgICAgICAgICAgZXhp
dFBvaW50LnNldFkoc3RhcnRpbmdSZWN0LnkoKSk7Ci0gICAgICAgICAgICBlbnRyeVBvaW50LnNl
dFkocG90ZW50aWFsUmVjdC5ib3R0b20oKSk7CisgICAgICAgICAgICBlbnRyeVBvaW50LnNldFko
cG90ZW50aWFsUmVjdC5tYXhZKCkpOwogICAgICAgICB9IGVsc2UgaWYgKGJlbG93KHBvdGVudGlh
bFJlY3QsIHN0YXJ0aW5nUmVjdCkpIHsKLSAgICAgICAgICAgIGV4aXRQb2ludC5zZXRZKHN0YXJ0
aW5nUmVjdC5ib3R0b20oKSk7CisgICAgICAgICAgICBleGl0UG9pbnQuc2V0WShzdGFydGluZ1Jl
Y3QubWF4WSgpKTsKICAgICAgICAgICAgIGVudHJ5UG9pbnQuc2V0WShwb3RlbnRpYWxSZWN0Lnko
KSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBleGl0UG9pbnQuc2V0WShtYXgoc3Rh
cnRpbmdSZWN0LnkoKSwgcG90ZW50aWFsUmVjdC55KCkpKTsKQEAgLTU4MCw5ICs1ODAsOSBAQCB2
b2lkIGVudHJ5QW5kRXhpdFBvaW50c0ZvckRpcmVjdGlvbihGb2N1CiAgICAgY2FzZSBGb2N1c0Rp
cmVjdGlvbkRvd246CiAgICAgICAgIGlmIChyaWdodE9mKHN0YXJ0aW5nUmVjdCwgcG90ZW50aWFs
UmVjdCkpIHsKICAgICAgICAgICAgIGV4aXRQb2ludC5zZXRYKHN0YXJ0aW5nUmVjdC54KCkpOwot
ICAgICAgICAgICAgZW50cnlQb2ludC5zZXRYKHBvdGVudGlhbFJlY3QucmlnaHQoKSk7CisgICAg
ICAgICAgICBlbnRyeVBvaW50LnNldFgocG90ZW50aWFsUmVjdC5tYXhYKCkpOwogICAgICAgICB9
IGVsc2UgaWYgKHJpZ2h0T2YocG90ZW50aWFsUmVjdCwgc3RhcnRpbmdSZWN0KSkgewotICAgICAg
ICAgICAgZXhpdFBvaW50LnNldFgoc3RhcnRpbmdSZWN0LnJpZ2h0KCkpOworICAgICAgICAgICAg
ZXhpdFBvaW50LnNldFgoc3RhcnRpbmdSZWN0Lm1heFgoKSk7CiAgICAgICAgICAgICBlbnRyeVBv
aW50LnNldFgocG90ZW50aWFsUmVjdC54KCkpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAg
ICAgZXhpdFBvaW50LnNldFgobWF4KHN0YXJ0aW5nUmVjdC54KCksIHBvdGVudGlhbFJlY3QueCgp
KSk7CkBAIC02NzUsMTEgKzY3NSwxMSBAQCBJbnRSZWN0IHZpcnR1YWxSZWN0Rm9yRGlyZWN0aW9u
KEZvY3VzRGlyCiAgICAgSW50UmVjdCB2aXJ0dWFsU3RhcnRpbmdSZWN0ID0gc3RhcnRpbmdSZWN0
OwogICAgIHN3aXRjaCAoZGlyZWN0aW9uKSB7CiAgICAgY2FzZSBGb2N1c0RpcmVjdGlvbkxlZnQ6
Ci0gICAgICAgIHZpcnR1YWxTdGFydGluZ1JlY3Quc2V0WCh2aXJ0dWFsU3RhcnRpbmdSZWN0LnJp
Z2h0KCkgLSB3aWR0aCk7CisgICAgICAgIHZpcnR1YWxTdGFydGluZ1JlY3Quc2V0WCh2aXJ0dWFs
U3RhcnRpbmdSZWN0Lm1heFgoKSAtIHdpZHRoKTsKICAgICAgICAgdmlydHVhbFN0YXJ0aW5nUmVj
dC5zZXRXaWR0aCh3aWR0aCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgRm9jdXNEaXJlY3Rp
b25VcDoKLSAgICAgICAgdmlydHVhbFN0YXJ0aW5nUmVjdC5zZXRZKHZpcnR1YWxTdGFydGluZ1Jl
Y3QuYm90dG9tKCkgLSB3aWR0aCk7CisgICAgICAgIHZpcnR1YWxTdGFydGluZ1JlY3Quc2V0WSh2
aXJ0dWFsU3RhcnRpbmdSZWN0Lm1heFkoKSAtIHdpZHRoKTsKICAgICAgICAgdmlydHVhbFN0YXJ0
aW5nUmVjdC5zZXRIZWlnaHQod2lkdGgpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEZvY3Vz
RGlyZWN0aW9uUmlnaHQ6CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL1dpbmRvd0ZlYXR1cmVz
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL1dpbmRvd0ZlYXR1cmVzLmNw
cAkocmV2aXNpb24gNzcyNzgpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL1dpbmRvd0ZlYXR1cmVz
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTg2LDkgKzE4Niw5IEBAIFdpbmRvd0ZlYXR1cmVzOjpX
aW5kb3dGZWF0dXJlcyhjb25zdCBTdHIKICAgICB3aWR0aCA9IGZsb2F0RmVhdHVyZShmZWF0dXJl
cywgImRpYWxvZ3dpZHRoIiwgMTAwLCBzY3JlZW5BdmFpbGFibGVSZWN0LndpZHRoKCksIDYyMCk7
IC8vIGRlZmF1bHQgaGVyZSBjYW1lIGZyb20gZnJhbWUgc2l6ZSBvZiBkaWFsb2cgaW4gTWFjSUUK
ICAgICBoZWlnaHQgPSBmbG9hdEZlYXR1cmUoZmVhdHVyZXMsICJkaWFsb2doZWlnaHQiLCAxMDAs
IHNjcmVlbkF2YWlsYWJsZVJlY3QuaGVpZ2h0KCksIDQ1MCk7IC8vIGRlZmF1bHQgaGVyZSBjYW1l
IGZyb20gZnJhbWUgc2l6ZSBvZiBkaWFsb2cgaW4gTWFjSUUKIAotICAgIHggPSBmbG9hdEZlYXR1
cmUoZmVhdHVyZXMsICJkaWFsb2dsZWZ0Iiwgc2NyZWVuQXZhaWxhYmxlUmVjdC54KCksIHNjcmVl
bkF2YWlsYWJsZVJlY3QucmlnaHQoKSAtIHdpZHRoLCAtMSk7CisgICAgeCA9IGZsb2F0RmVhdHVy
ZShmZWF0dXJlcywgImRpYWxvZ2xlZnQiLCBzY3JlZW5BdmFpbGFibGVSZWN0LngoKSwgc2NyZWVu
QXZhaWxhYmxlUmVjdC5tYXhYKCkgLSB3aWR0aCwgLTEpOwogICAgIHhTZXQgPSB4ID4gMDsKLSAg
ICB5ID0gZmxvYXRGZWF0dXJlKGZlYXR1cmVzLCAiZGlhbG9ndG9wIiwgc2NyZWVuQXZhaWxhYmxl
UmVjdC55KCksIHNjcmVlbkF2YWlsYWJsZVJlY3QuYm90dG9tKCkgLSBoZWlnaHQsIC0xKTsKKyAg
ICB5ID0gZmxvYXRGZWF0dXJlKGZlYXR1cmVzLCAiZGlhbG9ndG9wIiwgc2NyZWVuQXZhaWxhYmxl
UmVjdC55KCksIHNjcmVlbkF2YWlsYWJsZVJlY3QubWF4WSgpIC0gaGVpZ2h0LCAtMSk7CiAgICAg
eVNldCA9IHkgPiAwOwogCiAgICAgaWYgKGJvb2xGZWF0dXJlKGZlYXR1cmVzLCAiY2VudGVyIiwg
dHJ1ZSkpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbFZpZXcuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbFZpZXcuY3BwCShyZXZp
c2lvbiA3NzI3OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbFZpZXcuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC05MjUsNyArOTI1LDcgQEAgdm9pZCBTY3JvbGxWaWV3OjpjYWxjdWxh
dGVPdmVyaGFuZ0FyZWFzRgogICAgIH0gZWxzZSBpZiAoc2Nyb2xsWSgpID4gY29udGVudHNIZWln
aHQoKSAtIHZpc2libGVDb250ZW50UmVjdCh0cnVlKS5oZWlnaHQoKSkgewogICAgICAgICBpbnQg
aGVpZ2h0ID0gc2Nyb2xsWSgpIC0gKGNvbnRlbnRzSGVpZ2h0KCkgLSB2aXNpYmxlQ29udGVudFJl
Y3QodHJ1ZSkuaGVpZ2h0KCkpOwogICAgICAgICBob3Jpem9udGFsT3ZlcmhhbmdSZWN0ID0gZnJh
bWVSZWN0KCk7Ci0gICAgICAgIGhvcml6b250YWxPdmVyaGFuZ1JlY3Quc2V0WShmcmFtZVJlY3Qo
KS5ib3R0b20oKSAtIGhlaWdodCk7CisgICAgICAgIGhvcml6b250YWxPdmVyaGFuZ1JlY3Quc2V0
WShmcmFtZVJlY3QoKS5tYXhZKCkgLSBoZWlnaHQpOwogICAgICAgICBob3Jpem9udGFsT3Zlcmhh
bmdSZWN0LnNldEhlaWdodChoZWlnaHQpOwogICAgIH0KIApAQCAtOTQxLDcgKzk0MSw3IEBAIHZv
aWQgU2Nyb2xsVmlldzo6Y2FsY3VsYXRlT3ZlcmhhbmdBcmVhc0YKICAgICAgICAgaW50IHdpZHRo
ID0gc2Nyb2xsWCgpIC0gKGNvbnRlbnRzV2lkdGgoKSAtIHZpc2libGVDb250ZW50UmVjdCh0cnVl
KS53aWR0aCgpKTsKICAgICAgICAgdmVydGljYWxPdmVyaGFuZ1JlY3Quc2V0V2lkdGgod2lkdGgp
OwogICAgICAgICB2ZXJ0aWNhbE92ZXJoYW5nUmVjdC5zZXRIZWlnaHQoZnJhbWVSZWN0KCkuaGVp
Z2h0KCkgLSBob3Jpem9udGFsT3ZlcmhhbmdSZWN0LmhlaWdodCgpKTsKLSAgICAgICAgdmVydGlj
YWxPdmVyaGFuZ1JlY3Quc2V0WChmcmFtZVJlY3QoKS5yaWdodCgpIC0gd2lkdGgpOworICAgICAg
ICB2ZXJ0aWNhbE92ZXJoYW5nUmVjdC5zZXRYKGZyYW1lUmVjdCgpLm1heFgoKSAtIHdpZHRoKTsK
ICAgICAgICAgaWYgKGhvcml6b250YWxPdmVyaGFuZ1JlY3QueSgpID09IGZyYW1lUmVjdCgpLnko
KSkKICAgICAgICAgICAgIHZlcnRpY2FsT3ZlcmhhbmdSZWN0LnNldFkoZnJhbWVSZWN0KCkueSgp
ICsgaG9yaXpvbnRhbE92ZXJoYW5nUmVjdC5oZWlnaHQoKSk7CiAgICAgICAgIGVsc2UKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGJhci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFyLmNwcAkocmV2aXNpb24gNzcyNzgpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
OTMsMTQgKzM5MywxNCBAQCB2b2lkIFNjcm9sbGJhcjo6c2V0RnJhbWVSZWN0KGNvbnN0IEludFJl
CiAgICAgICAgIEludFJlY3QgcmVzaXplclJlY3QgPSB2aWV3LT5jb252ZXJ0RnJvbUNvbnRhaW5p
bmdXaW5kb3codmlldy0+d2luZG93UmVzaXplclJlY3QoKSk7CiAgICAgICAgIGlmIChyZWN0Lmlu
dGVyc2VjdHMocmVzaXplclJlY3QpKSB7CiAgICAgICAgICAgICBpZiAob3JpZW50YXRpb24oKSA9
PSBIb3Jpem9udGFsU2Nyb2xsYmFyKSB7Ci0gICAgICAgICAgICAgICAgaW50IG92ZXJsYXAgPSBy
ZWN0LnJpZ2h0KCkgLSByZXNpemVyUmVjdC54KCk7Ci0gICAgICAgICAgICAgICAgaWYgKG92ZXJs
YXAgPiAwICYmIHJlc2l6ZXJSZWN0LnJpZ2h0KCkgPj0gcmVjdC5yaWdodCgpKSB7CisgICAgICAg
ICAgICAgICAgaW50IG92ZXJsYXAgPSByZWN0Lm1heFgoKSAtIHJlc2l6ZXJSZWN0LngoKTsKKyAg
ICAgICAgICAgICAgICBpZiAob3ZlcmxhcCA+IDAgJiYgcmVzaXplclJlY3QubWF4WCgpID49IHJl
Y3QubWF4WCgpKSB7CiAgICAgICAgICAgICAgICAgICAgIGFkanVzdGVkUmVjdC5zZXRXaWR0aChy
ZWN0LndpZHRoKCkgLSBvdmVybGFwKTsKICAgICAgICAgICAgICAgICAgICAgb3ZlcmxhcHNSZXNp
emVyID0gdHJ1ZTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgICAgIGludCBvdmVybGFwID0gcmVjdC5ib3R0b20oKSAtIHJlc2l6ZXJSZWN0Lnko
KTsKLSAgICAgICAgICAgICAgICBpZiAob3ZlcmxhcCA+IDAgJiYgcmVzaXplclJlY3QuYm90dG9t
KCkgPj0gcmVjdC5ib3R0b20oKSkgeworICAgICAgICAgICAgICAgIGludCBvdmVybGFwID0gcmVj
dC5tYXhZKCkgLSByZXNpemVyUmVjdC55KCk7CisgICAgICAgICAgICAgICAgaWYgKG92ZXJsYXAg
PiAwICYmIHJlc2l6ZXJSZWN0Lm1heFkoKSA+PSByZWN0Lm1heFkoKSkgewogICAgICAgICAgICAg
ICAgICAgICBhZGp1c3RlZFJlY3Quc2V0SGVpZ2h0KHJlY3QuaGVpZ2h0KCkgLSBvdmVybGFwKTsK
ICAgICAgICAgICAgICAgICAgICAgb3ZlcmxhcHNSZXNpemVyID0gdHJ1ZTsKICAgICAgICAgICAg
ICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXJUaGVtZUNvbXBv
c2l0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFy
VGhlbWVDb21wb3NpdGUuY3BwCShyZXZpc2lvbiA3NzI3OCkKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL1Njcm9sbGJhclRoZW1lQ29tcG9zaXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQ4
LDExICsyNDgsMTEgQEAgdm9pZCBTY3JvbGxiYXJUaGVtZUNvbXBvc2l0ZTo6c3BsaXRUcmFjawog
ICAgIGlmIChzY3JvbGxiYXItPm9yaWVudGF0aW9uKCkgPT0gSG9yaXpvbnRhbFNjcm9sbGJhcikg
ewogICAgICAgICB0aHVtYlJlY3QgPSBJbnRSZWN0KHRyYWNrUmVjdC54KCkgKyB0aHVtYlBvcywg
dHJhY2tSZWN0LnkoKSArICh0cmFja1JlY3QuaGVpZ2h0KCkgLSB0aGlja25lc3MpIC8gMiwgdGh1
bWJMZW5ndGgoc2Nyb2xsYmFyKSwgdGhpY2tuZXNzKTsgCiAgICAgICAgIGJlZm9yZVRodW1iUmVj
dCA9IEludFJlY3QodHJhY2tSZWN0LngoKSwgdHJhY2tSZWN0LnkoKSwgdGh1bWJQb3MgKyB0aHVt
YlJlY3Qud2lkdGgoKSAvIDIsIHRyYWNrUmVjdC5oZWlnaHQoKSk7IAotICAgICAgICBhZnRlclRo
dW1iUmVjdCA9IEludFJlY3QodHJhY2tSZWN0LngoKSArIGJlZm9yZVRodW1iUmVjdC53aWR0aCgp
LCB0cmFja1JlY3QueSgpLCB0cmFja1JlY3QucmlnaHQoKSAtIGJlZm9yZVRodW1iUmVjdC5yaWdo
dCgpLCB0cmFja1JlY3QuaGVpZ2h0KCkpOworICAgICAgICBhZnRlclRodW1iUmVjdCA9IEludFJl
Y3QodHJhY2tSZWN0LngoKSArIGJlZm9yZVRodW1iUmVjdC53aWR0aCgpLCB0cmFja1JlY3QueSgp
LCB0cmFja1JlY3QubWF4WCgpIC0gYmVmb3JlVGh1bWJSZWN0Lm1heFgoKSwgdHJhY2tSZWN0Lmhl
aWdodCgpKTsKICAgICB9IGVsc2UgewogICAgICAgICB0aHVtYlJlY3QgPSBJbnRSZWN0KHRyYWNr
UmVjdC54KCkgKyAodHJhY2tSZWN0LndpZHRoKCkgLSB0aGlja25lc3MpIC8gMiwgdHJhY2tSZWN0
LnkoKSArIHRodW1iUG9zLCB0aGlja25lc3MsIHRodW1iTGVuZ3RoKHNjcm9sbGJhcikpOwogICAg
ICAgICBiZWZvcmVUaHVtYlJlY3QgPSBJbnRSZWN0KHRyYWNrUmVjdC54KCksIHRyYWNrUmVjdC55
KCksIHRyYWNrUmVjdC53aWR0aCgpLCB0aHVtYlBvcyArIHRodW1iUmVjdC5oZWlnaHQoKSAvIDIp
OyAKLSAgICAgICAgYWZ0ZXJUaHVtYlJlY3QgPSBJbnRSZWN0KHRyYWNrUmVjdC54KCksIHRyYWNr
UmVjdC55KCkgKyBiZWZvcmVUaHVtYlJlY3QuaGVpZ2h0KCksIHRyYWNrUmVjdC53aWR0aCgpLCB0
cmFja1JlY3QuYm90dG9tKCkgLSBiZWZvcmVUaHVtYlJlY3QuYm90dG9tKCkpOworICAgICAgICBh
ZnRlclRodW1iUmVjdCA9IEludFJlY3QodHJhY2tSZWN0LngoKSwgdHJhY2tSZWN0LnkoKSArIGJl
Zm9yZVRodW1iUmVjdC5oZWlnaHQoKSwgdHJhY2tSZWN0LndpZHRoKCksIHRyYWNrUmVjdC5tYXhZ
KCkgLSBiZWZvcmVUaHVtYlJlY3QubWF4WSgpKTsKICAgICB9CiB9CiAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UXVhZC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UXVhZC5oCShyZXZpc2lvbiA3NzI3OCkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UXVhZC5oCSh3b3JraW5n
IGNvcHkpCkBAIC01NCw5ICs1NCw5IEBAIHB1YmxpYzoKIAogICAgIEZsb2F0UXVhZChjb25zdCBG
bG9hdFJlY3QmIGluUmVjdCkKICAgICAgICAgOiBtX3AxKGluUmVjdC5sb2NhdGlvbigpKQotICAg
ICAgICAsIG1fcDIoaW5SZWN0LnJpZ2h0KCksIGluUmVjdC55KCkpCi0gICAgICAgICwgbV9wMyhp
blJlY3QucmlnaHQoKSwgaW5SZWN0LmJvdHRvbSgpKQotICAgICAgICAsIG1fcDQoaW5SZWN0Lngo
KSwgaW5SZWN0LmJvdHRvbSgpKQorICAgICAgICAsIG1fcDIoaW5SZWN0Lm1heFgoKSwgaW5SZWN0
LnkoKSkKKyAgICAgICAgLCBtX3AzKGluUmVjdC5tYXhYKCksIGluUmVjdC5tYXhZKCkpCisgICAg
ICAgICwgbV9wNChpblJlY3QueCgpLCBpblJlY3QubWF4WSgpKQogICAgIHsKICAgICB9CiAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UmVjdC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRSZWN0LmNwcAko
cmV2aXNpb24gNzcyNzgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9h
dFJlY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MSwyMiArNTEsMjIgQEAgYm9vbCBGbG9hdFJl
Y3Q6OmludGVyc2VjdHMoY29uc3QgRmxvYXRSZQogewogICAgIC8vIENoZWNraW5nIGVtcHRpbmVz
cyBoYW5kbGVzIG5lZ2F0aXZlIHdpZHRocyBhcyB3ZWxsIGFzIHplcm8uCiAgICAgcmV0dXJuICFp
c0VtcHR5KCkgJiYgIW90aGVyLmlzRW1wdHkoKQotICAgICAgICAmJiB4KCkgPCBvdGhlci5yaWdo
dCgpICYmIG90aGVyLngoKSA8IHJpZ2h0KCkKLSAgICAgICAgJiYgeSgpIDwgb3RoZXIuYm90dG9t
KCkgJiYgb3RoZXIueSgpIDwgYm90dG9tKCk7CisgICAgICAgICYmIHgoKSA8IG90aGVyLm1heFgo
KSAmJiBvdGhlci54KCkgPCBtYXhYKCkKKyAgICAgICAgJiYgeSgpIDwgb3RoZXIubWF4WSgpICYm
IG90aGVyLnkoKSA8IG1heFkoKTsKIH0KIAogYm9vbCBGbG9hdFJlY3Q6OmNvbnRhaW5zKGNvbnN0
IEZsb2F0UmVjdCYgb3RoZXIpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIHgoKSA8PSBvdGhlci54KCkg
JiYgcmlnaHQoKSA+PSBvdGhlci5yaWdodCgpCi0gICAgICAgICYmIHkoKSA8PSBvdGhlci55KCkg
JiYgYm90dG9tKCkgPj0gb3RoZXIuYm90dG9tKCk7CisgICAgcmV0dXJuIHgoKSA8PSBvdGhlci54
KCkgJiYgbWF4WCgpID49IG90aGVyLm1heFgoKQorICAgICAgICAmJiB5KCkgPD0gb3RoZXIueSgp
ICYmIG1heFkoKSA+PSBvdGhlci5tYXhZKCk7CiB9CiAKIHZvaWQgRmxvYXRSZWN0OjppbnRlcnNl
Y3QoY29uc3QgRmxvYXRSZWN0JiBvdGhlcikKIHsKICAgICBmbG9hdCBsID0gbWF4KHgoKSwgb3Ro
ZXIueCgpKTsKICAgICBmbG9hdCB0ID0gbWF4KHkoKSwgb3RoZXIueSgpKTsKLSAgICBmbG9hdCBy
ID0gbWluKHJpZ2h0KCksIG90aGVyLnJpZ2h0KCkpOwotICAgIGZsb2F0IGIgPSBtaW4oYm90dG9t
KCksIG90aGVyLmJvdHRvbSgpKTsKKyAgICBmbG9hdCByID0gbWluKG1heFgoKSwgb3RoZXIubWF4
WCgpKTsKKyAgICBmbG9hdCBiID0gbWluKG1heFkoKSwgb3RoZXIubWF4WSgpKTsKIAogICAgIC8v
IFJldHVybiBhIGNsZWFuIGVtcHR5IHJlY3RhbmdsZSBmb3Igbm9uLWludGVyc2VjdGluZyBjYXNl
cy4KICAgICBpZiAobCA+PSByIHx8IHQgPj0gYikgewpAQCAtOTEsOCArOTEsOCBAQCB2b2lkIEZs
b2F0UmVjdDo6dW5pdGUoY29uc3QgRmxvYXRSZWN0JiBvCiAKICAgICBmbG9hdCBsID0gbWluKHgo
KSwgb3RoZXIueCgpKTsKICAgICBmbG9hdCB0ID0gbWluKHkoKSwgb3RoZXIueSgpKTsKLSAgICBm
bG9hdCByID0gbWF4KHJpZ2h0KCksIG90aGVyLnJpZ2h0KCkpOwotICAgIGZsb2F0IGIgPSBtYXgo
Ym90dG9tKCksIG90aGVyLmJvdHRvbSgpKTsKKyAgICBmbG9hdCByID0gbWF4KG1heFgoKSwgb3Ro
ZXIubWF4WCgpKTsKKyAgICBmbG9hdCBiID0gbWF4KG1heFkoKSwgb3RoZXIubWF4WSgpKTsKIAog
ICAgIHNldExvY2F0aW9uQW5kU2l6ZUZyb21FZGdlcyhsLCB0LCByLCBiKTsKIH0KQEAgLTE4MCw4
ICsxODAsOCBAQCBJbnRSZWN0IGVuY2xvc2luZ0ludFJlY3QoY29uc3QgRmxvYXRSZWN0CiB7CiAg
ICAgZmxvYXQgbGVmdCA9IGZsb29yZihyZWN0LngoKSk7CiAgICAgZmxvYXQgdG9wID0gZmxvb3Jm
KHJlY3QueSgpKTsKLSAgICBmbG9hdCB3aWR0aCA9IGNlaWxmKHJlY3QucmlnaHQoKSkgLSBsZWZ0
OwotICAgIGZsb2F0IGhlaWdodCA9IGNlaWxmKHJlY3QuYm90dG9tKCkpIC0gdG9wOworICAgIGZs
b2F0IHdpZHRoID0gY2VpbGYocmVjdC5tYXhYKCkpIC0gbGVmdDsKKyAgICBmbG9hdCBoZWlnaHQg
PSBjZWlsZihyZWN0Lm1heFkoKSkgLSB0b3A7CiAgICAgcmV0dXJuIEludFJlY3Qoc2FmZUZsb2F0
VG9JbnQobGVmdCksIHNhZmVGbG9hdFRvSW50KHRvcCksIAogICAgICAgICAgICAgICAgICAgIHNh
ZmVGbG9hdFRvSW50KHdpZHRoKSwgc2FmZUZsb2F0VG9JbnQoaGVpZ2h0KSk7CiB9CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3QuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3QuaAkocmV2aXNpb24g
NzcyNzgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3QuaAko
d29ya2luZyBjb3B5KQpAQCAtOTAsNiArOTAsOCBAQCBwdWJsaWM6CiAKICAgICBmbG9hdCB4KCkg
Y29uc3QgeyByZXR1cm4gbV9sb2NhdGlvbi54KCk7IH0KICAgICBmbG9hdCB5KCkgY29uc3QgeyBy
ZXR1cm4gbV9sb2NhdGlvbi55KCk7IH0KKyAgICBmbG9hdCBtYXhYKCkgY29uc3QgeyByZXR1cm4g
eCgpICsgd2lkdGgoKTsgfQorICAgIGZsb2F0IG1heFkoKSBjb25zdCB7IHJldHVybiB5KCkgKyBo
ZWlnaHQoKTsgfQogICAgIGZsb2F0IHdpZHRoKCkgY29uc3QgeyByZXR1cm4gbV9zaXplLndpZHRo
KCk7IH0KICAgICBmbG9hdCBoZWlnaHQoKSBjb25zdCB7IHJldHVybiBtX3NpemUuaGVpZ2h0KCk7
IH0KIApAQCAtMTE5LDcgKzEyMSw3IEBAIHB1YmxpYzoKICAgICAvLyBOb3RlLCB0aGlzIGRvZXNu
J3QgbWF0Y2ggd2hhdCBJbnRSZWN0Ojpjb250YWlucyhJbnRQb2ludCYpIGRvZXM7IHRoZSBpbnQg
dmVyc2lvbgogICAgIC8vIGlzIHJlYWxseSBjaGVja2luZyBmb3IgY29udGFpbm1lbnQgb2YgMXgx
IHJlY3QsIGJ1dCB0aGF0IGRvZXNuJ3QgbWFrZSBzZW5zZSB3aXRoIGZsb2F0cy4KICAgICBib29s
IGNvbnRhaW5zKGZsb2F0IHB4LCBmbG9hdCBweSkgY29uc3QKLSAgICAgICAgeyByZXR1cm4gcHgg
Pj0geCgpICYmIHB4IDw9IHJpZ2h0KCkgJiYgcHkgPj0geSgpICYmIHB5IDw9IGJvdHRvbSgpOyB9
CisgICAgICAgIHsgcmV0dXJuIHB4ID49IHgoKSAmJiBweCA8PSBtYXhYKCkgJiYgcHkgPj0geSgp
ICYmIHB5IDw9IG1heFkoKTsgfQogICAgIGJvb2wgY29udGFpbnMoY29uc3QgRmxvYXRQb2ludCYg
cG9pbnQpIGNvbnN0IHsgcmV0dXJuIGNvbnRhaW5zKHBvaW50LngoKSwgcG9pbnQueSgpKTsgfQog
CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ludFJlY3QuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ludFJlY3QuY3Bw
CShyZXZpc2lvbiA3NzI3OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0lu
dFJlY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NCwyMiArNDQsMjIgQEAgYm9vbCBJbnRSZWN0
OjppbnRlcnNlY3RzKGNvbnN0IEludFJlY3QmIAogewogICAgIC8vIENoZWNraW5nIGVtcHRpbmVz
cyBoYW5kbGVzIG5lZ2F0aXZlIHdpZHRocyBhcyB3ZWxsIGFzIHplcm8uCiAgICAgcmV0dXJuICFp
c0VtcHR5KCkgJiYgIW90aGVyLmlzRW1wdHkoKQotICAgICAgICAmJiB4KCkgPCBvdGhlci5yaWdo
dCgpICYmIG90aGVyLngoKSA8IHJpZ2h0KCkKLSAgICAgICAgJiYgeSgpIDwgb3RoZXIuYm90dG9t
KCkgJiYgb3RoZXIueSgpIDwgYm90dG9tKCk7CisgICAgICAgICYmIHgoKSA8IG90aGVyLm1heFgo
KSAmJiBvdGhlci54KCkgPCBtYXhYKCkKKyAgICAgICAgJiYgeSgpIDwgb3RoZXIubWF4WSgpICYm
IG90aGVyLnkoKSA8IG1heFkoKTsKIH0KIAogYm9vbCBJbnRSZWN0Ojpjb250YWlucyhjb25zdCBJ
bnRSZWN0JiBvdGhlcikgY29uc3QKIHsKLSAgICByZXR1cm4geCgpIDw9IG90aGVyLngoKSAmJiBy
aWdodCgpID49IG90aGVyLnJpZ2h0KCkKLSAgICAgICAgJiYgeSgpIDw9IG90aGVyLnkoKSAmJiBi
b3R0b20oKSA+PSBvdGhlci5ib3R0b20oKTsKKyAgICByZXR1cm4geCgpIDw9IG90aGVyLngoKSAm
JiBtYXhYKCkgPj0gb3RoZXIubWF4WCgpCisgICAgICAgICYmIHkoKSA8PSBvdGhlci55KCkgJiYg
bWF4WSgpID49IG90aGVyLm1heFkoKTsKIH0KIAogdm9pZCBJbnRSZWN0OjppbnRlcnNlY3QoY29u
c3QgSW50UmVjdCYgb3RoZXIpCiB7CiAgICAgaW50IGwgPSBtYXgoeCgpLCBvdGhlci54KCkpOwog
ICAgIGludCB0ID0gbWF4KHkoKSwgb3RoZXIueSgpKTsKLSAgICBpbnQgciA9IG1pbihyaWdodCgp
LCBvdGhlci5yaWdodCgpKTsKLSAgICBpbnQgYiA9IG1pbihib3R0b20oKSwgb3RoZXIuYm90dG9t
KCkpOworICAgIGludCByID0gbWluKG1heFgoKSwgb3RoZXIubWF4WCgpKTsKKyAgICBpbnQgYiA9
IG1pbihtYXhZKCksIG90aGVyLm1heFkoKSk7CiAKICAgICAvLyBSZXR1cm4gYSBjbGVhbiBlbXB0
eSByZWN0YW5nbGUgZm9yIG5vbi1pbnRlcnNlY3RpbmcgY2FzZXMuCiAgICAgaWYgKGwgPj0gciB8
fCB0ID49IGIpIHsKQEAgLTg3LDggKzg3LDggQEAgdm9pZCBJbnRSZWN0Ojp1bml0ZShjb25zdCBJ
bnRSZWN0JiBvdGhlcgogCiAgICAgaW50IGwgPSBtaW4oeCgpLCBvdGhlci54KCkpOwogICAgIGlu
dCB0ID0gbWluKHkoKSwgb3RoZXIueSgpKTsKLSAgICBpbnQgciA9IG1heChyaWdodCgpLCBvdGhl
ci5yaWdodCgpKTsKLSAgICBpbnQgYiA9IG1heChib3R0b20oKSwgb3RoZXIuYm90dG9tKCkpOwor
ICAgIGludCByID0gbWF4KG1heFgoKSwgb3RoZXIubWF4WCgpKTsKKyAgICBpbnQgYiA9IG1heCht
YXhZKCksIG90aGVyLm1heFkoKSk7CiAKICAgICBtX2xvY2F0aW9uLnNldFgobCk7CiAgICAgbV9s
b2NhdGlvbi5zZXRZKHQpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
SW50UmVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0ludFJlY3QuaAkocmV2aXNpb24gNzcyNzgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9JbnRSZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTkxLDYgKzkxLDggQEAgcHVibGlj
OgogCiAgICAgaW50IHgoKSBjb25zdCB7IHJldHVybiBtX2xvY2F0aW9uLngoKTsgfQogICAgIGlu
dCB5KCkgY29uc3QgeyByZXR1cm4gbV9sb2NhdGlvbi55KCk7IH0KKyAgICBpbnQgbWF4WCgpIGNv
bnN0IHsgcmV0dXJuIHgoKSArIHdpZHRoKCk7IH0KKyAgICBpbnQgbWF4WSgpIGNvbnN0IHsgcmV0
dXJuIHkoKSArIGhlaWdodCgpOyB9CiAgICAgaW50IHdpZHRoKCkgY29uc3QgeyByZXR1cm4gbV9z
aXplLndpZHRoKCk7IH0KICAgICBpbnQgaGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gbV9zaXplLmhl
aWdodCgpOyB9CiAKQEAgLTk5LDEzICsxMDEsNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRXaWR0
aChpbnQgd2lkdGgpIHsgbV9zaXplLnNldFdpZHRoKHdpZHRoKTsgfQogICAgIHZvaWQgc2V0SGVp
Z2h0KGludCBoZWlnaHQpIHsgbV9zaXplLnNldEhlaWdodChoZWlnaHQpOyB9CiAKLSAgICAvLyBC
ZSBjYXJlZnVsIHdpdGggdGhlc2UgZnVuY3Rpb25zLiAgVGhlIHBvaW50IGlzIGNvbnNpZGVyZWQg
dG8gYmUgdG8gdGhlIHJpZ2h0IGFuZCBiZWxvdy4gIFRoZXNlIGFyZSBub3QKLSAgICAvLyBzdWJz
dGl0dXRlcyBmb3IgcmlnaHQoKSBhbmQgYm90dG9tKCkuCi0gICAgSW50UG9pbnQgdG9wTGVmdCgp
IGNvbnN0IHsgcmV0dXJuIG1fbG9jYXRpb247IH0KLSAgICBJbnRQb2ludCB0b3BSaWdodCgpIGNv
bnN0IHsgcmV0dXJuIEludFBvaW50KHJpZ2h0KCkgLSAxLCB5KCkpOyB9Ci0gICAgSW50UG9pbnQg
Ym90dG9tTGVmdCgpIGNvbnN0IHsgcmV0dXJuIEludFBvaW50KHgoKSwgYm90dG9tKCkgLSAxKTsg
fQotICAgIEludFBvaW50IGJvdHRvbVJpZ2h0KCkgY29uc3QgeyByZXR1cm4gSW50UG9pbnQocmln
aHQoKSAtIDEsIGJvdHRvbSgpIC0gMSk7IH0KLQogICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsg
cmV0dXJuIG1fc2l6ZS5pc0VtcHR5KCk7IH0KIAogICAgIGludCByaWdodCgpIGNvbnN0IHsgcmV0
dXJuIHgoKSArIHdpZHRoKCk7IH0KQEAgLTExOCwyNiArMTEzLDI2IEBAIHB1YmxpYzoKICAgICB2
b2lkIG1vdmUoY29uc3QgSW50U2l6ZSYgcykgeyBtX2xvY2F0aW9uICs9IHM7IH0gCiAgICAgdm9p
ZCBtb3ZlKGludCBkeCwgaW50IGR5KSB7IG1fbG9jYXRpb24ubW92ZShkeCwgZHkpOyB9IAogICAg
IAotICAgIHZvaWQgc2hpZnRMZWZ0RWRnZVRvKGludCBlZGdlKQorICAgIHZvaWQgc2hpZnRYRWRn
ZVRvKGludCBlZGdlKQogICAgIHsKICAgICAgICAgaW50IGRlbHRhID0gZWRnZSAtIHgoKTsKICAg
ICAgICAgc2V0WChlZGdlKTsKICAgICAgICAgc2V0V2lkdGgoc3RkOjptYXgoMCwgd2lkdGgoKSAt
IGRlbHRhKSk7CiAgICAgfQotICAgIHZvaWQgc2hpZnRSaWdodEVkZ2VUbyhpbnQgZWRnZSkKKyAg
ICB2b2lkIHNoaWZ0TWF4WEVkZ2VUbyhpbnQgZWRnZSkKICAgICB7Ci0gICAgICAgIGludCBkZWx0
YSA9IGVkZ2UgLSByaWdodCgpOworICAgICAgICBpbnQgZGVsdGEgPSBlZGdlIC0gbWF4WCgpOwog
ICAgICAgICBzZXRXaWR0aChzdGQ6Om1heCgwLCB3aWR0aCgpICsgZGVsdGEpKTsKICAgICB9Ci0g
ICAgdm9pZCBzaGlmdFRvcEVkZ2VUbyhpbnQgZWRnZSkKKyAgICB2b2lkIHNoaWZ0WUVkZ2VUbyhp
bnQgZWRnZSkKICAgICB7CiAgICAgICAgIGludCBkZWx0YSA9IGVkZ2UgLSB5KCk7CiAgICAgICAg
IHNldFkoZWRnZSk7CiAgICAgICAgIHNldEhlaWdodChzdGQ6Om1heCgwLCBoZWlnaHQoKSAtIGRl
bHRhKSk7CiAgICAgfQotICAgIHZvaWQgc2hpZnRCb3R0b21FZGdlVG8oaW50IGVkZ2UpCisgICAg
dm9pZCBzaGlmdE1heFlFZGdlVG8oaW50IGVkZ2UpCiAgICAgewotICAgICAgICBpbnQgZGVsdGEg
PSBlZGdlIC0gYm90dG9tKCk7CisgICAgICAgIGludCBkZWx0YSA9IGVkZ2UgLSBtYXhZKCk7CiAg
ICAgICAgIHNldEhlaWdodChzdGQ6Om1heCgwLCBoZWlnaHQoKSArIGRlbHRhKSk7CiAgICAgfQog
CkBAIC0xNDcsNyArMTQyLDcgQEAgcHVibGljOgogICAgIC8vIFRoaXMgY2hlY2tzIHRvIHNlZSBp
ZiB0aGUgcmVjdCBjb250YWlucyB4LHkgaW4gdGhlIHRyYWRpdGlvbmFsIHNlbnNlLgogICAgIC8v
IEVxdWl2YWxlbnQgdG8gY2hlY2tpbmcgaWYgdGhlIHJlY3QgY29udGFpbnMgYSAxeDEgcmVjdCBi
ZWxvdyBhbmQgdG8gdGhlIHJpZ2h0IG9mIChweCxweSkuCiAgICAgYm9vbCBjb250YWlucyhpbnQg
cHgsIGludCBweSkgY29uc3QKLSAgICAgICAgeyByZXR1cm4gcHggPj0geCgpICYmIHB4IDwgcmln
aHQoKSAmJiBweSA+PSB5KCkgJiYgcHkgPCBib3R0b20oKTsgfQorICAgICAgICB7IHJldHVybiBw
eCA+PSB4KCkgJiYgcHggPCBtYXhYKCkgJiYgcHkgPj0geSgpICYmIHB5IDwgbWF4WSgpOyB9CiAg
ICAgYm9vbCBjb250YWlucyhjb25zdCBJbnRQb2ludCYgcG9pbnQpIGNvbnN0IHsgcmV0dXJuIGNv
bnRhaW5zKHBvaW50LngoKSwgcG9pbnQueSgpKTsgfQogCiAgICAgdm9pZCBpbnRlcnNlY3QoY29u
c3QgSW50UmVjdCYpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvV2lk
dGhJdGVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvV2lkdGhJdGVyYXRvci5jcHAJKHJldmlzaW9uIDc3Mjc4KQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvV2lkdGhJdGVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTI1NSw5ICsyNTUsOSBAQCB2b2lkIFdpZHRoSXRlcmF0b3I6OmFkdmFuY2UoaW50IG9mZnNldCwg
CiAgICAgICAgIGxhc3RSb3VuZGluZ1dpZHRoID0gd2lkdGggLSBvbGRXaWR0aDsKIAogICAgICAg
ICBpZiAobV9hY2NvdW50Rm9yR2x5cGhCb3VuZHMpIHsKLSAgICAgICAgICAgIG1fbWF4R2x5cGhC
b3VuZGluZ0JveFkgPSBtYXgobV9tYXhHbHlwaEJvdW5kaW5nQm94WSwgYm91bmRzLmJvdHRvbSgp
KTsKKyAgICAgICAgICAgIG1fbWF4R2x5cGhCb3VuZGluZ0JveFkgPSBtYXgobV9tYXhHbHlwaEJv
dW5kaW5nQm94WSwgYm91bmRzLm1heFkoKSk7CiAgICAgICAgICAgICBtX21pbkdseXBoQm91bmRp
bmdCb3hZID0gbWluKG1fbWluR2x5cGhCb3VuZGluZ0JveFksIGJvdW5kcy55KCkpOwotICAgICAg
ICAgICAgbV9sYXN0R2x5cGhPdmVyZmxvdyA9IG1heDxmbG9hdD4oMCwgYm91bmRzLnJpZ2h0KCkg
LSB3aWR0aCk7CisgICAgICAgICAgICBtX2xhc3RHbHlwaE92ZXJmbG93ID0gbWF4PGZsb2F0Pigw
LCBib3VuZHMubWF4WCgpIC0gd2lkdGgpOwogICAgICAgICB9CiAgICAgfQogCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3ND
b250ZXh0Q0cuY3BwCShyZXZpc2lvbiA3NzI3OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTY2
LDkgKzE2Niw5IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3UmVjdChjb25zdCBJbnQKICAg
ICAgICAgICAgIHNldENHRmlsbENvbG9yKGNvbnRleHQsIHN0cm9rZUNvbG9yKCksIHN0cm9rZUNv
bG9yU3BhY2UoKSk7CiAgICAgICAgIENHUmVjdCByZWN0c1s0XSA9IHsKICAgICAgICAgICAgIEZs
b2F0UmVjdChyZWN0LngoKSwgcmVjdC55KCksIHJlY3Qud2lkdGgoKSwgMSksCi0gICAgICAgICAg
ICBGbG9hdFJlY3QocmVjdC54KCksIHJlY3QuYm90dG9tKCkgLSAxLCByZWN0LndpZHRoKCksIDEp
LAorICAgICAgICAgICAgRmxvYXRSZWN0KHJlY3QueCgpLCByZWN0Lm1heFkoKSAtIDEsIHJlY3Qu
d2lkdGgoKSwgMSksCiAgICAgICAgICAgICBGbG9hdFJlY3QocmVjdC54KCksIHJlY3QueSgpICsg
MSwgMSwgcmVjdC5oZWlnaHQoKSAtIDIpLAotICAgICAgICAgICAgRmxvYXRSZWN0KHJlY3Qucmln
aHQoKSAtIDEsIHJlY3QueSgpICsgMSwgMSwgcmVjdC5oZWlnaHQoKSAtIDIpCisgICAgICAgICAg
ICBGbG9hdFJlY3QocmVjdC5tYXhYKCkgLSAxLCByZWN0LnkoKSArIDEsIDEsIHJlY3QuaGVpZ2h0
KCkgLSAyKQogICAgICAgICB9OwogICAgICAgICBDR0NvbnRleHRGaWxsUmVjdHMoY29udGV4dCwg
cmVjdHMsIDQpOwogICAgICAgICBpZiAob2xkRmlsbENvbG9yICE9IHN0cm9rZUNvbG9yKCkpCkBA
IC01NjQsNyArNTY0LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxQYXRoKGNvbnN0IFBh
dAogICAgICAgICAgICAgICAgIENHQ29udGV4dENsaXAobGF5ZXJDb250ZXh0KTsKIAogICAgICAg
ICAgICAgbV9zdGF0ZS5maWxsR3JhZGllbnQtPnBhaW50KGxheWVyQ29udGV4dCk7Ci0gICAgICAg
ICAgICBDR0NvbnRleHREcmF3TGF5ZXJBdFBvaW50KGNvbnRleHQsIENHUG9pbnRNYWtlKHJlY3Qu
bGVmdCgpLCByZWN0LnRvcCgpKSwgbGF5ZXIpOworICAgICAgICAgICAgQ0dDb250ZXh0RHJhd0xh
eWVyQXRQb2ludChjb250ZXh0LCBDR1BvaW50TWFrZShyZWN0LngoKSwgcmVjdC55KCkpLCBsYXll
cik7CiAgICAgICAgICAgICBDR0xheWVyUmVsZWFzZShsYXllcik7CiAgICAgICAgIH0gZWxzZSB7
CiAgICAgICAgICAgICBDR0NvbnRleHRCZWdpblBhdGgoY29udGV4dCk7CkBAIC02NDYsNyArNjQ2
LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KGNvbnN0IEZsbwogCiAgICAgICAg
ICAgICBDR0NvbnRleHRDb25jYXRDVE0obGF5ZXJDb250ZXh0LCBtX3N0YXRlLmZpbGxHcmFkaWVu
dC0+Z3JhZGllbnRTcGFjZVRyYW5zZm9ybSgpKTsKICAgICAgICAgICAgIG1fc3RhdGUuZmlsbEdy
YWRpZW50LT5wYWludChsYXllckNvbnRleHQpOwotICAgICAgICAgICAgQ0dDb250ZXh0RHJhd0xh
eWVyQXRQb2ludChjb250ZXh0LCBDR1BvaW50TWFrZShyZWN0LmxlZnQoKSwgcmVjdC50b3AoKSks
IGxheWVyKTsKKyAgICAgICAgICAgIENHQ29udGV4dERyYXdMYXllckF0UG9pbnQoY29udGV4dCwg
Q0dQb2ludE1ha2UocmVjdC54KCksIHJlY3QueSgpKSwgbGF5ZXIpOwogICAgICAgICAgICAgQ0dM
YXllclJlbGVhc2UobGF5ZXIpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgQ0dDb250
ZXh0Q2xpcFRvUmVjdChjb250ZXh0LCByZWN0KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0cuY3BwCShyZXZpc2lvbiA3
NzI3OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVy
Q0cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNjcsNyArMjY3LDcgQEAgUGFzc1JlZlB0cjxCeXRl
QXJyYXk+IGdldEltYWdlRGF0YShjb25zdAogICAgIFJlZlB0cjxCeXRlQXJyYXk+IHJlc3VsdCA9
IEJ5dGVBcnJheTo6Y3JlYXRlKHJlY3Qud2lkdGgoKSAqIHJlY3QuaGVpZ2h0KCkgKiA0KTsKICAg
ICB1bnNpZ25lZCBjaGFyKiBkYXRhID0gcmVzdWx0LT5kYXRhKCk7CiAKLSAgICBpZiAocmVjdC54
KCkgPCAwIHx8IHJlY3QueSgpIDwgMCB8fCByZWN0LnJpZ2h0KCkgPiBzaXplLndpZHRoKCkgfHwg
cmVjdC5ib3R0b20oKSA+IHNpemUuaGVpZ2h0KCkpCisgICAgaWYgKHJlY3QueCgpIDwgMCB8fCBy
ZWN0LnkoKSA8IDAgfHwgcmVjdC5tYXhYKCkgPiBzaXplLndpZHRoKCkgfHwgcmVjdC5tYXhZKCkg
PiBzaXplLmhlaWdodCgpKQogICAgICAgICBtZW1zZXQoZGF0YSwgMCwgcmVzdWx0LT5sZW5ndGgo
KSk7CiAKICAgICBpbnQgb3JpZ2lueCA9IHJlY3QueCgpOwpAQCAtMjc2LDcgKzI3Niw3IEBAIFBh
c3NSZWZQdHI8Qnl0ZUFycmF5PiBnZXRJbWFnZURhdGEoY29uc3QKICAgICAgICAgZGVzdHggPSAt
b3JpZ2lueDsKICAgICAgICAgb3JpZ2lueCA9IDA7CiAgICAgfQotICAgIGludCBlbmR4ID0gcmVj
dC5yaWdodCgpOworICAgIGludCBlbmR4ID0gcmVjdC5tYXhYKCk7CiAgICAgaWYgKGVuZHggPiBz
aXplLndpZHRoKCkpCiAgICAgICAgIGVuZHggPSBzaXplLndpZHRoKCk7CiAgICAgaW50IG51bUNv
bHVtbnMgPSBlbmR4IC0gb3JpZ2lueDsKQEAgLTI4Nyw3ICsyODcsNyBAQCBQYXNzUmVmUHRyPEJ5
dGVBcnJheT4gZ2V0SW1hZ2VEYXRhKGNvbnN0CiAgICAgICAgIGRlc3R5ID0gLW9yaWdpbnk7CiAg
ICAgICAgIG9yaWdpbnkgPSAwOwogICAgIH0KLSAgICBpbnQgZW5keSA9IHJlY3QuYm90dG9tKCk7
CisgICAgaW50IGVuZHkgPSByZWN0Lm1heFkoKTsKICAgICBpZiAoZW5keSA+IHNpemUuaGVpZ2h0
KCkpCiAgICAgICAgIGVuZHkgPSBzaXplLmhlaWdodCgpOwogICAgIGludCBudW1Sb3dzID0gZW5k
eSAtIG9yaWdpbnk7CkBAIC0zNzcsOSArMzc3LDkgQEAgdm9pZCBwdXRJbWFnZURhdGEoQnl0ZUFy
cmF5KiYgc291cmNlLCBjbwogICAgIEFTU0VSVChkZXN0eCA+PSAwKTsKICAgICBBU1NFUlQoZGVz
dHggPCBzaXplLndpZHRoKCkpOwogICAgIEFTU0VSVChvcmlnaW54ID49IDApOwotICAgIEFTU0VS
VChvcmlnaW54IDw9IHNvdXJjZVJlY3QucmlnaHQoKSk7CisgICAgQVNTRVJUKG9yaWdpbnggPD0g
c291cmNlUmVjdC5tYXhYKCkpOwogCi0gICAgaW50IGVuZHggPSBkZXN0UG9pbnQueCgpICsgc291
cmNlUmVjdC5yaWdodCgpOworICAgIGludCBlbmR4ID0gZGVzdFBvaW50LngoKSArIHNvdXJjZVJl
Y3QubWF4WCgpOwogICAgIEFTU0VSVChlbmR4IDw9IHNpemUud2lkdGgoKSk7CiAKICAgICBpbnQg
bnVtQ29sdW1ucyA9IGVuZHggLSBkZXN0eDsKQEAgLTM4OSw5ICszODksOSBAQCB2b2lkIHB1dElt
YWdlRGF0YShCeXRlQXJyYXkqJiBzb3VyY2UsIGNvCiAgICAgQVNTRVJUKGRlc3R5ID49IDApOwog
ICAgIEFTU0VSVChkZXN0eSA8IHNpemUuaGVpZ2h0KCkpOwogICAgIEFTU0VSVChvcmlnaW55ID49
IDApOwotICAgIEFTU0VSVChvcmlnaW55IDw9IHNvdXJjZVJlY3QuYm90dG9tKCkpOworICAgIEFT
U0VSVChvcmlnaW55IDw9IHNvdXJjZVJlY3QubWF4WSgpKTsKIAotICAgIGludCBlbmR5ID0gZGVz
dFBvaW50LnkoKSArIHNvdXJjZVJlY3QuYm90dG9tKCk7CisgICAgaW50IGVuZHkgPSBkZXN0UG9p
bnQueSgpICsgc291cmNlUmVjdC5tYXhZKCk7CiAgICAgQVNTRVJUKGVuZHkgPD0gc2l6ZS5oZWln
aHQoKSk7CiAgICAgaW50IG51bVJvd3MgPSBlbmR5IC0gZGVzdHk7CiAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQ0cuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQ0cuY3BwCShyZXZpc2lvbiA3
NzI3OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQ0cuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yMDQsNyArMjA0LDcgQEAgdm9pZCBCaXRtYXBJbWFnZTo6ZHJh
dyhHcmFwaGljc0NvbnRleHQqIAogICAgICAgICAgICAgYWRqdXN0ZWREZXN0UmVjdC5zZXRIZWln
aHQoc3ViaW1hZ2VSZWN0LmhlaWdodCgpIC8geVNjYWxlKTsKIAogICAgICAgICAgICAgaW1hZ2Uu
YWRvcHRDRihDR0ltYWdlQ3JlYXRlV2l0aEltYWdlSW5SZWN0KGltYWdlLmdldCgpLCBzdWJpbWFn
ZVJlY3QpKTsKLSAgICAgICAgICAgIGlmIChjdXJySGVpZ2h0IDwgc3JjUmVjdC5ib3R0b20oKSkg
eworICAgICAgICAgICAgaWYgKGN1cnJIZWlnaHQgPCBzcmNSZWN0Lm1heFkoKSkgewogICAgICAg
ICAgICAgICAgIEFTU0VSVChDR0ltYWdlR2V0SGVpZ2h0KGltYWdlLmdldCgpKSA9PSBjdXJySGVp
Z2h0IC0gQ0dSZWN0SW50ZWdyYWwoc3JjUmVjdCkub3JpZ2luLnkpOwogICAgICAgICAgICAgICAg
IGFkanVzdGVkRGVzdFJlY3Quc2V0SGVpZ2h0KENHSW1hZ2VHZXRIZWlnaHQoaW1hZ2UuZ2V0KCkp
IC8geVNjYWxlKTsKICAgICAgICAgICAgIH0KQEAgLTIyNCw3ICsyMjQsNyBAQCB2b2lkIEJpdG1h
cEltYWdlOjpkcmF3KEdyYXBoaWNzQ29udGV4dCogCiAKICAgICAvLyBGbGlwIHRoZSBjb29yZHMu
CiAgICAgQ0dDb250ZXh0U2NhbGVDVE0oY29udGV4dCwgMSwgLTEpOwotICAgIGFkanVzdGVkRGVz
dFJlY3Quc2V0WSgtYWRqdXN0ZWREZXN0UmVjdC5ib3R0b20oKSk7CisgICAgYWRqdXN0ZWREZXN0
UmVjdC5zZXRZKC1hZGp1c3RlZERlc3RSZWN0Lm1heFkoKSk7CiAKICAgICAvLyBBZGp1c3QgdGhl
IGNvbG9yIHNwYWNlLgogICAgIGltYWdlID0gaW1hZ2VXaXRoQ29sb3JTcGFjZShpbWFnZS5nZXQo
KSwgc3R5bGVDb2xvclNwYWNlKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHAJKHJldmlzaW9uIDc3
Mjc4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJF
ZmZlY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTksNyArMTE5LDcgQEAgUGFzc1JlZlB0cjxC
eXRlQXJyYXk+IEZpbHRlckVmZmVjdDo6YXNQcgogaW5saW5lIHZvaWQgRmlsdGVyRWZmZWN0Ojpj
b3B5SW1hZ2VCeXRlcyhCeXRlQXJyYXkqIHNvdXJjZSwgQnl0ZUFycmF5KiBkZXN0aW5hdGlvbiwg
Y29uc3QgSW50UmVjdCYgcmVjdCkKIHsKICAgICAvLyBDb3B5IHRoZSBuZWNlc3NhcnkgbGluZXMu
Ci0gICAgaWYgKHJlY3QueCgpIDwgMCB8fCByZWN0LnkoKSA8IDAgfHwgcmVjdC5ib3R0b20oKSA+
IG1fYWJzb2x1dGVQYWludFJlY3Qud2lkdGgoKSB8fCByZWN0LmJvdHRvbSgpID4gbV9hYnNvbHV0
ZVBhaW50UmVjdC5oZWlnaHQoKSkKKyAgICBpZiAocmVjdC54KCkgPCAwIHx8IHJlY3QueSgpIDwg
MCB8fCByZWN0Lm1heFkoKSA+IG1fYWJzb2x1dGVQYWludFJlY3Qud2lkdGgoKSB8fCByZWN0Lm1h
eFkoKSA+IG1fYWJzb2x1dGVQYWludFJlY3QuaGVpZ2h0KCkpCiAgICAgICAgIG1lbXNldChkZXN0
aW5hdGlvbi0+ZGF0YSgpLCAwLCBkZXN0aW5hdGlvbi0+bGVuZ3RoKCkpOwogCiAgICAgaW50IHhP
cmlnaW4gPSByZWN0LngoKTsKQEAgLTEyOCw3ICsxMjgsNyBAQCBpbmxpbmUgdm9pZCBGaWx0ZXJF
ZmZlY3Q6OmNvcHlJbWFnZUJ5dGVzCiAgICAgICAgIHhEZXN0ID0gLXhPcmlnaW47CiAgICAgICAg
IHhPcmlnaW4gPSAwOwogICAgIH0KLSAgICBpbnQgeEVuZCA9IHJlY3QucmlnaHQoKTsKKyAgICBp
bnQgeEVuZCA9IHJlY3QubWF4WCgpOwogICAgIGlmICh4RW5kID4gbV9hYnNvbHV0ZVBhaW50UmVj
dC53aWR0aCgpKQogICAgICAgICB4RW5kID0gbV9hYnNvbHV0ZVBhaW50UmVjdC53aWR0aCgpOwog
CkBAIC0xMzgsNyArMTM4LDcgQEAgaW5saW5lIHZvaWQgRmlsdGVyRWZmZWN0Ojpjb3B5SW1hZ2VC
eXRlcwogICAgICAgICB5RGVzdCA9IC15T3JpZ2luOwogICAgICAgICB5T3JpZ2luID0gMDsKICAg
ICB9Ci0gICAgaW50IHlFbmQgPSByZWN0LmJvdHRvbSgpOworICAgIGludCB5RW5kID0gcmVjdC5t
YXhZKCk7CiAgICAgaWYgKHlFbmQgPiBtX2Fic29sdXRlUGFpbnRSZWN0LmhlaWdodCgpKQogICAg
ICAgICB5RW5kID0gbV9hYnNvbHV0ZVBhaW50UmVjdC5oZWlnaHQoKTsKIApJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbXBsZXhUZXh0Q29udHJvbGxlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbXBs
ZXhUZXh0Q29udHJvbGxlci5jcHAJKHJldmlzaW9uIDc3Mjc4KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbXBsZXhUZXh0Q29udHJvbGxlci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTU1Myw5ICs1NTMsOSBAQCB2b2lkIENvbXBsZXhUZXh0Q29udHJvbGxlcjo6YWRq
dXN0R2x5cGhzCiAgICAgICAgICAgICBGbG9hdFJlY3QgZ2x5cGhCb3VuZHMgPSBmb250RGF0YS0+
Ym91bmRzRm9yR2x5cGgoZ2x5cGgpOwogICAgICAgICAgICAgZ2x5cGhCb3VuZHMubW92ZShnbHlw
aE9yaWdpbi54LCBnbHlwaE9yaWdpbi55KTsKICAgICAgICAgICAgIG1fbWluR2x5cGhCb3VuZGlu
Z0JveFggPSBtaW4obV9taW5HbHlwaEJvdW5kaW5nQm94WCwgZ2x5cGhCb3VuZHMueCgpKTsKLSAg
ICAgICAgICAgIG1fbWF4R2x5cGhCb3VuZGluZ0JveFggPSBtYXgobV9tYXhHbHlwaEJvdW5kaW5n
Qm94WCwgZ2x5cGhCb3VuZHMucmlnaHQoKSk7CisgICAgICAgICAgICBtX21heEdseXBoQm91bmRp
bmdCb3hYID0gbWF4KG1fbWF4R2x5cGhCb3VuZGluZ0JveFgsIGdseXBoQm91bmRzLm1heFgoKSk7
CiAgICAgICAgICAgICBtX21pbkdseXBoQm91bmRpbmdCb3hZID0gbWluKG1fbWluR2x5cGhCb3Vu
ZGluZ0JveFksIGdseXBoQm91bmRzLnkoKSk7Ci0gICAgICAgICAgICBtX21heEdseXBoQm91bmRp
bmdCb3hZID0gbWF4KG1fbWF4R2x5cGhCb3VuZGluZ0JveFksIGdseXBoQm91bmRzLmJvdHRvbSgp
KTsKKyAgICAgICAgICAgIG1fbWF4R2x5cGhCb3VuZGluZ0JveFkgPSBtYXgobV9tYXhHbHlwaEJv
dW5kaW5nQm94WSwgZ2x5cGhCb3VuZHMubWF4WSgpKTsKICAgICAgICAgICAgIGdseXBoT3JpZ2lu
LnggKz0gYWR2YW5jZS53aWR0aDsKICAgICAgICAgICAgIGdseXBoT3JpZ2luLnkgKz0gYWR2YW5j
ZS5oZWlnaHQ7CiAgICAgICAgICAgICAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL21hYy9TaW1wbGVGb250RGF0YU1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvU2ltcGxlRm9udERhdGFNYWMubW0JKHJldmlzaW9u
IDc3Mjc4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL1NpbXBsZUZv
bnREYXRhTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC00NzcsMTMgKzQ3NywxMyBAQCBGbG9hdFJl
Y3QgU2ltcGxlRm9udERhdGE6OnBsYXRmb3JtQm91bmRzCiAjaWZuZGVmIEJVSUxESU5HX09OX1RJ
R0VSCiAgICAgYm91bmRpbmdCb3ggPSBDVEZvbnRHZXRCb3VuZGluZ1JlY3RzRm9yR2x5cGhzKG1f
cGxhdGZvcm1EYXRhLmN0Rm9udCgpLAogICAgICAgICAgICAgICAgICAgICBvcmllbnRhdGlvbigp
ID09IFZlcnRpY2FsID8ga0NURm9udFZlcnRpY2FsT3JpZW50YXRpb24gOiBrQ1RGb250SG9yaXpv
bnRhbE9yaWVudGF0aW9uLCAmZ2x5cGgsIDAsIDEpOwotICAgIGJvdW5kaW5nQm94LnNldFkoLWJv
dW5kaW5nQm94LmJvdHRvbSgpKTsKKyAgICBib3VuZGluZ0JveC5zZXRZKC1ib3VuZGluZ0JveC5t
YXhZKCkpOwogI2Vsc2UKICAgICAvLyBGSVhNRTogQ3VzdG9tIGZvbnRzIGRvbid0IGhhdmUgTlNG
b250cywgc28gdGhpcyBmdW5jdGlvbiBkb2Vzbid0IGNvbXB1dGUgY29ycmVjdCBib3VuZHMgZm9y
IHRoZXNlIG9uIFRpZ2VyLgogICAgIGlmICghbV9wbGF0Zm9ybURhdGEuZm9udCgpKQogICAgICAg
ICByZXR1cm4gYm91bmRpbmdCb3g7CiAgICAgYm91bmRpbmdCb3ggPSBbbV9wbGF0Zm9ybURhdGEu
Zm9udCgpIGJvdW5kaW5nUmVjdEZvckdseXBoOmdseXBoXTsKLSAgICBib3VuZGluZ0JveC5zZXRZ
KC1ib3VuZGluZ0JveC5ib3R0b20oKSk7CisgICAgYm91bmRpbmdCb3guc2V0WSgtYm91bmRpbmdC
b3gubWF4WSgpKTsKICNlbmRpZgogICAgIGlmIChtX3N5bnRoZXRpY0JvbGRPZmZzZXQpCiAgICAg
ICAgIGJvdW5kaW5nQm94LnNldFdpZHRoKGJvdW5kaW5nQm94LndpZHRoKCkgKyBtX3N5bnRoZXRp
Y0JvbGRPZmZzZXQpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJh
bnNmb3Jtcy9BZmZpbmVUcmFuc2Zvcm0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvQWZmaW5lVHJhbnNmb3JtLmNwcAkocmV2aXNp
b24gNzcyNzgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1z
L0FmZmluZVRyYW5zZm9ybS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxNiw5ICszMTYsOSBAQCBG
bG9hdFJlY3QgQWZmaW5lVHJhbnNmb3JtOjptYXBSZWN0KGNvbnN0CiAKICAgICBGbG9hdFF1YWQg
cmVzdWx0OwogICAgIHJlc3VsdC5zZXRQMShtYXBQb2ludChyZWN0LmxvY2F0aW9uKCkpKTsKLSAg
ICByZXN1bHQuc2V0UDIobWFwUG9pbnQoRmxvYXRQb2ludChyZWN0LnJpZ2h0KCksIHJlY3QueSgp
KSkpOwotICAgIHJlc3VsdC5zZXRQMyhtYXBQb2ludChGbG9hdFBvaW50KHJlY3QucmlnaHQoKSwg
cmVjdC5ib3R0b20oKSkpKTsKLSAgICByZXN1bHQuc2V0UDQobWFwUG9pbnQoRmxvYXRQb2ludChy
ZWN0LngoKSwgcmVjdC5ib3R0b20oKSkpKTsKKyAgICByZXN1bHQuc2V0UDIobWFwUG9pbnQoRmxv
YXRQb2ludChyZWN0Lm1heFgoKSwgcmVjdC55KCkpKSk7CisgICAgcmVzdWx0LnNldFAzKG1hcFBv
aW50KEZsb2F0UG9pbnQocmVjdC5tYXhYKCksIHJlY3QubWF4WSgpKSkpOworICAgIHJlc3VsdC5z
ZXRQNChtYXBQb2ludChGbG9hdFBvaW50KHJlY3QueCgpLCByZWN0Lm1heFkoKSkpKTsKICAgICBy
ZXR1cm4gcmVzdWx0LmJvdW5kaW5nQm94KCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2d0ay9SZW5kZXJUaGVtZUd0ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3RrL1JlbmRlclRoZW1lR3RrLmNwcAkocmV2aXNpb24gNzcyNzgpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUmVuZGVyVGhlbWVHdGsuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yNTgsNyArMjU4LDcgQEAgc3RhdGljIEludFBvaW50IGNlbnRlclJlY3RWZXJ0aWNh
bGx5SW5QYQogewogICAgIE5vZGUqIGlucHV0ID0gb2JqZWN0LT5ub2RlKCktPnNoYWRvd0FuY2Vz
dG9yTm9kZSgpOyAvLyBHZXQgdGhlIHJlbmRlcmVyIG9mIDxpbnB1dD4gZWxlbWVudC4KICAgICBp
ZiAoIWlucHV0LT5yZW5kZXJlcigpLT5pc0JveCgpKQotICAgICAgICByZXR1cm4gcmVjdC50b3BM
ZWZ0KCk7CisgICAgICAgIHJldHVybiByZWN0LmxvY2F0aW9uKCk7CiAKICAgICAvLyBJZiBwb3Nz
aWJsZSBjZW50ZXIgdGhlIHktY29vcmRpbmF0ZSBvZiB0aGUgcmVjdCB2ZXJ0aWNhbGx5IGluIHRo
ZSBwYXJlbnQgaW5wdXQgZWxlbWVudC4KICAgICAvLyBXZSBhbHNvIGFkZCBvbmUgcGl4ZWwgaGVy
ZSB0byBlbnN1cmUgdGhhdCB0aGUgeSBjb29yZGluYXRlIGlzIHJvdW5kZWQgdXAgZm9yIGJveCBo
ZWlnaHRzCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2lkZ2V0TWFjLm1tCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9XaWRnZXRNYWMubW0JKHJl
dmlzaW9uIDc3Mjc4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1dpZGdldE1hYy5t
bQkod29ya2luZyBjb3B5KQpAQCAtMjUyLDcgKzI1Miw3IEBAIHZvaWQgV2lkZ2V0OjpwYWludChH
cmFwaGljc0NvbnRleHQqIHAsIGMKICAgICAgICAgSW50UmVjdCBkaXJ0eVJlY3QgPSByOwogICAg
ICAgICBkaXJ0eVJlY3QubW92ZSgtdHJhbnNmb3JtT3JpZ2luLngoKSwgLXRyYW5zZm9ybU9yaWdp
bi55KCkpOwogICAgICAgICBpZiAoIVt2aWV3IGlzRmxpcHBlZF0pCi0gICAgICAgICAgICBkaXJ0
eVJlY3Quc2V0WShbdmlldyBib3VuZHNdLnNpemUuaGVpZ2h0IC0gZGlydHlSZWN0LmJvdHRvbSgp
KTsKKyAgICAgICAgICAgIGRpcnR5UmVjdC5zZXRZKFt2aWV3IGJvdW5kc10uc2l6ZS5oZWlnaHQg
LSBkaXJ0eVJlY3QubWF4WSgpKTsKIAogICAgICAgICBbdmlldyBkaXNwbGF5UmVjdElnbm9yaW5n
T3BhY2l0eTpkaXJ0eVJlY3RdOwogCkBAIC0yOTYsNyArMjk2LDcgQEAgdm9pZCBXaWRnZXQ6OnBh
aW50KEdyYXBoaWNzQ29udGV4dCogcCwgYwogICAgICAgICBJbnRSZWN0IGRpcnR5UmVjdCA9IHI7
CiAgICAgICAgIGRpcnR5UmVjdC5tb3ZlKC10cmFuc2Zvcm1PcmlnaW4ueCgpLCAtdHJhbnNmb3Jt
T3JpZ2luLnkoKSk7CiAgICAgICAgIGlmICghW3ZpZXcgaXNGbGlwcGVkXSkKLSAgICAgICAgICAg
IGRpcnR5UmVjdC5zZXRZKFt2aWV3IGJvdW5kc10uc2l6ZS5oZWlnaHQgLSBkaXJ0eVJlY3QuYm90
dG9tKCkpOworICAgICAgICAgICAgZGlydHlSZWN0LnNldFkoW3ZpZXcgYm91bmRzXS5zaXplLmhl
aWdodCAtIGRpcnR5UmVjdC5tYXhZKCkpOwogCiAgICAgICAgIEJFR0lOX0JMT0NLX09CSkNfRVhD
RVBUSU9OUzsKICAgICAgICAgewpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGlu
ZUZsb3dCb3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Jbmxp
bmVGbG93Qm94LmNwcAkocmV2aXNpb24gNzcyNzgpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvSW5saW5lRmxvd0JveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcxOCwxNCArNzE4LDE0IEBA
IHZvaWQgSW5saW5lRmxvd0JveDo6YWRkQm94U2hhZG93VmlzdWFsT3YKICAgICByZW5kZXJlcigp
LT5zdHlsZShtX2ZpcnN0TGluZSktPmdldEJveFNoYWRvd0Jsb2NrRGlyZWN0aW9uRXh0ZW50KGJv
eFNoYWRvd0xvZ2ljYWxUb3AsIGJveFNoYWRvd0xvZ2ljYWxCb3R0b20pOwogICAgIAogICAgIGlu
dCBsb2dpY2FsVG9wVmlzdWFsT3ZlcmZsb3cgPSBtaW4obG9naWNhbFRvcCgpICsgYm94U2hhZG93
TG9naWNhbFRvcCwgbG9naWNhbFZpc3VhbE92ZXJmbG93LnkoKSk7Ci0gICAgaW50IGxvZ2ljYWxC
b3R0b21WaXN1YWxPdmVyZmxvdyA9IG1heChsb2dpY2FsQm90dG9tKCkgKyBib3hTaGFkb3dMb2dp
Y2FsQm90dG9tLCBsb2dpY2FsVmlzdWFsT3ZlcmZsb3cuYm90dG9tKCkpOworICAgIGludCBsb2dp
Y2FsQm90dG9tVmlzdWFsT3ZlcmZsb3cgPSBtYXgobG9naWNhbEJvdHRvbSgpICsgYm94U2hhZG93
TG9naWNhbEJvdHRvbSwgbG9naWNhbFZpc3VhbE92ZXJmbG93Lm1heFkoKSk7CiAgICAgCiAgICAg
aW50IGJveFNoYWRvd0xvZ2ljYWxMZWZ0OwogICAgIGludCBib3hTaGFkb3dMb2dpY2FsUmlnaHQ7
CiAgICAgcmVuZGVyZXIoKS0+c3R5bGUobV9maXJzdExpbmUpLT5nZXRCb3hTaGFkb3dJbmxpbmVE
aXJlY3Rpb25FeHRlbnQoYm94U2hhZG93TG9naWNhbExlZnQsIGJveFNoYWRvd0xvZ2ljYWxSaWdo
dCk7CiAKICAgICBpbnQgbG9naWNhbExlZnRWaXN1YWxPdmVyZmxvdyA9IG1pbihsb2dpY2FsTGVm
dCgpICsgYm94U2hhZG93TG9naWNhbExlZnQsIGxvZ2ljYWxWaXN1YWxPdmVyZmxvdy54KCkpOwot
ICAgIGludCBsb2dpY2FsUmlnaHRWaXN1YWxPdmVyZmxvdyA9IG1heChsb2dpY2FsUmlnaHQoKSAr
IGJveFNoYWRvd0xvZ2ljYWxSaWdodCwgbG9naWNhbFZpc3VhbE92ZXJmbG93LnJpZ2h0KCkpOwor
ICAgIGludCBsb2dpY2FsUmlnaHRWaXN1YWxPdmVyZmxvdyA9IG1heChsb2dpY2FsUmlnaHQoKSAr
IGJveFNoYWRvd0xvZ2ljYWxSaWdodCwgbG9naWNhbFZpc3VhbE92ZXJmbG93Lm1heFgoKSk7CiAg
ICAgCiAgICAgbG9naWNhbFZpc3VhbE92ZXJmbG93ID0gSW50UmVjdChsb2dpY2FsTGVmdFZpc3Vh
bE92ZXJmbG93LCBsb2dpY2FsVG9wVmlzdWFsT3ZlcmZsb3csCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBsb2dpY2FsUmlnaHRWaXN1YWxPdmVyZmxvdyAtIGxvZ2ljYWxMZWZ0
VmlzdWFsT3ZlcmZsb3csIGxvZ2ljYWxCb3R0b21WaXN1YWxPdmVyZmxvdyAtIGxvZ2ljYWxUb3BW
aXN1YWxPdmVyZmxvdyk7CkBAIC03ODAsOSArNzgwLDkgQEAgdm9pZCBJbmxpbmVGbG93Qm94Ojph
ZGRUZXh0Qm94VmlzdWFsT3ZlcgogICAgIGludCBjaGlsZE92ZXJmbG93TG9naWNhbFJpZ2h0ID0g
bWF4KHRleHRTaGFkb3dMb2dpY2FsUmlnaHQgKyByaWdodEdseXBoT3ZlcmZsb3csIHJpZ2h0R2x5
cGhPdmVyZmxvdyk7CiAKICAgICBpbnQgbG9naWNhbFRvcFZpc3VhbE92ZXJmbG93ID0gbWluKHRl
eHRCb3gtPmxvZ2ljYWxUb3AoKSArIGNoaWxkT3ZlcmZsb3dMb2dpY2FsVG9wLCBsb2dpY2FsVmlz
dWFsT3ZlcmZsb3cueSgpKTsKLSAgICBpbnQgbG9naWNhbEJvdHRvbVZpc3VhbE92ZXJmbG93ID0g
bWF4KHRleHRCb3gtPmxvZ2ljYWxCb3R0b20oKSArIGNoaWxkT3ZlcmZsb3dMb2dpY2FsQm90dG9t
LCBsb2dpY2FsVmlzdWFsT3ZlcmZsb3cuYm90dG9tKCkpOworICAgIGludCBsb2dpY2FsQm90dG9t
VmlzdWFsT3ZlcmZsb3cgPSBtYXgodGV4dEJveC0+bG9naWNhbEJvdHRvbSgpICsgY2hpbGRPdmVy
Zmxvd0xvZ2ljYWxCb3R0b20sIGxvZ2ljYWxWaXN1YWxPdmVyZmxvdy5tYXhZKCkpOwogICAgIGlu
dCBsb2dpY2FsTGVmdFZpc3VhbE92ZXJmbG93ID0gbWluKHRleHRCb3gtPmxvZ2ljYWxMZWZ0KCkg
KyBjaGlsZE92ZXJmbG93TG9naWNhbExlZnQsIGxvZ2ljYWxWaXN1YWxPdmVyZmxvdy54KCkpOwot
ICAgIGludCBsb2dpY2FsUmlnaHRWaXN1YWxPdmVyZmxvdyA9IG1heCh0ZXh0Qm94LT5sb2dpY2Fs
UmlnaHQoKSArIGNoaWxkT3ZlcmZsb3dMb2dpY2FsUmlnaHQsIGxvZ2ljYWxWaXN1YWxPdmVyZmxv
dy5yaWdodCgpKTsKKyAgICBpbnQgbG9naWNhbFJpZ2h0VmlzdWFsT3ZlcmZsb3cgPSBtYXgodGV4
dEJveC0+bG9naWNhbFJpZ2h0KCkgKyBjaGlsZE92ZXJmbG93TG9naWNhbFJpZ2h0LCBsb2dpY2Fs
VmlzdWFsT3ZlcmZsb3cubWF4WCgpKTsKICAgICAKICAgICBsb2dpY2FsVmlzdWFsT3ZlcmZsb3cg
PSBJbnRSZWN0KGxvZ2ljYWxMZWZ0VmlzdWFsT3ZlcmZsb3csIGxvZ2ljYWxUb3BWaXN1YWxPdmVy
ZmxvdywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2ljYWxSaWdodFZp
c3VhbE92ZXJmbG93IC0gbG9naWNhbExlZnRWaXN1YWxPdmVyZmxvdywgbG9naWNhbEJvdHRvbVZp
c3VhbE92ZXJmbG93IC0gbG9naWNhbFRvcFZpc3VhbE92ZXJmbG93KTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHAJKHJldmlzaW9uIDc3Mjc4KQorKysg
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xNjksNyArMTY5LDcgQEAgSW50UmVjdCBJbmxpbmVUZXh0Qm94OjpzZWxlY3Rpb25SZWN0
KGludAogICAgIGludCBsb2dpY2FsV2lkdGggPSByLndpZHRoKCk7CiAgICAgaWYgKHIueCgpID4g
bV9sb2dpY2FsV2lkdGgpCiAgICAgICAgIGxvZ2ljYWxXaWR0aCAgPSAwOwotICAgIGVsc2UgaWYg
KHIucmlnaHQoKSA+IG1fbG9naWNhbFdpZHRoKQorICAgIGVsc2UgaWYgKHIubWF4WCgpID4gbV9s
b2dpY2FsV2lkdGgpCiAgICAgICAgIGxvZ2ljYWxXaWR0aCA9IG1fbG9naWNhbFdpZHRoIC0gci54
KCk7CiAgICAgCiAgICAgSW50UG9pbnQgdG9wUG9pbnQgPSBpc0hvcml6b250YWwoKSA/IEludFBv
aW50KHR4ICsgbV94ICsgci54KCksIHR5ICsgc2VsVG9wKSA6IEludFBvaW50KHR4ICsgc2VsVG9w
LCB0eSArIG1feSArIHIueCgpKTsKQEAgLTQ0Miw3ICs0NDIsNyBAQCB2b2lkIElubGluZVRleHRC
b3g6OnBhaW50KFBhaW50SW5mbyYgcGFpCiAgICAgaW50IGxvZ2ljYWxTdGFydCA9IGxvZ2ljYWxM
ZWZ0KCkgLSBsb2dpY2FsTGVmdE92ZXJmbG93ICsgKGlzSG9yaXpvbnRhbCgpID8gdHggOiB0eSk7
CiAgICAgaW50IGxvZ2ljYWxFeHRlbnQgPSBsb2dpY2FsV2lkdGgoKSArIGxvZ2ljYWxMZWZ0T3Zl
cmZsb3cgKyBsb2dpY2FsUmlnaHRPdmVyZmxvdzsKICAgICAKLSAgICBpbnQgcGFpbnRFbmQgPSBp
c0hvcml6b250YWwoKSA/IHBhaW50SW5mby5yZWN0LnJpZ2h0KCkgOiBwYWludEluZm8ucmVjdC5i
b3R0b20oKTsKKyAgICBpbnQgcGFpbnRFbmQgPSBpc0hvcml6b250YWwoKSA/IHBhaW50SW5mby5y
ZWN0Lm1heFgoKSA6IHBhaW50SW5mby5yZWN0Lm1heFkoKTsKICAgICBpbnQgcGFpbnRTdGFydCA9
IGlzSG9yaXpvbnRhbCgpID8gcGFpbnRJbmZvLnJlY3QueCgpIDogcGFpbnRJbmZvLnJlY3QueSgp
OwogICAgIAogICAgIGlmIChsb2dpY2FsU3RhcnQgPj0gcGFpbnRFbmQgfHwgbG9naWNhbFN0YXJ0
ICsgbG9naWNhbEV4dGVudCA8PSBwYWludFN0YXJ0KQpAQCAtNDkxLDkgKzQ5MSw5IEBAIHZvaWQg
SW5saW5lVGV4dEJveDo6cGFpbnQoUGFpbnRJbmZvJiBwYWkKICAgICBib29sIHNob3VsZFJvdGF0
ZSA9ICFpc0hvcml6b250YWwoKSAmJiAoIWNvbWJpbmVkVGV4dCB8fCAhY29tYmluZWRUZXh0LT5p
c0NvbWJpbmVkKCkpOwogICAgIGlmIChzaG91bGRSb3RhdGUpIHsKICAgICAgICAgY29udGV4dC0+
c2F2ZSgpOwotICAgICAgICBjb250ZXh0LT50cmFuc2xhdGUoYm94UmVjdC54KCksIGJveFJlY3Qu
Ym90dG9tKCkpOworICAgICAgICBjb250ZXh0LT50cmFuc2xhdGUoYm94UmVjdC54KCksIGJveFJl
Y3QubWF4WSgpKTsKICAgICAgICAgY29udGV4dC0+cm90YXRlKHN0YXRpY19jYXN0PGZsb2F0Pihk
ZWcycmFkKDkwLikpKTsKLSAgICAgICAgY29udGV4dC0+dHJhbnNsYXRlKC1ib3hSZWN0LngoKSwg
LWJveFJlY3QuYm90dG9tKCkpOworICAgICAgICBjb250ZXh0LT50cmFuc2xhdGUoLWJveFJlY3Qu
eCgpLCAtYm94UmVjdC5tYXhZKCkpOwogICAgIH0KICAgICAKICAgICAKQEAgLTEyMTYsNyArMTIx
Niw3IEBAIGludCBJbmxpbmVUZXh0Qm94Ojpwb3NpdGlvbkZvck9mZnNldChpbnQKICAgICBpbnQg
dG8gPSAhaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpID8gbV9sZW4gOiBvZmZzZXQgLSBtX3N0YXJ0
OwogICAgIC8vIEZJWE1FOiBEbyB3ZSBuZWVkIHRvIGFkZCByaWdodEJlYXJpbmcgaGVyZT8KICAg
ICByZXR1cm4gZW5jbG9zaW5nSW50UmVjdChmLnNlbGVjdGlvblJlY3RGb3JUZXh0KFRleHRSdW4o
dGV4dC0+dGV4dCgpLT5jaGFyYWN0ZXJzKCkgKyBtX3N0YXJ0LCBtX2xlbiwgdGV4dFJlbmRlcmVy
KCktPmFsbG93VGFicygpLCB0ZXh0UG9zKCksIG1fZXhwYW5zaW9uLCB0cmFpbGluZ0V4cGFuc2lv
bkJlaGF2aW9yKCksICFpc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCksIG1fZGlyT3ZlcnJpZGUpLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW50UG9p
bnQobG9naWNhbExlZnQoKSwgMCksIDAsIGZyb20sIHRvKSkucmlnaHQoKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEludFBvaW50KGxvZ2ljYWxM
ZWZ0KCksIDApLCAwLCBmcm9tLCB0bykpLm1heFgoKTsKIH0KIAogYm9vbCBJbmxpbmVUZXh0Qm94
Ojpjb250YWluc0NhcmV0T2Zmc2V0KGludCBvZmZzZXQpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAJKHJldmlzaW9uIDc3Mjc4KQorKysgU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTMy
NSwxMyArMTMyNSwxMyBAQCB2b2lkIFJlbmRlckJsb2NrOjphZGRPdmVyZmxvd0Zyb21DaGlsZHJl
CiAgICAgICAgICAgICBJbnRSZWN0IGxhc3RSZWN0ID0gY29sdW1uUmVjdEF0KGNvbEluZm8sIGNv
bHVtbkNvdW50KGNvbEluZm8pIC0gMSk7CiAgICAgICAgICAgICBpZiAoc3R5bGUoKS0+aXNIb3Jp
em9udGFsV3JpdGluZ01vZGUoKSkgewogICAgICAgICAgICAgICAgIGludCBvdmVyZmxvd0xlZnQg
PSAhc3R5bGUoKS0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpID8gbWluKDAsIGxhc3RSZWN0Lngo
KSkgOiAwOwotICAgICAgICAgICAgICAgIGludCBvdmVyZmxvd1JpZ2h0ID0gc3R5bGUoKS0+aXNM
ZWZ0VG9SaWdodERpcmVjdGlvbigpID8gbWF4KHdpZHRoKCksIGxhc3RSZWN0LnJpZ2h0KCkpIDog
MDsKKyAgICAgICAgICAgICAgICBpbnQgb3ZlcmZsb3dSaWdodCA9IHN0eWxlKCktPmlzTGVmdFRv
UmlnaHREaXJlY3Rpb24oKSA/IG1heCh3aWR0aCgpLCBsYXN0UmVjdC5tYXhYKCkpIDogMDsKICAg
ICAgICAgICAgICAgICBpbnQgb3ZlcmZsb3dIZWlnaHQgPSBib3JkZXJCZWZvcmUoKSArIHBhZGRp
bmdCZWZvcmUoKSArIGNvbEluZm8tPmNvbHVtbkhlaWdodCgpOwogICAgICAgICAgICAgICAgIGFk
ZExheW91dE92ZXJmbG93KEludFJlY3Qob3ZlcmZsb3dMZWZ0LCAwLCBvdmVyZmxvd1JpZ2h0IC0g
b3ZlcmZsb3dMZWZ0LCBvdmVyZmxvd0hlaWdodCkpOwogICAgICAgICAgICAgfSBlbHNlIHsKICAg
ICAgICAgICAgICAgICBJbnRSZWN0IGxhc3RSZWN0ID0gY29sdW1uUmVjdEF0KGNvbEluZm8sIGNv
bHVtbkNvdW50KGNvbEluZm8pIC0gMSk7CiAgICAgICAgICAgICAgICAgaW50IG92ZXJmbG93VG9w
ID0gIXN0eWxlKCktPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/IG1pbigwLCBsYXN0UmVjdC55
KCkpIDogMDsKLSAgICAgICAgICAgICAgICBpbnQgb3ZlcmZsb3dCb3R0b20gPSBzdHlsZSgpLT5p
c0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyBtYXgoaGVpZ2h0KCksIGxhc3RSZWN0LmJvdHRvbSgp
KSA6IDA7CisgICAgICAgICAgICAgICAgaW50IG92ZXJmbG93Qm90dG9tID0gc3R5bGUoKS0+aXNM
ZWZ0VG9SaWdodERpcmVjdGlvbigpID8gbWF4KGhlaWdodCgpLCBsYXN0UmVjdC5tYXhZKCkpIDog
MDsKICAgICAgICAgICAgICAgICBpbnQgb3ZlcmZsb3dXaWR0aCA9IGJvcmRlckJlZm9yZSgpICsg
cGFkZGluZ0JlZm9yZSgpICsgY29sSW5mby0+Y29sdW1uSGVpZ2h0KCk7CiAgICAgICAgICAgICAg
ICAgYWRkTGF5b3V0T3ZlcmZsb3coSW50UmVjdCgwLCBvdmVyZmxvd1RvcCwgb3ZlcmZsb3dXaWR0
aCwgb3ZlcmZsb3dCb3R0b20gLSBvdmVyZmxvd1RvcCkpOwogICAgICAgICAgICAgfQpAQCAtMjM0
NywxNCArMjM0NywxNCBAQCB2b2lkIFJlbmRlckJsb2NrOjpwYWludENoaWxkcmVuKFBhaW50SW5m
CiAgICAgICAgIGJvb2wgY2hlY2tCZWZvcmVBbHdheXMgPSAhY2hpbGRyZW5JbmxpbmUoKSAmJiAo
dXNlUHJpbnRSZWN0ICYmIGNoaWxkLT5zdHlsZSgpLT5wYWdlQnJlYWtCZWZvcmUoKSA9PSBQQkFM
V0FZUyk7CiAgICAgICAgIGlmIChjaGVja0JlZm9yZUFsd2F5cwogICAgICAgICAgICAgJiYgKHR5
ICsgY2hpbGQtPnkoKSkgPiBwYWludEluZm8ucmVjdC55KCkKLSAgICAgICAgICAgICYmICh0eSAr
IGNoaWxkLT55KCkpIDwgcGFpbnRJbmZvLnJlY3QuYm90dG9tKCkpIHsKKyAgICAgICAgICAgICYm
ICh0eSArIGNoaWxkLT55KCkpIDwgcGFpbnRJbmZvLnJlY3QubWF4WSgpKSB7CiAgICAgICAgICAg
ICB2aWV3KCktPnNldEJlc3RUcnVuY2F0ZWRBdCh0eSArIGNoaWxkLT55KCksIHRoaXMsIHRydWUp
OwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKCFjaGlsZC0+
aXNGbG9hdGluZygpICYmIGNoaWxkLT5pc1JlcGxhY2VkKCkgJiYgdXNlUHJpbnRSZWN0ICYmIGNo
aWxkLT5oZWlnaHQoKSA8PSByZW5kZXJWaWV3LT5wcmludFJlY3QoKS5oZWlnaHQoKSkgewogICAg
ICAgICAgICAgLy8gUGFnaW5hdGUgYmxvY2stbGV2ZWwgcmVwbGFjZWQgZWxlbWVudHMuCi0gICAg
ICAgICAgICBpZiAodHkgKyBjaGlsZC0+eSgpICsgY2hpbGQtPmhlaWdodCgpID4gcmVuZGVyVmll
dy0+cHJpbnRSZWN0KCkuYm90dG9tKCkpIHsKKyAgICAgICAgICAgIGlmICh0eSArIGNoaWxkLT55
KCkgKyBjaGlsZC0+aGVpZ2h0KCkgPiByZW5kZXJWaWV3LT5wcmludFJlY3QoKS5tYXhZKCkpIHsK
ICAgICAgICAgICAgICAgICBpZiAodHkgKyBjaGlsZC0+eSgpIDwgcmVuZGVyVmlldy0+dHJ1bmNh
dGVkQXQoKSkKICAgICAgICAgICAgICAgICAgICAgcmVuZGVyVmlldy0+c2V0QmVzdFRydW5jYXRl
ZEF0KHR5ICsgY2hpbGQtPnkoKSwgY2hpbGQpOwogICAgICAgICAgICAgICAgIC8vIElmIHdlIHdl
cmUgYWJsZSB0byB0cnVuY2F0ZSwgZG9uJ3QgcGFpbnQuCkBAIC0yMzcxLDcgKzIzNzEsNyBAQCB2
b2lkIFJlbmRlckJsb2NrOjpwYWludENoaWxkcmVuKFBhaW50SW5mCiAgICAgICAgIGJvb2wgY2hl
Y2tBZnRlckFsd2F5cyA9ICFjaGlsZHJlbklubGluZSgpICYmICh1c2VQcmludFJlY3QgJiYgY2hp
bGQtPnN0eWxlKCktPnBhZ2VCcmVha0FmdGVyKCkgPT0gUEJBTFdBWVMpOwogICAgICAgICBpZiAo
Y2hlY2tBZnRlckFsd2F5cwogICAgICAgICAgICAgJiYgKHR5ICsgY2hpbGQtPnkoKSArIGNoaWxk
LT5oZWlnaHQoKSkgPiBwYWludEluZm8ucmVjdC55KCkKLSAgICAgICAgICAgICYmICh0eSArIGNo
aWxkLT55KCkgKyBjaGlsZC0+aGVpZ2h0KCkpIDwgcGFpbnRJbmZvLnJlY3QuYm90dG9tKCkpIHsK
KyAgICAgICAgICAgICYmICh0eSArIGNoaWxkLT55KCkgKyBjaGlsZC0+aGVpZ2h0KCkpIDwgcGFp
bnRJbmZvLnJlY3QubWF4WSgpKSB7CiAgICAgICAgICAgICB2aWV3KCktPnNldEJlc3RUcnVuY2F0
ZWRBdCh0eSArIGNoaWxkLT55KCkgKyBjaGlsZC0+aGVpZ2h0KCkgKyBtYXgoMCwgY2hpbGQtPmNv
bGxhcHNlZE1hcmdpbkFmdGVyKCkpLCB0aGlzLCB0cnVlKTsKICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgfQpAQCAtMjUzNyw3ICsyNTM3LDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6cGFpbnRF
bGxpcHNpc0JveGVzKFBhaQogICAgICAgICAvLyBpbnRlcnNlY3QuCiAgICAgICAgIGludCB5UG9z
ID0gdHkgKyBmaXJzdExpbmVCb3goKS0+eSgpOwogICAgICAgICBpbnQgaCA9IGxhc3RMaW5lQm94
KCktPnkoKSArIGxhc3RMaW5lQm94KCktPmxvZ2ljYWxIZWlnaHQoKSAtIGZpcnN0TGluZUJveCgp
LT55KCk7Ci0gICAgICAgIGlmICh5UG9zID49IHBhaW50SW5mby5yZWN0LmJvdHRvbSgpIHx8IHlQ
b3MgKyBoIDw9IHBhaW50SW5mby5yZWN0LnkoKSkKKyAgICAgICAgaWYgKHlQb3MgPj0gcGFpbnRJ
bmZvLnJlY3QubWF4WSgpIHx8IHlQb3MgKyBoIDw9IHBhaW50SW5mby5yZWN0LnkoKSkKICAgICAg
ICAgICAgIHJldHVybjsKIAogICAgICAgICAvLyBTZWUgaWYgb3VyIGJveGVzIGludGVyc2VjdCB3
aXRoIHRoZSBkaXJ0eSByZWN0LiAgSWYgc28sIHRoZW4gd2UgcGFpbnQKQEAgLTI1NDYsNyArMjU0
Niw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OnBhaW50RWxsaXBzaXNCb3hlcyhQYWkKICAgICAgICAg
Zm9yIChSb290SW5saW5lQm94KiBjdXJyID0gZmlyc3RSb290Qm94KCk7IGN1cnI7IGN1cnIgPSBj
dXJyLT5uZXh0Um9vdEJveCgpKSB7CiAgICAgICAgICAgICB5UG9zID0gdHkgKyBjdXJyLT55KCk7
CiAgICAgICAgICAgICBoID0gY3Vyci0+bG9naWNhbEhlaWdodCgpOwotICAgICAgICAgICAgaWYg
KGN1cnItPmVsbGlwc2lzQm94KCkgJiYgeVBvcyA8IHBhaW50SW5mby5yZWN0LmJvdHRvbSgpICYm
IHlQb3MgKyBoID4gcGFpbnRJbmZvLnJlY3QueSgpKQorICAgICAgICAgICAgaWYgKGN1cnItPmVs
bGlwc2lzQm94KCkgJiYgeVBvcyA8IHBhaW50SW5mby5yZWN0Lm1heFkoKSAmJiB5UG9zICsgaCA+
IHBhaW50SW5mby5yZWN0LnkoKSkKICAgICAgICAgICAgICAgICBjdXJyLT5wYWludEVsbGlwc2lz
Qm94KHBhaW50SW5mbywgdHgsIHR5KTsKICAgICAgICAgfQogICAgIH0KQEAgLTI4MTYsOCArMjgx
Niw4IEBAIEdhcFJlY3RzIFJlbmRlckJsb2NrOjppbmxpbmVTZWxlY3Rpb25HYXAKICAgICAgICAg
SW50UmVjdCBsb2dpY2FsUmVjdChjdXJyLT5sb2dpY2FsTGVmdCgpLCBzZWxUb3AsIGN1cnItPmxv
Z2ljYWxXaWR0aCgpLCBzZWxUb3AgKyBzZWxIZWlnaHQpOwogICAgICAgICBsb2dpY2FsUmVjdC5t
b3ZlKHN0eWxlKCktPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBvZmZzZXRGcm9tUm9vdEJs
b2NrIDogSW50U2l6ZShvZmZzZXRGcm9tUm9vdEJsb2NrLmhlaWdodCgpLCBvZmZzZXRGcm9tUm9v
dEJsb2NrLndpZHRoKCkpKTsKICAgICAgICAgSW50UmVjdCBwaHlzaWNhbFJlY3QgPSByb290Qmxv
Y2stPmxvZ2ljYWxSZWN0VG9QaHlzaWNhbFJlY3Qocm9vdEJsb2NrUGh5c2ljYWxQb3NpdGlvbiwg
bG9naWNhbFJlY3QpOwotICAgICAgICBpZiAoIXBhaW50SW5mbyB8fCAoc3R5bGUoKS0+aXNIb3Jp
em9udGFsV3JpdGluZ01vZGUoKSAmJiBwaHlzaWNhbFJlY3QueSgpIDwgcGFpbnRJbmZvLT5yZWN0
LmJvdHRvbSgpICYmIHBoeXNpY2FsUmVjdC5ib3R0b20oKSA+IHBhaW50SW5mby0+cmVjdC55KCkp
Ci0gICAgICAgICAgICB8fCAoIXN0eWxlKCktPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgJiYg
cGh5c2ljYWxSZWN0LngoKSA8IHBhaW50SW5mby0+cmVjdC5yaWdodCgpICYmIHBoeXNpY2FsUmVj
dC5yaWdodCgpID4gcGFpbnRJbmZvLT5yZWN0LngoKSkpCisgICAgICAgIGlmICghcGFpbnRJbmZv
IHx8IChzdHlsZSgpLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpICYmIHBoeXNpY2FsUmVjdC55
KCkgPCBwYWludEluZm8tPnJlY3QubWF4WSgpICYmIHBoeXNpY2FsUmVjdC5tYXhZKCkgPiBwYWlu
dEluZm8tPnJlY3QueSgpKQorICAgICAgICAgICAgfHwgKCFzdHlsZSgpLT5pc0hvcml6b250YWxX
cml0aW5nTW9kZSgpICYmIHBoeXNpY2FsUmVjdC54KCkgPCBwYWludEluZm8tPnJlY3QubWF4WCgp
ICYmIHBoeXNpY2FsUmVjdC5tYXhYKCkgPiBwYWludEluZm8tPnJlY3QueCgpKSkKICAgICAgICAg
ICAgIHJlc3VsdC51bml0ZShjdXJyLT5saW5lU2VsZWN0aW9uR2FwKHJvb3RCbG9jaywgcm9vdEJs
b2NrUGh5c2ljYWxQb3NpdGlvbiwgb2Zmc2V0RnJvbVJvb3RCbG9jaywgc2VsVG9wLCBzZWxIZWln
aHQsIHBhaW50SW5mbykpOwogCiAgICAgICAgIGxhc3RTZWxlY3RlZExpbmUgPSBjdXJyOwpAQCAt
NDMyMiw3ICs0MzIyLDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6YWRqdXN0UG9pbnRUb0NvbHVtbkNv
bgogICAgICAgICBJbnRSZWN0IGNvbFJlY3QgPSBjb2x1bW5SZWN0QXQoY29sSW5mbywgaSk7CiAg
ICAgICAgIGlmIChzdHlsZSgpLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpKSB7CiAgICAgICAg
ICAgICBJbnRSZWN0IGdhcEFuZENvbHVtblJlY3QoY29sUmVjdC54KCkgLSBoYWxmQ29sR2FwLCBj
b2xSZWN0LnkoKSwgY29sUmVjdC53aWR0aCgpICsgY29sR2FwLCBjb2xSZWN0LmhlaWdodCgpKTsK
LSAgICAgICAgICAgIGlmIChwb2ludC54KCkgPj0gZ2FwQW5kQ29sdW1uUmVjdC54KCkgJiYgcG9p
bnQueCgpIDwgZ2FwQW5kQ29sdW1uUmVjdC5yaWdodCgpKSB7CisgICAgICAgICAgICBpZiAocG9p
bnQueCgpID49IGdhcEFuZENvbHVtblJlY3QueCgpICYmIHBvaW50LngoKSA8IGdhcEFuZENvbHVt
blJlY3QubWF4WCgpKSB7CiAgICAgICAgICAgICAgICAgLy8gRklYTUU6IFRoZSBjbGFtcGluZyB0
aGF0IGZvbGxvd3MgaXMgbm90IGNvbXBsZXRlbHkgcmlnaHQgZm9yIHJpZ2h0LXRvLWxlZnQKICAg
ICAgICAgICAgICAgICAvLyBjb250ZW50LgogICAgICAgICAgICAgICAgIC8vIENsYW1wIGV2ZXJ5
dGhpbmcgYWJvdmUgdGhlIGNvbHVtbiB0byBpdHMgdG9wIGxlZnQuCkBAIC00MzMwLDcgKzQzMzAs
NyBAQCB2b2lkIFJlbmRlckJsb2NrOjphZGp1c3RQb2ludFRvQ29sdW1uQ29uCiAgICAgICAgICAg
ICAgICAgICAgIHBvaW50ID0gZ2FwQW5kQ29sdW1uUmVjdC5sb2NhdGlvbigpOwogICAgICAgICAg
ICAgICAgIC8vIENsYW1wIGV2ZXJ5dGhpbmcgYmVsb3cgdGhlIGNvbHVtbiB0byB0aGUgbmV4dCBj
b2x1bW4ncyB0b3AgbGVmdC4gSWYgdGhlcmUgaXMKICAgICAgICAgICAgICAgICAvLyBubyBuZXh0
IGNvbHVtbiwgdGhpcyBzdGlsbCBtYXBzIHRvIGp1c3QgYWZ0ZXIgdGhpcyBjb2x1bW4uCi0gICAg
ICAgICAgICAgICAgZWxzZSBpZiAocG9pbnQueSgpID49IGdhcEFuZENvbHVtblJlY3QuYm90dG9t
KCkpIHsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChwb2ludC55KCkgPj0gZ2FwQW5kQ29sdW1u
UmVjdC5tYXhZKCkpIHsKICAgICAgICAgICAgICAgICAgICAgcG9pbnQgPSBnYXBBbmRDb2x1bW5S
ZWN0LmxvY2F0aW9uKCk7CiAgICAgICAgICAgICAgICAgICAgIHBvaW50Lm1vdmUoMCwgZ2FwQW5k
Q29sdW1uUmVjdC5oZWlnaHQoKSk7CiAgICAgICAgICAgICAgICAgfQpAQCAtNDM0NCw3ICs0MzQ0
LDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6YWRqdXN0UG9pbnRUb0NvbHVtbkNvbgogICAgICAgICAg
ICAgbG9naWNhbE9mZnNldCArPSBjb2xSZWN0LmhlaWdodCgpOwogICAgICAgICB9IGVsc2Ugewog
ICAgICAgICAgICAgSW50UmVjdCBnYXBBbmRDb2x1bW5SZWN0KGNvbFJlY3QueCgpLCBjb2xSZWN0
LnkoKSAtIGhhbGZDb2xHYXAsIGNvbFJlY3Qud2lkdGgoKSwgY29sUmVjdC5oZWlnaHQoKSArIGNv
bEdhcCk7Ci0gICAgICAgICAgICBpZiAocG9pbnQueSgpID49IGdhcEFuZENvbHVtblJlY3QueSgp
ICYmIHBvaW50LnkoKSA8IGdhcEFuZENvbHVtblJlY3QuYm90dG9tKCkpIHsKKyAgICAgICAgICAg
IGlmIChwb2ludC55KCkgPj0gZ2FwQW5kQ29sdW1uUmVjdC55KCkgJiYgcG9pbnQueSgpIDwgZ2Fw
QW5kQ29sdW1uUmVjdC5tYXhZKCkpIHsKICAgICAgICAgICAgICAgICAvLyBGSVhNRTogVGhlIGNs
YW1waW5nIHRoYXQgZm9sbG93cyBpcyBub3QgY29tcGxldGVseSByaWdodCBmb3IgcmlnaHQtdG8t
bGVmdAogICAgICAgICAgICAgICAgIC8vIGNvbnRlbnQuCiAgICAgICAgICAgICAgICAgLy8gQ2xh
bXAgZXZlcnl0aGluZyBhYm92ZSB0aGUgY29sdW1uIHRvIGl0cyB0b3AgbGVmdC4KQEAgLTQzNTIs
NyArNDM1Miw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmFkanVzdFBvaW50VG9Db2x1bW5Db24KICAg
ICAgICAgICAgICAgICAgICAgcG9pbnQgPSBnYXBBbmRDb2x1bW5SZWN0LmxvY2F0aW9uKCk7CiAg
ICAgICAgICAgICAgICAgLy8gQ2xhbXAgZXZlcnl0aGluZyBiZWxvdyB0aGUgY29sdW1uIHRvIHRo
ZSBuZXh0IGNvbHVtbidzIHRvcCBsZWZ0LiBJZiB0aGVyZSBpcwogICAgICAgICAgICAgICAgIC8v
IG5vIG5leHQgY29sdW1uLCB0aGlzIHN0aWxsIG1hcHMgdG8ganVzdCBhZnRlciB0aGlzIGNvbHVt
bi4KLSAgICAgICAgICAgICAgICBlbHNlIGlmIChwb2ludC54KCkgPj0gZ2FwQW5kQ29sdW1uUmVj
dC5yaWdodCgpKSB7CisgICAgICAgICAgICAgICAgZWxzZSBpZiAocG9pbnQueCgpID49IGdhcEFu
ZENvbHVtblJlY3QubWF4WCgpKSB7CiAgICAgICAgICAgICAgICAgICAgIHBvaW50ID0gZ2FwQW5k
Q29sdW1uUmVjdC5sb2NhdGlvbigpOwogICAgICAgICAgICAgICAgICAgICBwb2ludC5tb3ZlKGdh
cEFuZENvbHVtblJlY3Qud2lkdGgoKSwgMCk7CiAgICAgICAgICAgICAgICAgfQpAQCAtNDQyOSw5
ICs0NDI5LDkgQEAgdm9pZCBSZW5kZXJCbG9jazo6ZmxpcEZvcldyaXRpbmdNb2RlSW5jbAogICAg
IGludCBjb2x1bW5Mb2dpY2FsSGVpZ2h0ID0gY29sSW5mby0+Y29sdW1uSGVpZ2h0KCk7CiAgICAg
aW50IGV4cGFuZGVkTG9naWNhbEhlaWdodCA9IGJvcmRlckJlZm9yZSgpICsgcGFkZGluZ0JlZm9y
ZSgpICsgY29sdW1uQ291bnQoY29sSW5mbykgKiBjb2x1bW5Mb2dpY2FsSGVpZ2h0ICsgYm9yZGVy
QWZ0ZXIoKSArIHBhZGRpbmdBZnRlcigpICsgc2Nyb2xsYmFyTG9naWNhbEhlaWdodCgpOwogICAg
IGlmIChzdHlsZSgpLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpKQotICAgICAgICByZWN0LnNl
dFkoZXhwYW5kZWRMb2dpY2FsSGVpZ2h0IC0gcmVjdC5ib3R0b20oKSk7CisgICAgICAgIHJlY3Qu
c2V0WShleHBhbmRlZExvZ2ljYWxIZWlnaHQgLSByZWN0Lm1heFkoKSk7CiAgICAgZWxzZQotICAg
ICAgICByZWN0LnNldFgoZXhwYW5kZWRMb2dpY2FsSGVpZ2h0IC0gcmVjdC5yaWdodCgpKTsKKyAg
ICAgICAgcmVjdC5zZXRYKGV4cGFuZGVkTG9naWNhbEhlaWdodCAtIHJlY3QubWF4WCgpKTsKIH0K
IAogdm9pZCBSZW5kZXJCbG9jazo6YWRqdXN0Rm9yQ29sdW1ucyhJbnRTaXplJiBvZmZzZXQsIGNv
bnN0IEludFBvaW50JiBwb2ludCkgY29uc3QKQEAgLTQ0NTksMTIgKzQ0NTksMTIgQEAgdm9pZCBS
ZW5kZXJCbG9jazo6YWRqdXN0Rm9yQ29sdW1ucyhJbnRTaQogCiAgICAgICAgIC8vIE5vdyB3ZSdy
ZSBpbiB0aGUgc2FtZSBjb29yZGluYXRlIHNwYWNlIGFzIHRoZSBwb2ludC4gIFNlZSBpZiBpdCBp
cyBpbnNpZGUgdGhlIHJlY3RhbmdsZS4KICAgICAgICAgaWYgKHN0eWxlKCktPmlzSG9yaXpvbnRh
bFdyaXRpbmdNb2RlKCkpIHsKLSAgICAgICAgICAgIGlmIChwb2ludC55KCkgPj0gc2xpY2VSZWN0
LnkoKSAmJiBwb2ludC55KCkgPCBzbGljZVJlY3QuYm90dG9tKCkpIHsKKyAgICAgICAgICAgIGlm
IChwb2ludC55KCkgPj0gc2xpY2VSZWN0LnkoKSAmJiBwb2ludC55KCkgPCBzbGljZVJlY3QubWF4
WSgpKSB7CiAgICAgICAgICAgICAgICAgb2Zmc2V0LmV4cGFuZChjb2x1bW5SZWN0QXQoY29sSW5m
bywgaSkueCgpIC0gbG9naWNhbExlZnQsIC1sb2dpY2FsT2Zmc2V0KTsKICAgICAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBp
ZiAocG9pbnQueCgpID49IHNsaWNlUmVjdC54KCkgJiYgcG9pbnQueCgpIDwgc2xpY2VSZWN0LnJp
Z2h0KCkpIHsKKyAgICAgICAgICAgIGlmIChwb2ludC54KCkgPj0gc2xpY2VSZWN0LngoKSAmJiBw
b2ludC54KCkgPCBzbGljZVJlY3QubWF4WCgpKSB7CiAgICAgICAgICAgICAgICAgb2Zmc2V0LmV4
cGFuZCgtbG9naWNhbE9mZnNldCwgY29sdW1uUmVjdEF0KGNvbEluZm8sIGkpLnkoKSAtIGxvZ2lj
YWxMZWZ0KTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suaAkocmV2aXNpb24gNzcyNzgpCisrKyBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAt
Mzk4LDkgKzM5OCw5IEBAIHByaXZhdGU6CiAgICAgICAgIHZvaWQgc2V0SXNQbGFjZWQoYm9vbCBw
bGFjZWQgPSB0cnVlKSB7IG1faXNQbGFjZWQgPSBwbGFjZWQ7IH0KIAogICAgICAgICBpbnQgbGVm
dCgpIGNvbnN0IHsgQVNTRVJUKGlzUGxhY2VkKCkpOyByZXR1cm4gbV9mcmFtZVJlY3QueCgpOyB9
Ci0gICAgICAgIGludCByaWdodCgpIGNvbnN0IHsgQVNTRVJUKGlzUGxhY2VkKCkpOyByZXR1cm4g
bV9mcmFtZVJlY3QucmlnaHQoKTsgfQorICAgICAgICBpbnQgcmlnaHQoKSBjb25zdCB7IEFTU0VS
VChpc1BsYWNlZCgpKTsgcmV0dXJuIG1fZnJhbWVSZWN0Lm1heFgoKTsgfQogICAgICAgICBpbnQg
dG9wKCkgY29uc3QgeyBBU1NFUlQoaXNQbGFjZWQoKSk7IHJldHVybiBtX2ZyYW1lUmVjdC55KCk7
IH0KLSAgICAgICAgaW50IGJvdHRvbSgpIGNvbnN0IHsgQVNTRVJUKGlzUGxhY2VkKCkpOyByZXR1
cm4gbV9mcmFtZVJlY3QuYm90dG9tKCk7IH0KKyAgICAgICAgaW50IGJvdHRvbSgpIGNvbnN0IHsg
QVNTRVJUKGlzUGxhY2VkKCkpOyByZXR1cm4gbV9mcmFtZVJlY3QubWF4WSgpOyB9CiAgICAgICAg
IGludCB3aWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fZnJhbWVSZWN0LndpZHRoKCk7IH0KICAgICAg
ICAgaW50IGhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIG1fZnJhbWVSZWN0LmhlaWdodCgpOyB9CiAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCShyZXZpc2lvbiA3NzI3
OCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC01NDgsMTYgKzU0OCwxNiBAQCBJbnRSZWN0IFJlbmRlckJveDo6cmVmbGVjdGVkUmVj
dChjb25zdCBJCiAgICAgSW50UmVjdCByZXN1bHQgPSByOwogICAgIHN3aXRjaCAoc3R5bGUoKS0+
Ym94UmVmbGVjdCgpLT5kaXJlY3Rpb24oKSkgewogICAgICAgICBjYXNlIFJlZmxlY3Rpb25CZWxv
dzoKLSAgICAgICAgICAgIHJlc3VsdC5zZXRZKGJveC5ib3R0b20oKSArIHJlZmxlY3Rpb25PZmZz
ZXQoKSArIChib3guYm90dG9tKCkgLSByLmJvdHRvbSgpKSk7CisgICAgICAgICAgICByZXN1bHQu
c2V0WShib3gubWF4WSgpICsgcmVmbGVjdGlvbk9mZnNldCgpICsgKGJveC5tYXhZKCkgLSByLm1h
eFkoKSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgUmVmbGVjdGlvbkFib3Zl
OgotICAgICAgICAgICAgcmVzdWx0LnNldFkoYm94LnkoKSAtIHJlZmxlY3Rpb25PZmZzZXQoKSAt
IGJveC5oZWlnaHQoKSArIChib3guYm90dG9tKCkgLSByLmJvdHRvbSgpKSk7CisgICAgICAgICAg
ICByZXN1bHQuc2V0WShib3gueSgpIC0gcmVmbGVjdGlvbk9mZnNldCgpIC0gYm94LmhlaWdodCgp
ICsgKGJveC5tYXhZKCkgLSByLm1heFkoKSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IGNhc2UgUmVmbGVjdGlvbkxlZnQ6Ci0gICAgICAgICAgICByZXN1bHQuc2V0WChib3gueCgpIC0g
cmVmbGVjdGlvbk9mZnNldCgpIC0gYm94LndpZHRoKCkgKyAoYm94LnJpZ2h0KCkgLSByLnJpZ2h0
KCkpKTsKKyAgICAgICAgICAgIHJlc3VsdC5zZXRYKGJveC54KCkgLSByZWZsZWN0aW9uT2Zmc2V0
KCkgLSBib3gud2lkdGgoKSArIChib3gubWF4WCgpIC0gci5tYXhYKCkpKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICBjYXNlIFJlZmxlY3Rpb25SaWdodDoKLSAgICAgICAgICAgIHJlc3Vs
dC5zZXRYKGJveC5yaWdodCgpICsgcmVmbGVjdGlvbk9mZnNldCgpICsgKGJveC5yaWdodCgpIC0g
ci5yaWdodCgpKSk7CisgICAgICAgICAgICByZXN1bHQuc2V0WChib3gubWF4WCgpICsgcmVmbGVj
dGlvbk9mZnNldCgpICsgKGJveC5tYXhYKCkgLSByLm1heFgoKSkpOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgfQogICAgIHJldHVybiByZXN1bHQ7CkBAIC0yOTg3LDcgKzI5ODcsNyBAQCBJbnRS
ZWN0IFJlbmRlckJveDo6bG9jYWxDYXJldFJlY3QoSW5saW5lCiAgICAgICAgIHJlY3Quc2V0SGVp
Z2h0KGZvbnRIZWlnaHQpOwogCiAgICAgaWYgKGV4dHJhV2lkdGhUb0VuZE9mTGluZSkKLSAgICAg
ICAgKmV4dHJhV2lkdGhUb0VuZE9mTGluZSA9IHgoKSArIHdpZHRoKCkgLSByZWN0LnJpZ2h0KCk7
CisgICAgICAgICpleHRyYVdpZHRoVG9FbmRPZkxpbmUgPSB4KCkgKyB3aWR0aCgpIC0gcmVjdC5t
YXhYKCk7CiAKICAgICAvLyBNb3ZlIHRvIGxvY2FsIGNvb3JkcwogICAgIHJlY3QubW92ZSgteCgp
LCAteSgpKTsKQEAgLTMxMDgsOSArMzEwOCw5IEBAIHZvaWQgUmVuZGVyQm94OjphZGRTaGFkb3dP
dmVyZmxvdygpCiAgICAgc3R5bGUoKS0+Z2V0Qm94U2hhZG93RXh0ZW50KHNoYWRvd1RvcCwgc2hh
ZG93UmlnaHQsIHNoYWRvd0JvdHRvbSwgc2hhZG93TGVmdCk7CiAgICAgSW50UmVjdCBib3JkZXJC
b3ggPSBib3JkZXJCb3hSZWN0KCk7CiAgICAgaW50IG92ZXJmbG93TGVmdCA9IGJvcmRlckJveC54
KCkgKyBzaGFkb3dMZWZ0OwotICAgIGludCBvdmVyZmxvd1JpZ2h0ID0gYm9yZGVyQm94LnJpZ2h0
KCkgKyBzaGFkb3dSaWdodDsKKyAgICBpbnQgb3ZlcmZsb3dSaWdodCA9IGJvcmRlckJveC5tYXhY
KCkgKyBzaGFkb3dSaWdodDsKICAgICBpbnQgb3ZlcmZsb3dUb3AgPSBib3JkZXJCb3gueSgpICsg
c2hhZG93VG9wOwotICAgIGludCBvdmVyZmxvd0JvdHRvbSA9IGJvcmRlckJveC5ib3R0b20oKSAr
IHNoYWRvd0JvdHRvbTsKKyAgICBpbnQgb3ZlcmZsb3dCb3R0b20gPSBib3JkZXJCb3gubWF4WSgp
ICsgc2hhZG93Qm90dG9tOwogICAgIGFkZFZpc3VhbE92ZXJmbG93KEludFJlY3Qob3ZlcmZsb3dM
ZWZ0LCBvdmVyZmxvd1RvcCwgb3ZlcmZsb3dSaWdodCAtIG92ZXJmbG93TGVmdCwgb3ZlcmZsb3dC
b3R0b20gLSBvdmVyZmxvd1RvcCkpOwogfQogCkBAIC0zMTQ5LDEzICszMTQ5LDEzIEBAIHZvaWQg
UmVuZGVyQm94OjphZGRMYXlvdXRPdmVyZmxvdyhjb25zdCAKICAgICAgICAgYm9vbCBoYXNMZWZ0
T3ZlcmZsb3cgPSAhc3R5bGUoKS0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpICYmIHN0eWxlKCkt
PmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCk7CiAgICAgICAgIAogICAgICAgICBpZiAoIWhhc1Rv
cE92ZXJmbG93KQotICAgICAgICAgICAgb3ZlcmZsb3dSZWN0LnNoaWZ0VG9wRWRnZVRvKG1heChv
dmVyZmxvd1JlY3QueSgpLCBjbGllbnRCb3gueSgpKSk7CisgICAgICAgICAgICBvdmVyZmxvd1Jl
Y3Quc2hpZnRZRWRnZVRvKG1heChvdmVyZmxvd1JlY3QueSgpLCBjbGllbnRCb3gueSgpKSk7CiAg
ICAgICAgIGVsc2UKLSAgICAgICAgICAgIG92ZXJmbG93UmVjdC5zaGlmdEJvdHRvbUVkZ2VUbyht
aW4ob3ZlcmZsb3dSZWN0LmJvdHRvbSgpLCBjbGllbnRCb3guYm90dG9tKCkpKTsKKyAgICAgICAg
ICAgIG92ZXJmbG93UmVjdC5zaGlmdE1heFlFZGdlVG8obWluKG92ZXJmbG93UmVjdC5tYXhZKCks
IGNsaWVudEJveC5tYXhZKCkpKTsKICAgICAgICAgaWYgKCFoYXNMZWZ0T3ZlcmZsb3cpCi0gICAg
ICAgICAgICBvdmVyZmxvd1JlY3Quc2hpZnRMZWZ0RWRnZVRvKG1heChvdmVyZmxvd1JlY3QueCgp
LCBjbGllbnRCb3gueCgpKSk7CisgICAgICAgICAgICBvdmVyZmxvd1JlY3Quc2hpZnRYRWRnZVRv
KG1heChvdmVyZmxvd1JlY3QueCgpLCBjbGllbnRCb3gueCgpKSk7CiAgICAgICAgIGVsc2UKLSAg
ICAgICAgICAgIG92ZXJmbG93UmVjdC5zaGlmdFJpZ2h0RWRnZVRvKG1pbihvdmVyZmxvd1JlY3Qu
cmlnaHQoKSwgY2xpZW50Qm94LnJpZ2h0KCkpKTsKKyAgICAgICAgICAgIG92ZXJmbG93UmVjdC5z
aGlmdE1heFhFZGdlVG8obWluKG92ZXJmbG93UmVjdC5tYXhYKCksIGNsaWVudEJveC5tYXhYKCkp
KTsKICAgICAgICAgCiAgICAgICAgIC8vIE5vdyByZS10ZXN0IHdpdGggdGhlIGFkanVzdGVkIHJl
Y3RhbmdsZSBhbmQgc2VlIGlmIGl0IGhhcyBiZWNvbWUgdW5yZWFjaGFibGUgb3IgZnVsbHkKICAg
ICAgICAgLy8gY29udGFpbmVkLgpAQCAtMzI0NCw5ICszMjQ0LDkgQEAgSW50UmVjdCBSZW5kZXJC
b3g6OnZpc3VhbE92ZXJmbG93UmVjdEZvcgogICAgIC8vIFdlIGFyZSBwdXR0aW5nIG91cnNlbHZl
cyBpbnRvIG91ciBwYXJlbnQncyBjb29yZGluYXRlIHNwYWNlLiAgSWYgdGhlcmUgaXMgYSBmbGlw
cGVkIGJsb2NrIG1pc21hdGNoCiAgICAgLy8gaW4gYSBwYXJ0aWN1bGFyIGF4aXMsIHRoZW4gd2Ug
aGF2ZSB0byBmbGlwIHRoZSByZWN0IGFsb25nIHRoYXQgYXhpcy4KICAgICBpZiAoc3R5bGUoKS0+
d3JpdGluZ01vZGUoKSA9PSBSaWdodFRvTGVmdFdyaXRpbmdNb2RlIHx8IHBhcmVudFN0eWxlLT53
cml0aW5nTW9kZSgpID09IFJpZ2h0VG9MZWZ0V3JpdGluZ01vZGUpCi0gICAgICAgIHJlY3Quc2V0
WCh3aWR0aCgpIC0gcmVjdC5yaWdodCgpKTsKKyAgICAgICAgcmVjdC5zZXRYKHdpZHRoKCkgLSBy
ZWN0Lm1heFgoKSk7CiAgICAgZWxzZSBpZiAoc3R5bGUoKS0+d3JpdGluZ01vZGUoKSA9PSBCb3R0
b21Ub1RvcFdyaXRpbmdNb2RlIHx8IHBhcmVudFN0eWxlLT53cml0aW5nTW9kZSgpID09IEJvdHRv
bVRvVG9wV3JpdGluZ01vZGUpCi0gICAgICAgIHJlY3Quc2V0WShoZWlnaHQoKSAtIHJlY3QuYm90
dG9tKCkpOworICAgICAgICByZWN0LnNldFkoaGVpZ2h0KCkgLSByZWN0Lm1heFkoKSk7CiAKICAg
ICByZXR1cm4gcmVjdDsKIH0KQEAgLTMyOTAsOSArMzI5MCw5IEBAIEludFJlY3QgUmVuZGVyQm94
OjpsYXlvdXRPdmVyZmxvd1JlY3RGb3IKICAgICAvLyBXZSBhcmUgcHV0dGluZyBvdXJzZWx2ZXMg
aW50byBvdXIgcGFyZW50J3MgY29vcmRpbmF0ZSBzcGFjZS4gIElmIHRoZXJlIGlzIGEgZmxpcHBl
ZCBibG9jayBtaXNtYXRjaAogICAgIC8vIGluIGEgcGFydGljdWxhciBheGlzLCB0aGVuIHdlIGhh
dmUgdG8gZmxpcCB0aGUgcmVjdCBhbG9uZyB0aGF0IGF4aXMuCiAgICAgaWYgKHN0eWxlKCktPndy
aXRpbmdNb2RlKCkgPT0gUmlnaHRUb0xlZnRXcml0aW5nTW9kZSB8fCBwYXJlbnRTdHlsZS0+d3Jp
dGluZ01vZGUoKSA9PSBSaWdodFRvTGVmdFdyaXRpbmdNb2RlKQotICAgICAgICByZWN0LnNldFgo
d2lkdGgoKSAtIHJlY3QucmlnaHQoKSk7CisgICAgICAgIHJlY3Quc2V0WCh3aWR0aCgpIC0gcmVj
dC5tYXhYKCkpOwogICAgIGVsc2UgaWYgKHN0eWxlKCktPndyaXRpbmdNb2RlKCkgPT0gQm90dG9t
VG9Ub3BXcml0aW5nTW9kZSB8fCBwYXJlbnRTdHlsZS0+d3JpdGluZ01vZGUoKSA9PSBCb3R0b21U
b1RvcFdyaXRpbmdNb2RlKQotICAgICAgICByZWN0LnNldFkoaGVpZ2h0KCkgLSByZWN0LmJvdHRv
bSgpKTsKKyAgICAgICAgcmVjdC5zZXRZKGhlaWdodCgpIC0gcmVjdC5tYXhZKCkpOwogCiAgICAg
cmV0dXJuIHJlY3Q7CiB9CkBAIC0zMzE1LDkgKzMzMTUsOSBAQCB2b2lkIFJlbmRlckJveDo6Zmxp
cEZvcldyaXRpbmdNb2RlKEludFJlCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChzdHlsZSgp
LT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpKQotICAgICAgICByZWN0LnNldFkoaGVpZ2h0KCkg
LSByZWN0LmJvdHRvbSgpKTsKKyAgICAgICAgcmVjdC5zZXRZKGhlaWdodCgpIC0gcmVjdC5tYXhZ
KCkpOwogICAgIGVsc2UKLSAgICAgICAgcmVjdC5zZXRYKHdpZHRoKCkgLSByZWN0LnJpZ2h0KCkp
OworICAgICAgICByZWN0LnNldFgod2lkdGgoKSAtIHJlY3QubWF4WCgpKTsKIH0KIAogaW50IFJl
bmRlckJveDo6ZmxpcEZvcldyaXRpbmdNb2RlKGludCBwb3NpdGlvbikgY29uc3QKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGcmFtZVNldC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZyYW1lU2V0LmNwcAkocmV2aXNpb24gNzcy
NzgpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRnJhbWVTZXQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC05Myw4ICs5Myw4IEBAIHZvaWQgUmVuZGVyRnJhbWVTZXQ6OnBhaW50Q29s
dW1uQm9yZGVyKGMKICAgICAvLyBOb3cgc3Ryb2tlIHRoZSBlZGdlcyBidXQgb25seSBpZiB3ZSBo
YXZlIGVub3VnaCByb29tIHRvIHBhaW50IGJvdGggZWRnZXMgd2l0aCBhIGxpdHRsZQogICAgIC8v
IGJpdCBvZiB0aGUgZmlsbCBjb2xvciBzaG93aW5nIHRocm91Z2guCiAgICAgaWYgKGJvcmRlclJl
Y3Qud2lkdGgoKSA+PSAzKSB7Ci0gICAgICAgIGNvbnRleHQtPmZpbGxSZWN0KEludFJlY3QoYm9y
ZGVyUmVjdC50b3BMZWZ0KCksIEludFNpemUoMSwgaGVpZ2h0KCkpKSwgYm9yZGVyU3RhcnRFZGdl
Q29sb3IoKSwgY29sb3JTcGFjZSk7Ci0gICAgICAgIGNvbnRleHQtPmZpbGxSZWN0KEludFJlY3Qo
Ym9yZGVyUmVjdC50b3BSaWdodCgpLCBJbnRTaXplKDEsIGhlaWdodCgpKSksIGJvcmRlckVuZEVk
Z2VDb2xvcigpLCBjb2xvclNwYWNlKTsKKyAgICAgICAgY29udGV4dC0+ZmlsbFJlY3QoSW50UmVj
dChib3JkZXJSZWN0LmxvY2F0aW9uKCksIEludFNpemUoMSwgaGVpZ2h0KCkpKSwgYm9yZGVyU3Rh
cnRFZGdlQ29sb3IoKSwgY29sb3JTcGFjZSk7CisgICAgICAgIGNvbnRleHQtPmZpbGxSZWN0KElu
dFJlY3QoSW50UG9pbnQoYm9yZGVyUmVjdC5tYXhYKCkgLSAxLCBib3JkZXJSZWN0LnkoKSksIElu
dFNpemUoMSwgaGVpZ2h0KCkpKSwgYm9yZGVyRW5kRWRnZUNvbG9yKCksIGNvbG9yU3BhY2UpOwog
ICAgIH0KIH0KIApAQCAtMTEzLDggKzExMyw4IEBAIHZvaWQgUmVuZGVyRnJhbWVTZXQ6OnBhaW50
Um93Qm9yZGVyKGNvbnMKICAgICAvLyBOb3cgc3Ryb2tlIHRoZSBlZGdlcyBidXQgb25seSBpZiB3
ZSBoYXZlIGVub3VnaCByb29tIHRvIHBhaW50IGJvdGggZWRnZXMgd2l0aCBhIGxpdHRsZQogICAg
IC8vIGJpdCBvZiB0aGUgZmlsbCBjb2xvciBzaG93aW5nIHRocm91Z2guCiAgICAgaWYgKGJvcmRl
clJlY3QuaGVpZ2h0KCkgPj0gMykgewotICAgICAgICBjb250ZXh0LT5maWxsUmVjdChJbnRSZWN0
KGJvcmRlclJlY3QudG9wTGVmdCgpLCBJbnRTaXplKHdpZHRoKCksIDEpKSwgYm9yZGVyU3RhcnRF
ZGdlQ29sb3IoKSwgY29sb3JTcGFjZSk7Ci0gICAgICAgIGNvbnRleHQtPmZpbGxSZWN0KEludFJl
Y3QoYm9yZGVyUmVjdC5ib3R0b21MZWZ0KCksIEludFNpemUod2lkdGgoKSwgMSkpLCBib3JkZXJF
bmRFZGdlQ29sb3IoKSwgY29sb3JTcGFjZSk7CisgICAgICAgIGNvbnRleHQtPmZpbGxSZWN0KElu
dFJlY3QoYm9yZGVyUmVjdC5sb2NhdGlvbigpLCBJbnRTaXplKHdpZHRoKCksIDEpKSwgYm9yZGVy
U3RhcnRFZGdlQ29sb3IoKSwgY29sb3JTcGFjZSk7CisgICAgICAgIGNvbnRleHQtPmZpbGxSZWN0
KEludFJlY3QoSW50UG9pbnQoYm9yZGVyUmVjdC54KCksIGJvcmRlclJlY3QubWF4WSgpIC0gMSks
IEludFNpemUod2lkdGgoKSwgMSkpLCBib3JkZXJFbmRFZGdlQ29sb3IoKSwgY29sb3JTcGFjZSk7
CiAgICAgfQogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5l
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5l
LmNwcAkocmV2aXNpb24gNzcyNzgpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
SW5saW5lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAzNywzMCArMTAzNywzMCBAQCB2b2lkIFJl
bmRlcklubGluZTo6cGFpbnRPdXRsaW5lRm9yTGluZShHCiAKICAgICBpbnQgdCA9IHR5ICsgdGhp
c2xpbmUueSgpIC0gb2Zmc2V0OwogICAgIGludCBsID0gdHggKyB0aGlzbGluZS54KCkgLSBvZmZz
ZXQ7Ci0gICAgaW50IGIgPSB0eSArIHRoaXNsaW5lLmJvdHRvbSgpICsgb2Zmc2V0OwotICAgIGlu
dCByID0gdHggKyB0aGlzbGluZS5yaWdodCgpICsgb2Zmc2V0OworICAgIGludCBiID0gdHkgKyB0
aGlzbGluZS5tYXhZKCkgKyBvZmZzZXQ7CisgICAgaW50IHIgPSB0eCArIHRoaXNsaW5lLm1heFgo
KSArIG9mZnNldDsKICAgICAKICAgICAvLyBsZWZ0IGVkZ2UKICAgICBkcmF3TGluZUZvckJveFNp
ZGUoZ3JhcGhpY3NDb250ZXh0LAogICAgICAgICAgICAgICAgbCAtIG93LAotICAgICAgICAgICAg
ICAgdCAtIChsYXN0bGluZS5pc0VtcHR5KCkgfHwgdGhpc2xpbmUueCgpIDwgbGFzdGxpbmUueCgp
IHx8IChsYXN0bGluZS5yaWdodCgpIC0gMSkgPD0gdGhpc2xpbmUueCgpID8gb3cgOiAwKSwKKyAg
ICAgICAgICAgICAgIHQgLSAobGFzdGxpbmUuaXNFbXB0eSgpIHx8IHRoaXNsaW5lLngoKSA8IGxh
c3RsaW5lLngoKSB8fCAobGFzdGxpbmUubWF4WCgpIC0gMSkgPD0gdGhpc2xpbmUueCgpID8gb3cg
OiAwKSwKICAgICAgICAgICAgICAgIGwsCi0gICAgICAgICAgICAgICBiICsgKG5leHRsaW5lLmlz
RW1wdHkoKSB8fCB0aGlzbGluZS54KCkgPD0gbmV4dGxpbmUueCgpIHx8IChuZXh0bGluZS5yaWdo
dCgpIC0gMSkgPD0gdGhpc2xpbmUueCgpID8gb3cgOiAwKSwKKyAgICAgICAgICAgICAgIGIgKyAo
bmV4dGxpbmUuaXNFbXB0eSgpIHx8IHRoaXNsaW5lLngoKSA8PSBuZXh0bGluZS54KCkgfHwgKG5l
eHRsaW5lLm1heFgoKSAtIDEpIDw9IHRoaXNsaW5lLngoKSA/IG93IDogMCksCiAgICAgICAgICAg
ICAgICBCU0xlZnQsCiAgICAgICAgICAgICAgICBvYywgb3MsCi0gICAgICAgICAgICAgICAobGFz
dGxpbmUuaXNFbXB0eSgpIHx8IHRoaXNsaW5lLngoKSA8IGxhc3RsaW5lLngoKSB8fCAobGFzdGxp
bmUucmlnaHQoKSAtIDEpIDw9IHRoaXNsaW5lLngoKSA/IG93IDogLW93KSwKLSAgICAgICAgICAg
ICAgIChuZXh0bGluZS5pc0VtcHR5KCkgfHwgdGhpc2xpbmUueCgpIDw9IG5leHRsaW5lLngoKSB8
fCAobmV4dGxpbmUucmlnaHQoKSAtIDEpIDw9IHRoaXNsaW5lLngoKSA/IG93IDogLW93KSk7Cisg
ICAgICAgICAgICAgICAobGFzdGxpbmUuaXNFbXB0eSgpIHx8IHRoaXNsaW5lLngoKSA8IGxhc3Rs
aW5lLngoKSB8fCAobGFzdGxpbmUubWF4WCgpIC0gMSkgPD0gdGhpc2xpbmUueCgpID8gb3cgOiAt
b3cpLAorICAgICAgICAgICAgICAgKG5leHRsaW5lLmlzRW1wdHkoKSB8fCB0aGlzbGluZS54KCkg
PD0gbmV4dGxpbmUueCgpIHx8IChuZXh0bGluZS5tYXhYKCkgLSAxKSA8PSB0aGlzbGluZS54KCkg
PyBvdyA6IC1vdykpOwogICAgIAogICAgIC8vIHJpZ2h0IGVkZ2UKICAgICBkcmF3TGluZUZvckJv
eFNpZGUoZ3JhcGhpY3NDb250ZXh0LAogICAgICAgICAgICAgICAgciwKLSAgICAgICAgICAgICAg
IHQgLSAobGFzdGxpbmUuaXNFbXB0eSgpIHx8IGxhc3RsaW5lLnJpZ2h0KCkgPCB0aGlzbGluZS5y
aWdodCgpIHx8ICh0aGlzbGluZS5yaWdodCgpIC0gMSkgPD0gbGFzdGxpbmUueCgpID8gb3cgOiAw
KSwKKyAgICAgICAgICAgICAgIHQgLSAobGFzdGxpbmUuaXNFbXB0eSgpIHx8IGxhc3RsaW5lLm1h
eFgoKSA8IHRoaXNsaW5lLm1heFgoKSB8fCAodGhpc2xpbmUubWF4WCgpIC0gMSkgPD0gbGFzdGxp
bmUueCgpID8gb3cgOiAwKSwKICAgICAgICAgICAgICAgIHIgKyBvdywKLSAgICAgICAgICAgICAg
IGIgKyAobmV4dGxpbmUuaXNFbXB0eSgpIHx8IG5leHRsaW5lLnJpZ2h0KCkgPD0gdGhpc2xpbmUu
cmlnaHQoKSB8fCAodGhpc2xpbmUucmlnaHQoKSAtIDEpIDw9IG5leHRsaW5lLngoKSA/IG93IDog
MCksCisgICAgICAgICAgICAgICBiICsgKG5leHRsaW5lLmlzRW1wdHkoKSB8fCBuZXh0bGluZS5t
YXhYKCkgPD0gdGhpc2xpbmUubWF4WCgpIHx8ICh0aGlzbGluZS5tYXhYKCkgLSAxKSA8PSBuZXh0
bGluZS54KCkgPyBvdyA6IDApLAogICAgICAgICAgICAgICAgQlNSaWdodCwKICAgICAgICAgICAg
ICAgIG9jLCBvcywKLSAgICAgICAgICAgICAgIChsYXN0bGluZS5pc0VtcHR5KCkgfHwgbGFzdGxp
bmUucmlnaHQoKSA8IHRoaXNsaW5lLnJpZ2h0KCkgfHwgKHRoaXNsaW5lLnJpZ2h0KCkgLSAxKSA8
PSBsYXN0bGluZS54KCkgPyBvdyA6IC1vdyksCi0gICAgICAgICAgICAgICAobmV4dGxpbmUuaXNF
bXB0eSgpIHx8IG5leHRsaW5lLnJpZ2h0KCkgPD0gdGhpc2xpbmUucmlnaHQoKSB8fCAodGhpc2xp
bmUucmlnaHQoKSAtIDEpIDw9IG5leHRsaW5lLngoKSA/IG93IDogLW93KSk7CisgICAgICAgICAg
ICAgICAobGFzdGxpbmUuaXNFbXB0eSgpIHx8IGxhc3RsaW5lLm1heFgoKSA8IHRoaXNsaW5lLm1h
eFgoKSB8fCAodGhpc2xpbmUubWF4WCgpIC0gMSkgPD0gbGFzdGxpbmUueCgpID8gb3cgOiAtb3cp
LAorICAgICAgICAgICAgICAgKG5leHRsaW5lLmlzRW1wdHkoKSB8fCBuZXh0bGluZS5tYXhYKCkg
PD0gdGhpc2xpbmUubWF4WCgpIHx8ICh0aGlzbGluZS5tYXhYKCkgLSAxKSA8PSBuZXh0bGluZS54
KCkgPyBvdyA6IC1vdykpOwogICAgIC8vIHVwcGVyIGVkZ2UKICAgICBpZiAodGhpc2xpbmUueCgp
IDwgbGFzdGxpbmUueCgpKQogICAgICAgICBkcmF3TGluZUZvckJveFNpZGUoZ3JhcGhpY3NDb250
ZXh0LApAQCAtMTA3MiwxNCArMTA3MiwxNCBAQCB2b2lkIFJlbmRlcklubGluZTo6cGFpbnRPdXRs
aW5lRm9yTGluZShHCiAgICAgICAgICAgICAgICAgICAgb3csCiAgICAgICAgICAgICAgICAgICAg
KCFsYXN0bGluZS5pc0VtcHR5KCkgJiYgdHggKyBsYXN0bGluZS54KCkgKyAxIDwgciArIG93KSA/
IC1vdyA6IG93KTsKICAgICAKLSAgICBpZiAobGFzdGxpbmUucmlnaHQoKSA8IHRoaXNsaW5lLnJp
Z2h0KCkpCisgICAgaWYgKGxhc3RsaW5lLm1heFgoKSA8IHRoaXNsaW5lLm1heFgoKSkKICAgICAg
ICAgZHJhd0xpbmVGb3JCb3hTaWRlKGdyYXBoaWNzQ29udGV4dCwKLSAgICAgICAgICAgICAgICAg
ICBtYXgobGFzdGxpbmUuaXNFbXB0eSgpID8gLTEwMDAwMDAgOiB0eCArIGxhc3RsaW5lLnJpZ2h0
KCksIGwgLSBvdyksCisgICAgICAgICAgICAgICAgICAgbWF4KGxhc3RsaW5lLmlzRW1wdHkoKSA/
IC0xMDAwMDAwIDogdHggKyBsYXN0bGluZS5tYXhYKCksIGwgLSBvdyksCiAgICAgICAgICAgICAg
ICAgICAgdCAtIG93LAogICAgICAgICAgICAgICAgICAgIHIgKyBvdywKICAgICAgICAgICAgICAg
ICAgICB0ICwKICAgICAgICAgICAgICAgICAgICBCU1RvcCwgb2MsIG9zLAotICAgICAgICAgICAg
ICAgICAgICghbGFzdGxpbmUuaXNFbXB0eSgpICYmIGwgLSBvdyA8IHR4ICsgbGFzdGxpbmUucmln
aHQoKSkgPyAtb3cgOiBvdywKKyAgICAgICAgICAgICAgICAgICAoIWxhc3RsaW5lLmlzRW1wdHko
KSAmJiBsIC0gb3cgPCB0eCArIGxhc3RsaW5lLm1heFgoKSkgPyAtb3cgOiBvdywKICAgICAgICAg
ICAgICAgICAgICBvdyk7CiAgICAgCiAgICAgLy8gbG93ZXIgZWRnZQpAQCAtMTA5MywxNCArMTA5
MywxNCBAQCB2b2lkIFJlbmRlcklubGluZTo6cGFpbnRPdXRsaW5lRm9yTGluZShHCiAgICAgICAg
ICAgICAgICAgICAgb3csCiAgICAgICAgICAgICAgICAgICAgKCFuZXh0bGluZS5pc0VtcHR5KCkg
JiYgdHggKyBuZXh0bGluZS54KCkgKyAxIDwgciArIG93KSA/IC1vdyA6IG93KTsKICAgICAKLSAg
ICBpZiAobmV4dGxpbmUucmlnaHQoKSA8IHRoaXNsaW5lLnJpZ2h0KCkpCisgICAgaWYgKG5leHRs
aW5lLm1heFgoKSA8IHRoaXNsaW5lLm1heFgoKSkKICAgICAgICAgZHJhd0xpbmVGb3JCb3hTaWRl
KGdyYXBoaWNzQ29udGV4dCwKLSAgICAgICAgICAgICAgICAgICBtYXgoIW5leHRsaW5lLmlzRW1w
dHkoKSA/IHR4ICsgbmV4dGxpbmUucmlnaHQoKSA6IC0xMDAwMDAwLCBsIC0gb3cpLAorICAgICAg
ICAgICAgICAgICAgIG1heCghbmV4dGxpbmUuaXNFbXB0eSgpID8gdHggKyBuZXh0bGluZS5tYXhY
KCkgOiAtMTAwMDAwMCwgbCAtIG93KSwKICAgICAgICAgICAgICAgICAgICBiLAogICAgICAgICAg
ICAgICAgICAgIHIgKyBvdywKICAgICAgICAgICAgICAgICAgICBiICsgb3csCiAgICAgICAgICAg
ICAgICAgICAgQlNCb3R0b20sIG9jLCBvcywKLSAgICAgICAgICAgICAgICAgICAoIW5leHRsaW5l
LmlzRW1wdHkoKSAmJiBsIC0gb3cgPCB0eCArIG5leHRsaW5lLnJpZ2h0KCkpID8gLW93IDogb3cs
CisgICAgICAgICAgICAgICAgICAgKCFuZXh0bGluZS5pc0VtcHR5KCkgJiYgbCAtIG93IDwgdHgg
KyBuZXh0bGluZS5tYXhYKCkpID8gLW93IDogb3csCiAgICAgICAgICAgICAgICAgICAgb3cpOwog
fQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAJKHJldmlz
aW9uIDc3Mjc4KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTUxNiw3ICsxNTE2LDcgQEAgSW50UmVjdCBSZW5kZXJMYXllcjo6
Z2V0UmVjdFRvRXhwb3NlKGNvbgogICAgICAgICBzY3JvbGxYID0gU2Nyb2xsQWxpZ25tZW50Ojpn
ZXRIaWRkZW5CZWhhdmlvcihhbGlnblgpOwogICAgIC8vIElmIHdlJ3JlIHRyeWluZyB0byBhbGln
biB0byB0aGUgY2xvc2VzdCBlZGdlLCBhbmQgdGhlIGV4cG9zZVJlY3QgaXMgZnVydGhlciByaWdo
dAogICAgIC8vIHRoYW4gdGhlIHZpc2libGVSZWN0LCBhbmQgbm90IGJpZ2dlciB0aGFuIHRoZSB2
aXNpYmxlIGFyZWEsIHRoZW4gYWxpZ24gd2l0aCB0aGUgcmlnaHQuCi0gICAgaWYgKHNjcm9sbFgg
PT0gYWxpZ25Ub0Nsb3Nlc3RFZGdlICYmIGV4cG9zZVJlY3QucmlnaHQoKSA+IHZpc2libGVSZWN0
LnJpZ2h0KCkgJiYgZXhwb3NlUmVjdC53aWR0aCgpIDwgdmlzaWJsZVJlY3Qud2lkdGgoKSkKKyAg
ICBpZiAoc2Nyb2xsWCA9PSBhbGlnblRvQ2xvc2VzdEVkZ2UgJiYgZXhwb3NlUmVjdC5tYXhYKCkg
PiB2aXNpYmxlUmVjdC5tYXhYKCkgJiYgZXhwb3NlUmVjdC53aWR0aCgpIDwgdmlzaWJsZVJlY3Qu
d2lkdGgoKSkKICAgICAgICAgc2Nyb2xsWCA9IGFsaWduUmlnaHQ7CiAKICAgICAvLyBHaXZlbiB0
aGUgWCBiZWhhdmlvciwgY29tcHV0ZSB0aGUgWCBjb29yZGluYXRlLgpAQCAtMTUyNCw3ICsxNTI0
LDcgQEAgSW50UmVjdCBSZW5kZXJMYXllcjo6Z2V0UmVjdFRvRXhwb3NlKGNvbgogICAgIGlmIChz
Y3JvbGxYID09IG5vU2Nyb2xsKSAKICAgICAgICAgeCA9IHZpc2libGVSZWN0LngoKTsKICAgICBl
bHNlIGlmIChzY3JvbGxYID09IGFsaWduUmlnaHQpCi0gICAgICAgIHggPSBleHBvc2VSZWN0LnJp
Z2h0KCkgLSB2aXNpYmxlUmVjdC53aWR0aCgpOworICAgICAgICB4ID0gZXhwb3NlUmVjdC5tYXhY
KCkgLSB2aXNpYmxlUmVjdC53aWR0aCgpOwogICAgIGVsc2UgaWYgKHNjcm9sbFggPT0gYWxpZ25D
ZW50ZXIpCiAgICAgICAgIHggPSBleHBvc2VSZWN0LngoKSArIChleHBvc2VSZWN0LndpZHRoKCkg
LSB2aXNpYmxlUmVjdC53aWR0aCgpKSAvIDI7CiAgICAgZWxzZQpAQCAtMTU0OSw3ICsxNTQ5LDcg
QEAgSW50UmVjdCBSZW5kZXJMYXllcjo6Z2V0UmVjdFRvRXhwb3NlKGNvbgogICAgICAgICBzY3Jv
bGxZID0gU2Nyb2xsQWxpZ25tZW50OjpnZXRIaWRkZW5CZWhhdmlvcihhbGlnblkpOwogICAgIC8v
IElmIHdlJ3JlIHRyeWluZyB0byBhbGlnbiB0byB0aGUgY2xvc2VzdCBlZGdlLCBhbmQgdGhlIGV4
cG9zZVJlY3QgaXMgZnVydGhlciBkb3duCiAgICAgLy8gdGhhbiB0aGUgdmlzaWJsZVJlY3QsIGFu
ZCBub3QgYmlnZ2VyIHRoYW4gdGhlIHZpc2libGUgYXJlYSwgdGhlbiBhbGlnbiB3aXRoIHRoZSBi
b3R0b20uCi0gICAgaWYgKHNjcm9sbFkgPT0gYWxpZ25Ub0Nsb3Nlc3RFZGdlICYmIGV4cG9zZVJl
Y3QuYm90dG9tKCkgPiB2aXNpYmxlUmVjdC5ib3R0b20oKSAmJiBleHBvc2VSZWN0LmhlaWdodCgp
IDwgdmlzaWJsZVJlY3QuaGVpZ2h0KCkpCisgICAgaWYgKHNjcm9sbFkgPT0gYWxpZ25Ub0Nsb3Nl
c3RFZGdlICYmIGV4cG9zZVJlY3QubWF4WSgpID4gdmlzaWJsZVJlY3QubWF4WSgpICYmIGV4cG9z
ZVJlY3QuaGVpZ2h0KCkgPCB2aXNpYmxlUmVjdC5oZWlnaHQoKSkKICAgICAgICAgc2Nyb2xsWSA9
IGFsaWduQm90dG9tOwogCiAgICAgLy8gR2l2ZW4gdGhlIFkgYmVoYXZpb3IsIGNvbXB1dGUgdGhl
IFkgY29vcmRpbmF0ZS4KQEAgLTE1NTcsNyArMTU1Nyw3IEBAIEludFJlY3QgUmVuZGVyTGF5ZXI6
OmdldFJlY3RUb0V4cG9zZShjb24KICAgICBpZiAoc2Nyb2xsWSA9PSBub1Njcm9sbCkgCiAgICAg
ICAgIHkgPSB2aXNpYmxlUmVjdC55KCk7CiAgICAgZWxzZSBpZiAoc2Nyb2xsWSA9PSBhbGlnbkJv
dHRvbSkKLSAgICAgICAgeSA9IGV4cG9zZVJlY3QuYm90dG9tKCkgLSB2aXNpYmxlUmVjdC5oZWln
aHQoKTsKKyAgICAgICAgeSA9IGV4cG9zZVJlY3QubWF4WSgpIC0gdmlzaWJsZVJlY3QuaGVpZ2h0
KCk7CiAgICAgZWxzZSBpZiAoc2Nyb2xsWSA9PSBhbGlnbkNlbnRlcikKICAgICAgICAgeSA9IGV4
cG9zZVJlY3QueSgpICsgKGV4cG9zZVJlY3QuaGVpZ2h0KCkgLSB2aXNpYmxlUmVjdC5oZWlnaHQo
KSkgLyAyOwogICAgIGVsc2UKQEAgLTE2OTQsOCArMTY5NCw4IEBAIHN0YXRpYyBJbnRSZWN0IGNv
cm5lclJlY3QoY29uc3QgUmVuZGVyTGEKICAgICAgICAgaG9yaXpvbnRhbFRoaWNrbmVzcyA9IGxh
eWVyLT52ZXJ0aWNhbFNjcm9sbGJhcigpLT53aWR0aCgpOwogICAgICAgICB2ZXJ0aWNhbFRoaWNr
bmVzcyA9IGxheWVyLT5ob3Jpem9udGFsU2Nyb2xsYmFyKCktPmhlaWdodCgpOwogICAgIH0KLSAg
ICByZXR1cm4gSW50UmVjdChib3VuZHMucmlnaHQoKSAtIGhvcml6b250YWxUaGlja25lc3MgLSBs
YXllci0+cmVuZGVyZXIoKS0+c3R5bGUoKS0+Ym9yZGVyUmlnaHRXaWR0aCgpLCAKLSAgICAgICAg
ICAgICAgICAgICBib3VuZHMuYm90dG9tKCkgLSB2ZXJ0aWNhbFRoaWNrbmVzcyAtIGxheWVyLT5y
ZW5kZXJlcigpLT5zdHlsZSgpLT5ib3JkZXJCb3R0b21XaWR0aCgpLAorICAgIHJldHVybiBJbnRS
ZWN0KGJvdW5kcy5tYXhYKCkgLSBob3Jpem9udGFsVGhpY2tuZXNzIC0gbGF5ZXItPnJlbmRlcmVy
KCktPnN0eWxlKCktPmJvcmRlclJpZ2h0V2lkdGgoKSwgCisgICAgICAgICAgICAgICAgICAgYm91
bmRzLm1heFkoKSAtIHZlcnRpY2FsVGhpY2tuZXNzIC0gbGF5ZXItPnJlbmRlcmVyKCktPnN0eWxl
KCktPmJvcmRlckJvdHRvbVdpZHRoKCksCiAgICAgICAgICAgICAgICAgICAgaG9yaXpvbnRhbFRo
aWNrbmVzcywgdmVydGljYWxUaGlja25lc3MpOwogfQogCkBAIC0xOTExLDE0ICsxOTExLDE0IEBA
IHZvaWQgUmVuZGVyTGF5ZXI6OnBvc2l0aW9uT3ZlcmZsb3dDb250cm8KICAgICBJbnRSZWN0IHNj
cm9sbENvcm5lcihzY3JvbGxDb3JuZXJSZWN0KHRoaXMsIGJvcmRlckJveCkpOwogICAgIEludFJl
Y3QgYWJzQm91bmRzKGJvcmRlckJveC54KCkgKyB0eCwgYm9yZGVyQm94LnkoKSArIHR5LCBib3Jk
ZXJCb3gud2lkdGgoKSwgYm9yZGVyQm94LmhlaWdodCgpKTsKICAgICBpZiAobV92QmFyKQotICAg
ICAgICBtX3ZCYXItPnNldEZyYW1lUmVjdChJbnRSZWN0KGFic0JvdW5kcy5yaWdodCgpIC0gYm94
LT5ib3JkZXJSaWdodCgpIC0gbV92QmFyLT53aWR0aCgpLAorICAgICAgICBtX3ZCYXItPnNldEZy
YW1lUmVjdChJbnRSZWN0KGFic0JvdW5kcy5tYXhYKCkgLSBib3gtPmJvcmRlclJpZ2h0KCkgLSBt
X3ZCYXItPndpZHRoKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWJz
Qm91bmRzLnkoKSArIGJveC0+Ym9yZGVyVG9wKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbV92QmFyLT53aWR0aCgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGFic0JvdW5kcy5oZWlnaHQoKSAtIChib3gtPmJvcmRlclRvcCgpICsgYm94LT5i
b3JkZXJCb3R0b20oKSkgLSBzY3JvbGxDb3JuZXIuaGVpZ2h0KCkpKTsKIAogICAgIGlmIChtX2hC
YXIpCiAgICAgICAgIG1faEJhci0+c2V0RnJhbWVSZWN0KEludFJlY3QoYWJzQm91bmRzLngoKSAr
IGJveC0+Ym9yZGVyTGVmdCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGFic0JvdW5kcy5ib3R0b20oKSAtIGJveC0+Ym9yZGVyQm90dG9tKCkgLSBtX2hCYXItPmhlaWdo
dCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFic0JvdW5kcy5tYXhZ
KCkgLSBib3gtPmJvcmRlckJvdHRvbSgpIC0gbV9oQmFyLT5oZWlnaHQoKSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBhYnNCb3VuZHMud2lkdGgoKSAtIChib3gtPmJvcmRl
ckxlZnQoKSArIGJveC0+Ym9yZGVyUmlnaHQoKSkgLSBzY3JvbGxDb3JuZXIud2lkdGgoKSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2hCYXItPmhlaWdodCgpKSk7CiAg
ICAgCkBAIC0xOTU1LDcgKzE5NTUsNyBAQCBpbnQgUmVuZGVyTGF5ZXI6Om92ZXJmbG93Qm90dG9t
KCkgY29uc3QKICAgICBSZW5kZXJCb3gqIGJveCA9IHJlbmRlckJveCgpOwogICAgIEludFJlY3Qg
b3ZlcmZsb3dSZWN0KGJveC0+bGF5b3V0T3ZlcmZsb3dSZWN0KCkpOwogICAgIGJveC0+ZmxpcEZv
cldyaXRpbmdNb2RlKG92ZXJmbG93UmVjdCk7Ci0gICAgcmV0dXJuIG92ZXJmbG93UmVjdC5ib3R0
b20oKTsKKyAgICByZXR1cm4gb3ZlcmZsb3dSZWN0Lm1heFkoKTsKIH0KIAogaW50IFJlbmRlckxh
eWVyOjpvdmVyZmxvd0xlZnQoKSBjb25zdApAQCAtMTk3MSw3ICsxOTcxLDcgQEAgaW50IFJlbmRl
ckxheWVyOjpvdmVyZmxvd1JpZ2h0KCkgY29uc3QKICAgICBSZW5kZXJCb3gqIGJveCA9IHJlbmRl
ckJveCgpOwogICAgIEludFJlY3Qgb3ZlcmZsb3dSZWN0KGJveC0+bGF5b3V0T3ZlcmZsb3dSZWN0
KCkpOwogICAgIGJveC0+ZmxpcEZvcldyaXRpbmdNb2RlKG92ZXJmbG93UmVjdCk7Ci0gICAgcmV0
dXJuIG92ZXJmbG93UmVjdC5yaWdodCgpOworICAgIHJldHVybiBvdmVyZmxvd1JlY3QubWF4WCgp
OwogfQogCiB2b2lkIFJlbmRlckxheWVyOjpjb21wdXRlU2Nyb2xsRGltZW5zaW9ucyhib29sKiBu
ZWVkSEJhciwgYm9vbCogbmVlZFZCYXIpCkBAIC0yMTk3LDcgKzIxOTcsNyBAQCB2b2lkIFJlbmRl
ckxheWVyOjpwYWludFJlc2l6ZXIoR3JhcGhpY3NDCiAKICAgICAvLyBQYWludCB0aGUgcmVzaXpl
ciBjb250cm9sLgogICAgIERFRklORV9TVEFUSUNfTE9DQUwoUmVmUHRyPEltYWdlPiwgcmVzaXpl
Q29ybmVySW1hZ2UsIChJbWFnZTo6bG9hZFBsYXRmb3JtUmVzb3VyY2UoInRleHRBcmVhUmVzaXpl
Q29ybmVyIikpKTsKLSAgICBJbnRQb2ludCBpbWFnZVBvaW50KGFic1JlY3QucmlnaHQoKSAtIHJl
c2l6ZUNvcm5lckltYWdlLT53aWR0aCgpLCBhYnNSZWN0LmJvdHRvbSgpIC0gcmVzaXplQ29ybmVy
SW1hZ2UtPmhlaWdodCgpKTsKKyAgICBJbnRQb2ludCBpbWFnZVBvaW50KGFic1JlY3QubWF4WCgp
IC0gcmVzaXplQ29ybmVySW1hZ2UtPndpZHRoKCksIGFic1JlY3QubWF4WSgpIC0gcmVzaXplQ29y
bmVySW1hZ2UtPmhlaWdodCgpKTsKICAgICBjb250ZXh0LT5kcmF3SW1hZ2UocmVzaXplQ29ybmVy
SW1hZ2UuZ2V0KCksIGJveC0+c3R5bGUoKS0+Y29sb3JTcGFjZSgpLCBpbWFnZVBvaW50KTsKIAog
ICAgIC8vIERyYXcgYSBmcmFtZSBhcm91bmQgdGhlIHJlc2l6ZXIgKDFweCBncmV5IGxpbmUpIGlm
IHRoZXJlIGFyZSBhbnkgc2Nyb2xsYmFycyBwcmVzZW50LgpJbmRleDogU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckxpbmVCb3hMaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTGluZUJveExpc3QuY3BwCShyZXZpc2lvbiA3NzI3OCkKKysr
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaW5lQm94TGlzdC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTE2MCwxMSArMTYwLDExIEBAIGJvb2wgUmVuZGVyTGluZUJveExpc3Q6OnJhbmdl
SW50ZXJzZWN0c1IKICAgICAKICAgICBpZiAocmVuZGVyZXItPnN0eWxlKCktPmlzSG9yaXpvbnRh
bFdyaXRpbmdNb2RlKCkpIHsKICAgICAgICAgcGh5c2ljYWxTdGFydCArPSB0eTsKLSAgICAgICAg
aWYgKHBoeXNpY2FsU3RhcnQgPj0gcmVjdC5ib3R0b20oKSB8fCBwaHlzaWNhbFN0YXJ0ICsgcGh5
c2ljYWxFeHRlbnQgPD0gcmVjdC55KCkpCisgICAgICAgIGlmIChwaHlzaWNhbFN0YXJ0ID49IHJl
Y3QubWF4WSgpIHx8IHBoeXNpY2FsU3RhcnQgKyBwaHlzaWNhbEV4dGVudCA8PSByZWN0LnkoKSkK
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9IGVsc2UgewogICAgICAgICBwaHlzaWNh
bFN0YXJ0ICs9IHR4OwotICAgICAgICBpZiAocGh5c2ljYWxTdGFydCA+PSByZWN0LnJpZ2h0KCkg
fHwgcGh5c2ljYWxTdGFydCArIHBoeXNpY2FsRXh0ZW50IDw9IHJlY3QueCgpKQorICAgICAgICBp
ZiAocGh5c2ljYWxTdGFydCA+PSByZWN0Lm1heFgoKSB8fCBwaHlzaWNhbFN0YXJ0ICsgcGh5c2lj
YWxFeHRlbnQgPD0gcmVjdC54KCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQog
ICAgIApAQCAtMjM5LDExICsyMzksMTEgQEAgdm9pZCBSZW5kZXJMaW5lQm94TGlzdDo6cGFpbnQo
UmVuZGVyQm94TQogICAgICAgICAgICAgICAgIGJvdHRvbUZvclBhZ2luYXRpb25DaGVjayA9IG1h
eChib3R0b21Gb3JQYWdpbmF0aW9uQ2hlY2ssIGN1cnItPnJvb3QoKS0+bGluZUJvdHRvbSgpKTsK
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChib3R0b21Gb3JQYWdpbmF0aW9uQ2hlY2sg
LSB0b3BGb3JQYWdpbmF0aW9uQ2hlY2sgPD0gdi0+cHJpbnRSZWN0KCkuaGVpZ2h0KCkpIHsKLSAg
ICAgICAgICAgICAgICBpZiAodHkgKyBib3R0b21Gb3JQYWdpbmF0aW9uQ2hlY2sgPiB2LT5wcmlu
dFJlY3QoKS5ib3R0b20oKSkgeworICAgICAgICAgICAgICAgIGlmICh0eSArIGJvdHRvbUZvclBh
Z2luYXRpb25DaGVjayA+IHYtPnByaW50UmVjdCgpLm1heFkoKSkgewogICAgICAgICAgICAgICAg
ICAgICBpZiAoUm9vdElubGluZUJveCogbmV4dFJvb3RCb3ggPSBjdXJyLT5yb290KCktPm5leHRS
b290Qm94KCkpCiAgICAgICAgICAgICAgICAgICAgICAgICBib3R0b21Gb3JQYWdpbmF0aW9uQ2hl
Y2sgPSBtaW4oYm90dG9tRm9yUGFnaW5hdGlvbkNoZWNrLCBtaW4obmV4dFJvb3RCb3gtPnRvcFZp
c3VhbE92ZXJmbG93KCksIG5leHRSb290Qm94LT5saW5lVG9wKCkpKTsKICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgaWYgKHR5ICsgYm90dG9tRm9yUGFnaW5hdGlvbkNoZWNrID4g
di0+cHJpbnRSZWN0KCkuYm90dG9tKCkpIHsKKyAgICAgICAgICAgICAgICBpZiAodHkgKyBib3R0
b21Gb3JQYWdpbmF0aW9uQ2hlY2sgPiB2LT5wcmludFJlY3QoKS5tYXhZKCkpIHsKICAgICAgICAg
ICAgICAgICAgICAgaWYgKHR5ICsgdG9wRm9yUGFnaW5hdGlvbkNoZWNrIDwgdi0+dHJ1bmNhdGVk
QXQoKSkKICAgICAgICAgICAgICAgICAgICAgICAgIHYtPnNldEJlc3RUcnVuY2F0ZWRBdCh0eSAr
IHRvcEZvclBhZ2luYXRpb25DaGVjaywgcmVuZGVyZXIpOwogICAgICAgICAgICAgICAgICAgICAv
LyBJZiB3ZSB3ZXJlIGFibGUgdG8gdHJ1bmNhdGUsIGRvbid0IHBhaW50LgpJbmRleDogU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RJdGVtLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEl0ZW0uY3BwCShyZXZpc2lvbiA3NzI3OCkK
KysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0SXRlbS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI5NywxMiArMjk3LDEyIEBAIHZvaWQgUmVuZGVyTGlzdEl0ZW06OnBvc2l0aW9u
TGlzdE1hcmtlcigKICAgICAgICAgICAgIGZvciAoSW5saW5lRmxvd0JveCogYm94ID0gbV9tYXJr
ZXItPmlubGluZUJveFdyYXBwZXIoKS0+cGFyZW50KCk7IGJveDsgYm94ID0gYm94LT5wYXJlbnQo
KSkgewogICAgICAgICAgICAgICAgIEludFJlY3QgbmV3TG9naWNhbFZpc3VhbE92ZXJmbG93UmVj
dCA9IGJveC0+bG9naWNhbFZpc3VhbE92ZXJmbG93UmVjdCgpOwogICAgICAgICAgICAgICAgIElu
dFJlY3QgbmV3TG9naWNhbExheW91dE92ZXJmbG93UmVjdCA9IGJveC0+bG9naWNhbExheW91dE92
ZXJmbG93UmVjdCgpOwotICAgICAgICAgICAgICAgIGlmIChtYXJrZXJMb2dpY2FsTGVmdCArIG1f
bWFya2VyLT5sb2dpY2FsV2lkdGgoKSA+IG5ld0xvZ2ljYWxWaXN1YWxPdmVyZmxvd1JlY3Qucmln
aHQoKSAmJiAhaGl0U2VsZlBhaW50aW5nTGF5ZXIpIHsKKyAgICAgICAgICAgICAgICBpZiAobWFy
a2VyTG9naWNhbExlZnQgKyBtX21hcmtlci0+bG9naWNhbFdpZHRoKCkgPiBuZXdMb2dpY2FsVmlz
dWFsT3ZlcmZsb3dSZWN0Lm1heFgoKSAmJiAhaGl0U2VsZlBhaW50aW5nTGF5ZXIpIHsKICAgICAg
ICAgICAgICAgICAgICAgbmV3TG9naWNhbFZpc3VhbE92ZXJmbG93UmVjdC5zZXRXaWR0aChtYXJr
ZXJMb2dpY2FsTGVmdCArIG1fbWFya2VyLT5sb2dpY2FsV2lkdGgoKSAtIGJveC0+bG9naWNhbExl
ZnRWaXN1YWxPdmVyZmxvdygpKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKGJveCA9PSByb290
KQogICAgICAgICAgICAgICAgICAgICAgICAgYWRqdXN0T3ZlcmZsb3cgPSB0cnVlOwogICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAobWFya2VyTG9naWNhbExlZnQgKyBtX21h
cmtlci0+bG9naWNhbFdpZHRoKCkgPiBuZXdMb2dpY2FsTGF5b3V0T3ZlcmZsb3dSZWN0LnJpZ2h0
KCkpIHsKKyAgICAgICAgICAgICAgICBpZiAobWFya2VyTG9naWNhbExlZnQgKyBtX21hcmtlci0+
bG9naWNhbFdpZHRoKCkgPiBuZXdMb2dpY2FsTGF5b3V0T3ZlcmZsb3dSZWN0Lm1heFgoKSkgewog
ICAgICAgICAgICAgICAgICAgICBuZXdMb2dpY2FsTGF5b3V0T3ZlcmZsb3dSZWN0LnNldFdpZHRo
KG1hcmtlckxvZ2ljYWxMZWZ0ICsgbV9tYXJrZXItPmxvZ2ljYWxXaWR0aCgpIC0gYm94LT5sb2dp
Y2FsTGVmdExheW91dE92ZXJmbG93KCkpOwogICAgICAgICAgICAgICAgICAgICBpZiAoYm94ID09
IHJvb3QpCiAgICAgICAgICAgICAgICAgICAgICAgICBhZGp1c3RPdmVyZmxvdyA9IHRydWU7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdE1hcmtlci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RNYXJrZXIuY3BwCShy
ZXZpc2lvbiA3NzI3OCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0TWFy
a2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI2MCw5ICsxMjYwLDkgQEAgdm9pZCBSZW5kZXJM
aXN0TWFya2VyOjpwYWludChQYWludEluZm8mIAogICAgICAgICBtYXJrZXIgPSBtYXJrZXIudHJh
bnNwb3NlZFJlY3QoKTsKICAgICAgICAgbWFya2VyLm1vdmUoYm94LngoKSwgYm94LnkoKSAtIGxv
Z2ljYWxIZWlnaHQoKSk7CiAgICAgICAgIGNvbnRleHQtPnNhdmUoKTsKLSAgICAgICAgY29udGV4
dC0+dHJhbnNsYXRlKG1hcmtlci54KCksIG1hcmtlci5ib3R0b20oKSk7CisgICAgICAgIGNvbnRl
eHQtPnRyYW5zbGF0ZShtYXJrZXIueCgpLCBtYXJrZXIubWF4WSgpKTsKICAgICAgICAgY29udGV4
dC0+cm90YXRlKHN0YXRpY19jYXN0PGZsb2F0PihkZWcycmFkKDkwLikpKTsKLSAgICAgICAgY29u
dGV4dC0+dHJhbnNsYXRlKC1tYXJrZXIueCgpLCAtbWFya2VyLmJvdHRvbSgpKTsKKyAgICAgICAg
Y29udGV4dC0+dHJhbnNsYXRlKC1tYXJrZXIueCgpLCAtbWFya2VyLm1heFkoKSk7CiAgICAgfQog
CiAgICAgSW50UG9pbnQgdGV4dE9yaWdpbiA9IEludFBvaW50KG1hcmtlci54KCksIG1hcmtlci55
KCkgKyBzdHlsZSgpLT5mb250TWV0cmljcygpLmFzY2VudCgpKTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCShyZXZpc2lvbiA3NzI3OCkKKysrIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
Mzc4LDExICsxMzc4LDExIEBAIGJvb2wgUmVuZGVyT2JqZWN0OjpyZXBhaW50QWZ0ZXJMYXlvdXRJ
Zk4KICAgICBlbHNlIGlmIChkZWx0YUxlZnQgPCAwKQogICAgICAgICByZXBhaW50VXNpbmdDb250
YWluZXIocmVwYWludENvbnRhaW5lciwgSW50UmVjdChuZXdCb3VuZHMueCgpLCBuZXdCb3VuZHMu
eSgpLCAtZGVsdGFMZWZ0LCBuZXdCb3VuZHMuaGVpZ2h0KCkpKTsKIAotICAgIGludCBkZWx0YVJp
Z2h0ID0gbmV3Qm91bmRzLnJpZ2h0KCkgLSBvbGRCb3VuZHMucmlnaHQoKTsKKyAgICBpbnQgZGVs
dGFSaWdodCA9IG5ld0JvdW5kcy5tYXhYKCkgLSBvbGRCb3VuZHMubWF4WCgpOwogICAgIGlmIChk
ZWx0YVJpZ2h0ID4gMCkKLSAgICAgICAgcmVwYWludFVzaW5nQ29udGFpbmVyKHJlcGFpbnRDb250
YWluZXIsIEludFJlY3Qob2xkQm91bmRzLnJpZ2h0KCksIG5ld0JvdW5kcy55KCksIGRlbHRhUmln
aHQsIG5ld0JvdW5kcy5oZWlnaHQoKSkpOworICAgICAgICByZXBhaW50VXNpbmdDb250YWluZXIo
cmVwYWludENvbnRhaW5lciwgSW50UmVjdChvbGRCb3VuZHMubWF4WCgpLCBuZXdCb3VuZHMueSgp
LCBkZWx0YVJpZ2h0LCBuZXdCb3VuZHMuaGVpZ2h0KCkpKTsKICAgICBlbHNlIGlmIChkZWx0YVJp
Z2h0IDwgMCkKLSAgICAgICAgcmVwYWludFVzaW5nQ29udGFpbmVyKHJlcGFpbnRDb250YWluZXIs
IEludFJlY3QobmV3Qm91bmRzLnJpZ2h0KCksIG9sZEJvdW5kcy55KCksIC1kZWx0YVJpZ2h0LCBv
bGRCb3VuZHMuaGVpZ2h0KCkpKTsKKyAgICAgICAgcmVwYWludFVzaW5nQ29udGFpbmVyKHJlcGFp
bnRDb250YWluZXIsIEludFJlY3QobmV3Qm91bmRzLm1heFgoKSwgb2xkQm91bmRzLnkoKSwgLWRl
bHRhUmlnaHQsIG9sZEJvdW5kcy5oZWlnaHQoKSkpOwogCiAgICAgaW50IGRlbHRhVG9wID0gbmV3
Qm91bmRzLnkoKSAtIG9sZEJvdW5kcy55KCk7CiAgICAgaWYgKGRlbHRhVG9wID4gMCkKQEAgLTEz
OTAsMTEgKzEzOTAsMTEgQEAgYm9vbCBSZW5kZXJPYmplY3Q6OnJlcGFpbnRBZnRlckxheW91dElm
TgogICAgIGVsc2UgaWYgKGRlbHRhVG9wIDwgMCkKICAgICAgICAgcmVwYWludFVzaW5nQ29udGFp
bmVyKHJlcGFpbnRDb250YWluZXIsIEludFJlY3QobmV3Qm91bmRzLngoKSwgbmV3Qm91bmRzLnko
KSwgbmV3Qm91bmRzLndpZHRoKCksIC1kZWx0YVRvcCkpOwogCi0gICAgaW50IGRlbHRhQm90dG9t
ID0gbmV3Qm91bmRzLmJvdHRvbSgpIC0gb2xkQm91bmRzLmJvdHRvbSgpOworICAgIGludCBkZWx0
YUJvdHRvbSA9IG5ld0JvdW5kcy5tYXhZKCkgLSBvbGRCb3VuZHMubWF4WSgpOwogICAgIGlmIChk
ZWx0YUJvdHRvbSA+IDApCi0gICAgICAgIHJlcGFpbnRVc2luZ0NvbnRhaW5lcihyZXBhaW50Q29u
dGFpbmVyLCBJbnRSZWN0KG5ld0JvdW5kcy54KCksIG9sZEJvdW5kcy5ib3R0b20oKSwgbmV3Qm91
bmRzLndpZHRoKCksIGRlbHRhQm90dG9tKSk7CisgICAgICAgIHJlcGFpbnRVc2luZ0NvbnRhaW5l
cihyZXBhaW50Q29udGFpbmVyLCBJbnRSZWN0KG5ld0JvdW5kcy54KCksIG9sZEJvdW5kcy5tYXhZ
KCksIG5ld0JvdW5kcy53aWR0aCgpLCBkZWx0YUJvdHRvbSkpOwogICAgIGVsc2UgaWYgKGRlbHRh
Qm90dG9tIDwgMCkKLSAgICAgICAgcmVwYWludFVzaW5nQ29udGFpbmVyKHJlcGFpbnRDb250YWlu
ZXIsIEludFJlY3Qob2xkQm91bmRzLngoKSwgbmV3Qm91bmRzLmJvdHRvbSgpLCBvbGRCb3VuZHMu
d2lkdGgoKSwgLWRlbHRhQm90dG9tKSk7CisgICAgICAgIHJlcGFpbnRVc2luZ0NvbnRhaW5lcihy
ZXBhaW50Q29udGFpbmVyLCBJbnRSZWN0KG9sZEJvdW5kcy54KCksIG5ld0JvdW5kcy5tYXhZKCks
IG9sZEJvdW5kcy53aWR0aCgpLCAtZGVsdGFCb3R0b20pKTsKIAogICAgIGlmIChuZXdPdXRsaW5l
Qm94ID09IG9sZE91dGxpbmVCb3gpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTE0MTYsNyAr
MTQxNiw3IEBAIGJvb2wgUmVuZGVyT2JqZWN0OjpyZXBhaW50QWZ0ZXJMYXlvdXRJZk4KICAgICAg
ICAgICAgIG5ld091dGxpbmVCb3gueSgpLAogICAgICAgICAgICAgd2lkdGggKyBib3JkZXJXaWR0
aCwKICAgICAgICAgICAgIG1heChuZXdPdXRsaW5lQm94LmhlaWdodCgpLCBvbGRPdXRsaW5lQm94
LmhlaWdodCgpKSk7Ci0gICAgICAgIGludCByaWdodCA9IG1pbihuZXdCb3VuZHMucmlnaHQoKSwg
b2xkQm91bmRzLnJpZ2h0KCkpOworICAgICAgICBpbnQgcmlnaHQgPSBtaW4obmV3Qm91bmRzLm1h
eFgoKSwgb2xkQm91bmRzLm1heFgoKSk7CiAgICAgICAgIGlmIChyaWdodFJlY3QueCgpIDwgcmln
aHQpIHsKICAgICAgICAgICAgIHJpZ2h0UmVjdC5zZXRXaWR0aChtaW4ocmlnaHRSZWN0LndpZHRo
KCksIHJpZ2h0IC0gcmlnaHRSZWN0LngoKSkpOwogICAgICAgICAgICAgcmVwYWludFVzaW5nQ29u
dGFpbmVyKHJlcGFpbnRDb250YWluZXIsIHJpZ2h0UmVjdCk7CkBAIC0xNDMyLDEwICsxNDMyLDEw
IEBAIGJvb2wgUmVuZGVyT2JqZWN0OjpyZXBhaW50QWZ0ZXJMYXlvdXRJZk4KICAgICAgICAgaW50
IGJveEhlaWdodCA9IGlzQm94KCkgPyB0b1JlbmRlckJveCh0aGlzKS0+aGVpZ2h0KCkgOiAwOwog
ICAgICAgICBpbnQgYm9yZGVySGVpZ2h0ID0gbWF4KC1vdXRsaW5lU3R5bGUtPm91dGxpbmVPZmZz
ZXQoKSwgbWF4KGJvcmRlckJvdHRvbSwgbWF4KHN0eWxlKCktPmJvcmRlckJvdHRvbUxlZnRSYWRp
dXMoKS5oZWlnaHQoKS5jYWxjVmFsdWUoYm94SGVpZ2h0KSwgc3R5bGUoKS0+Ym9yZGVyQm90dG9t
UmlnaHRSYWRpdXMoKS5oZWlnaHQoKS5jYWxjVmFsdWUoYm94SGVpZ2h0KSkpKSArIG1heChvdywg
c2hhZG93Qm90dG9tKTsKICAgICAgICAgSW50UmVjdCBib3R0b21SZWN0KG5ld091dGxpbmVCb3gu
eCgpLAotICAgICAgICAgICAgbWluKG5ld091dGxpbmVCb3guYm90dG9tKCksIG9sZE91dGxpbmVC
b3guYm90dG9tKCkpIC0gYm9yZGVySGVpZ2h0LAorICAgICAgICAgICAgbWluKG5ld091dGxpbmVC
b3gubWF4WSgpLCBvbGRPdXRsaW5lQm94Lm1heFkoKSkgLSBib3JkZXJIZWlnaHQsCiAgICAgICAg
ICAgICBtYXgobmV3T3V0bGluZUJveC53aWR0aCgpLCBvbGRPdXRsaW5lQm94LndpZHRoKCkpLAog
ICAgICAgICAgICAgaGVpZ2h0ICsgYm9yZGVySGVpZ2h0KTsKLSAgICAgICAgaW50IGJvdHRvbSA9
IG1pbihuZXdCb3VuZHMuYm90dG9tKCksIG9sZEJvdW5kcy5ib3R0b20oKSk7CisgICAgICAgIGlu
dCBib3R0b20gPSBtaW4obmV3Qm91bmRzLm1heFkoKSwgb2xkQm91bmRzLm1heFkoKSk7CiAgICAg
ICAgIGlmIChib3R0b21SZWN0LnkoKSA8IGJvdHRvbSkgewogICAgICAgICAgICAgYm90dG9tUmVj
dC5zZXRIZWlnaHQobWluKGJvdHRvbVJlY3QuaGVpZ2h0KCksIGJvdHRvbSAtIGJvdHRvbVJlY3Qu
eSgpKSk7CiAgICAgICAgICAgICByZXBhaW50VXNpbmdDb250YWluZXIocmVwYWludENvbnRhaW5l
ciwgYm90dG9tUmVjdCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT3Zl
cmZsb3cuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT3Zl
cmZsb3cuaAkocmV2aXNpb24gNzcyNzgpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyT3ZlcmZsb3cuaAkod29ya2luZyBjb3B5KQpAQCAtNDIsMTMgKzQyLDEzIEBAIGNsYXNzIFJl
bmRlck92ZXJmbG93IHsKIHB1YmxpYzoKICAgICBSZW5kZXJPdmVyZmxvdyhjb25zdCBJbnRSZWN0
JiBsYXlvdXRSZWN0LCBjb25zdCBJbnRSZWN0JiB2aXN1YWxSZWN0KSAKICAgICAgICAgOiBtX3Rv
cExheW91dE92ZXJmbG93KGxheW91dFJlY3QueSgpKQotICAgICAgICAsIG1fYm90dG9tTGF5b3V0
T3ZlcmZsb3cobGF5b3V0UmVjdC5ib3R0b20oKSkKKyAgICAgICAgLCBtX2JvdHRvbUxheW91dE92
ZXJmbG93KGxheW91dFJlY3QubWF4WSgpKQogICAgICAgICAsIG1fbGVmdExheW91dE92ZXJmbG93
KGxheW91dFJlY3QueCgpKQotICAgICAgICAsIG1fcmlnaHRMYXlvdXRPdmVyZmxvdyhsYXlvdXRS
ZWN0LnJpZ2h0KCkpCisgICAgICAgICwgbV9yaWdodExheW91dE92ZXJmbG93KGxheW91dFJlY3Qu
bWF4WCgpKQogICAgICAgICAsIG1fdG9wVmlzdWFsT3ZlcmZsb3codmlzdWFsUmVjdC55KCkpCi0g
ICAgICAgICwgbV9ib3R0b21WaXN1YWxPdmVyZmxvdyh2aXN1YWxSZWN0LmJvdHRvbSgpKQorICAg
ICAgICAsIG1fYm90dG9tVmlzdWFsT3ZlcmZsb3codmlzdWFsUmVjdC5tYXhZKCkpCiAgICAgICAg
ICwgbV9sZWZ0VmlzdWFsT3ZlcmZsb3codmlzdWFsUmVjdC54KCkpCi0gICAgICAgICwgbV9yaWdo
dFZpc3VhbE92ZXJmbG93KHZpc3VhbFJlY3QucmlnaHQoKSkKKyAgICAgICAgLCBtX3JpZ2h0Vmlz
dWFsT3ZlcmZsb3codmlzdWFsUmVjdC5tYXhYKCkpCiAgICAgewogICAgIH0KICAgIApAQCAtMTIy
LDQxICsxMjIsNDEgQEAgaW5saW5lIHZvaWQgUmVuZGVyT3ZlcmZsb3c6Om1vdmUoaW50IGR4LAog
aW5saW5lIHZvaWQgUmVuZGVyT3ZlcmZsb3c6OmFkZExheW91dE92ZXJmbG93KGNvbnN0IEludFJl
Y3QmIHJlY3QpCiB7CiAgICAgbV90b3BMYXlvdXRPdmVyZmxvdyA9IHN0ZDo6bWluKHJlY3QueSgp
LCBtX3RvcExheW91dE92ZXJmbG93KTsKLSAgICBtX2JvdHRvbUxheW91dE92ZXJmbG93ID0gc3Rk
OjptYXgocmVjdC5ib3R0b20oKSwgbV9ib3R0b21MYXlvdXRPdmVyZmxvdyk7CisgICAgbV9ib3R0
b21MYXlvdXRPdmVyZmxvdyA9IHN0ZDo6bWF4KHJlY3QubWF4WSgpLCBtX2JvdHRvbUxheW91dE92
ZXJmbG93KTsKICAgICBtX2xlZnRMYXlvdXRPdmVyZmxvdyA9IHN0ZDo6bWluKHJlY3QueCgpLCBt
X2xlZnRMYXlvdXRPdmVyZmxvdyk7Ci0gICAgbV9yaWdodExheW91dE92ZXJmbG93ID0gc3RkOjpt
YXgocmVjdC5yaWdodCgpLCBtX3JpZ2h0TGF5b3V0T3ZlcmZsb3cpOworICAgIG1fcmlnaHRMYXlv
dXRPdmVyZmxvdyA9IHN0ZDo6bWF4KHJlY3QubWF4WCgpLCBtX3JpZ2h0TGF5b3V0T3ZlcmZsb3cp
OwogfQogCiBpbmxpbmUgdm9pZCBSZW5kZXJPdmVyZmxvdzo6YWRkVmlzdWFsT3ZlcmZsb3coY29u
c3QgSW50UmVjdCYgcmVjdCkKIHsKICAgICBtX3RvcFZpc3VhbE92ZXJmbG93ID0gc3RkOjptaW4o
cmVjdC55KCksIG1fdG9wVmlzdWFsT3ZlcmZsb3cpOwotICAgIG1fYm90dG9tVmlzdWFsT3ZlcmZs
b3cgPSBzdGQ6Om1heChyZWN0LmJvdHRvbSgpLCBtX2JvdHRvbVZpc3VhbE92ZXJmbG93KTsKKyAg
ICBtX2JvdHRvbVZpc3VhbE92ZXJmbG93ID0gc3RkOjptYXgocmVjdC5tYXhZKCksIG1fYm90dG9t
VmlzdWFsT3ZlcmZsb3cpOwogICAgIG1fbGVmdFZpc3VhbE92ZXJmbG93ID0gc3RkOjptaW4ocmVj
dC54KCksIG1fbGVmdFZpc3VhbE92ZXJmbG93KTsKLSAgICBtX3JpZ2h0VmlzdWFsT3ZlcmZsb3cg
PSBzdGQ6Om1heChyZWN0LnJpZ2h0KCksIG1fcmlnaHRWaXN1YWxPdmVyZmxvdyk7CisgICAgbV9y
aWdodFZpc3VhbE92ZXJmbG93ID0gc3RkOjptYXgocmVjdC5tYXhYKCksIG1fcmlnaHRWaXN1YWxP
dmVyZmxvdyk7CiB9CiAKIGlubGluZSB2b2lkIFJlbmRlck92ZXJmbG93OjpzZXRMYXlvdXRPdmVy
Zmxvdyhjb25zdCBJbnRSZWN0JiByZWN0KQogewogICAgIG1fdG9wTGF5b3V0T3ZlcmZsb3cgPSBy
ZWN0LnkoKTsKLSAgICBtX2JvdHRvbUxheW91dE92ZXJmbG93ID0gcmVjdC5ib3R0b20oKTsKKyAg
ICBtX2JvdHRvbUxheW91dE92ZXJmbG93ID0gcmVjdC5tYXhZKCk7CiAgICAgbV9sZWZ0TGF5b3V0
T3ZlcmZsb3cgPSByZWN0LngoKTsKLSAgICBtX3JpZ2h0TGF5b3V0T3ZlcmZsb3cgPSByZWN0LnJp
Z2h0KCk7CisgICAgbV9yaWdodExheW91dE92ZXJmbG93ID0gcmVjdC5tYXhYKCk7CiB9CiAKIGlu
bGluZSB2b2lkIFJlbmRlck92ZXJmbG93OjpzZXRWaXN1YWxPdmVyZmxvdyhjb25zdCBJbnRSZWN0
JiByZWN0KQogewogICAgIG1fdG9wVmlzdWFsT3ZlcmZsb3cgPSByZWN0LnkoKTsKLSAgICBtX2Jv
dHRvbVZpc3VhbE92ZXJmbG93ID0gcmVjdC5ib3R0b20oKTsKKyAgICBtX2JvdHRvbVZpc3VhbE92
ZXJmbG93ID0gcmVjdC5tYXhZKCk7CiAgICAgbV9sZWZ0VmlzdWFsT3ZlcmZsb3cgPSByZWN0Lngo
KTsKLSAgICBtX3JpZ2h0VmlzdWFsT3ZlcmZsb3cgPSByZWN0LnJpZ2h0KCk7CisgICAgbV9yaWdo
dFZpc3VhbE92ZXJmbG93ID0gcmVjdC5tYXhYKCk7CiB9CiAKIGlubGluZSB2b2lkIFJlbmRlck92
ZXJmbG93OjpyZXNldExheW91dE92ZXJmbG93KGNvbnN0IEludFJlY3QmIHJlY3QpCiB7CiAgICAg
bV90b3BMYXlvdXRPdmVyZmxvdyA9IHJlY3QueSgpOwotICAgIG1fYm90dG9tTGF5b3V0T3ZlcmZs
b3cgPSByZWN0LmJvdHRvbSgpOworICAgIG1fYm90dG9tTGF5b3V0T3ZlcmZsb3cgPSByZWN0Lm1h
eFkoKTsKICAgICBtX2xlZnRMYXlvdXRPdmVyZmxvdyA9IHJlY3QueCgpOwotICAgIG1fcmlnaHRM
YXlvdXRPdmVyZmxvdyA9IHJlY3QucmlnaHQoKTsKKyAgICBtX3JpZ2h0TGF5b3V0T3ZlcmZsb3cg
PSByZWN0Lm1heFgoKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJlcGxhY2VkLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVwbGFjZWQuY3BwCShyZXZpc2lvbiA3NzI3OCkK
KysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSZXBsYWNlZC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTE4Miw5ICsxODIsOSBAQCBib29sIFJlbmRlclJlcGxhY2VkOjpzaG91bGRQYWlu
dChQYWludEluCiAgICAgfQogICAgIAogICAgIGludCBvcyA9IDIgKiBtYXhpbWFsT3V0bGluZVNp
emUocGFpbnRJbmZvLnBoYXNlKTsKLSAgICBpZiAoY3VycmVudFRYICsgbGVmdFZpc3VhbE92ZXJm
bG93KCkgPj0gcGFpbnRJbmZvLnJlY3QucmlnaHQoKSArIG9zIHx8IGN1cnJlbnRUWCArIHJpZ2h0
VmlzdWFsT3ZlcmZsb3coKSA8PSBwYWludEluZm8ucmVjdC54KCkgLSBvcykKKyAgICBpZiAoY3Vy
cmVudFRYICsgbGVmdFZpc3VhbE92ZXJmbG93KCkgPj0gcGFpbnRJbmZvLnJlY3QubWF4WCgpICsg
b3MgfHwgY3VycmVudFRYICsgcmlnaHRWaXN1YWxPdmVyZmxvdygpIDw9IHBhaW50SW5mby5yZWN0
LngoKSAtIG9zKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKHRvcCA+PSBwYWludElu
Zm8ucmVjdC5ib3R0b20oKSArIG9zIHx8IGJvdHRvbSA8PSBwYWludEluZm8ucmVjdC55KCkgLSBv
cykKKyAgICBpZiAodG9wID49IHBhaW50SW5mby5yZWN0Lm1heFkoKSArIG9zIHx8IGJvdHRvbSA8
PSBwYWludEluZm8ucmVjdC55KCkgLSBvcykKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAg
cmV0dXJuIHRydWU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU2Nyb2xs
YmFyVGhlbWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJTY3JvbGxiYXJUaGVtZS5jcHAJKHJldmlzaW9uIDc3Mjc4KQorKysgU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclNjcm9sbGJhclRoZW1lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTgs
MTAgKzk4LDEwIEBAIEludFJlY3QgUmVuZGVyU2Nyb2xsYmFyVGhlbWU6OmNvbnN0cmFpblQKICAg
ICBJbnRSZWN0IHJlc3VsdCA9IHJlY3Q7CiAgICAgaWYgKHNjcm9sbGJhci0+b3JpZW50YXRpb24o
KSA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyKSB7CiAgICAgICAgIHJlc3VsdC5zZXRYKGJhY2tSZWN0
LngoKSk7Ci0gICAgICAgIHJlc3VsdC5zZXRXaWR0aChmb3J3YXJkUmVjdC5yaWdodCgpIC0gYmFj
a1JlY3QueCgpKTsKKyAgICAgICAgcmVzdWx0LnNldFdpZHRoKGZvcndhcmRSZWN0Lm1heFgoKSAt
IGJhY2tSZWN0LngoKSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgcmVzdWx0LnNldFkoYmFja1Jl
Y3QueSgpKTsKLSAgICAgICAgcmVzdWx0LnNldEhlaWdodChmb3J3YXJkUmVjdC5ib3R0b20oKSAt
IGJhY2tSZWN0LnkoKSk7CisgICAgICAgIHJlc3VsdC5zZXRIZWlnaHQoZm9yd2FyZFJlY3QubWF4
WSgpIC0gYmFja1JlY3QueSgpKTsKICAgICB9CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlLmNwcAkocmV2aXNpb24gNzcyNzgp
CisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00NTQsOSArNDU0LDkgQEAgdm9pZCBSZW5kZXJUYWJsZTo6cGFpbnQoUGFpbnRJbmZv
JiBwYWludAogICAgIFBhaW50UGhhc2UgcGFpbnRQaGFzZSA9IHBhaW50SW5mby5waGFzZTsKIAog
ICAgIGludCBvcyA9IDIgKiBtYXhpbWFsT3V0bGluZVNpemUocGFpbnRQaGFzZSk7Ci0gICAgaWYg
KHR5ICsgdG9wVmlzdWFsT3ZlcmZsb3coKSA+PSBwYWludEluZm8ucmVjdC5ib3R0b20oKSArIG9z
IHx8IHR5ICsgYm90dG9tVmlzdWFsT3ZlcmZsb3coKSA8PSBwYWludEluZm8ucmVjdC55KCkgLSBv
cykKKyAgICBpZiAodHkgKyB0b3BWaXN1YWxPdmVyZmxvdygpID49IHBhaW50SW5mby5yZWN0Lm1h
eFkoKSArIG9zIHx8IHR5ICsgYm90dG9tVmlzdWFsT3ZlcmZsb3coKSA8PSBwYWludEluZm8ucmVj
dC55KCkgLSBvcykKICAgICAgICAgcmV0dXJuOwotICAgIGlmICh0eCArIGxlZnRWaXN1YWxPdmVy
ZmxvdygpID49IHBhaW50SW5mby5yZWN0LnJpZ2h0KCkgKyBvcyB8fCB0eCArIHJpZ2h0VmlzdWFs
T3ZlcmZsb3coKSA8PSBwYWludEluZm8ucmVjdC54KCkgLSBvcykKKyAgICBpZiAodHggKyBsZWZ0
VmlzdWFsT3ZlcmZsb3coKSA+PSBwYWludEluZm8ucmVjdC5tYXhYKCkgKyBvcyB8fCB0eCArIHJp
Z2h0VmlzdWFsT3ZlcmZsb3coKSA8PSBwYWludEluZm8ucmVjdC54KCkgLSBvcykKICAgICAgICAg
cmV0dXJuOwogCiAgICAgYm9vbCBwdXNoZWRDbGlwID0gcHVzaENvbnRlbnRzQ2xpcChwYWludElu
Zm8sIHR4LCB0eSk7ICAgIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRh
YmxlQ2VsbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRhYmxlQ2VsbC5jcHAJKHJldmlzaW9uIDc3Mjc4KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRhYmxlQ2VsbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgwMyw4ICs4MDMsOCBA
QCB2b2lkIFJlbmRlclRhYmxlQ2VsbDo6cGFpbnQoUGFpbnRJbmZvJiBwCiAgICAgICAgIHR4ICs9
IHgoKTsKICAgICAgICAgdHkgKz0geSgpOwogICAgICAgICBpbnQgb3MgPSAyICogbWF4aW1hbE91
dGxpbmVTaXplKHBhaW50SW5mby5waGFzZSk7Ci0gICAgICAgIGlmICh0eSAtIHRhYmxlKCktPm91
dGVyQm9yZGVyVG9wKCkgPCBwYWludEluZm8ucmVjdC5ib3R0b20oKSArIG9zICYmCi0gICAgICAg
ICAgICB0eSArIGhlaWdodCgpICsgdGFibGUoKS0+b3V0ZXJCb3JkZXJCb3R0b20oKSA+IHBhaW50
SW5mby5yZWN0LnkoKSAtIG9zKQorICAgICAgICBpZiAodHkgLSB0YWJsZSgpLT5vdXRlckJvcmRl
clRvcCgpIDwgcGFpbnRJbmZvLnJlY3QubWF4WSgpICsgb3MKKyAgICAgICAgICAgICYmIHR5ICsg
aGVpZ2h0KCkgKyB0YWJsZSgpLT5vdXRlckJvcmRlckJvdHRvbSgpID4gcGFpbnRJbmZvLnJlY3Qu
eSgpIC0gb3MpCiAgICAgICAgICAgICBwYWludENvbGxhcHNlZEJvcmRlcihwYWludEluZm8uY29u
dGV4dCwgdHgsIHR5LCB3aWR0aCgpLCBoZWlnaHQoKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9
IApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlv
bi5jcHAJKHJldmlzaW9uIDc3Mjc4KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRhYmxlU2VjdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk2NCw5ICs5NjQsOSBAQCB2b2lk
IFJlbmRlclRhYmxlU2VjdGlvbjo6cGFpbnRPYmplY3QoUGFpCiAgICAgbG9jYWxSZXBhaW50UmVj
dC5tb3ZlKC10eCwgLXR5KTsKICAgICBpZiAoc3R5bGUoKS0+aXNGbGlwcGVkQmxvY2tzV3JpdGlu
Z01vZGUoKSkgewogICAgICAgICBpZiAoc3R5bGUoKS0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUo
KSkKLSAgICAgICAgICAgIGxvY2FsUmVwYWludFJlY3Quc2V0WShoZWlnaHQoKSAtIGxvY2FsUmVw
YWludFJlY3QuYm90dG9tKCkpOworICAgICAgICAgICAgbG9jYWxSZXBhaW50UmVjdC5zZXRZKGhl
aWdodCgpIC0gbG9jYWxSZXBhaW50UmVjdC5tYXhZKCkpOwogICAgICAgICBlbHNlCi0gICAgICAg
ICAgICBsb2NhbFJlcGFpbnRSZWN0LnNldFgod2lkdGgoKSAtIGxvY2FsUmVwYWludFJlY3Qucmln
aHQoKSk7CisgICAgICAgICAgICBsb2NhbFJlcGFpbnRSZWN0LnNldFgod2lkdGgoKSAtIGxvY2Fs
UmVwYWludFJlY3QubWF4WCgpKTsKICAgICB9CiAKICAgICAvLyBJZiBzb21lIGNlbGwgb3ZlcmZs
b3dzLCBqdXN0IHBhaW50IGFsbCBvZiB0aGVtLgpAQCAtOTgxLDcgKzk4MSw3IEBAIHZvaWQgUmVu
ZGVyVGFibGVTZWN0aW9uOjpwYWludE9iamVjdChQYWkKICAgICAgICAgaWYgKHN0YXJ0cm93ID09
IG1fcm93UG9zLnNpemUoKSB8fCAoc3RhcnRyb3cgPiAwICYmIChtX3Jvd1Bvc1tzdGFydHJvd10g
PiAgYmVmb3JlKSkpCiAgICAgICAgICAgLS1zdGFydHJvdzsKIAotICAgICAgICBpbnQgYWZ0ZXIg
PSAoc3R5bGUoKS0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IGxvY2FsUmVwYWludFJlY3Qu
Ym90dG9tKCkgOiBsb2NhbFJlcGFpbnRSZWN0LnJpZ2h0KCkpICsgb3M7CisgICAgICAgIGludCBh
ZnRlciA9IChzdHlsZSgpLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gbG9jYWxSZXBhaW50
UmVjdC5tYXhZKCkgOiBsb2NhbFJlcGFpbnRSZWN0Lm1heFgoKSkgKyBvczsKICAgICAgICAgZW5k
cm93ID0gc3RkOjpsb3dlcl9ib3VuZChtX3Jvd1Bvcy5iZWdpbigpLCBtX3Jvd1Bvcy5lbmQoKSwg
YWZ0ZXIpIC0gbV9yb3dQb3MuYmVnaW4oKTsKICAgICAgICAgaWYgKGVuZHJvdyA9PSBtX3Jvd1Bv
cy5zaXplKCkpCiAgICAgICAgICAgLS1lbmRyb3c7CkBAIC0xMDAwLDcgKzEwMDAsNyBAQCB2b2lk
IFJlbmRlclRhYmxlU2VjdGlvbjo6cGFpbnRPYmplY3QoUGFpCiAgICAgICAgIGlmICgoc3RhcnRj
b2wgPT0gY29sdW1uUG9zLnNpemUoKSkgfHwgKHN0YXJ0Y29sID4gMCAmJiAoY29sdW1uUG9zW3N0
YXJ0Y29sXSA+IHN0YXJ0KSkpCiAgICAgICAgICAgICAtLXN0YXJ0Y29sOwogCi0gICAgICAgIGlu
dCBlbmQgPSAoc3R5bGUoKS0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IGxvY2FsUmVwYWlu
dFJlY3QucmlnaHQoKSA6IGxvY2FsUmVwYWludFJlY3QuYm90dG9tKCkpICsgb3M7CisgICAgICAg
IGludCBlbmQgPSAoc3R5bGUoKS0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IGxvY2FsUmVw
YWludFJlY3QubWF4WCgpIDogbG9jYWxSZXBhaW50UmVjdC5tYXhZKCkpICsgb3M7CiAgICAgICAg
IGVuZGNvbCA9IHN0ZDo6bG93ZXJfYm91bmQoY29sdW1uUG9zLmJlZ2luKCksIGNvbHVtblBvcy5l
bmQoKSwgZW5kKSAtIGNvbHVtblBvcy5iZWdpbigpOwogICAgICAgICBpZiAoZW5kY29sID09IGNv
bHVtblBvcy5zaXplKCkpCiAgICAgICAgICAgICAtLWVuZGNvbDsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHAJKHJldmlzaW9uIDc3Mjc4KQorKysgU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNDgsOSAr
MzQ4LDkgQEAgdm9pZCBSZW5kZXJUZXh0OjphYnNvbHV0ZVF1YWRzKFZlY3RvcjxGbAogICAgICAg
ICBJbnRSZWN0IGVsbGlwc2lzUmVjdCA9IChvcHRpb24gPT0gQ2xpcFRvRWxsaXBzaXMpID8gZWxs
aXBzaXNSZWN0Rm9yQm94KGJveCwgMCwgdGV4dExlbmd0aCgpKSA6IEludFJlY3QoKTsKICAgICAg
ICAgaWYgKCFlbGxpcHNpc1JlY3QuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICBpZiAoc3R5bGUo
KS0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkKLSAgICAgICAgICAgICAgICBib3VuZGFyaWVz
LnNldFdpZHRoKGVsbGlwc2lzUmVjdC5yaWdodCgpIC0gYm91bmRhcmllcy54KCkpOworICAgICAg
ICAgICAgICAgIGJvdW5kYXJpZXMuc2V0V2lkdGgoZWxsaXBzaXNSZWN0Lm1heFgoKSAtIGJvdW5k
YXJpZXMueCgpKTsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBib3VuZGFyaWVz
LnNldEhlaWdodChlbGxpcHNpc1JlY3QuYm90dG9tKCkgLSBib3VuZGFyaWVzLnkoKSk7CisgICAg
ICAgICAgICAgICAgYm91bmRhcmllcy5zZXRIZWlnaHQoZWxsaXBzaXNSZWN0Lm1heFkoKSAtIGJv
dW5kYXJpZXMueSgpKTsKICAgICAgICAgfQogICAgICAgICBxdWFkcy5hcHBlbmQobG9jYWxUb0Fi
c29sdXRlUXVhZChGbG9hdFJlY3QoYm91bmRhcmllcykpKTsKICAgICB9CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVM
aW5lLmNwcAkocmV2aXNpb24gNzcyNzgpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzkzLDcgKzM5
Myw3IEBAIHZvaWQgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpmb3J3YXIKICNlbmRpZgog
CiAgICAgRmxvYXRQb2ludCBsb2NhbFBvaW50ID0gaW5uZXJUZXh0UmVuZGVyZXItPmFic29sdXRl
VG9Mb2NhbChzdGF0aWNfY2FzdDxNb3VzZUV2ZW50Kj4oZXZlbnQpLT5hYnNvbHV0ZUxvY2F0aW9u
KCksIGZhbHNlLCB0cnVlKTsKLSAgICBpbnQgdGV4dFJpZ2h0ID0gaW5uZXJUZXh0UmVuZGVyZXIt
PmJvcmRlckJveFJlY3QoKS5yaWdodCgpOworICAgIGludCB0ZXh0UmlnaHQgPSBpbm5lclRleHRS
ZW5kZXJlci0+Ym9yZGVyQm94UmVjdCgpLm1heFgoKTsKIAogICAgIGlmIChtX3Jlc3VsdHNCdXR0
b24gJiYgbG9jYWxQb2ludC54KCkgPCBpbm5lclRleHRSZW5kZXJlci0+Ym9yZGVyQm94UmVjdCgp
LngoKSkKICAgICAgICAgbV9yZXN1bHRzQnV0dG9uLT5kZWZhdWx0RXZlbnRIYW5kbGVyKGV2ZW50
KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5tbQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMubW0JKHJl
dmlzaW9uIDc3Mjc4KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFj
Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xMDQxLDIwICsxMDQxLDIwIEBAIHZvaWQgUmVuZGVyVGhl
bWVNYWM6OnBhaW50TWVudUxpc3RCdXR0b24KICAgICBGbG9hdFJlY3QgdG9wR3JhZGllbnQoci54
KCksIHIueSgpLCByLndpZHRoKCksIHIuaGVpZ2h0KCkgLyAyLjBmKTsKICAgICBzdHJ1Y3QgQ0dG
dW5jdGlvbkNhbGxiYWNrcyB0b3BDYWxsYmFja3MgPSB7IDAsIFRvcEdyYWRpZW50SW50ZXJwb2xh
dGUsIE5VTEwgfTsKICAgICBSZXRhaW5QdHI8Q0dGdW5jdGlvblJlZj4gdG9wRnVuY3Rpb24oQWRv
cHRDRiwgQ0dGdW5jdGlvbkNyZWF0ZShOVUxMLCAxLCBOVUxMLCA0LCBOVUxMLCAmdG9wQ2FsbGJh
Y2tzKSk7Ci0gICAgUmV0YWluUHRyPENHU2hhZGluZ1JlZj4gdG9wU2hhZGluZyhBZG9wdENGLCBD
R1NoYWRpbmdDcmVhdGVBeGlhbChjc3BhY2UsIENHUG9pbnRNYWtlKHRvcEdyYWRpZW50LngoKSwg
dG9wR3JhZGllbnQueSgpKSwgQ0dQb2ludE1ha2UodG9wR3JhZGllbnQueCgpLCB0b3BHcmFkaWVu
dC5ib3R0b20oKSksIHRvcEZ1bmN0aW9uLmdldCgpLCBmYWxzZSwgZmFsc2UpKTsKKyAgICBSZXRh
aW5QdHI8Q0dTaGFkaW5nUmVmPiB0b3BTaGFkaW5nKEFkb3B0Q0YsIENHU2hhZGluZ0NyZWF0ZUF4
aWFsKGNzcGFjZSwgQ0dQb2ludE1ha2UodG9wR3JhZGllbnQueCgpLCB0b3BHcmFkaWVudC55KCkp
LCBDR1BvaW50TWFrZSh0b3BHcmFkaWVudC54KCksIHRvcEdyYWRpZW50Lm1heFkoKSksIHRvcEZ1
bmN0aW9uLmdldCgpLCBmYWxzZSwgZmFsc2UpKTsKIAogICAgIEZsb2F0UmVjdCBib3R0b21HcmFk
aWVudChyLngoKSArIHJhZGl1cywgci55KCkgKyByLmhlaWdodCgpIC8gMi4wZiwgci53aWR0aCgp
IC0gMi4wZiAqIHJhZGl1cywgci5oZWlnaHQoKSAvIDIuMGYpOwogICAgIHN0cnVjdCBDR0Z1bmN0
aW9uQ2FsbGJhY2tzIGJvdHRvbUNhbGxiYWNrcyA9IHsgMCwgQm90dG9tR3JhZGllbnRJbnRlcnBv
bGF0ZSwgTlVMTCB9OwogICAgIFJldGFpblB0cjxDR0Z1bmN0aW9uUmVmPiBib3R0b21GdW5jdGlv
bihBZG9wdENGLCBDR0Z1bmN0aW9uQ3JlYXRlKE5VTEwsIDEsIE5VTEwsIDQsIE5VTEwsICZib3R0
b21DYWxsYmFja3MpKTsKLSAgICBSZXRhaW5QdHI8Q0dTaGFkaW5nUmVmPiBib3R0b21TaGFkaW5n
KEFkb3B0Q0YsIENHU2hhZGluZ0NyZWF0ZUF4aWFsKGNzcGFjZSwgQ0dQb2ludE1ha2UoYm90dG9t
R3JhZGllbnQueCgpLCAgYm90dG9tR3JhZGllbnQueSgpKSwgQ0dQb2ludE1ha2UoYm90dG9tR3Jh
ZGllbnQueCgpLCBib3R0b21HcmFkaWVudC5ib3R0b20oKSksIGJvdHRvbUZ1bmN0aW9uLmdldCgp
LCBmYWxzZSwgZmFsc2UpKTsKKyAgICBSZXRhaW5QdHI8Q0dTaGFkaW5nUmVmPiBib3R0b21TaGFk
aW5nKEFkb3B0Q0YsIENHU2hhZGluZ0NyZWF0ZUF4aWFsKGNzcGFjZSwgQ0dQb2ludE1ha2UoYm90
dG9tR3JhZGllbnQueCgpLCAgYm90dG9tR3JhZGllbnQueSgpKSwgQ0dQb2ludE1ha2UoYm90dG9t
R3JhZGllbnQueCgpLCBib3R0b21HcmFkaWVudC5tYXhZKCkpLCBib3R0b21GdW5jdGlvbi5nZXQo
KSwgZmFsc2UsIGZhbHNlKSk7CiAKICAgICBzdHJ1Y3QgQ0dGdW5jdGlvbkNhbGxiYWNrcyBtYWlu
Q2FsbGJhY2tzID0geyAwLCBNYWluR3JhZGllbnRJbnRlcnBvbGF0ZSwgTlVMTCB9OwogICAgIFJl
dGFpblB0cjxDR0Z1bmN0aW9uUmVmPiBtYWluRnVuY3Rpb24oQWRvcHRDRiwgQ0dGdW5jdGlvbkNy
ZWF0ZShOVUxMLCAxLCBOVUxMLCA0LCBOVUxMLCAmbWFpbkNhbGxiYWNrcykpOwotICAgIFJldGFp
blB0cjxDR1NoYWRpbmdSZWY+IG1haW5TaGFkaW5nKEFkb3B0Q0YsIENHU2hhZGluZ0NyZWF0ZUF4
aWFsKGNzcGFjZSwgQ0dQb2ludE1ha2Uoci54KCksICByLnkoKSksIENHUG9pbnRNYWtlKHIueCgp
LCByLmJvdHRvbSgpKSwgbWFpbkZ1bmN0aW9uLmdldCgpLCBmYWxzZSwgZmFsc2UpKTsKKyAgICBS
ZXRhaW5QdHI8Q0dTaGFkaW5nUmVmPiBtYWluU2hhZGluZyhBZG9wdENGLCBDR1NoYWRpbmdDcmVh
dGVBeGlhbChjc3BhY2UsIENHUG9pbnRNYWtlKHIueCgpLCAgci55KCkpLCBDR1BvaW50TWFrZShy
LngoKSwgci5tYXhZKCkpLCBtYWluRnVuY3Rpb24uZ2V0KCksIGZhbHNlLCBmYWxzZSkpOwogCiAg
ICAgUmV0YWluUHRyPENHU2hhZGluZ1JlZj4gbGVmdFNoYWRpbmcoQWRvcHRDRiwgQ0dTaGFkaW5n
Q3JlYXRlQXhpYWwoY3NwYWNlLCBDR1BvaW50TWFrZShyLngoKSwgIHIueSgpKSwgQ0dQb2ludE1h
a2Uoci54KCkgKyByYWRpdXMsIHIueSgpKSwgbWFpbkZ1bmN0aW9uLmdldCgpLCBmYWxzZSwgZmFs
c2UpKTsKIAotICAgIFJldGFpblB0cjxDR1NoYWRpbmdSZWY+IHJpZ2h0U2hhZGluZyhBZG9wdENG
LCBDR1NoYWRpbmdDcmVhdGVBeGlhbChjc3BhY2UsIENHUG9pbnRNYWtlKHIucmlnaHQoKSwgIHIu
eSgpKSwgQ0dQb2ludE1ha2Uoci5yaWdodCgpIC0gcmFkaXVzLCByLnkoKSksIG1haW5GdW5jdGlv
bi5nZXQoKSwgZmFsc2UsIGZhbHNlKSk7CisgICAgUmV0YWluUHRyPENHU2hhZGluZ1JlZj4gcmln
aHRTaGFkaW5nKEFkb3B0Q0YsIENHU2hhZGluZ0NyZWF0ZUF4aWFsKGNzcGFjZSwgQ0dQb2ludE1h
a2Uoci5tYXhYKCksICByLnkoKSksIENHUG9pbnRNYWtlKHIubWF4WCgpIC0gcmFkaXVzLCByLnko
KSksIG1haW5GdW5jdGlvbi5nZXQoKSwgZmFsc2UsIGZhbHNlKSk7CiAgICAgcGFpbnRJbmZvLmNv
bnRleHQtPnNhdmUoKTsKICAgICBDR0NvbnRleHRDbGlwVG9SZWN0KGNvbnRleHQsIHIpOwogICAg
IHBhaW50SW5mby5jb250ZXh0LT5hZGRSb3VuZGVkUmVjdENsaXAoYm9yZGVyKTsKQEAgLTEwOTks
NyArMTA5OSw3IEBAIGJvb2wgUmVuZGVyVGhlbWVNYWM6OnBhaW50TWVudUxpc3RCdXR0b24KICAg
ICBmbG9hdCBjZW50ZXJZID0gYm91bmRzLnkoKSArIGJvdW5kcy5oZWlnaHQoKSAvIDIuMGY7CiAg
ICAgZmxvYXQgYXJyb3dIZWlnaHQgPSBiYXNlQXJyb3dIZWlnaHQgKiBmb250U2NhbGU7CiAgICAg
ZmxvYXQgYXJyb3dXaWR0aCA9IGJhc2VBcnJvd1dpZHRoICogZm9udFNjYWxlOwotICAgIGZsb2F0
IGxlZnRFZGdlID0gYm91bmRzLnJpZ2h0KCkgLSBhcnJvd1BhZGRpbmdSaWdodCAqIG8tPnN0eWxl
KCktPmVmZmVjdGl2ZVpvb20oKSAtIGFycm93V2lkdGg7CisgICAgZmxvYXQgbGVmdEVkZ2UgPSBi
b3VuZHMubWF4WCgpIC0gYXJyb3dQYWRkaW5nUmlnaHQgKiBvLT5zdHlsZSgpLT5lZmZlY3RpdmVa
b29tKCkgLSBhcnJvd1dpZHRoOwogICAgIGZsb2F0IHNwYWNlQmV0d2VlbkFycm93cyA9IGJhc2VT
cGFjZUJldHdlZW5BcnJvd3MgKiBmb250U2NhbGU7CiAKICAgICBpZiAoYm91bmRzLndpZHRoKCkg
PCBhcnJvd1dpZHRoICsgYXJyb3dQYWRkaW5nTGVmdCAqIG8tPnN0eWxlKCktPmVmZmVjdGl2ZVpv
b20oKSkKQEAgLTExMzgsMTEgKzExMzgsMTEgQEAgYm9vbCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRN
ZW51TGlzdEJ1dHRvbgogICAgIHBhaW50SW5mby5jb250ZXh0LT5zZXRTdHJva2VTdHlsZShTb2xp
ZFN0cm9rZSk7CiAgICAgcGFpbnRJbmZvLmNvbnRleHQtPnNldFN0cm9rZUNvbG9yKGxlZnRTZXBh
cmF0b3JDb2xvciwgQ29sb3JTcGFjZURldmljZVJHQik7CiAgICAgcGFpbnRJbmZvLmNvbnRleHQt
PmRyYXdMaW5lKEludFBvaW50KGxlZnRFZGdlT2ZTZXBhcmF0b3IsIGJvdW5kcy55KCkpLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRQb2ludChsZWZ0RWRnZU9mU2VwYXJhdG9y
LCBib3VuZHMuYm90dG9tKCkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW50
UG9pbnQobGVmdEVkZ2VPZlNlcGFyYXRvciwgYm91bmRzLm1heFkoKSkpOwogCiAgICAgcGFpbnRJ
bmZvLmNvbnRleHQtPnNldFN0cm9rZUNvbG9yKHJpZ2h0U2VwYXJhdG9yQ29sb3IsIENvbG9yU3Bh
Y2VEZXZpY2VSR0IpOwogICAgIHBhaW50SW5mby5jb250ZXh0LT5kcmF3TGluZShJbnRQb2ludChs
ZWZ0RWRnZU9mU2VwYXJhdG9yICsgc2VwYXJhdG9yU3BhY2UsIGJvdW5kcy55KCkpLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRQb2ludChsZWZ0RWRnZU9mU2VwYXJhdG9yICsg
c2VwYXJhdG9yU3BhY2UsIGJvdW5kcy5ib3R0b20oKSkpOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBJbnRQb2ludChsZWZ0RWRnZU9mU2VwYXJhdG9yICsgc2VwYXJhdG9yU3BhY2Us
IGJvdW5kcy5tYXhZKCkpKTsKIAogICAgIHBhaW50SW5mby5jb250ZXh0LT5yZXN0b3JlKCk7CiAg
ICAgcmV0dXJuIGZhbHNlOwpAQCAtMTI5Myw5ICsxMjkzLDkgQEAgYm9vbCBSZW5kZXJUaGVtZU1h
Yzo6cGFpbnRTbGlkZXJUcmFjayhSZQogICAgIFJldGFpblB0cjxDR0Z1bmN0aW9uUmVmPiBtYWlu
RnVuY3Rpb24oQWRvcHRDRiwgQ0dGdW5jdGlvbkNyZWF0ZShOVUxMLCAxLCBOVUxMLCA0LCBOVUxM
LCAmbWFpbkNhbGxiYWNrcykpOwogICAgIFJldGFpblB0cjxDR1NoYWRpbmdSZWY+IG1haW5TaGFk
aW5nOwogICAgIGlmIChvLT5zdHlsZSgpLT5hcHBlYXJhbmNlKCkgPT0gU2xpZGVyVmVydGljYWxQ
YXJ0KQotICAgICAgICBtYWluU2hhZGluZy5hZG9wdENGKENHU2hhZGluZ0NyZWF0ZUF4aWFsKGNz
cGFjZSwgQ0dQb2ludE1ha2UoYm91bmRzLngoKSwgIGJvdW5kcy5ib3R0b20oKSksIENHUG9pbnRN
YWtlKGJvdW5kcy5yaWdodCgpLCBib3VuZHMuYm90dG9tKCkpLCBtYWluRnVuY3Rpb24uZ2V0KCks
IGZhbHNlLCBmYWxzZSkpOworICAgICAgICBtYWluU2hhZGluZy5hZG9wdENGKENHU2hhZGluZ0Ny
ZWF0ZUF4aWFsKGNzcGFjZSwgQ0dQb2ludE1ha2UoYm91bmRzLngoKSwgIGJvdW5kcy5tYXhZKCkp
LCBDR1BvaW50TWFrZShib3VuZHMubWF4WCgpLCBib3VuZHMubWF4WSgpKSwgbWFpbkZ1bmN0aW9u
LmdldCgpLCBmYWxzZSwgZmFsc2UpKTsKICAgICBlbHNlCi0gICAgICAgIG1haW5TaGFkaW5nLmFk
b3B0Q0YoQ0dTaGFkaW5nQ3JlYXRlQXhpYWwoY3NwYWNlLCBDR1BvaW50TWFrZShib3VuZHMueCgp
LCAgYm91bmRzLnkoKSksIENHUG9pbnRNYWtlKGJvdW5kcy54KCksIGJvdW5kcy5ib3R0b20oKSks
IG1haW5GdW5jdGlvbi5nZXQoKSwgZmFsc2UsIGZhbHNlKSk7CisgICAgICAgIG1haW5TaGFkaW5n
LmFkb3B0Q0YoQ0dTaGFkaW5nQ3JlYXRlQXhpYWwoY3NwYWNlLCBDR1BvaW50TWFrZShib3VuZHMu
eCgpLCAgYm91bmRzLnkoKSksIENHUG9pbnRNYWtlKGJvdW5kcy54KCksIGJvdW5kcy5tYXhZKCkp
LCBtYWluRnVuY3Rpb24uZ2V0KCksIGZhbHNlLCBmYWxzZSkpOwogCiAgICAgSW50U2l6ZSByYWRp
dXModHJhY2tSYWRpdXMsIHRyYWNrUmFkaXVzKTsKICAgICBwYWludEluZm8uY29udGV4dC0+YWRk
Um91bmRlZFJlY3RDbGlwKFJvdW5kZWRJbnRSZWN0KGJvdW5kcywgcmFkaXVzLCByYWRpdXMsIHJh
ZGl1cywgcmFkaXVzKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmll
dy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZXcu
Y3BwCShyZXZpc2lvbiA3NzI3OCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJW
aWV3LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzA0LDkgKzMwNCw5IEBAIHZvaWQgUmVuZGVyVmll
dzo6Y29tcHV0ZVJlY3RGb3JSZXBhaW50KFIKICAgICAgICAgLy8gV2UgaGF2ZSB0byBmbGlwIGJ5
IGhhbmQgc2luY2UgdGhlIHZpZXcncyBsb2dpY2FsIGhlaWdodCBoYXMgbm90IGJlZW4gZGV0ZXJt
aW5lZC4gIFdlCiAgICAgICAgIC8vIGNhbiB1c2UgdGhlIHZpZXdwb3J0IHdpZHRoIGFuZCBoZWln
aHQuCiAgICAgICAgIGlmIChzdHlsZSgpLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpKQotICAg
ICAgICAgICAgcmVjdC5zZXRZKHZpZXdIZWlnaHQoKSAtIHJlY3QuYm90dG9tKCkpOworICAgICAg
ICAgICAgcmVjdC5zZXRZKHZpZXdIZWlnaHQoKSAtIHJlY3QubWF4WSgpKTsKICAgICAgICAgZWxz
ZQotICAgICAgICAgICAgcmVjdC5zZXRYKHZpZXdXaWR0aCgpIC0gcmVjdC5yaWdodCgpKTsKKyAg
ICAgICAgICAgIHJlY3Quc2V0WCh2aWV3V2lkdGgoKSAtIHJlY3QubWF4WCgpKTsKICAgICB9CiAK
ICAgICBpZiAoZml4ZWQgJiYgbV9mcmFtZVZpZXcpCkBAIC02NjQsNyArNjY0LDcgQEAgaW50IFJl
bmRlclZpZXc6OmRvY0JvdHRvbSgpIGNvbnN0CiAgICAgZmxpcEZvcldyaXRpbmdNb2RlKG92ZXJm
bG93UmVjdCk7CiAgICAgaWYgKGhhc1RyYW5zZm9ybSgpKQogICAgICAgICBvdmVyZmxvd1JlY3Qg
PSBsYXllcigpLT5jdXJyZW50VHJhbnNmb3JtKCkubWFwUmVjdChvdmVyZmxvd1JlY3QpOwotICAg
IHJldHVybiBvdmVyZmxvd1JlY3QuYm90dG9tKCk7CisgICAgcmV0dXJuIG92ZXJmbG93UmVjdC5t
YXhZKCk7CiB9CiAKIGludCBSZW5kZXJWaWV3Ojpkb2NMZWZ0KCkgY29uc3QKQEAgLTY4Miw3ICs2
ODIsNyBAQCBpbnQgUmVuZGVyVmlldzo6ZG9jUmlnaHQoKSBjb25zdAogICAgIGZsaXBGb3JXcml0
aW5nTW9kZShvdmVyZmxvd1JlY3QpOwogICAgIGlmIChoYXNUcmFuc2Zvcm0oKSkKICAgICAgICAg
b3ZlcmZsb3dSZWN0ID0gbGF5ZXIoKS0+Y3VycmVudFRyYW5zZm9ybSgpLm1hcFJlY3Qob3ZlcmZs
b3dSZWN0KTsKLSAgICByZXR1cm4gb3ZlcmZsb3dSZWN0LnJpZ2h0KCk7CisgICAgcmV0dXJuIG92
ZXJmbG93UmVjdC5tYXhYKCk7CiB9CiAKIGludCBSZW5kZXJWaWV3Ojp2aWV3SGVpZ2h0KCkgY29u
c3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Sb290SW5saW5lQm94LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUm9vdElubGluZUJveC5jcHAJKHJl
dmlzaW9uIDc3Mjc4KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jvb3RJbmxpbmVCb3gu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NDQsMTQgKzU0NCwxNCBAQCBJbnRSZWN0IFJvb3RJbmxp
bmVCb3g6OnBhZGRlZExheW91dE92ZXJmCiAgICAgCiAgICAgaWYgKGlzSG9yaXpvbnRhbCgpKSB7
CiAgICAgICAgIGlmIChpc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkpCi0gICAgICAgICAgICBsaW5l
TGF5b3V0T3ZlcmZsb3cuc2hpZnRSaWdodEVkZ2VUbyhtYXgobGluZUxheW91dE92ZXJmbG93LnJp
Z2h0KCksIGxvZ2ljYWxSaWdodCgpICsgZW5kUGFkZGluZykpOworICAgICAgICAgICAgbGluZUxh
eW91dE92ZXJmbG93LnNoaWZ0TWF4WEVkZ2VUbyhtYXgobGluZUxheW91dE92ZXJmbG93Lm1heFgo
KSwgbG9naWNhbFJpZ2h0KCkgKyBlbmRQYWRkaW5nKSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAg
ICAgIGxpbmVMYXlvdXRPdmVyZmxvdy5zaGlmdExlZnRFZGdlVG8obWluKGxpbmVMYXlvdXRPdmVy
Zmxvdy54KCksIGxvZ2ljYWxMZWZ0KCkgLSBlbmRQYWRkaW5nKSk7CisgICAgICAgICAgICBsaW5l
TGF5b3V0T3ZlcmZsb3cuc2hpZnRYRWRnZVRvKG1pbihsaW5lTGF5b3V0T3ZlcmZsb3cueCgpLCBs
b2dpY2FsTGVmdCgpIC0gZW5kUGFkZGluZykpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIGlmIChp
c0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkpCi0gICAgICAgICAgICBsaW5lTGF5b3V0T3ZlcmZsb3cu
c2hpZnRCb3R0b21FZGdlVG8obWF4KGxpbmVMYXlvdXRPdmVyZmxvdy5ib3R0b20oKSwgbG9naWNh
bFJpZ2h0KCkgKyBlbmRQYWRkaW5nKSk7CisgICAgICAgICAgICBsaW5lTGF5b3V0T3ZlcmZsb3cu
c2hpZnRNYXhZRWRnZVRvKG1heChsaW5lTGF5b3V0T3ZlcmZsb3cubWF4WSgpLCBsb2dpY2FsUmln
aHQoKSArIGVuZFBhZGRpbmcpKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgbGluZUxheW91
dE92ZXJmbG93LnNoaWZ0VG9wRWRnZVRvKG1pbihsaW5lTGF5b3V0T3ZlcmZsb3cueSgpLCBsb2dp
Y2FsUmlnaHQoKSAtIGVuZFBhZGRpbmcpKTsKKyAgICAgICAgICAgIGxpbmVMYXlvdXRPdmVyZmxv
dy5zaGlmdFlFZGdlVG8obWluKGxpbmVMYXlvdXRPdmVyZmxvdy55KCksIGxvZ2ljYWxSaWdodCgp
IC0gZW5kUGFkZGluZykpOwogICAgIH0KICAgICAKICAgICByZXR1cm4gbGluZUxheW91dE92ZXJm
bG93OwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdJbmxpbmVU
ZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRl
clNWR0lubGluZVRleHQuY3BwCShyZXZpc2lvbiA3NzI3OCkKKysrIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdmcvUmVuZGVyU1ZHSW5saW5lVGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEw
MywxMiArMTAzLDEyIEBAIEludFJlY3QgUmVuZGVyU1ZHSW5saW5lVGV4dDo6bG9jYWxDYXJldFIK
ICAgICAvLyBVc2UgdGhlIGVkZ2Ugb2YgdGhlIHNlbGVjdGlvbiByZWN0IHRvIGRldGVybWluZSB0
aGUgY2FyZXQgcmVjdC4KICAgICBpZiAoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGNhcmV0T2Zmc2V0
KSA8IHRleHRCb3gtPnN0YXJ0KCkgKyB0ZXh0Qm94LT5sZW4oKSkgewogICAgICAgICBJbnRSZWN0
IHJlY3QgPSB0ZXh0Qm94LT5zZWxlY3Rpb25SZWN0KDAsIDAsIGNhcmV0T2Zmc2V0LCBjYXJldE9m
ZnNldCArIDEpOwotICAgICAgICBpbnQgeCA9IGJveC0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigp
ID8gcmVjdC54KCkgOiByZWN0LnJpZ2h0KCk7CisgICAgICAgIGludCB4ID0gYm94LT5pc0xlZnRU
b1JpZ2h0RGlyZWN0aW9uKCkgPyByZWN0LngoKSA6IHJlY3QubWF4WCgpOwogICAgICAgICByZXR1
cm4gSW50UmVjdCh4LCByZWN0LnkoKSwgY2FyZXRXaWR0aCwgcmVjdC5oZWlnaHQoKSk7CiAgICAg
fQogCiAgICAgSW50UmVjdCByZWN0ID0gdGV4dEJveC0+c2VsZWN0aW9uUmVjdCgwLCAwLCBjYXJl
dE9mZnNldCAtIDEsIGNhcmV0T2Zmc2V0KTsKLSAgICBpbnQgeCA9IGJveC0+aXNMZWZ0VG9SaWdo
dERpcmVjdGlvbigpID8gcmVjdC5yaWdodCgpIDogcmVjdC54KCk7CisgICAgaW50IHggPSBib3gt
PmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/IHJlY3QubWF4WCgpIDogcmVjdC54KCk7CiAgICAg
cmV0dXJuIEludFJlY3QoeCwgcmVjdC55KCksIGNhcmV0V2lkdGgsIHJlY3QuaGVpZ2h0KCkpOwog
fQogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9SZWdpb24uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL1JlZ2lvbi5jcHAJKHJldmlzaW9uIDc3Mjc4KQor
KysgU291cmNlL1dlYktpdDIvUGxhdGZvcm0vUmVnaW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NzMsOCArNzMsOCBAQCBSZWdpb246OlNoYXBlOjpTaGFwZShjb25zdCBJbnRSZWN0JiByZWN0CiB7
CiAgICAgYXBwZW5kU3BhbihyZWN0LnkoKSk7CiAgICAgYXBwZW5kU2VnbWVudChyZWN0LngoKSk7
Ci0gICAgYXBwZW5kU2VnbWVudChyZWN0LnJpZ2h0KCkpOwotICAgIGFwcGVuZFNwYW4ocmVjdC5i
b3R0b20oKSk7CisgICAgYXBwZW5kU2VnbWVudChyZWN0Lm1heFgoKSk7CisgICAgYXBwZW5kU3Bh
bihyZWN0Lm1heFkoKSk7CiB9CiAKIHZvaWQgUmVnaW9uOjpTaGFwZTo6YXBwZW5kU3BhbihpbnQg
eSkKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9GaW5kSW5kaWNhdG9yLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvRmluZEluZGljYXRvci5jcHAJKHJl
dmlzaW9uIDc3Mjc4KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0ZpbmRJbmRpY2F0b3Iu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTcsNyArMTU3LDcgQEAgdm9pZCBGaW5kSW5kaWNhdG9y
OjpkcmF3KEdyYXBoaWNzQ29udGV4dAogICAgICAgICBncmFwaGljc0NvbnRleHQuc2F2ZSgpOwog
ICAgICAgICBGbG9hdFJlY3QgaW5uZXJQYXRoUmVjdCA9IGluZmxhdGVSZWN0KHRleHRSZWN0LCBo
b3Jpem9udGFsUGFkZGluZ0luc2lkZUxpZ2h0Qm9yZGVyLCB2ZXJ0aWNhbFBhZGRpbmdJbnNpZGVM
aWdodEJvcmRlcik7CiAgICAgICAgIGdyYXBoaWNzQ29udGV4dC5jbGlwKHBhdGhXaXRoUm91bmRl
ZFJlY3QoaW5uZXJQYXRoUmVjdCwgY29ybmVyUmFkaXVzKSk7Ci0gICAgICAgIFJlZlB0cjxHcmFk
aWVudD4gZ3JhZGllbnQgPSBHcmFkaWVudDo6Y3JlYXRlKEZsb2F0UG9pbnQoaW5uZXJQYXRoUmVj
dC54KCksIGlubmVyUGF0aFJlY3QueSgpKSwgRmxvYXRQb2ludChpbm5lclBhdGhSZWN0LngoKSwg
aW5uZXJQYXRoUmVjdC5ib3R0b20oKSkpOworICAgICAgICBSZWZQdHI8R3JhZGllbnQ+IGdyYWRp
ZW50ID0gR3JhZGllbnQ6OmNyZWF0ZShGbG9hdFBvaW50KGlubmVyUGF0aFJlY3QueCgpLCBpbm5l
clBhdGhSZWN0LnkoKSksIEZsb2F0UG9pbnQoaW5uZXJQYXRoUmVjdC54KCksIGlubmVyUGF0aFJl
Y3QubWF4WSgpKSk7CiAgICAgICAgIGdyYWRpZW50LT5hZGRDb2xvclN0b3AoMCwgZ3JhZGllbnRM
aWdodENvbG9yKCkpOwogICAgICAgICBncmFkaWVudC0+YWRkQ29sb3JTdG9wKDEsIGdyYWRpZW50
RGFya0NvbG9yKCkpOwogICAgICAgICBncmFwaGljc0NvbnRleHQuc2V0RmlsbEdyYWRpZW50KGdy
YWRpZW50KTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1dLUHJpbnRp
bmdWaWV3Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFj
L1dLUHJpbnRpbmdWaWV3Lm1tCShyZXZpc2lvbiA3NzI3OCkKKysrIFNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvbWFjL1dLUHJpbnRpbmdWaWV3Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yMzMs
OCArMjMzLDggQEAgc3RhdGljIHZvaWQgcGFnZURpZENvbXB1dGVQYWdlUmVjdHMoY29ucwogCiAg
ICAgICAgIGNvbnN0IEludFJlY3QmIGxhc3RQcmludGluZ1BhZ2VSZWN0ID0gdmlldy0+X3ByaW50
aW5nUGFnZVJlY3RzW3ZpZXctPl9wcmludGluZ1BhZ2VSZWN0cy5zaXplKCkgLSAxXTsKICAgICAg
ICAgTlNSZWN0IG5ld0ZyYW1lU2l6ZSA9IE5TTWFrZVJlY3QoMCwgMCwgCi0gICAgICAgICAgICBj
ZWlsKGxhc3RQcmludGluZ1BhZ2VSZWN0LnJpZ2h0KCkgKiB2aWV3LT5fdG90YWxTY2FsZUZhY3Rv
ckZvclByaW50aW5nKSwgCi0gICAgICAgICAgICBjZWlsKGxhc3RQcmludGluZ1BhZ2VSZWN0LmJv
dHRvbSgpICogdmlldy0+X3RvdGFsU2NhbGVGYWN0b3JGb3JQcmludGluZykpOworICAgICAgICAg
ICAgY2VpbChsYXN0UHJpbnRpbmdQYWdlUmVjdC5tYXhYKCkgKiB2aWV3LT5fdG90YWxTY2FsZUZh
Y3RvckZvclByaW50aW5nKSwgCisgICAgICAgICAgICBjZWlsKGxhc3RQcmludGluZ1BhZ2VSZWN0
Lm1heFkoKSAqIHZpZXctPl90b3RhbFNjYWxlRmFjdG9yRm9yUHJpbnRpbmcpKTsKICAgICAgICAg
TE9HKFZpZXcsICJXS1ByaW50aW5nVmlldyBzZXR0aW5nIGZyYW1lIHNpemUgdG8geDolZyB5OiVn
IHdpZHRoOiVnIGhlaWdodDolZyIsIG5ld0ZyYW1lU2l6ZS5vcmlnaW4ueCwgbmV3RnJhbWVTaXpl
Lm9yaWdpbi55LCBuZXdGcmFtZVNpemUuc2l6ZS53aWR0aCwgbmV3RnJhbWVTaXplLnNpemUuaGVp
Z2h0KTsKICAgICAgICAgW3ZpZXcgc2V0RnJhbWU6bmV3RnJhbWVTaXplXTsKIApJbmRleDogU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9DaHVua2VkVXBkYXRlRHJhd2luZ0FyZWFQcm94eU1h
Yy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL0NodW5rZWRV
cGRhdGVEcmF3aW5nQXJlYVByb3h5TWFjLm1tCShyZXZpc2lvbiA3NzI3OCkKKysrIFNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9tYWMvQ2h1bmtlZFVwZGF0ZURyYXdpbmdBcmVhUHJveHlNYWMubW0J
KHdvcmtpbmcgY29weSkKQEAgLTk3LDcgKzk3LDcgQEAgdm9pZCBDaHVua2VkVXBkYXRlRHJhd2lu
Z0FyZWFQcm94eTo6ZHJhdwogCiAgICAgLy8gRmxpcCB0aGUgZGVzdGluYXRpb24uCiAgICAgQ0dD
b250ZXh0U2NhbGVDVE0obV9iaXRtYXBDb250ZXh0LmdldCgpLCAxLCAtMSk7Ci0gICAgQ0dDb250
ZXh0VHJhbnNsYXRlQ1RNKG1fYml0bWFwQ29udGV4dC5nZXQoKSwgMCwgLSh1cGRhdGVDaHVua1Jl
Y3QueSgpICsgdXBkYXRlQ2h1bmtSZWN0LmJvdHRvbSgpKSk7CisgICAgQ0dDb250ZXh0VHJhbnNs
YXRlQ1RNKG1fYml0bWFwQ29udGV4dC5nZXQoKSwgMCwgLSh1cGRhdGVDaHVua1JlY3QueSgpICsg
dXBkYXRlQ2h1bmtSZWN0Lm1heFkoKSkpOwogCiAgICAgQ0dDb250ZXh0RHJhd0ltYWdlKG1fYml0
bWFwQ29udGV4dC5nZXQoKSwgdXBkYXRlQ2h1bmtSZWN0LCBpbWFnZS5nZXQoKSk7CiAKSW5kZXg6
IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9OZXRzY2FwZVBsdWdp
bi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL05l
dHNjYXBlL05ldHNjYXBlUGx1Z2luLmNwcAkocmV2aXNpb24gNzcyNzgpCisrKyBTb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvTmV0c2NhcGVQbHVnaW4uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNTIsOCArMzUyLDggQEAgdm9pZCBOZXRzY2FwZVBsdWdpbjo6Y2FsbFNl
dFdpbmRvdygpCiAgICAgbV9ucFdpbmRvdy5oZWlnaHQgPSBtX2ZyYW1lUmVjdC5oZWlnaHQoKTsK
ICAgICBtX25wV2luZG93LmNsaXBSZWN0LnRvcCA9IG1fY2xpcFJlY3QueSgpOwogICAgIG1fbnBX
aW5kb3cuY2xpcFJlY3QubGVmdCA9IG1fY2xpcFJlY3QueCgpOwotICAgIG1fbnBXaW5kb3cuY2xp
cFJlY3QuYm90dG9tID0gbV9jbGlwUmVjdC5ib3R0b20oKTsKLSAgICBtX25wV2luZG93LmNsaXBS
ZWN0LnJpZ2h0ID0gbV9jbGlwUmVjdC5yaWdodCgpOworICAgIG1fbnBXaW5kb3cuY2xpcFJlY3Qu
Ym90dG9tID0gbV9jbGlwUmVjdC5tYXhZKCk7CisgICAgbV9ucFdpbmRvdy5jbGlwUmVjdC5yaWdo
dCA9IG1fY2xpcFJlY3QubWF4WCgpOwogCiAgICAgTlBQX1NldFdpbmRvdygmbV9ucFdpbmRvdyk7
CiB9CkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkhUTUxWaWV3Lm1tCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViSFRNTFZpZXcubW0JKHJldmlz
aW9uIDc3Mjc4KQorKysgU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJIVE1MVmlldy5tbQko
d29ya2luZyBjb3B5KQpAQCAtMzEyLDcgKzMxMiw3IEBAIHN0YXRpYyB2b2lkIHNldE5lZWRzRGlz
cGxheUluUmVjdChOU1ZpZXcKICAgICBOU1JlY3QgaW52YWxpZFJlY3RJbldlYkZyYW1lVmlld0Nv
b3JkaW5hdGVzID0gW2VuY2xvc2luZ1dlYkZyYW1lVmlldyBjb252ZXJ0UmVjdDppbnZhbGlkUmVj
dCBmcm9tVmlldzpzZWxmXTsKICAgICBJbnRSZWN0IGludmFsaWRSZWN0SW5GcmFtZVZpZXdDb29y
ZGluYXRlcyhpbnZhbGlkUmVjdEluV2ViRnJhbWVWaWV3Q29vcmRpbmF0ZXMpOwogICAgIGlmICgh
W2VuY2xvc2luZ1dlYkZyYW1lVmlldyBpc0ZsaXBwZWRdKQotICAgICAgICBpbnZhbGlkUmVjdElu
RnJhbWVWaWV3Q29vcmRpbmF0ZXMuc2V0WShmcmFtZVZpZXctPmZyYW1lUmVjdCgpLnNpemUoKS5o
ZWlnaHQoKSAtIGludmFsaWRSZWN0SW5GcmFtZVZpZXdDb29yZGluYXRlcy5ib3R0b20oKSk7Cisg
ICAgICAgIGludmFsaWRSZWN0SW5GcmFtZVZpZXdDb29yZGluYXRlcy5zZXRZKGZyYW1lVmlldy0+
ZnJhbWVSZWN0KCkuc2l6ZSgpLmhlaWdodCgpIC0gaW52YWxpZFJlY3RJbkZyYW1lVmlld0Nvb3Jk
aW5hdGVzLm1heFkoKSk7CiAKICAgICBmcmFtZVZpZXctPmludmFsaWRhdGVSZWN0KGludmFsaWRS
ZWN0SW5GcmFtZVZpZXdDb29yZGluYXRlcyk7CiB9Cg==
</data>
<flag name="review"
          id="72304"
          type_id="1"
          status="+"
          setter="oliver"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>80812</attachid>
            <date>2011-02-01 13:12:58 -0800</date>
            <delta_ts>2011-02-01 13:25:06 -0800</delta_ts>
            <desc>Step 1: Convert most of WebCore and WebKit without getting rid of the methods yet.</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>112760</size>
            <attacher name="Dave Hyatt">hyatt</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9i
amVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nl
c3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcAkocmV2aXNpb24gNzcyNzgpCisrKyBTb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yNTE5LDcgKzI1MTksNyBAQCBJbnRSZWN0IEFjY2Vzc2liaWxpdHlSZW5kZXJP
YmplY3Q6OmJvdW5kCiAgICAgb3VycmVjdC51bml0ZShyZWN0Mik7CiAgICAgCiAgICAgLy8gaWYg
dGhlIHJlY3RhbmdsZSBzcGFucyBsaW5lcyBhbmQgY29udGFpbnMgbXVsdGlwbGUgdGV4dCBjaGFy
cywgdXNlIHRoZSByYW5nZSdzIGJvdW5kaW5nIGJveCBpbnRlYWQKLSAgICBpZiAocmVjdDEuYm90
dG9tKCkgIT0gcmVjdDIuYm90dG9tKCkpIHsKKyAgICBpZiAocmVjdDEubWF4WSgpICE9IHJlY3Qy
Lm1heFkoKSkgewogICAgICAgICBSZWZQdHI8UmFuZ2U+IGRhdGFSYW5nZSA9IG1ha2VSYW5nZShy
YW5nZS5zdGFydCwgcmFuZ2UuZW5kKTsKICAgICAgICAgSW50UmVjdCBib3VuZGluZ0JveCA9IGRh
dGFSYW5nZS0+Ym91bmRpbmdCb3goKTsKICAgICAgICAgU3RyaW5nIHJhbmdlU3RyaW5nID0gcGxh
aW5UZXh0KGRhdGFSYW5nZS5nZXQoKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L21hYy9BY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlci5tbQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9BY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlci5t
bQkocmV2aXNpb24gNzcyNzgpCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9B
Y2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlci5tbQkod29ya2luZyBjb3B5KQpAQCAtMTEyNSw3ICsx
MTI1LDcgQEAgLSAoTlNWYWx1ZSopcG9zaXRpb24KICAgICAgICAgcG9pbnQueSA9IHNjcmVlbkhl
aWdodCAtIChwb2ludC55ICsgcmVtb3RlUG9zaXRpb24ueSArIHJlY3QuaGVpZ2h0KCkgLSBzY3Jv
bGxQb3NpdGlvbi55KTsKICAgICB9IGVsc2UgewogICAgICAgICAvLyBUaGUgQ29jb2EgYWNjZXNz
aWJpbGl0eSBBUEkgd2FudHMgdGhlIGxvd2VyLWxlZnQgY29ybmVyLgotICAgICAgICBwb2ludCA9
IE5TTWFrZVBvaW50KHJlY3QueCgpLCByZWN0LmJvdHRvbSgpKTsKKyAgICAgICAgcG9pbnQgPSBO
U01ha2VQb2ludChyZWN0LngoKSwgcmVjdC5tYXhZKCkpOwogICAgICAgICAKICAgICAgICAgaWYg
KGZyYW1lVmlldykgewogICAgICAgICAgICAgTlNWaWV3KiB2aWV3ID0gZnJhbWVWaWV3LT5kb2N1
bWVudFZpZXcoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9DbGllbnRSZWN0LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0NsaWVudFJlY3QuaAkocmV2aXNpb24gNzcyNzgp
CisrKyBTb3VyY2UvV2ViQ29yZS9kb20vQ2xpZW50UmVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC00
Miw4ICs0Miw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgc3RhdGljIFBhc3NSZWZQ
dHI8Q2xpZW50UmVjdD4gY3JlYXRlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkgeyByZXR1cm4gYWRv
cHRSZWYobmV3IENsaWVudFJlY3QocmVjdCkpOyB9CiAKICAgICAgICAgZmxvYXQgdG9wKCkgY29u
c3QgeyByZXR1cm4gbV9yZWN0LnkoKTsgfQotICAgICAgICBmbG9hdCByaWdodCgpIGNvbnN0IHsg
cmV0dXJuIG1fcmVjdC5yaWdodCgpOyB9Ci0gICAgICAgIGZsb2F0IGJvdHRvbSgpIGNvbnN0IHsg
cmV0dXJuIG1fcmVjdC5ib3R0b20oKTsgfQorICAgICAgICBmbG9hdCByaWdodCgpIGNvbnN0IHsg
cmV0dXJuIG1fcmVjdC5tYXhYKCk7IH0KKyAgICAgICAgZmxvYXQgYm90dG9tKCkgY29uc3QgeyBy
ZXR1cm4gbV9yZWN0Lm1heFkoKTsgfQogICAgICAgICBmbG9hdCBsZWZ0KCkgY29uc3QgeyByZXR1
cm4gbV9yZWN0LngoKTsgfQogICAgICAgICBmbG9hdCB3aWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1f
cmVjdC53aWR0aCgpOyB9CiAgICAgICAgIGZsb2F0IGhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIG1f
cmVjdC5oZWlnaHQoKTsgfQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxl
bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxl
bWVudC5jcHAJKHJldmlzaW9uIDc3Mjc4KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2Fu
dmFzRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0NCwxMCArMzQ0LDEwIEBAIFN0cmlu
ZyBIVE1MQ2FudmFzRWxlbWVudDo6dG9EYXRhVVJMKGNvbnMKIAogSW50UmVjdCBIVE1MQ2FudmFz
RWxlbWVudDo6Y29udmVydExvZ2ljYWxUb0RldmljZShjb25zdCBGbG9hdFJlY3QmIGxvZ2ljYWxS
ZWN0KSBjb25zdAogewotICAgIGZsb2F0IGxlZnQgPSBmbG9vcmYobG9naWNhbFJlY3QubGVmdCgp
ICogbV9wYWdlU2NhbGVGYWN0b3IpOwotICAgIGZsb2F0IHRvcCA9IGZsb29yZihsb2dpY2FsUmVj
dC50b3AoKSAqIG1fcGFnZVNjYWxlRmFjdG9yKTsKLSAgICBmbG9hdCByaWdodCA9IGNlaWxmKGxv
Z2ljYWxSZWN0LnJpZ2h0KCkgKiBtX3BhZ2VTY2FsZUZhY3Rvcik7Ci0gICAgZmxvYXQgYm90dG9t
ID0gY2VpbGYobG9naWNhbFJlY3QuYm90dG9tKCkgKiBtX3BhZ2VTY2FsZUZhY3Rvcik7CisgICAg
ZmxvYXQgbGVmdCA9IGZsb29yZihsb2dpY2FsUmVjdC54KCkgKiBtX3BhZ2VTY2FsZUZhY3Rvcik7
CisgICAgZmxvYXQgdG9wID0gZmxvb3JmKGxvZ2ljYWxSZWN0LnkoKSAqIG1fcGFnZVNjYWxlRmFj
dG9yKTsKKyAgICBmbG9hdCByaWdodCA9IGNlaWxmKGxvZ2ljYWxSZWN0Lm1heFgoKSAqIG1fcGFn
ZVNjYWxlRmFjdG9yKTsKKyAgICBmbG9hdCBib3R0b20gPSBjZWlsZihsb2dpY2FsUmVjdC5tYXhZ
KCkgKiBtX3BhZ2VTY2FsZUZhY3Rvcik7CiAgICAgCiAgICAgcmV0dXJuIEludFJlY3QoSW50UG9p
bnQobGVmdCwgdG9wKSwgY29udmVydFRvVmFsaWREZXZpY2VTaXplKHJpZ2h0IC0gbGVmdCwgYm90
dG9tIC0gdG9wKSk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwv
Y2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAJKHJldmlzaW9uIDc3Mjc4KQorKysg
U291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTEwNSw4ICsxMTA1LDggQEAgc3RhdGljIEludFNpemUgc2l6ZShI
VE1MVmlkZW9FbGVtZW50KiB2aQogCiBzdGF0aWMgaW5saW5lIEZsb2F0UmVjdCBub3JtYWxpemVS
ZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKLSAgICByZXR1cm4gRmxvYXRSZWN0KG1pbihy
ZWN0LngoKSwgcmVjdC5yaWdodCgpKSwKLSAgICAgICAgbWluKHJlY3QueSgpLCByZWN0LmJvdHRv
bSgpKSwKKyAgICByZXR1cm4gRmxvYXRSZWN0KG1pbihyZWN0LngoKSwgcmVjdC5tYXhYKCkpLAor
ICAgICAgICBtaW4ocmVjdC55KCksIHJlY3QubWF4WSgpKSwKICAgICAgICAgbWF4KHJlY3Qud2lk
dGgoKSwgLXJlY3Qud2lkdGgoKSksCiAgICAgICAgIG1heChyZWN0LmhlaWdodCgpLCAtcmVjdC5o
ZWlnaHQoKSkpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckFn
ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
QWdlbnQuY3BwCShyZXZpc2lvbiA3NzI3OCkKKysrIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JBZ2VudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyNzQsNyArMTI3NCw3IEBAIHZv
aWQgSW5zcGVjdG9yQWdlbnQ6OmRyYXdFbGVtZW50VGl0bGUoR3IKICAgICBmb250LnVwZGF0ZSgw
KTsKIAogICAgIFRleHRSdW4gbm9kZVRpdGxlUnVuKG5vZGVUaXRsZSk7Ci0gICAgSW50UG9pbnQg
dGl0bGVCYXNlUG9pbnQgPSBib3VuZGluZ0JveC5ib3R0b21MZWZ0KCk7CisgICAgSW50UG9pbnQg
dGl0bGVCYXNlUG9pbnQgPSBJbnRQb2ludChib3VuZGluZ0JveC54KCksIGJvdW5kaW5nQm94Lm1h
eFkoKSAtIDEpOwogICAgIHRpdGxlQmFzZVBvaW50Lm1vdmUocmVjdEluZmxhdGVQeCwgcmVjdElu
ZmxhdGVQeCk7CiAgICAgSW50UmVjdCB0aXRsZVJlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KGZvbnQu
c2VsZWN0aW9uUmVjdEZvclRleHQobm9kZVRpdGxlUnVuLCB0aXRsZUJhc2VQb2ludCwgZm9udEhl
aWdodFB4KSk7CiAgICAgdGl0bGVSZWN0LmluZmxhdGUocmVjdEluZmxhdGVQeCk7CkBAIC0xMjg0
LDE5ICsxMjg0LDE5IEBAIHZvaWQgSW5zcGVjdG9yQWdlbnQ6OmRyYXdFbGVtZW50VGl0bGUoR3IK
ICAgICBpbnQgZHkgPSBib3JkZXJXaWR0aFB4OwogCiAgICAgLy8gSWYgdGhlIHRpcCBzdGlja3Mg
YmV5b25kIHRoZSByaWdodCBvZiBvdmVybGF5UmVjdCwgcmlnaHQtYWxpZ24gdGhlIHRpcCB3aXRo
IHRoZSBzYWlkIGJvdW5kYXJ5LgotICAgIGlmICh0aXRsZVJlY3QucmlnaHQoKSA+IG92ZXJsYXlS
ZWN0LnJpZ2h0KCkpCi0gICAgICAgIGR4ID0gb3ZlcmxheVJlY3QucmlnaHQoKSAtIHRpdGxlUmVj
dC5yaWdodCgpOworICAgIGlmICh0aXRsZVJlY3QubWF4WCgpID4gb3ZlcmxheVJlY3QubWF4WCgp
KQorICAgICAgICBkeCA9IG92ZXJsYXlSZWN0Lm1heFgoKSAtIHRpdGxlUmVjdC5tYXhYKCk7CiAK
ICAgICAvLyBJZiB0aGUgdGlwIHN0aWNrcyBiZXlvbmQgdGhlIGxlZnQgb2Ygb3ZlcmxheVJlY3Qs
IGxlZnQtYWxpZ24gdGhlIHRpcCB3aXRoIHRoZSBzYWlkIGJvdW5kYXJ5LgogICAgIGlmICh0aXRs
ZVJlY3QueCgpICsgZHggPCBvdmVybGF5UmVjdC54KCkpCiAgICAgICAgIGR4ID0gb3ZlcmxheVJl
Y3QueCgpIC0gdGl0bGVSZWN0LngoKSAtIGJvcmRlcldpZHRoUHg7CiAKICAgICAvLyBJZiB0aGUg
dGlwIHN0aWNrcyBiZXlvbmQgdGhlIGJvdHRvbSBvZiBvdmVybGF5UmVjdCwgc2hvdyB0aGUgdGlw
IGF0IHRvcCBvZiBib3VuZGluZyBib3guCi0gICAgaWYgKHRpdGxlUmVjdC5ib3R0b20oKSA+IG92
ZXJsYXlSZWN0LmJvdHRvbSgpKSB7Ci0gICAgICAgIGR5ID0gYm91bmRpbmdCb3gueSgpIC0gdGl0
bGVSZWN0LmJvdHRvbSgpIC0gYm9yZGVyV2lkdGhQeDsKKyAgICBpZiAodGl0bGVSZWN0Lm1heFko
KSA+IG92ZXJsYXlSZWN0Lm1heFkoKSkgeworICAgICAgICBkeSA9IGJvdW5kaW5nQm94LnkoKSAt
IHRpdGxlUmVjdC5tYXhZKCkgLSBib3JkZXJXaWR0aFB4OwogICAgICAgICAvLyBJZiB0aGUgdGlw
IHN0aWxsIHN0aWNrcyBiZXlvbmQgdGhlIGJvdHRvbSBvZiBvdmVybGF5UmVjdCwgYm90dG9tLWFs
aWduIHRoZSB0aXAgd2l0aCB0aGUgc2FpZCBib3VuZGFyeS4KLSAgICAgICAgaWYgKHRpdGxlUmVj
dC5ib3R0b20oKSArIGR5ID4gb3ZlcmxheVJlY3QuYm90dG9tKCkpCi0gICAgICAgICAgICBkeSA9
IG92ZXJsYXlSZWN0LmJvdHRvbSgpIC0gdGl0bGVSZWN0LmJvdHRvbSgpOworICAgICAgICBpZiAo
dGl0bGVSZWN0Lm1heFkoKSArIGR5ID4gb3ZlcmxheVJlY3QubWF4WSgpKQorICAgICAgICAgICAg
ZHkgPSBvdmVybGF5UmVjdC5tYXhZKCkgLSB0aXRsZVJlY3QubWF4WSgpOwogICAgIH0KIAogICAg
IC8vIElmIHRoZSB0aXAgc3RpY2tzIGJleW9uZCB0aGUgdG9wIG9mIG92ZXJsYXlSZWN0LCBzaG93
IHRoZSB0aXAgYXQgdG9wIG9mIG92ZXJsYXlSZWN0LgpJbmRleDogU291cmNlL1dlYkNvcmUvcGFn
ZS9ET01XaW5kb3cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2lu
ZG93LmNwcAkocmV2aXNpb24gNzcyNzgpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRv
dy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0Miw4ICszNDIsOCBAQCB2b2lkIERPTVdpbmRvdzo6
YWRqdXN0V2luZG93UmVjdChjb25zdCBGCiAgICAgd2luZG93LnNldEhlaWdodChtaW4obWF4KDEw
MC4wZiwgd2luZG93LmhlaWdodCgpKSwgc2NyZWVuLmhlaWdodCgpKSk7CiAgICAgCiAgICAgLy8g
Q29uc3RyYWluIHRoZSB3aW5kb3cgcG9zaXRpb24gdG8gdGhlIHNjcmVlbi4KLSAgICB3aW5kb3cu
c2V0WChtYXgoc2NyZWVuLngoKSwgbWluKHdpbmRvdy54KCksIHNjcmVlbi5yaWdodCgpIC0gd2lu
ZG93LndpZHRoKCkpKSk7Ci0gICAgd2luZG93LnNldFkobWF4KHNjcmVlbi55KCksIG1pbih3aW5k
b3cueSgpLCBzY3JlZW4uYm90dG9tKCkgLSB3aW5kb3cuaGVpZ2h0KCkpKSk7CisgICAgd2luZG93
LnNldFgobWF4KHNjcmVlbi54KCksIG1pbih3aW5kb3cueCgpLCBzY3JlZW4ubWF4WCgpIC0gd2lu
ZG93LndpZHRoKCkpKSk7CisgICAgd2luZG93LnNldFkobWF4KHNjcmVlbi55KCksIG1pbih3aW5k
b3cueSgpLCBzY3JlZW4ubWF4WSgpIC0gd2luZG93LmhlaWdodCgpKSkpOwogfQogCiAvLyBGSVhN
RTogV2UgY2FuIHJlbW92ZSB0aGlzIGZ1bmN0aW9uIG9uY2UgVjggc2hvd01vZGFsRGlhbG9nIGlz
IGNoYW5nZWQgdG8gdXNlIERPTVdpbmRvdy4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvRHJh
Z0NvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRHJhZ0Nv
bnRyb2xsZXIuY3BwCShyZXZpc2lvbiA3NzI3OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRHJh
Z0NvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NDQsOSArNjQ0LDkgQEAgc3RhdGlj
IEludFBvaW50IGRyYWdMb2NGb3JESFRNTERyYWcoY29ucwogc3RhdGljIEludFBvaW50IGRyYWdM
b2NGb3JTZWxlY3Rpb25EcmFnKEZyYW1lKiBzcmMpCiB7CiAgICAgSW50UmVjdCBkcmFnZ2luZ1Jl
Y3QgPSBlbmNsb3NpbmdJbnRSZWN0KHNyYy0+c2VsZWN0aW9uKCktPmJvdW5kcygpKTsKLSAgICBp
bnQgeHBvcyA9IGRyYWdnaW5nUmVjdC5yaWdodCgpOworICAgIGludCB4cG9zID0gZHJhZ2dpbmdS
ZWN0Lm1heFgoKTsKICAgICB4cG9zID0gZHJhZ2dpbmdSZWN0LngoKSA8IHhwb3MgPyBkcmFnZ2lu
Z1JlY3QueCgpIDogeHBvczsKLSAgICBpbnQgeXBvcyA9IGRyYWdnaW5nUmVjdC5ib3R0b20oKTsK
KyAgICBpbnQgeXBvcyA9IGRyYWdnaW5nUmVjdC5tYXhZKCk7CiAjaWYgUExBVEZPUk0oTUFDKQog
ICAgIC8vIERlYWwgd2l0aCBmbGlwcGVkIGNvb3JkaW5hdGVzIG9uIE1hYwogICAgIHlwb3MgPSBk
cmFnZ2luZ1JlY3QueSgpID4geXBvcyA/IGRyYWdnaW5nUmVjdC55KCkgOiB5cG9zOwpJbmRleDog
U291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAkocmV2aXNpb24gNzcyNzgpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxMzIs
MTIgKzIxMzIsMTIgQEAgYm9vbCBFdmVudEhhbmRsZXI6OnNlbmRDb250ZXh0TWVudUV2ZW50Rgog
ICAgICAgICBSZWZQdHI8UmFuZ2U+IHNlbGVjdGlvbiA9IHNlbGVjdGlvbkNvbnRyb2xsZXItPnRv
Tm9ybWFsaXplZFJhbmdlKCk7CiAgICAgICAgIEludFJlY3QgZmlyc3RSZWN0ID0gbV9mcmFtZS0+
ZWRpdG9yKCktPmZpcnN0UmVjdEZvclJhbmdlKHNlbGVjdGlvbi5nZXQoKSk7CiAKLSAgICAgICAg
aW50IHggPSByaWdodEFsaWduZWQgPyBmaXJzdFJlY3QucmlnaHQoKSA6IGZpcnN0UmVjdC54KCk7
Ci0gICAgICAgIGxvY2F0aW9uID0gSW50UG9pbnQoeCwgZmlyc3RSZWN0LmJvdHRvbSgpKTsKKyAg
ICAgICAgaW50IHggPSByaWdodEFsaWduZWQgPyBmaXJzdFJlY3QubWF4WCgpIDogZmlyc3RSZWN0
LngoKTsKKyAgICAgICAgbG9jYXRpb24gPSBJbnRQb2ludCh4LCBmaXJzdFJlY3QubWF4WSgpKTsK
ICAgICB9IGVsc2UgaWYgKGZvY3VzZWROb2RlKSB7CiAgICAgICAgIFJlbmRlckJveE1vZGVsT2Jq
ZWN0KiBib3ggPSBmb2N1c2VkTm9kZS0+cmVuZGVyQm94TW9kZWxPYmplY3QoKTsKICAgICAgICAg
SW50UmVjdCBjbGlwcGVkUmVjdCA9IGJveC0+YWJzb2x1dGVDbGlwcGVkT3ZlcmZsb3dSZWN0KCk7
Ci0gICAgICAgIGxvY2F0aW9uID0gY2xpcHBlZFJlY3QuYm90dG9tTGVmdCgpOworICAgICAgICBs
b2NhdGlvbiA9IEludFBvaW50KGNsaXBwZWRSZWN0LngoKSwgY2xpcHBlZFJlY3QubWF4WSgpIC0g
MSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgbG9jYXRpb24gPSBJbnRQb2ludCgKICAgICAgICAg
ICAgIHJpZ2h0QWxpZ25lZCA/IHZpZXctPmNvbnRlbnRzV2lkdGgoKSAtIGtDb250ZXh0TWVudU1h
cmdpbiA6IGtDb250ZXh0TWVudU1hcmdpbiwKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvUHJp
bnRDb250ZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL1ByaW50Q29u
dGV4dC5jcHAJKHJldmlzaW9uIDc3Mjc4KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9QcmludENv
bnRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzUsMjQgKzEzNSwyNCBAQCB2b2lkIFByaW50
Q29udGV4dDo6Y29tcHV0ZVBhZ2VSZWN0c1dpdGhQCiAgICAgaW50IGJsb2NrRGlyZWN0aW9uRW5k
OwogICAgIGlmIChpc0hvcml6b250YWwpIHsKICAgICAgICAgaWYgKHZpZXctPnN0eWxlKCktPmlz
RmxpcHBlZEJsb2Nrc1dyaXRpbmdNb2RlKCkpIHsKLSAgICAgICAgICAgIGJsb2NrRGlyZWN0aW9u
U3RhcnQgPSBkb2NSZWN0LmJvdHRvbSgpOworICAgICAgICAgICAgYmxvY2tEaXJlY3Rpb25TdGFy
dCA9IGRvY1JlY3QubWF4WSgpOwogICAgICAgICAgICAgYmxvY2tEaXJlY3Rpb25FbmQgPSBkb2NS
ZWN0LnkoKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGJsb2NrRGlyZWN0aW9uU3Rh
cnQgPSBkb2NSZWN0LnkoKTsKLSAgICAgICAgICAgIGJsb2NrRGlyZWN0aW9uRW5kID0gZG9jUmVj
dC5ib3R0b20oKTsKKyAgICAgICAgICAgIGJsb2NrRGlyZWN0aW9uRW5kID0gZG9jUmVjdC5tYXhZ
KCk7CiAgICAgICAgIH0KLSAgICAgICAgaW5saW5lRGlyZWN0aW9uU3RhcnQgPSB2aWV3LT5zdHls
ZSgpLT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyBkb2NSZWN0LngoKSA6IGRvY1JlY3Qucmln
aHQoKTsKLSAgICAgICAgaW5saW5lRGlyZWN0aW9uRW5kID0gdmlldy0+c3R5bGUoKS0+aXNMZWZ0
VG9SaWdodERpcmVjdGlvbigpID8gZG9jUmVjdC5yaWdodCgpIDogZG9jUmVjdC54KCk7CisgICAg
ICAgIGlubGluZURpcmVjdGlvblN0YXJ0ID0gdmlldy0+c3R5bGUoKS0+aXNMZWZ0VG9SaWdodERp
cmVjdGlvbigpID8gZG9jUmVjdC54KCkgOiBkb2NSZWN0Lm1heFgoKTsKKyAgICAgICAgaW5saW5l
RGlyZWN0aW9uRW5kID0gdmlldy0+c3R5bGUoKS0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpID8g
ZG9jUmVjdC5tYXhYKCkgOiBkb2NSZWN0LngoKTsKICAgICB9IGVsc2UgewogICAgICAgICBpZiAo
dmlldy0+c3R5bGUoKS0+aXNGbGlwcGVkQmxvY2tzV3JpdGluZ01vZGUoKSkgewotICAgICAgICAg
ICAgYmxvY2tEaXJlY3Rpb25TdGFydCA9IGRvY1JlY3QucmlnaHQoKTsKKyAgICAgICAgICAgIGJs
b2NrRGlyZWN0aW9uU3RhcnQgPSBkb2NSZWN0Lm1heFgoKTsKICAgICAgICAgICAgIGJsb2NrRGly
ZWN0aW9uRW5kID0gZG9jUmVjdC54KCk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBi
bG9ja0RpcmVjdGlvblN0YXJ0ID0gZG9jUmVjdC54KCk7Ci0gICAgICAgICAgICBibG9ja0RpcmVj
dGlvbkVuZCA9IGRvY1JlY3QucmlnaHQoKTsKKyAgICAgICAgICAgIGJsb2NrRGlyZWN0aW9uRW5k
ID0gZG9jUmVjdC5tYXhYKCk7CiAgICAgICAgIH0KLSAgICAgICAgaW5saW5lRGlyZWN0aW9uU3Rh
cnQgPSB2aWV3LT5zdHlsZSgpLT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyBkb2NSZWN0Lnko
KSA6IGRvY1JlY3QuYm90dG9tKCk7Ci0gICAgICAgIGlubGluZURpcmVjdGlvbkVuZCA9IHZpZXct
PnN0eWxlKCktPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/IGRvY1JlY3QuYm90dG9tKCkgOiBk
b2NSZWN0LnkoKTsKKyAgICAgICAgaW5saW5lRGlyZWN0aW9uU3RhcnQgPSB2aWV3LT5zdHlsZSgp
LT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyBkb2NSZWN0LnkoKSA6IGRvY1JlY3QubWF4WSgp
OworICAgICAgICBpbmxpbmVEaXJlY3Rpb25FbmQgPSB2aWV3LT5zdHlsZSgpLT5pc0xlZnRUb1Jp
Z2h0RGlyZWN0aW9uKCkgPyBkb2NSZWN0Lm1heFkoKSA6IGRvY1JlY3QueSgpOwogICAgIH0KIAog
ICAgIHVuc2lnbmVkIHBhZ2VDb3VudCA9IGNlaWxmKChmbG9hdClkb2NMb2dpY2FsSGVpZ2h0IC8g
cGFnZUxvZ2ljYWxIZWlnaHQpOwpAQCAtMjc0LDcgKzI3NCw3IEBAIGludCBQcmludENvbnRleHQ6
OnBhZ2VOdW1iZXJGb3JFbGVtZW50KEUKICAgICBzaXplX3QgcGFnZU51bWJlciA9IDA7CiAgICAg
Zm9yICg7IHBhZ2VOdW1iZXIgPCBwcmludENvbnRleHQucGFnZUNvdW50KCk7IHBhZ2VOdW1iZXIr
KykgewogICAgICAgICBjb25zdCBJbnRSZWN0JiBwYWdlID0gcHJpbnRDb250ZXh0LnBhZ2VSZWN0
KHBhZ2VOdW1iZXIpOwotICAgICAgICBpZiAocGFnZS54KCkgPD0gbGVmdCAmJiBsZWZ0IDwgcGFn
ZS5yaWdodCgpICYmIHBhZ2UueSgpIDw9IHRvcCAmJiB0b3AgPCBwYWdlLmJvdHRvbSgpKQorICAg
ICAgICBpZiAocGFnZS54KCkgPD0gbGVmdCAmJiBsZWZ0IDwgcGFnZS5tYXhYKCkgJiYgcGFnZS55
KCkgPD0gdG9wICYmIHRvcCA8IHBhZ2UubWF4WSgpKQogICAgICAgICAgICAgcmV0dXJuIHBhZ2VO
dW1iZXI7CiAgICAgfQogICAgIHJldHVybiAtMTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2Uv
U3BhdGlhbE5hdmlnYXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2Uv
U3BhdGlhbE5hdmlnYXRpb24uY3BwCShyZXZpc2lvbiA3NzI3OCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BhZ2UvU3BhdGlhbE5hdmlnYXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjcsNyArMTI3
LDcgQEAgc3RhdGljIGlubGluZSBpbnQgbWlkZGxlKEZvY3VzRGlyZWN0aW9uIAogCiBzdGF0aWMg
aW5saW5lIGludCBlbmQoRm9jdXNEaXJlY3Rpb24gZGlyZWN0aW9uLCBjb25zdCBJbnRSZWN0JiBy
ZWN0KQogewotICAgIHJldHVybiBpc0hvcml6b250YWxNb3ZlKGRpcmVjdGlvbikgPyByZWN0LmJv
dHRvbSgpIDogcmVjdC5yaWdodCgpOworICAgIHJldHVybiBpc0hvcml6b250YWxNb3ZlKGRpcmVj
dGlvbikgPyByZWN0Lm1heFkoKSA6IHJlY3QubWF4WCgpOwogfQogCiAvLyBUaGlzIG1ldGhvZCBj
aGVja3MgaWYgcmVjdHMgfGF8IGFuZCB8YnwgYXJlIGZ1bGx5IGFsaWduZWQgZWl0aGVyIHZlcnRp
Y2FsbHkgb3IKQEAgLTE0NCwxMSArMTQ0LDExIEBAIHN0YXRpYyBib29sIGFyZVJlY3RzRnVsbHlB
bGlnbmVkKEZvY3VzRGkKICAgICBzd2l0Y2ggKGRpcmVjdGlvbikgewogICAgIGNhc2UgRm9jdXNE
aXJlY3Rpb25MZWZ0OgogICAgICAgICBhU3RhcnQgPSBhLngoKTsKLSAgICAgICAgYkVuZCA9IGIu
cmlnaHQoKTsKKyAgICAgICAgYkVuZCA9IGIubWF4WCgpOwogICAgICAgICBicmVhazsKICAgICBj
YXNlIEZvY3VzRGlyZWN0aW9uUmlnaHQ6CiAgICAgICAgIGFTdGFydCA9IGIueCgpOwotICAgICAg
ICBiRW5kID0gYS5yaWdodCgpOworICAgICAgICBiRW5kID0gYS5tYXhYKCk7CiAgICAgICAgIGJy
ZWFrOwogICAgIGNhc2UgRm9jdXNEaXJlY3Rpb25VcDoKICAgICAgICAgYVN0YXJ0ID0gYS55KCk7
CkBAIC0yNDUsMTMgKzI0NSwxMyBAQCBzdGF0aWMgYm9vbCBhcmVSZWN0c01vcmVUaGFuRnVsbFNj
cmVlbkFwCiAKICAgICBzd2l0Y2ggKGRpcmVjdGlvbikgewogICAgIGNhc2UgRm9jdXNEaXJlY3Rp
b25MZWZ0OgotICAgICAgICByZXR1cm4gY3VyUmVjdC54KCkgLSB0YXJnZXRSZWN0LnJpZ2h0KCkg
PiB2aWV3U2l6ZS53aWR0aCgpOworICAgICAgICByZXR1cm4gY3VyUmVjdC54KCkgLSB0YXJnZXRS
ZWN0Lm1heFgoKSA+IHZpZXdTaXplLndpZHRoKCk7CiAgICAgY2FzZSBGb2N1c0RpcmVjdGlvblJp
Z2h0OgotICAgICAgICByZXR1cm4gdGFyZ2V0UmVjdC54KCkgLSBjdXJSZWN0LnJpZ2h0KCkgPiB2
aWV3U2l6ZS53aWR0aCgpOworICAgICAgICByZXR1cm4gdGFyZ2V0UmVjdC54KCkgLSBjdXJSZWN0
Lm1heFgoKSA+IHZpZXdTaXplLndpZHRoKCk7CiAgICAgY2FzZSBGb2N1c0RpcmVjdGlvblVwOgot
ICAgICAgICByZXR1cm4gY3VyUmVjdC55KCkgLSB0YXJnZXRSZWN0LmJvdHRvbSgpID4gdmlld1Np
emUuaGVpZ2h0KCk7CisgICAgICAgIHJldHVybiBjdXJSZWN0LnkoKSAtIHRhcmdldFJlY3QubWF4
WSgpID4gdmlld1NpemUuaGVpZ2h0KCk7CiAgICAgY2FzZSBGb2N1c0RpcmVjdGlvbkRvd246Ci0g
ICAgICAgIHJldHVybiB0YXJnZXRSZWN0LnkoKSAtIGN1clJlY3QuYm90dG9tKCkgPiB2aWV3U2l6
ZS5oZWlnaHQoKTsKKyAgICAgICAgcmV0dXJuIHRhcmdldFJlY3QueSgpIC0gY3VyUmVjdC5tYXhZ
KCkgPiB2aWV3U2l6ZS5oZWlnaHQoKTsKICAgICBkZWZhdWx0OgogICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0yNjEsMjYgKzI2MSwyNiBAQCBz
dGF0aWMgYm9vbCBhcmVSZWN0c01vcmVUaGFuRnVsbFNjcmVlbkFwCiAvLyBSZXR1cm4gdHJ1ZSBp
ZiByZWN0IHxhfCBpcyBiZWxvdyB8YnwuIEZhbHNlIG90aGVyd2lzZS4KIHN0YXRpYyBpbmxpbmUg
Ym9vbCBiZWxvdyhjb25zdCBJbnRSZWN0JiBhLCBjb25zdCBJbnRSZWN0JiBiKQogewotICAgIHJl
dHVybiBhLnkoKSA+IGIuYm90dG9tKCk7CisgICAgcmV0dXJuIGEueSgpID4gYi5tYXhZKCk7CiB9
CiAKIC8vIFJldHVybiB0cnVlIGlmIHJlY3QgfGF8IGlzIG9uIHRoZSByaWdodCBvZiB8YnwuIEZh
bHNlIG90aGVyd2lzZS4KIHN0YXRpYyBpbmxpbmUgYm9vbCByaWdodE9mKGNvbnN0IEludFJlY3Qm
IGEsIGNvbnN0IEludFJlY3QmIGIpCiB7Ci0gICAgcmV0dXJuIGEueCgpID4gYi5yaWdodCgpOwor
ICAgIHJldHVybiBhLngoKSA+IGIubWF4WCgpOwogfQogCiBzdGF0aWMgYm9vbCBpc1JlY3RJbkRp
cmVjdGlvbihGb2N1c0RpcmVjdGlvbiBkaXJlY3Rpb24sIGNvbnN0IEludFJlY3QmIGN1clJlY3Qs
IGNvbnN0IEludFJlY3QmIHRhcmdldFJlY3QpCiB7CiAgICAgc3dpdGNoIChkaXJlY3Rpb24pIHsK
ICAgICBjYXNlIEZvY3VzRGlyZWN0aW9uTGVmdDoKLSAgICAgICAgcmV0dXJuIHRhcmdldFJlY3Qu
cmlnaHQoKSA8PSBjdXJSZWN0LngoKTsKKyAgICAgICAgcmV0dXJuIHRhcmdldFJlY3QubWF4WCgp
IDw9IGN1clJlY3QueCgpOwogICAgIGNhc2UgRm9jdXNEaXJlY3Rpb25SaWdodDoKLSAgICAgICAg
cmV0dXJuIHRhcmdldFJlY3QueCgpID49IGN1clJlY3QucmlnaHQoKTsKKyAgICAgICAgcmV0dXJu
IHRhcmdldFJlY3QueCgpID49IGN1clJlY3QubWF4WCgpOwogICAgIGNhc2UgRm9jdXNEaXJlY3Rp
b25VcDoKLSAgICAgICAgcmV0dXJuIHRhcmdldFJlY3QuYm90dG9tKCkgPD0gY3VyUmVjdC55KCk7
CisgICAgICAgIHJldHVybiB0YXJnZXRSZWN0Lm1heFkoKSA8PSBjdXJSZWN0LnkoKTsKICAgICBj
YXNlIEZvY3VzRGlyZWN0aW9uRG93bjoKLSAgICAgICAgcmV0dXJuIHRhcmdldFJlY3QueSgpID49
IGN1clJlY3QuYm90dG9tKCk7CisgICAgICAgIHJldHVybiB0YXJnZXRSZWN0LnkoKSA+PSBjdXJS
ZWN0Lm1heFkoKTsKICAgICBkZWZhdWx0OgogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNTQ0LDE4ICs1NDQsMTggQEAgdm9pZCBlbnRyeUFu
ZEV4aXRQb2ludHNGb3JEaXJlY3Rpb24oRm9jdQogICAgIHN3aXRjaCAoZGlyZWN0aW9uKSB7CiAg
ICAgY2FzZSBGb2N1c0RpcmVjdGlvbkxlZnQ6CiAgICAgICAgIGV4aXRQb2ludC5zZXRYKHN0YXJ0
aW5nUmVjdC54KCkpOwotICAgICAgICBlbnRyeVBvaW50LnNldFgocG90ZW50aWFsUmVjdC5yaWdo
dCgpKTsKKyAgICAgICAgZW50cnlQb2ludC5zZXRYKHBvdGVudGlhbFJlY3QubWF4WCgpKTsKICAg
ICAgICAgYnJlYWs7CiAgICAgY2FzZSBGb2N1c0RpcmVjdGlvblVwOgogICAgICAgICBleGl0UG9p
bnQuc2V0WShzdGFydGluZ1JlY3QueSgpKTsKLSAgICAgICAgZW50cnlQb2ludC5zZXRZKHBvdGVu
dGlhbFJlY3QuYm90dG9tKCkpOworICAgICAgICBlbnRyeVBvaW50LnNldFkocG90ZW50aWFsUmVj
dC5tYXhZKCkpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEZvY3VzRGlyZWN0aW9uUmlnaHQ6
Ci0gICAgICAgIGV4aXRQb2ludC5zZXRYKHN0YXJ0aW5nUmVjdC5yaWdodCgpKTsKKyAgICAgICAg
ZXhpdFBvaW50LnNldFgoc3RhcnRpbmdSZWN0Lm1heFgoKSk7CiAgICAgICAgIGVudHJ5UG9pbnQu
c2V0WChwb3RlbnRpYWxSZWN0LngoKSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgRm9jdXNE
aXJlY3Rpb25Eb3duOgotICAgICAgICBleGl0UG9pbnQuc2V0WShzdGFydGluZ1JlY3QuYm90dG9t
KCkpOworICAgICAgICBleGl0UG9pbnQuc2V0WShzdGFydGluZ1JlY3QubWF4WSgpKTsKICAgICAg
ICAgZW50cnlQb2ludC5zZXRZKHBvdGVudGlhbFJlY3QueSgpKTsKICAgICAgICAgYnJlYWs7CiAg
ICAgZGVmYXVsdDoKQEAgLTU2Nyw5ICs1NjcsOSBAQCB2b2lkIGVudHJ5QW5kRXhpdFBvaW50c0Zv
ckRpcmVjdGlvbihGb2N1CiAgICAgY2FzZSBGb2N1c0RpcmVjdGlvblJpZ2h0OgogICAgICAgICBp
ZiAoYmVsb3coc3RhcnRpbmdSZWN0LCBwb3RlbnRpYWxSZWN0KSkgewogICAgICAgICAgICAgZXhp
dFBvaW50LnNldFkoc3RhcnRpbmdSZWN0LnkoKSk7Ci0gICAgICAgICAgICBlbnRyeVBvaW50LnNl
dFkocG90ZW50aWFsUmVjdC5ib3R0b20oKSk7CisgICAgICAgICAgICBlbnRyeVBvaW50LnNldFko
cG90ZW50aWFsUmVjdC5tYXhZKCkpOwogICAgICAgICB9IGVsc2UgaWYgKGJlbG93KHBvdGVudGlh
bFJlY3QsIHN0YXJ0aW5nUmVjdCkpIHsKLSAgICAgICAgICAgIGV4aXRQb2ludC5zZXRZKHN0YXJ0
aW5nUmVjdC5ib3R0b20oKSk7CisgICAgICAgICAgICBleGl0UG9pbnQuc2V0WShzdGFydGluZ1Jl
Y3QubWF4WSgpKTsKICAgICAgICAgICAgIGVudHJ5UG9pbnQuc2V0WShwb3RlbnRpYWxSZWN0Lnko
KSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBleGl0UG9pbnQuc2V0WShtYXgoc3Rh
cnRpbmdSZWN0LnkoKSwgcG90ZW50aWFsUmVjdC55KCkpKTsKQEAgLTU4MCw5ICs1ODAsOSBAQCB2
b2lkIGVudHJ5QW5kRXhpdFBvaW50c0ZvckRpcmVjdGlvbihGb2N1CiAgICAgY2FzZSBGb2N1c0Rp
cmVjdGlvbkRvd246CiAgICAgICAgIGlmIChyaWdodE9mKHN0YXJ0aW5nUmVjdCwgcG90ZW50aWFs
UmVjdCkpIHsKICAgICAgICAgICAgIGV4aXRQb2ludC5zZXRYKHN0YXJ0aW5nUmVjdC54KCkpOwot
ICAgICAgICAgICAgZW50cnlQb2ludC5zZXRYKHBvdGVudGlhbFJlY3QucmlnaHQoKSk7CisgICAg
ICAgICAgICBlbnRyeVBvaW50LnNldFgocG90ZW50aWFsUmVjdC5tYXhYKCkpOwogICAgICAgICB9
IGVsc2UgaWYgKHJpZ2h0T2YocG90ZW50aWFsUmVjdCwgc3RhcnRpbmdSZWN0KSkgewotICAgICAg
ICAgICAgZXhpdFBvaW50LnNldFgoc3RhcnRpbmdSZWN0LnJpZ2h0KCkpOworICAgICAgICAgICAg
ZXhpdFBvaW50LnNldFgoc3RhcnRpbmdSZWN0Lm1heFgoKSk7CiAgICAgICAgICAgICBlbnRyeVBv
aW50LnNldFgocG90ZW50aWFsUmVjdC54KCkpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAg
ICAgZXhpdFBvaW50LnNldFgobWF4KHN0YXJ0aW5nUmVjdC54KCksIHBvdGVudGlhbFJlY3QueCgp
KSk7CkBAIC02NzUsMTEgKzY3NSwxMSBAQCBJbnRSZWN0IHZpcnR1YWxSZWN0Rm9yRGlyZWN0aW9u
KEZvY3VzRGlyCiAgICAgSW50UmVjdCB2aXJ0dWFsU3RhcnRpbmdSZWN0ID0gc3RhcnRpbmdSZWN0
OwogICAgIHN3aXRjaCAoZGlyZWN0aW9uKSB7CiAgICAgY2FzZSBGb2N1c0RpcmVjdGlvbkxlZnQ6
Ci0gICAgICAgIHZpcnR1YWxTdGFydGluZ1JlY3Quc2V0WCh2aXJ0dWFsU3RhcnRpbmdSZWN0LnJp
Z2h0KCkgLSB3aWR0aCk7CisgICAgICAgIHZpcnR1YWxTdGFydGluZ1JlY3Quc2V0WCh2aXJ0dWFs
U3RhcnRpbmdSZWN0Lm1heFgoKSAtIHdpZHRoKTsKICAgICAgICAgdmlydHVhbFN0YXJ0aW5nUmVj
dC5zZXRXaWR0aCh3aWR0aCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgRm9jdXNEaXJlY3Rp
b25VcDoKLSAgICAgICAgdmlydHVhbFN0YXJ0aW5nUmVjdC5zZXRZKHZpcnR1YWxTdGFydGluZ1Jl
Y3QuYm90dG9tKCkgLSB3aWR0aCk7CisgICAgICAgIHZpcnR1YWxTdGFydGluZ1JlY3Quc2V0WSh2
aXJ0dWFsU3RhcnRpbmdSZWN0Lm1heFkoKSAtIHdpZHRoKTsKICAgICAgICAgdmlydHVhbFN0YXJ0
aW5nUmVjdC5zZXRIZWlnaHQod2lkdGgpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEZvY3Vz
RGlyZWN0aW9uUmlnaHQ6CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL1dpbmRvd0ZlYXR1cmVz
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL1dpbmRvd0ZlYXR1cmVzLmNw
cAkocmV2aXNpb24gNzcyNzgpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL1dpbmRvd0ZlYXR1cmVz
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTg2LDkgKzE4Niw5IEBAIFdpbmRvd0ZlYXR1cmVzOjpX
aW5kb3dGZWF0dXJlcyhjb25zdCBTdHIKICAgICB3aWR0aCA9IGZsb2F0RmVhdHVyZShmZWF0dXJl
cywgImRpYWxvZ3dpZHRoIiwgMTAwLCBzY3JlZW5BdmFpbGFibGVSZWN0LndpZHRoKCksIDYyMCk7
IC8vIGRlZmF1bHQgaGVyZSBjYW1lIGZyb20gZnJhbWUgc2l6ZSBvZiBkaWFsb2cgaW4gTWFjSUUK
ICAgICBoZWlnaHQgPSBmbG9hdEZlYXR1cmUoZmVhdHVyZXMsICJkaWFsb2doZWlnaHQiLCAxMDAs
IHNjcmVlbkF2YWlsYWJsZVJlY3QuaGVpZ2h0KCksIDQ1MCk7IC8vIGRlZmF1bHQgaGVyZSBjYW1l
IGZyb20gZnJhbWUgc2l6ZSBvZiBkaWFsb2cgaW4gTWFjSUUKIAotICAgIHggPSBmbG9hdEZlYXR1
cmUoZmVhdHVyZXMsICJkaWFsb2dsZWZ0Iiwgc2NyZWVuQXZhaWxhYmxlUmVjdC54KCksIHNjcmVl
bkF2YWlsYWJsZVJlY3QucmlnaHQoKSAtIHdpZHRoLCAtMSk7CisgICAgeCA9IGZsb2F0RmVhdHVy
ZShmZWF0dXJlcywgImRpYWxvZ2xlZnQiLCBzY3JlZW5BdmFpbGFibGVSZWN0LngoKSwgc2NyZWVu
QXZhaWxhYmxlUmVjdC5tYXhYKCkgLSB3aWR0aCwgLTEpOwogICAgIHhTZXQgPSB4ID4gMDsKLSAg
ICB5ID0gZmxvYXRGZWF0dXJlKGZlYXR1cmVzLCAiZGlhbG9ndG9wIiwgc2NyZWVuQXZhaWxhYmxl
UmVjdC55KCksIHNjcmVlbkF2YWlsYWJsZVJlY3QuYm90dG9tKCkgLSBoZWlnaHQsIC0xKTsKKyAg
ICB5ID0gZmxvYXRGZWF0dXJlKGZlYXR1cmVzLCAiZGlhbG9ndG9wIiwgc2NyZWVuQXZhaWxhYmxl
UmVjdC55KCksIHNjcmVlbkF2YWlsYWJsZVJlY3QubWF4WSgpIC0gaGVpZ2h0LCAtMSk7CiAgICAg
eVNldCA9IHkgPiAwOwogCiAgICAgaWYgKGJvb2xGZWF0dXJlKGZlYXR1cmVzLCAiY2VudGVyIiwg
dHJ1ZSkpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbFZpZXcuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbFZpZXcuY3BwCShyZXZp
c2lvbiA3NzI3OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbFZpZXcuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC05MjUsNyArOTI1LDcgQEAgdm9pZCBTY3JvbGxWaWV3OjpjYWxjdWxh
dGVPdmVyaGFuZ0FyZWFzRgogICAgIH0gZWxzZSBpZiAoc2Nyb2xsWSgpID4gY29udGVudHNIZWln
aHQoKSAtIHZpc2libGVDb250ZW50UmVjdCh0cnVlKS5oZWlnaHQoKSkgewogICAgICAgICBpbnQg
aGVpZ2h0ID0gc2Nyb2xsWSgpIC0gKGNvbnRlbnRzSGVpZ2h0KCkgLSB2aXNpYmxlQ29udGVudFJl
Y3QodHJ1ZSkuaGVpZ2h0KCkpOwogICAgICAgICBob3Jpem9udGFsT3ZlcmhhbmdSZWN0ID0gZnJh
bWVSZWN0KCk7Ci0gICAgICAgIGhvcml6b250YWxPdmVyaGFuZ1JlY3Quc2V0WShmcmFtZVJlY3Qo
KS5ib3R0b20oKSAtIGhlaWdodCk7CisgICAgICAgIGhvcml6b250YWxPdmVyaGFuZ1JlY3Quc2V0
WShmcmFtZVJlY3QoKS5tYXhZKCkgLSBoZWlnaHQpOwogICAgICAgICBob3Jpem9udGFsT3Zlcmhh
bmdSZWN0LnNldEhlaWdodChoZWlnaHQpOwogICAgIH0KIApAQCAtOTQxLDcgKzk0MSw3IEBAIHZv
aWQgU2Nyb2xsVmlldzo6Y2FsY3VsYXRlT3ZlcmhhbmdBcmVhc0YKICAgICAgICAgaW50IHdpZHRo
ID0gc2Nyb2xsWCgpIC0gKGNvbnRlbnRzV2lkdGgoKSAtIHZpc2libGVDb250ZW50UmVjdCh0cnVl
KS53aWR0aCgpKTsKICAgICAgICAgdmVydGljYWxPdmVyaGFuZ1JlY3Quc2V0V2lkdGgod2lkdGgp
OwogICAgICAgICB2ZXJ0aWNhbE92ZXJoYW5nUmVjdC5zZXRIZWlnaHQoZnJhbWVSZWN0KCkuaGVp
Z2h0KCkgLSBob3Jpem9udGFsT3ZlcmhhbmdSZWN0LmhlaWdodCgpKTsKLSAgICAgICAgdmVydGlj
YWxPdmVyaGFuZ1JlY3Quc2V0WChmcmFtZVJlY3QoKS5yaWdodCgpIC0gd2lkdGgpOworICAgICAg
ICB2ZXJ0aWNhbE92ZXJoYW5nUmVjdC5zZXRYKGZyYW1lUmVjdCgpLm1heFgoKSAtIHdpZHRoKTsK
ICAgICAgICAgaWYgKGhvcml6b250YWxPdmVyaGFuZ1JlY3QueSgpID09IGZyYW1lUmVjdCgpLnko
KSkKICAgICAgICAgICAgIHZlcnRpY2FsT3ZlcmhhbmdSZWN0LnNldFkoZnJhbWVSZWN0KCkueSgp
ICsgaG9yaXpvbnRhbE92ZXJoYW5nUmVjdC5oZWlnaHQoKSk7CiAgICAgICAgIGVsc2UKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGJhci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFyLmNwcAkocmV2aXNpb24gNzcyNzgpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
OTMsMTQgKzM5MywxNCBAQCB2b2lkIFNjcm9sbGJhcjo6c2V0RnJhbWVSZWN0KGNvbnN0IEludFJl
CiAgICAgICAgIEludFJlY3QgcmVzaXplclJlY3QgPSB2aWV3LT5jb252ZXJ0RnJvbUNvbnRhaW5p
bmdXaW5kb3codmlldy0+d2luZG93UmVzaXplclJlY3QoKSk7CiAgICAgICAgIGlmIChyZWN0Lmlu
dGVyc2VjdHMocmVzaXplclJlY3QpKSB7CiAgICAgICAgICAgICBpZiAob3JpZW50YXRpb24oKSA9
PSBIb3Jpem9udGFsU2Nyb2xsYmFyKSB7Ci0gICAgICAgICAgICAgICAgaW50IG92ZXJsYXAgPSBy
ZWN0LnJpZ2h0KCkgLSByZXNpemVyUmVjdC54KCk7Ci0gICAgICAgICAgICAgICAgaWYgKG92ZXJs
YXAgPiAwICYmIHJlc2l6ZXJSZWN0LnJpZ2h0KCkgPj0gcmVjdC5yaWdodCgpKSB7CisgICAgICAg
ICAgICAgICAgaW50IG92ZXJsYXAgPSByZWN0Lm1heFgoKSAtIHJlc2l6ZXJSZWN0LngoKTsKKyAg
ICAgICAgICAgICAgICBpZiAob3ZlcmxhcCA+IDAgJiYgcmVzaXplclJlY3QubWF4WCgpID49IHJl
Y3QubWF4WCgpKSB7CiAgICAgICAgICAgICAgICAgICAgIGFkanVzdGVkUmVjdC5zZXRXaWR0aChy
ZWN0LndpZHRoKCkgLSBvdmVybGFwKTsKICAgICAgICAgICAgICAgICAgICAgb3ZlcmxhcHNSZXNp
emVyID0gdHJ1ZTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgICAgIGludCBvdmVybGFwID0gcmVjdC5ib3R0b20oKSAtIHJlc2l6ZXJSZWN0Lnko
KTsKLSAgICAgICAgICAgICAgICBpZiAob3ZlcmxhcCA+IDAgJiYgcmVzaXplclJlY3QuYm90dG9t
KCkgPj0gcmVjdC5ib3R0b20oKSkgeworICAgICAgICAgICAgICAgIGludCBvdmVybGFwID0gcmVj
dC5tYXhZKCkgLSByZXNpemVyUmVjdC55KCk7CisgICAgICAgICAgICAgICAgaWYgKG92ZXJsYXAg
PiAwICYmIHJlc2l6ZXJSZWN0Lm1heFkoKSA+PSByZWN0Lm1heFkoKSkgewogICAgICAgICAgICAg
ICAgICAgICBhZGp1c3RlZFJlY3Quc2V0SGVpZ2h0KHJlY3QuaGVpZ2h0KCkgLSBvdmVybGFwKTsK
ICAgICAgICAgICAgICAgICAgICAgb3ZlcmxhcHNSZXNpemVyID0gdHJ1ZTsKICAgICAgICAgICAg
ICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXJUaGVtZUNvbXBv
c2l0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFy
VGhlbWVDb21wb3NpdGUuY3BwCShyZXZpc2lvbiA3NzI3OCkKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL1Njcm9sbGJhclRoZW1lQ29tcG9zaXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQ4
LDExICsyNDgsMTEgQEAgdm9pZCBTY3JvbGxiYXJUaGVtZUNvbXBvc2l0ZTo6c3BsaXRUcmFjawog
ICAgIGlmIChzY3JvbGxiYXItPm9yaWVudGF0aW9uKCkgPT0gSG9yaXpvbnRhbFNjcm9sbGJhcikg
ewogICAgICAgICB0aHVtYlJlY3QgPSBJbnRSZWN0KHRyYWNrUmVjdC54KCkgKyB0aHVtYlBvcywg
dHJhY2tSZWN0LnkoKSArICh0cmFja1JlY3QuaGVpZ2h0KCkgLSB0aGlja25lc3MpIC8gMiwgdGh1
bWJMZW5ndGgoc2Nyb2xsYmFyKSwgdGhpY2tuZXNzKTsgCiAgICAgICAgIGJlZm9yZVRodW1iUmVj
dCA9IEludFJlY3QodHJhY2tSZWN0LngoKSwgdHJhY2tSZWN0LnkoKSwgdGh1bWJQb3MgKyB0aHVt
YlJlY3Qud2lkdGgoKSAvIDIsIHRyYWNrUmVjdC5oZWlnaHQoKSk7IAotICAgICAgICBhZnRlclRo
dW1iUmVjdCA9IEludFJlY3QodHJhY2tSZWN0LngoKSArIGJlZm9yZVRodW1iUmVjdC53aWR0aCgp
LCB0cmFja1JlY3QueSgpLCB0cmFja1JlY3QucmlnaHQoKSAtIGJlZm9yZVRodW1iUmVjdC5yaWdo
dCgpLCB0cmFja1JlY3QuaGVpZ2h0KCkpOworICAgICAgICBhZnRlclRodW1iUmVjdCA9IEludFJl
Y3QodHJhY2tSZWN0LngoKSArIGJlZm9yZVRodW1iUmVjdC53aWR0aCgpLCB0cmFja1JlY3QueSgp
LCB0cmFja1JlY3QubWF4WCgpIC0gYmVmb3JlVGh1bWJSZWN0Lm1heFgoKSwgdHJhY2tSZWN0Lmhl
aWdodCgpKTsKICAgICB9IGVsc2UgewogICAgICAgICB0aHVtYlJlY3QgPSBJbnRSZWN0KHRyYWNr
UmVjdC54KCkgKyAodHJhY2tSZWN0LndpZHRoKCkgLSB0aGlja25lc3MpIC8gMiwgdHJhY2tSZWN0
LnkoKSArIHRodW1iUG9zLCB0aGlja25lc3MsIHRodW1iTGVuZ3RoKHNjcm9sbGJhcikpOwogICAg
ICAgICBiZWZvcmVUaHVtYlJlY3QgPSBJbnRSZWN0KHRyYWNrUmVjdC54KCksIHRyYWNrUmVjdC55
KCksIHRyYWNrUmVjdC53aWR0aCgpLCB0aHVtYlBvcyArIHRodW1iUmVjdC5oZWlnaHQoKSAvIDIp
OyAKLSAgICAgICAgYWZ0ZXJUaHVtYlJlY3QgPSBJbnRSZWN0KHRyYWNrUmVjdC54KCksIHRyYWNr
UmVjdC55KCkgKyBiZWZvcmVUaHVtYlJlY3QuaGVpZ2h0KCksIHRyYWNrUmVjdC53aWR0aCgpLCB0
cmFja1JlY3QuYm90dG9tKCkgLSBiZWZvcmVUaHVtYlJlY3QuYm90dG9tKCkpOworICAgICAgICBh
ZnRlclRodW1iUmVjdCA9IEludFJlY3QodHJhY2tSZWN0LngoKSwgdHJhY2tSZWN0LnkoKSArIGJl
Zm9yZVRodW1iUmVjdC5oZWlnaHQoKSwgdHJhY2tSZWN0LndpZHRoKCksIHRyYWNrUmVjdC5tYXhZ
KCkgLSBiZWZvcmVUaHVtYlJlY3QubWF4WSgpKTsKICAgICB9CiB9CiAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1Njcm9sbGJhclRoZW1lQ2hyb21pdW0uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1Njcm9sbGJhclRoZW1l
Q2hyb21pdW0uY3BwCShyZXZpc2lvbiA3NzI3OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2Nocm9taXVtL1Njcm9sbGJhclRoZW1lQ2hyb21pdW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
MjgsNyArMTI4LDcgQEAgdm9pZCBTY3JvbGxiYXJUaGVtZUNocm9taXVtOjpwYWludFRpY2ttYQog
ICAgICAgICBjb25zdCBmbG9hdCBwZXJjZW50ID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KGktPnkoKSkg
LyBzY3JvbGxiYXItPnRvdGFsU2l6ZSgpOwogCiAgICAgICAgIC8vIENhbGN1bGF0ZSBob3cgZmFy
IGRvd24gKGluIHBpeGVscykgdGhlIHRpY2stbWFyayBzaG91bGQgYXBwZWFyLgotICAgICAgICBj
b25zdCBpbnQgeVBvcyA9IHJlY3QudG9wTGVmdCgpLnkoKSArIChyZWN0LmhlaWdodCgpICogcGVy
Y2VudCk7CisgICAgICAgIGNvbnN0IGludCB5UG9zID0gcmVjdC55KCkgKyAocmVjdC5oZWlnaHQo
KSAqIHBlcmNlbnQpOwogCiAgICAgICAgIEludFBvaW50IHRpY2soc2Nyb2xsYmFyLT54KCksIHlQ
b3MpOwogICAgICAgICBjb250ZXh0LT5kcmF3SW1hZ2UoZGFzaC5nZXQoKSwgQ29sb3JTcGFjZURl
dmljZVJHQiwgdGljayk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9G
bG9hdFF1YWQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9GbG9hdFF1YWQuaAkocmV2aXNpb24gNzcyNzgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9GbG9hdFF1YWQuaAkod29ya2luZyBjb3B5KQpAQCAtNTQsOSArNTQsOSBAQCBw
dWJsaWM6CiAKICAgICBGbG9hdFF1YWQoY29uc3QgRmxvYXRSZWN0JiBpblJlY3QpCiAgICAgICAg
IDogbV9wMShpblJlY3QubG9jYXRpb24oKSkKLSAgICAgICAgLCBtX3AyKGluUmVjdC5yaWdodCgp
LCBpblJlY3QueSgpKQotICAgICAgICAsIG1fcDMoaW5SZWN0LnJpZ2h0KCksIGluUmVjdC5ib3R0
b20oKSkKLSAgICAgICAgLCBtX3A0KGluUmVjdC54KCksIGluUmVjdC5ib3R0b20oKSkKKyAgICAg
ICAgLCBtX3AyKGluUmVjdC5tYXhYKCksIGluUmVjdC55KCkpCisgICAgICAgICwgbV9wMyhpblJl
Y3QubWF4WCgpLCBpblJlY3QubWF4WSgpKQorICAgICAgICAsIG1fcDQoaW5SZWN0LngoKSwgaW5S
ZWN0Lm1heFkoKSkKICAgICB7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9GbG9hdFJlY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0Zsb2F0UmVjdC5jcHAJKHJldmlzaW9uIDc3Mjc4KQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRSZWN0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNTEsMjIgKzUxLDIyIEBAIGJvb2wgRmxvYXRSZWN0OjppbnRlcnNlY3RzKGNvbnN0IEZsb2F0
UmUKIHsKICAgICAvLyBDaGVja2luZyBlbXB0aW5lc3MgaGFuZGxlcyBuZWdhdGl2ZSB3aWR0aHMg
YXMgd2VsbCBhcyB6ZXJvLgogICAgIHJldHVybiAhaXNFbXB0eSgpICYmICFvdGhlci5pc0VtcHR5
KCkKLSAgICAgICAgJiYgeCgpIDwgb3RoZXIucmlnaHQoKSAmJiBvdGhlci54KCkgPCByaWdodCgp
Ci0gICAgICAgICYmIHkoKSA8IG90aGVyLmJvdHRvbSgpICYmIG90aGVyLnkoKSA8IGJvdHRvbSgp
OworICAgICAgICAmJiB4KCkgPCBvdGhlci5tYXhYKCkgJiYgb3RoZXIueCgpIDwgbWF4WCgpCisg
ICAgICAgICYmIHkoKSA8IG90aGVyLm1heFkoKSAmJiBvdGhlci55KCkgPCBtYXhZKCk7CiB9CiAK
IGJvb2wgRmxvYXRSZWN0Ojpjb250YWlucyhjb25zdCBGbG9hdFJlY3QmIG90aGVyKSBjb25zdAog
ewotICAgIHJldHVybiB4KCkgPD0gb3RoZXIueCgpICYmIHJpZ2h0KCkgPj0gb3RoZXIucmlnaHQo
KQotICAgICAgICAmJiB5KCkgPD0gb3RoZXIueSgpICYmIGJvdHRvbSgpID49IG90aGVyLmJvdHRv
bSgpOworICAgIHJldHVybiB4KCkgPD0gb3RoZXIueCgpICYmIG1heFgoKSA+PSBvdGhlci5tYXhY
KCkKKyAgICAgICAgJiYgeSgpIDw9IG90aGVyLnkoKSAmJiBtYXhZKCkgPj0gb3RoZXIubWF4WSgp
OwogfQogCiB2b2lkIEZsb2F0UmVjdDo6aW50ZXJzZWN0KGNvbnN0IEZsb2F0UmVjdCYgb3RoZXIp
CiB7CiAgICAgZmxvYXQgbCA9IG1heCh4KCksIG90aGVyLngoKSk7CiAgICAgZmxvYXQgdCA9IG1h
eCh5KCksIG90aGVyLnkoKSk7Ci0gICAgZmxvYXQgciA9IG1pbihyaWdodCgpLCBvdGhlci5yaWdo
dCgpKTsKLSAgICBmbG9hdCBiID0gbWluKGJvdHRvbSgpLCBvdGhlci5ib3R0b20oKSk7CisgICAg
ZmxvYXQgciA9IG1pbihtYXhYKCksIG90aGVyLm1heFgoKSk7CisgICAgZmxvYXQgYiA9IG1pbiht
YXhZKCksIG90aGVyLm1heFkoKSk7CiAKICAgICAvLyBSZXR1cm4gYSBjbGVhbiBlbXB0eSByZWN0
YW5nbGUgZm9yIG5vbi1pbnRlcnNlY3RpbmcgY2FzZXMuCiAgICAgaWYgKGwgPj0gciB8fCB0ID49
IGIpIHsKQEAgLTkxLDggKzkxLDggQEAgdm9pZCBGbG9hdFJlY3Q6OnVuaXRlKGNvbnN0IEZsb2F0
UmVjdCYgbwogCiAgICAgZmxvYXQgbCA9IG1pbih4KCksIG90aGVyLngoKSk7CiAgICAgZmxvYXQg
dCA9IG1pbih5KCksIG90aGVyLnkoKSk7Ci0gICAgZmxvYXQgciA9IG1heChyaWdodCgpLCBvdGhl
ci5yaWdodCgpKTsKLSAgICBmbG9hdCBiID0gbWF4KGJvdHRvbSgpLCBvdGhlci5ib3R0b20oKSk7
CisgICAgZmxvYXQgciA9IG1heChtYXhYKCksIG90aGVyLm1heFgoKSk7CisgICAgZmxvYXQgYiA9
IG1heChtYXhZKCksIG90aGVyLm1heFkoKSk7CiAKICAgICBzZXRMb2NhdGlvbkFuZFNpemVGcm9t
RWRnZXMobCwgdCwgciwgYik7CiB9CkBAIC0xODAsOCArMTgwLDggQEAgSW50UmVjdCBlbmNsb3Np
bmdJbnRSZWN0KGNvbnN0IEZsb2F0UmVjdAogewogICAgIGZsb2F0IGxlZnQgPSBmbG9vcmYocmVj
dC54KCkpOwogICAgIGZsb2F0IHRvcCA9IGZsb29yZihyZWN0LnkoKSk7Ci0gICAgZmxvYXQgd2lk
dGggPSBjZWlsZihyZWN0LnJpZ2h0KCkpIC0gbGVmdDsKLSAgICBmbG9hdCBoZWlnaHQgPSBjZWls
ZihyZWN0LmJvdHRvbSgpKSAtIHRvcDsKKyAgICBmbG9hdCB3aWR0aCA9IGNlaWxmKHJlY3QubWF4
WCgpKSAtIGxlZnQ7CisgICAgZmxvYXQgaGVpZ2h0ID0gY2VpbGYocmVjdC5tYXhZKCkpIC0gdG9w
OwogICAgIHJldHVybiBJbnRSZWN0KHNhZmVGbG9hdFRvSW50KGxlZnQpLCBzYWZlRmxvYXRUb0lu
dCh0b3ApLCAKICAgICAgICAgICAgICAgICAgICBzYWZlRmxvYXRUb0ludCh3aWR0aCksIHNhZmVG
bG9hdFRvSW50KGhlaWdodCkpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvRmxvYXRSZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvRmxvYXRSZWN0LmgJKHJldmlzaW9uIDc3Mjc4KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRSZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTkwLDYgKzkw
LDggQEAgcHVibGljOgogCiAgICAgZmxvYXQgeCgpIGNvbnN0IHsgcmV0dXJuIG1fbG9jYXRpb24u
eCgpOyB9CiAgICAgZmxvYXQgeSgpIGNvbnN0IHsgcmV0dXJuIG1fbG9jYXRpb24ueSgpOyB9Cisg
ICAgZmxvYXQgbWF4WCgpIGNvbnN0IHsgcmV0dXJuIHgoKSArIHdpZHRoKCk7IH0KKyAgICBmbG9h
dCBtYXhZKCkgY29uc3QgeyByZXR1cm4geSgpICsgaGVpZ2h0KCk7IH0KICAgICBmbG9hdCB3aWR0
aCgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZS53aWR0aCgpOyB9CiAgICAgZmxvYXQgaGVpZ2h0KCkg
Y29uc3QgeyByZXR1cm4gbV9zaXplLmhlaWdodCgpOyB9CiAKQEAgLTExOSw3ICsxMjEsNyBAQCBw
dWJsaWM6CiAgICAgLy8gTm90ZSwgdGhpcyBkb2Vzbid0IG1hdGNoIHdoYXQgSW50UmVjdDo6Y29u
dGFpbnMoSW50UG9pbnQmKSBkb2VzOyB0aGUgaW50IHZlcnNpb24KICAgICAvLyBpcyByZWFsbHkg
Y2hlY2tpbmcgZm9yIGNvbnRhaW5tZW50IG9mIDF4MSByZWN0LCBidXQgdGhhdCBkb2Vzbid0IG1h
a2Ugc2Vuc2Ugd2l0aCBmbG9hdHMuCiAgICAgYm9vbCBjb250YWlucyhmbG9hdCBweCwgZmxvYXQg
cHkpIGNvbnN0Ci0gICAgICAgIHsgcmV0dXJuIHB4ID49IHgoKSAmJiBweCA8PSByaWdodCgpICYm
IHB5ID49IHkoKSAmJiBweSA8PSBib3R0b20oKTsgfQorICAgICAgICB7IHJldHVybiBweCA+PSB4
KCkgJiYgcHggPD0gbWF4WCgpICYmIHB5ID49IHkoKSAmJiBweSA8PSBtYXhZKCk7IH0KICAgICBi
b29sIGNvbnRhaW5zKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KSBjb25zdCB7IHJldHVybiBjb250
YWlucyhwb2ludC54KCksIHBvaW50LnkoKSk7IH0KIAogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9JbnRSZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9JbnRSZWN0LmNwcAkocmV2aXNpb24gNzcyNzgpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbnRSZWN0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDQsMjIgKzQ0LDIyIEBAIGJvb2wgSW50UmVjdDo6aW50ZXJzZWN0cyhjb25zdCBJbnRSZWN0
JiAKIHsKICAgICAvLyBDaGVja2luZyBlbXB0aW5lc3MgaGFuZGxlcyBuZWdhdGl2ZSB3aWR0aHMg
YXMgd2VsbCBhcyB6ZXJvLgogICAgIHJldHVybiAhaXNFbXB0eSgpICYmICFvdGhlci5pc0VtcHR5
KCkKLSAgICAgICAgJiYgeCgpIDwgb3RoZXIucmlnaHQoKSAmJiBvdGhlci54KCkgPCByaWdodCgp
Ci0gICAgICAgICYmIHkoKSA8IG90aGVyLmJvdHRvbSgpICYmIG90aGVyLnkoKSA8IGJvdHRvbSgp
OworICAgICAgICAmJiB4KCkgPCBvdGhlci5tYXhYKCkgJiYgb3RoZXIueCgpIDwgbWF4WCgpCisg
ICAgICAgICYmIHkoKSA8IG90aGVyLm1heFkoKSAmJiBvdGhlci55KCkgPCBtYXhZKCk7CiB9CiAK
IGJvb2wgSW50UmVjdDo6Y29udGFpbnMoY29uc3QgSW50UmVjdCYgb3RoZXIpIGNvbnN0CiB7Ci0g
ICAgcmV0dXJuIHgoKSA8PSBvdGhlci54KCkgJiYgcmlnaHQoKSA+PSBvdGhlci5yaWdodCgpCi0g
ICAgICAgICYmIHkoKSA8PSBvdGhlci55KCkgJiYgYm90dG9tKCkgPj0gb3RoZXIuYm90dG9tKCk7
CisgICAgcmV0dXJuIHgoKSA8PSBvdGhlci54KCkgJiYgbWF4WCgpID49IG90aGVyLm1heFgoKQor
ICAgICAgICAmJiB5KCkgPD0gb3RoZXIueSgpICYmIG1heFkoKSA+PSBvdGhlci5tYXhZKCk7CiB9
CiAKIHZvaWQgSW50UmVjdDo6aW50ZXJzZWN0KGNvbnN0IEludFJlY3QmIG90aGVyKQogewogICAg
IGludCBsID0gbWF4KHgoKSwgb3RoZXIueCgpKTsKICAgICBpbnQgdCA9IG1heCh5KCksIG90aGVy
LnkoKSk7Ci0gICAgaW50IHIgPSBtaW4ocmlnaHQoKSwgb3RoZXIucmlnaHQoKSk7Ci0gICAgaW50
IGIgPSBtaW4oYm90dG9tKCksIG90aGVyLmJvdHRvbSgpKTsKKyAgICBpbnQgciA9IG1pbihtYXhY
KCksIG90aGVyLm1heFgoKSk7CisgICAgaW50IGIgPSBtaW4obWF4WSgpLCBvdGhlci5tYXhZKCkp
OwogCiAgICAgLy8gUmV0dXJuIGEgY2xlYW4gZW1wdHkgcmVjdGFuZ2xlIGZvciBub24taW50ZXJz
ZWN0aW5nIGNhc2VzLgogICAgIGlmIChsID49IHIgfHwgdCA+PSBiKSB7CkBAIC04Nyw4ICs4Nyw4
IEBAIHZvaWQgSW50UmVjdDo6dW5pdGUoY29uc3QgSW50UmVjdCYgb3RoZXIKIAogICAgIGludCBs
ID0gbWluKHgoKSwgb3RoZXIueCgpKTsKICAgICBpbnQgdCA9IG1pbih5KCksIG90aGVyLnkoKSk7
Ci0gICAgaW50IHIgPSBtYXgocmlnaHQoKSwgb3RoZXIucmlnaHQoKSk7Ci0gICAgaW50IGIgPSBt
YXgoYm90dG9tKCksIG90aGVyLmJvdHRvbSgpKTsKKyAgICBpbnQgciA9IG1heChtYXhYKCksIG90
aGVyLm1heFgoKSk7CisgICAgaW50IGIgPSBtYXgobWF4WSgpLCBvdGhlci5tYXhZKCkpOwogCiAg
ICAgbV9sb2NhdGlvbi5zZXRYKGwpOwogICAgIG1fbG9jYXRpb24uc2V0WSh0KTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ludFJlY3QuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbnRSZWN0LmgJKHJldmlzaW9uIDc3Mjc4
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW50UmVjdC5oCSh3b3JraW5n
IGNvcHkpCkBAIC05MSw2ICs5MSw4IEBAIHB1YmxpYzoKIAogICAgIGludCB4KCkgY29uc3QgeyBy
ZXR1cm4gbV9sb2NhdGlvbi54KCk7IH0KICAgICBpbnQgeSgpIGNvbnN0IHsgcmV0dXJuIG1fbG9j
YXRpb24ueSgpOyB9CisgICAgaW50IG1heFgoKSBjb25zdCB7IHJldHVybiB4KCkgKyB3aWR0aCgp
OyB9CisgICAgaW50IG1heFkoKSBjb25zdCB7IHJldHVybiB5KCkgKyBoZWlnaHQoKTsgfQogICAg
IGludCB3aWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZS53aWR0aCgpOyB9CiAgICAgaW50IGhl
aWdodCgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZS5oZWlnaHQoKTsgfQogCkBAIC05OSwxMyArMTAx
LDYgQEAgcHVibGljOgogICAgIHZvaWQgc2V0V2lkdGgoaW50IHdpZHRoKSB7IG1fc2l6ZS5zZXRX
aWR0aCh3aWR0aCk7IH0KICAgICB2b2lkIHNldEhlaWdodChpbnQgaGVpZ2h0KSB7IG1fc2l6ZS5z
ZXRIZWlnaHQoaGVpZ2h0KTsgfQogCi0gICAgLy8gQmUgY2FyZWZ1bCB3aXRoIHRoZXNlIGZ1bmN0
aW9ucy4gIFRoZSBwb2ludCBpcyBjb25zaWRlcmVkIHRvIGJlIHRvIHRoZSByaWdodCBhbmQgYmVs
b3cuICBUaGVzZSBhcmUgbm90Ci0gICAgLy8gc3Vic3RpdHV0ZXMgZm9yIHJpZ2h0KCkgYW5kIGJv
dHRvbSgpLgotICAgIEludFBvaW50IHRvcExlZnQoKSBjb25zdCB7IHJldHVybiBtX2xvY2F0aW9u
OyB9Ci0gICAgSW50UG9pbnQgdG9wUmlnaHQoKSBjb25zdCB7IHJldHVybiBJbnRQb2ludChyaWdo
dCgpIC0gMSwgeSgpKTsgfQotICAgIEludFBvaW50IGJvdHRvbUxlZnQoKSBjb25zdCB7IHJldHVy
biBJbnRQb2ludCh4KCksIGJvdHRvbSgpIC0gMSk7IH0KLSAgICBJbnRQb2ludCBib3R0b21SaWdo
dCgpIGNvbnN0IHsgcmV0dXJuIEludFBvaW50KHJpZ2h0KCkgLSAxLCBib3R0b20oKSAtIDEpOyB9
Ci0KICAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiBtX3NpemUuaXNFbXB0eSgpOyB9
CiAKICAgICBpbnQgcmlnaHQoKSBjb25zdCB7IHJldHVybiB4KCkgKyB3aWR0aCgpOyB9CkBAIC0x
MTgsMjYgKzExMywyNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBtb3ZlKGNvbnN0IEludFNpemUmIHMp
IHsgbV9sb2NhdGlvbiArPSBzOyB9IAogICAgIHZvaWQgbW92ZShpbnQgZHgsIGludCBkeSkgeyBt
X2xvY2F0aW9uLm1vdmUoZHgsIGR5KTsgfSAKICAgICAKLSAgICB2b2lkIHNoaWZ0TGVmdEVkZ2VU
byhpbnQgZWRnZSkKKyAgICB2b2lkIHNoaWZ0WEVkZ2VUbyhpbnQgZWRnZSkKICAgICB7CiAgICAg
ICAgIGludCBkZWx0YSA9IGVkZ2UgLSB4KCk7CiAgICAgICAgIHNldFgoZWRnZSk7CiAgICAgICAg
IHNldFdpZHRoKHN0ZDo6bWF4KDAsIHdpZHRoKCkgLSBkZWx0YSkpOwogICAgIH0KLSAgICB2b2lk
IHNoaWZ0UmlnaHRFZGdlVG8oaW50IGVkZ2UpCisgICAgdm9pZCBzaGlmdE1heFhFZGdlVG8oaW50
IGVkZ2UpCiAgICAgewotICAgICAgICBpbnQgZGVsdGEgPSBlZGdlIC0gcmlnaHQoKTsKKyAgICAg
ICAgaW50IGRlbHRhID0gZWRnZSAtIG1heFgoKTsKICAgICAgICAgc2V0V2lkdGgoc3RkOjptYXgo
MCwgd2lkdGgoKSArIGRlbHRhKSk7CiAgICAgfQotICAgIHZvaWQgc2hpZnRUb3BFZGdlVG8oaW50
IGVkZ2UpCisgICAgdm9pZCBzaGlmdFlFZGdlVG8oaW50IGVkZ2UpCiAgICAgewogICAgICAgICBp
bnQgZGVsdGEgPSBlZGdlIC0geSgpOwogICAgICAgICBzZXRZKGVkZ2UpOwogICAgICAgICBzZXRI
ZWlnaHQoc3RkOjptYXgoMCwgaGVpZ2h0KCkgLSBkZWx0YSkpOwogICAgIH0KLSAgICB2b2lkIHNo
aWZ0Qm90dG9tRWRnZVRvKGludCBlZGdlKQorICAgIHZvaWQgc2hpZnRNYXhZRWRnZVRvKGludCBl
ZGdlKQogICAgIHsKLSAgICAgICAgaW50IGRlbHRhID0gZWRnZSAtIGJvdHRvbSgpOworICAgICAg
ICBpbnQgZGVsdGEgPSBlZGdlIC0gbWF4WSgpOwogICAgICAgICBzZXRIZWlnaHQoc3RkOjptYXgo
MCwgaGVpZ2h0KCkgKyBkZWx0YSkpOwogICAgIH0KIApAQCAtMTQ3LDcgKzE0Miw3IEBAIHB1Ymxp
YzoKICAgICAvLyBUaGlzIGNoZWNrcyB0byBzZWUgaWYgdGhlIHJlY3QgY29udGFpbnMgeCx5IGlu
IHRoZSB0cmFkaXRpb25hbCBzZW5zZS4KICAgICAvLyBFcXVpdmFsZW50IHRvIGNoZWNraW5nIGlm
IHRoZSByZWN0IGNvbnRhaW5zIGEgMXgxIHJlY3QgYmVsb3cgYW5kIHRvIHRoZSByaWdodCBvZiAo
cHgscHkpLgogICAgIGJvb2wgY29udGFpbnMoaW50IHB4LCBpbnQgcHkpIGNvbnN0Ci0gICAgICAg
IHsgcmV0dXJuIHB4ID49IHgoKSAmJiBweCA8IHJpZ2h0KCkgJiYgcHkgPj0geSgpICYmIHB5IDwg
Ym90dG9tKCk7IH0KKyAgICAgICAgeyByZXR1cm4gcHggPj0geCgpICYmIHB4IDwgbWF4WCgpICYm
IHB5ID49IHkoKSAmJiBweSA8IG1heFkoKTsgfQogICAgIGJvb2wgY29udGFpbnMoY29uc3QgSW50
UG9pbnQmIHBvaW50KSBjb25zdCB7IHJldHVybiBjb250YWlucyhwb2ludC54KCksIHBvaW50Lnko
KSk7IH0KIAogICAgIHZvaWQgaW50ZXJzZWN0KGNvbnN0IEludFJlY3QmKTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1dpZHRoSXRlcmF0b3IuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1dpZHRoSXRlcmF0b3IuY3BwCShy
ZXZpc2lvbiA3NzI3OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1dpZHRo
SXRlcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNTUsOSArMjU1LDkgQEAgdm9pZCBXaWR0
aEl0ZXJhdG9yOjphZHZhbmNlKGludCBvZmZzZXQsIAogICAgICAgICBsYXN0Um91bmRpbmdXaWR0
aCA9IHdpZHRoIC0gb2xkV2lkdGg7CiAKICAgICAgICAgaWYgKG1fYWNjb3VudEZvckdseXBoQm91
bmRzKSB7Ci0gICAgICAgICAgICBtX21heEdseXBoQm91bmRpbmdCb3hZID0gbWF4KG1fbWF4R2x5
cGhCb3VuZGluZ0JveFksIGJvdW5kcy5ib3R0b20oKSk7CisgICAgICAgICAgICBtX21heEdseXBo
Qm91bmRpbmdCb3hZID0gbWF4KG1fbWF4R2x5cGhCb3VuZGluZ0JveFksIGJvdW5kcy5tYXhZKCkp
OwogICAgICAgICAgICAgbV9taW5HbHlwaEJvdW5kaW5nQm94WSA9IG1pbihtX21pbkdseXBoQm91
bmRpbmdCb3hZLCBib3VuZHMueSgpKTsKLSAgICAgICAgICAgIG1fbGFzdEdseXBoT3ZlcmZsb3cg
PSBtYXg8ZmxvYXQ+KDAsIGJvdW5kcy5yaWdodCgpIC0gd2lkdGgpOworICAgICAgICAgICAgbV9s
YXN0R2x5cGhPdmVyZmxvdyA9IG1heDxmbG9hdD4oMCwgYm91bmRzLm1heFgoKSAtIHdpZHRoKTsK
ICAgICAgICAgfQogICAgIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmNwcAkocmV2aXNpb24gNzcy
NzgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRl
eHRDRy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2Niw5ICsxNjYsOSBAQCB2b2lkIEdyYXBoaWNz
Q29udGV4dDo6ZHJhd1JlY3QoY29uc3QgSW50CiAgICAgICAgICAgICBzZXRDR0ZpbGxDb2xvcihj
b250ZXh0LCBzdHJva2VDb2xvcigpLCBzdHJva2VDb2xvclNwYWNlKCkpOwogICAgICAgICBDR1Jl
Y3QgcmVjdHNbNF0gPSB7CiAgICAgICAgICAgICBGbG9hdFJlY3QocmVjdC54KCksIHJlY3QueSgp
LCByZWN0LndpZHRoKCksIDEpLAotICAgICAgICAgICAgRmxvYXRSZWN0KHJlY3QueCgpLCByZWN0
LmJvdHRvbSgpIC0gMSwgcmVjdC53aWR0aCgpLCAxKSwKKyAgICAgICAgICAgIEZsb2F0UmVjdChy
ZWN0LngoKSwgcmVjdC5tYXhZKCkgLSAxLCByZWN0LndpZHRoKCksIDEpLAogICAgICAgICAgICAg
RmxvYXRSZWN0KHJlY3QueCgpLCByZWN0LnkoKSArIDEsIDEsIHJlY3QuaGVpZ2h0KCkgLSAyKSwK
LSAgICAgICAgICAgIEZsb2F0UmVjdChyZWN0LnJpZ2h0KCkgLSAxLCByZWN0LnkoKSArIDEsIDEs
IHJlY3QuaGVpZ2h0KCkgLSAyKQorICAgICAgICAgICAgRmxvYXRSZWN0KHJlY3QubWF4WCgpIC0g
MSwgcmVjdC55KCkgKyAxLCAxLCByZWN0LmhlaWdodCgpIC0gMikKICAgICAgICAgfTsKICAgICAg
ICAgQ0dDb250ZXh0RmlsbFJlY3RzKGNvbnRleHQsIHJlY3RzLCA0KTsKICAgICAgICAgaWYgKG9s
ZEZpbGxDb2xvciAhPSBzdHJva2VDb2xvcigpKQpAQCAtNTY0LDcgKzU2NCw3IEBAIHZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpmaWxsUGF0aChjb25zdCBQYXQKICAgICAgICAgICAgICAgICBDR0NvbnRl
eHRDbGlwKGxheWVyQ29udGV4dCk7CiAKICAgICAgICAgICAgIG1fc3RhdGUuZmlsbEdyYWRpZW50
LT5wYWludChsYXllckNvbnRleHQpOwotICAgICAgICAgICAgQ0dDb250ZXh0RHJhd0xheWVyQXRQ
b2ludChjb250ZXh0LCBDR1BvaW50TWFrZShyZWN0LmxlZnQoKSwgcmVjdC50b3AoKSksIGxheWVy
KTsKKyAgICAgICAgICAgIENHQ29udGV4dERyYXdMYXllckF0UG9pbnQoY29udGV4dCwgQ0dQb2lu
dE1ha2UocmVjdC54KCksIHJlY3QueSgpKSwgbGF5ZXIpOwogICAgICAgICAgICAgQ0dMYXllclJl
bGVhc2UobGF5ZXIpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgQ0dDb250ZXh0QmVn
aW5QYXRoKGNvbnRleHQpOwpAQCAtNjQ2LDcgKzY0Niw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0
OjpmaWxsUmVjdChjb25zdCBGbG8KIAogICAgICAgICAgICAgQ0dDb250ZXh0Q29uY2F0Q1RNKGxh
eWVyQ29udGV4dCwgbV9zdGF0ZS5maWxsR3JhZGllbnQtPmdyYWRpZW50U3BhY2VUcmFuc2Zvcm0o
KSk7CiAgICAgICAgICAgICBtX3N0YXRlLmZpbGxHcmFkaWVudC0+cGFpbnQobGF5ZXJDb250ZXh0
KTsKLSAgICAgICAgICAgIENHQ29udGV4dERyYXdMYXllckF0UG9pbnQoY29udGV4dCwgQ0dQb2lu
dE1ha2UocmVjdC5sZWZ0KCksIHJlY3QudG9wKCkpLCBsYXllcik7CisgICAgICAgICAgICBDR0Nv
bnRleHREcmF3TGF5ZXJBdFBvaW50KGNvbnRleHQsIENHUG9pbnRNYWtlKHJlY3QueCgpLCByZWN0
LnkoKSksIGxheWVyKTsKICAgICAgICAgICAgIENHTGF5ZXJSZWxlYXNlKGxheWVyKTsKICAgICAg
ICAgfSBlbHNlIHsKICAgICAgICAgICAgIENHQ29udGV4dENsaXBUb1JlY3QoY29udGV4dCwgcmVj
dCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZl
ckNHLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
Zy9JbWFnZUJ1ZmZlckNHLmNwcAkocmV2aXNpb24gNzcyNzgpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjY3LDcgKzI2Nyw3IEBAIFBhc3NSZWZQdHI8Qnl0ZUFycmF5PiBnZXRJbWFnZURhdGEoY29uc3QK
ICAgICBSZWZQdHI8Qnl0ZUFycmF5PiByZXN1bHQgPSBCeXRlQXJyYXk6OmNyZWF0ZShyZWN0Lndp
ZHRoKCkgKiByZWN0LmhlaWdodCgpICogNCk7CiAgICAgdW5zaWduZWQgY2hhciogZGF0YSA9IHJl
c3VsdC0+ZGF0YSgpOwogCi0gICAgaWYgKHJlY3QueCgpIDwgMCB8fCByZWN0LnkoKSA8IDAgfHwg
cmVjdC5yaWdodCgpID4gc2l6ZS53aWR0aCgpIHx8IHJlY3QuYm90dG9tKCkgPiBzaXplLmhlaWdo
dCgpKQorICAgIGlmIChyZWN0LngoKSA8IDAgfHwgcmVjdC55KCkgPCAwIHx8IHJlY3QubWF4WCgp
ID4gc2l6ZS53aWR0aCgpIHx8IHJlY3QubWF4WSgpID4gc2l6ZS5oZWlnaHQoKSkKICAgICAgICAg
bWVtc2V0KGRhdGEsIDAsIHJlc3VsdC0+bGVuZ3RoKCkpOwogCiAgICAgaW50IG9yaWdpbnggPSBy
ZWN0LngoKTsKQEAgLTI3Niw3ICsyNzYsNyBAQCBQYXNzUmVmUHRyPEJ5dGVBcnJheT4gZ2V0SW1h
Z2VEYXRhKGNvbnN0CiAgICAgICAgIGRlc3R4ID0gLW9yaWdpbng7CiAgICAgICAgIG9yaWdpbngg
PSAwOwogICAgIH0KLSAgICBpbnQgZW5keCA9IHJlY3QucmlnaHQoKTsKKyAgICBpbnQgZW5keCA9
IHJlY3QubWF4WCgpOwogICAgIGlmIChlbmR4ID4gc2l6ZS53aWR0aCgpKQogICAgICAgICBlbmR4
ID0gc2l6ZS53aWR0aCgpOwogICAgIGludCBudW1Db2x1bW5zID0gZW5keCAtIG9yaWdpbng7CkBA
IC0yODcsNyArMjg3LDcgQEAgUGFzc1JlZlB0cjxCeXRlQXJyYXk+IGdldEltYWdlRGF0YShjb25z
dAogICAgICAgICBkZXN0eSA9IC1vcmlnaW55OwogICAgICAgICBvcmlnaW55ID0gMDsKICAgICB9
Ci0gICAgaW50IGVuZHkgPSByZWN0LmJvdHRvbSgpOworICAgIGludCBlbmR5ID0gcmVjdC5tYXhZ
KCk7CiAgICAgaWYgKGVuZHkgPiBzaXplLmhlaWdodCgpKQogICAgICAgICBlbmR5ID0gc2l6ZS5o
ZWlnaHQoKTsKICAgICBpbnQgbnVtUm93cyA9IGVuZHkgLSBvcmlnaW55OwpAQCAtMzc3LDkgKzM3
Nyw5IEBAIHZvaWQgcHV0SW1hZ2VEYXRhKEJ5dGVBcnJheSomIHNvdXJjZSwgY28KICAgICBBU1NF
UlQoZGVzdHggPj0gMCk7CiAgICAgQVNTRVJUKGRlc3R4IDwgc2l6ZS53aWR0aCgpKTsKICAgICBB
U1NFUlQob3JpZ2lueCA+PSAwKTsKLSAgICBBU1NFUlQob3JpZ2lueCA8PSBzb3VyY2VSZWN0LnJp
Z2h0KCkpOworICAgIEFTU0VSVChvcmlnaW54IDw9IHNvdXJjZVJlY3QubWF4WCgpKTsKIAotICAg
IGludCBlbmR4ID0gZGVzdFBvaW50LngoKSArIHNvdXJjZVJlY3QucmlnaHQoKTsKKyAgICBpbnQg
ZW5keCA9IGRlc3RQb2ludC54KCkgKyBzb3VyY2VSZWN0Lm1heFgoKTsKICAgICBBU1NFUlQoZW5k
eCA8PSBzaXplLndpZHRoKCkpOwogCiAgICAgaW50IG51bUNvbHVtbnMgPSBlbmR4IC0gZGVzdHg7
CkBAIC0zODksOSArMzg5LDkgQEAgdm9pZCBwdXRJbWFnZURhdGEoQnl0ZUFycmF5KiYgc291cmNl
LCBjbwogICAgIEFTU0VSVChkZXN0eSA+PSAwKTsKICAgICBBU1NFUlQoZGVzdHkgPCBzaXplLmhl
aWdodCgpKTsKICAgICBBU1NFUlQob3JpZ2lueSA+PSAwKTsKLSAgICBBU1NFUlQob3JpZ2lueSA8
PSBzb3VyY2VSZWN0LmJvdHRvbSgpKTsKKyAgICBBU1NFUlQob3JpZ2lueSA8PSBzb3VyY2VSZWN0
Lm1heFkoKSk7CiAKLSAgICBpbnQgZW5keSA9IGRlc3RQb2ludC55KCkgKyBzb3VyY2VSZWN0LmJv
dHRvbSgpOworICAgIGludCBlbmR5ID0gZGVzdFBvaW50LnkoKSArIHNvdXJjZVJlY3QubWF4WSgp
OwogICAgIEFTU0VSVChlbmR5IDw9IHNpemUuaGVpZ2h0KCkpOwogICAgIGludCBudW1Sb3dzID0g
ZW5keSAtIGRlc3R5OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
Zy9JbWFnZUNHLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jZy9JbWFnZUNHLmNwcAkocmV2aXNpb24gNzcyNzgpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUNHLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjA0LDcg
KzIwNCw3IEBAIHZvaWQgQml0bWFwSW1hZ2U6OmRyYXcoR3JhcGhpY3NDb250ZXh0KiAKICAgICAg
ICAgICAgIGFkanVzdGVkRGVzdFJlY3Quc2V0SGVpZ2h0KHN1YmltYWdlUmVjdC5oZWlnaHQoKSAv
IHlTY2FsZSk7CiAKICAgICAgICAgICAgIGltYWdlLmFkb3B0Q0YoQ0dJbWFnZUNyZWF0ZVdpdGhJ
bWFnZUluUmVjdChpbWFnZS5nZXQoKSwgc3ViaW1hZ2VSZWN0KSk7Ci0gICAgICAgICAgICBpZiAo
Y3VyckhlaWdodCA8IHNyY1JlY3QuYm90dG9tKCkpIHsKKyAgICAgICAgICAgIGlmIChjdXJySGVp
Z2h0IDwgc3JjUmVjdC5tYXhZKCkpIHsKICAgICAgICAgICAgICAgICBBU1NFUlQoQ0dJbWFnZUdl
dEhlaWdodChpbWFnZS5nZXQoKSkgPT0gY3VyckhlaWdodCAtIENHUmVjdEludGVncmFsKHNyY1Jl
Y3QpLm9yaWdpbi55KTsKICAgICAgICAgICAgICAgICBhZGp1c3RlZERlc3RSZWN0LnNldEhlaWdo
dChDR0ltYWdlR2V0SGVpZ2h0KGltYWdlLmdldCgpKSAvIHlTY2FsZSk7CiAgICAgICAgICAgICB9
CkBAIC0yMjQsNyArMjI0LDcgQEAgdm9pZCBCaXRtYXBJbWFnZTo6ZHJhdyhHcmFwaGljc0NvbnRl
eHQqIAogCiAgICAgLy8gRmxpcCB0aGUgY29vcmRzLgogICAgIENHQ29udGV4dFNjYWxlQ1RNKGNv
bnRleHQsIDEsIC0xKTsKLSAgICBhZGp1c3RlZERlc3RSZWN0LnNldFkoLWFkanVzdGVkRGVzdFJl
Y3QuYm90dG9tKCkpOworICAgIGFkanVzdGVkRGVzdFJlY3Quc2V0WSgtYWRqdXN0ZWREZXN0UmVj
dC5tYXhZKCkpOwogCiAgICAgLy8gQWRqdXN0IHRoZSBjb2xvciBzcGFjZS4KICAgICBpbWFnZSA9
IGltYWdlV2l0aENvbG9yU3BhY2UoaW1hZ2UuZ2V0KCksIHN0eWxlQ29sb3JTcGFjZSk7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GaWx0ZXJFZmZlY3QuY3BwCShyZXZpc2lvbiA3NzI3OCkKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTE5LDcgKzExOSw3IEBAIFBhc3NSZWZQdHI8Qnl0ZUFycmF5PiBGaWx0ZXJFZmZlY3Q6OmFz
UHIKIGlubGluZSB2b2lkIEZpbHRlckVmZmVjdDo6Y29weUltYWdlQnl0ZXMoQnl0ZUFycmF5KiBz
b3VyY2UsIEJ5dGVBcnJheSogZGVzdGluYXRpb24sIGNvbnN0IEludFJlY3QmIHJlY3QpCiB7CiAg
ICAgLy8gQ29weSB0aGUgbmVjZXNzYXJ5IGxpbmVzLgotICAgIGlmIChyZWN0LngoKSA8IDAgfHwg
cmVjdC55KCkgPCAwIHx8IHJlY3QuYm90dG9tKCkgPiBtX2Fic29sdXRlUGFpbnRSZWN0LndpZHRo
KCkgfHwgcmVjdC5ib3R0b20oKSA+IG1fYWJzb2x1dGVQYWludFJlY3QuaGVpZ2h0KCkpCisgICAg
aWYgKHJlY3QueCgpIDwgMCB8fCByZWN0LnkoKSA8IDAgfHwgcmVjdC5tYXhZKCkgPiBtX2Fic29s
dXRlUGFpbnRSZWN0LndpZHRoKCkgfHwgcmVjdC5tYXhZKCkgPiBtX2Fic29sdXRlUGFpbnRSZWN0
LmhlaWdodCgpKQogICAgICAgICBtZW1zZXQoZGVzdGluYXRpb24tPmRhdGEoKSwgMCwgZGVzdGlu
YXRpb24tPmxlbmd0aCgpKTsKIAogICAgIGludCB4T3JpZ2luID0gcmVjdC54KCk7CkBAIC0xMjgs
NyArMTI4LDcgQEAgaW5saW5lIHZvaWQgRmlsdGVyRWZmZWN0Ojpjb3B5SW1hZ2VCeXRlcwogICAg
ICAgICB4RGVzdCA9IC14T3JpZ2luOwogICAgICAgICB4T3JpZ2luID0gMDsKICAgICB9Ci0gICAg
aW50IHhFbmQgPSByZWN0LnJpZ2h0KCk7CisgICAgaW50IHhFbmQgPSByZWN0Lm1heFgoKTsKICAg
ICBpZiAoeEVuZCA+IG1fYWJzb2x1dGVQYWludFJlY3Qud2lkdGgoKSkKICAgICAgICAgeEVuZCA9
IG1fYWJzb2x1dGVQYWludFJlY3Qud2lkdGgoKTsKIApAQCAtMTM4LDcgKzEzOCw3IEBAIGlubGlu
ZSB2b2lkIEZpbHRlckVmZmVjdDo6Y29weUltYWdlQnl0ZXMKICAgICAgICAgeURlc3QgPSAteU9y
aWdpbjsKICAgICAgICAgeU9yaWdpbiA9IDA7CiAgICAgfQotICAgIGludCB5RW5kID0gcmVjdC5i
b3R0b20oKTsKKyAgICBpbnQgeUVuZCA9IHJlY3QubWF4WSgpOwogICAgIGlmICh5RW5kID4gbV9h
YnNvbHV0ZVBhaW50UmVjdC5oZWlnaHQoKSkKICAgICAgICAgeUVuZCA9IG1fYWJzb2x1dGVQYWlu
dFJlY3QuaGVpZ2h0KCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L21hYy9Db21wbGV4VGV4dENvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Db21wbGV4VGV4dENvbnRyb2xsZXIuY3BwCShyZXZp
c2lvbiA3NzI3OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Db21w
bGV4VGV4dENvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NTMsOSArNTUzLDkgQEAg
dm9pZCBDb21wbGV4VGV4dENvbnRyb2xsZXI6OmFkanVzdEdseXBocwogICAgICAgICAgICAgRmxv
YXRSZWN0IGdseXBoQm91bmRzID0gZm9udERhdGEtPmJvdW5kc0ZvckdseXBoKGdseXBoKTsKICAg
ICAgICAgICAgIGdseXBoQm91bmRzLm1vdmUoZ2x5cGhPcmlnaW4ueCwgZ2x5cGhPcmlnaW4ueSk7
CiAgICAgICAgICAgICBtX21pbkdseXBoQm91bmRpbmdCb3hYID0gbWluKG1fbWluR2x5cGhCb3Vu
ZGluZ0JveFgsIGdseXBoQm91bmRzLngoKSk7Ci0gICAgICAgICAgICBtX21heEdseXBoQm91bmRp
bmdCb3hYID0gbWF4KG1fbWF4R2x5cGhCb3VuZGluZ0JveFgsIGdseXBoQm91bmRzLnJpZ2h0KCkp
OworICAgICAgICAgICAgbV9tYXhHbHlwaEJvdW5kaW5nQm94WCA9IG1heChtX21heEdseXBoQm91
bmRpbmdCb3hYLCBnbHlwaEJvdW5kcy5tYXhYKCkpOwogICAgICAgICAgICAgbV9taW5HbHlwaEJv
dW5kaW5nQm94WSA9IG1pbihtX21pbkdseXBoQm91bmRpbmdCb3hZLCBnbHlwaEJvdW5kcy55KCkp
OwotICAgICAgICAgICAgbV9tYXhHbHlwaEJvdW5kaW5nQm94WSA9IG1heChtX21heEdseXBoQm91
bmRpbmdCb3hZLCBnbHlwaEJvdW5kcy5ib3R0b20oKSk7CisgICAgICAgICAgICBtX21heEdseXBo
Qm91bmRpbmdCb3hZID0gbWF4KG1fbWF4R2x5cGhCb3VuZGluZ0JveFksIGdseXBoQm91bmRzLm1h
eFkoKSk7CiAgICAgICAgICAgICBnbHlwaE9yaWdpbi54ICs9IGFkdmFuY2Uud2lkdGg7CiAgICAg
ICAgICAgICBnbHlwaE9yaWdpbi55ICs9IGFkdmFuY2UuaGVpZ2h0OwogICAgICAgICAgICAgCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvU2ltcGxlRm9udERhdGFN
YWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFj
L1NpbXBsZUZvbnREYXRhTWFjLm1tCShyZXZpc2lvbiA3NzI3OCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL21hYy9TaW1wbGVGb250RGF0YU1hYy5tbQkod29ya2luZyBjb3B5
KQpAQCAtNDc3LDEzICs0NzcsMTMgQEAgRmxvYXRSZWN0IFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9y
bUJvdW5kcwogI2lmbmRlZiBCVUlMRElOR19PTl9USUdFUgogICAgIGJvdW5kaW5nQm94ID0gQ1RG
b250R2V0Qm91bmRpbmdSZWN0c0ZvckdseXBocyhtX3BsYXRmb3JtRGF0YS5jdEZvbnQoKSwKICAg
ICAgICAgICAgICAgICAgICAgb3JpZW50YXRpb24oKSA9PSBWZXJ0aWNhbCA/IGtDVEZvbnRWZXJ0
aWNhbE9yaWVudGF0aW9uIDoga0NURm9udEhvcml6b250YWxPcmllbnRhdGlvbiwgJmdseXBoLCAw
LCAxKTsKLSAgICBib3VuZGluZ0JveC5zZXRZKC1ib3VuZGluZ0JveC5ib3R0b20oKSk7CisgICAg
Ym91bmRpbmdCb3guc2V0WSgtYm91bmRpbmdCb3gubWF4WSgpKTsKICNlbHNlCiAgICAgLy8gRklY
TUU6IEN1c3RvbSBmb250cyBkb24ndCBoYXZlIE5TRm9udHMsIHNvIHRoaXMgZnVuY3Rpb24gZG9l
c24ndCBjb21wdXRlIGNvcnJlY3QgYm91bmRzIGZvciB0aGVzZSBvbiBUaWdlci4KICAgICBpZiAo
IW1fcGxhdGZvcm1EYXRhLmZvbnQoKSkKICAgICAgICAgcmV0dXJuIGJvdW5kaW5nQm94OwogICAg
IGJvdW5kaW5nQm94ID0gW21fcGxhdGZvcm1EYXRhLmZvbnQoKSBib3VuZGluZ1JlY3RGb3JHbHlw
aDpnbHlwaF07Ci0gICAgYm91bmRpbmdCb3guc2V0WSgtYm91bmRpbmdCb3guYm90dG9tKCkpOwor
ICAgIGJvdW5kaW5nQm94LnNldFkoLWJvdW5kaW5nQm94Lm1heFkoKSk7CiAjZW5kaWYKICAgICBp
ZiAobV9zeW50aGV0aWNCb2xkT2Zmc2V0KQogICAgICAgICBib3VuZGluZ0JveC5zZXRXaWR0aChi
b3VuZGluZ0JveC53aWR0aCgpICsgbV9zeW50aGV0aWNCb2xkT2Zmc2V0KTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvQWZmaW5lVHJhbnNmb3JtLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zv
cm1zL0FmZmluZVRyYW5zZm9ybS5jcHAJKHJldmlzaW9uIDc3Mjc4KQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9BZmZpbmVUcmFuc2Zvcm0uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMTYsOSArMzE2LDkgQEAgRmxvYXRSZWN0IEFmZmluZVRyYW5zZm9ybTo6
bWFwUmVjdChjb25zdAogCiAgICAgRmxvYXRRdWFkIHJlc3VsdDsKICAgICByZXN1bHQuc2V0UDEo
bWFwUG9pbnQocmVjdC5sb2NhdGlvbigpKSk7Ci0gICAgcmVzdWx0LnNldFAyKG1hcFBvaW50KEZs
b2F0UG9pbnQocmVjdC5yaWdodCgpLCByZWN0LnkoKSkpKTsKLSAgICByZXN1bHQuc2V0UDMobWFw
UG9pbnQoRmxvYXRQb2ludChyZWN0LnJpZ2h0KCksIHJlY3QuYm90dG9tKCkpKSk7Ci0gICAgcmVz
dWx0LnNldFA0KG1hcFBvaW50KEZsb2F0UG9pbnQocmVjdC54KCksIHJlY3QuYm90dG9tKCkpKSk7
CisgICAgcmVzdWx0LnNldFAyKG1hcFBvaW50KEZsb2F0UG9pbnQocmVjdC5tYXhYKCksIHJlY3Qu
eSgpKSkpOworICAgIHJlc3VsdC5zZXRQMyhtYXBQb2ludChGbG9hdFBvaW50KHJlY3QubWF4WCgp
LCByZWN0Lm1heFkoKSkpKTsKKyAgICByZXN1bHQuc2V0UDQobWFwUG9pbnQoRmxvYXRQb2ludChy
ZWN0LngoKSwgcmVjdC5tYXhZKCkpKSk7CiAgICAgcmV0dXJuIHJlc3VsdC5ib3VuZGluZ0JveCgp
OwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUmVuZGVyVGhlbWVHdGsu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9SZW5kZXJUaGVt
ZUd0ay5jcHAJKHJldmlzaW9uIDc3Mjc4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Rr
L1JlbmRlclRoZW1lR3RrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjU4LDcgKzI1OCw3IEBAIHN0
YXRpYyBJbnRQb2ludCBjZW50ZXJSZWN0VmVydGljYWxseUluUGEKIHsKICAgICBOb2RlKiBpbnB1
dCA9IG9iamVjdC0+bm9kZSgpLT5zaGFkb3dBbmNlc3Rvck5vZGUoKTsgLy8gR2V0IHRoZSByZW5k
ZXJlciBvZiA8aW5wdXQ+IGVsZW1lbnQuCiAgICAgaWYgKCFpbnB1dC0+cmVuZGVyZXIoKS0+aXNC
b3goKSkKLSAgICAgICAgcmV0dXJuIHJlY3QudG9wTGVmdCgpOworICAgICAgICByZXR1cm4gcmVj
dC5sb2NhdGlvbigpOwogCiAgICAgLy8gSWYgcG9zc2libGUgY2VudGVyIHRoZSB5LWNvb3JkaW5h
dGUgb2YgdGhlIHJlY3QgdmVydGljYWxseSBpbiB0aGUgcGFyZW50IGlucHV0IGVsZW1lbnQuCiAg
ICAgLy8gV2UgYWxzbyBhZGQgb25lIHBpeGVsIGhlcmUgdG8gZW5zdXJlIHRoYXQgdGhlIHkgY29v
cmRpbmF0ZSBpcyByb3VuZGVkIHVwIGZvciBib3ggaGVpZ2h0cwpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbWFjL1dpZGdldE1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9tYWMvV2lkZ2V0TWFjLm1tCShyZXZpc2lvbiA3NzI3OCkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL21hYy9XaWRnZXRNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTI1Miw3
ICsyNTIsNyBAQCB2b2lkIFdpZGdldDo6cGFpbnQoR3JhcGhpY3NDb250ZXh0KiBwLCBjCiAgICAg
ICAgIEludFJlY3QgZGlydHlSZWN0ID0gcjsKICAgICAgICAgZGlydHlSZWN0Lm1vdmUoLXRyYW5z
Zm9ybU9yaWdpbi54KCksIC10cmFuc2Zvcm1PcmlnaW4ueSgpKTsKICAgICAgICAgaWYgKCFbdmll
dyBpc0ZsaXBwZWRdKQotICAgICAgICAgICAgZGlydHlSZWN0LnNldFkoW3ZpZXcgYm91bmRzXS5z
aXplLmhlaWdodCAtIGRpcnR5UmVjdC5ib3R0b20oKSk7CisgICAgICAgICAgICBkaXJ0eVJlY3Qu
c2V0WShbdmlldyBib3VuZHNdLnNpemUuaGVpZ2h0IC0gZGlydHlSZWN0Lm1heFkoKSk7CiAKICAg
ICAgICAgW3ZpZXcgZGlzcGxheVJlY3RJZ25vcmluZ09wYWNpdHk6ZGlydHlSZWN0XTsKIApAQCAt
Mjk2LDcgKzI5Niw3IEBAIHZvaWQgV2lkZ2V0OjpwYWludChHcmFwaGljc0NvbnRleHQqIHAsIGMK
ICAgICAgICAgSW50UmVjdCBkaXJ0eVJlY3QgPSByOwogICAgICAgICBkaXJ0eVJlY3QubW92ZSgt
dHJhbnNmb3JtT3JpZ2luLngoKSwgLXRyYW5zZm9ybU9yaWdpbi55KCkpOwogICAgICAgICBpZiAo
IVt2aWV3IGlzRmxpcHBlZF0pCi0gICAgICAgICAgICBkaXJ0eVJlY3Quc2V0WShbdmlldyBib3Vu
ZHNdLnNpemUuaGVpZ2h0IC0gZGlydHlSZWN0LmJvdHRvbSgpKTsKKyAgICAgICAgICAgIGRpcnR5
UmVjdC5zZXRZKFt2aWV3IGJvdW5kc10uc2l6ZS5oZWlnaHQgLSBkaXJ0eVJlY3QubWF4WSgpKTsK
IAogICAgICAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CiAgICAgICAgIHsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVGbG93Qm94LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lRmxvd0JveC5jcHAJKHJldmlzaW9uIDc3
Mjc4KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUZsb3dCb3guY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC03MTgsMTQgKzcxOCwxNCBAQCB2b2lkIElubGluZUZsb3dCb3g6OmFkZEJv
eFNoYWRvd1Zpc3VhbE92CiAgICAgcmVuZGVyZXIoKS0+c3R5bGUobV9maXJzdExpbmUpLT5nZXRC
b3hTaGFkb3dCbG9ja0RpcmVjdGlvbkV4dGVudChib3hTaGFkb3dMb2dpY2FsVG9wLCBib3hTaGFk
b3dMb2dpY2FsQm90dG9tKTsKICAgICAKICAgICBpbnQgbG9naWNhbFRvcFZpc3VhbE92ZXJmbG93
ID0gbWluKGxvZ2ljYWxUb3AoKSArIGJveFNoYWRvd0xvZ2ljYWxUb3AsIGxvZ2ljYWxWaXN1YWxP
dmVyZmxvdy55KCkpOwotICAgIGludCBsb2dpY2FsQm90dG9tVmlzdWFsT3ZlcmZsb3cgPSBtYXgo
bG9naWNhbEJvdHRvbSgpICsgYm94U2hhZG93TG9naWNhbEJvdHRvbSwgbG9naWNhbFZpc3VhbE92
ZXJmbG93LmJvdHRvbSgpKTsKKyAgICBpbnQgbG9naWNhbEJvdHRvbVZpc3VhbE92ZXJmbG93ID0g
bWF4KGxvZ2ljYWxCb3R0b20oKSArIGJveFNoYWRvd0xvZ2ljYWxCb3R0b20sIGxvZ2ljYWxWaXN1
YWxPdmVyZmxvdy5tYXhZKCkpOwogICAgIAogICAgIGludCBib3hTaGFkb3dMb2dpY2FsTGVmdDsK
ICAgICBpbnQgYm94U2hhZG93TG9naWNhbFJpZ2h0OwogICAgIHJlbmRlcmVyKCktPnN0eWxlKG1f
Zmlyc3RMaW5lKS0+Z2V0Qm94U2hhZG93SW5saW5lRGlyZWN0aW9uRXh0ZW50KGJveFNoYWRvd0xv
Z2ljYWxMZWZ0LCBib3hTaGFkb3dMb2dpY2FsUmlnaHQpOwogCiAgICAgaW50IGxvZ2ljYWxMZWZ0
VmlzdWFsT3ZlcmZsb3cgPSBtaW4obG9naWNhbExlZnQoKSArIGJveFNoYWRvd0xvZ2ljYWxMZWZ0
LCBsb2dpY2FsVmlzdWFsT3ZlcmZsb3cueCgpKTsKLSAgICBpbnQgbG9naWNhbFJpZ2h0VmlzdWFs
T3ZlcmZsb3cgPSBtYXgobG9naWNhbFJpZ2h0KCkgKyBib3hTaGFkb3dMb2dpY2FsUmlnaHQsIGxv
Z2ljYWxWaXN1YWxPdmVyZmxvdy5yaWdodCgpKTsKKyAgICBpbnQgbG9naWNhbFJpZ2h0VmlzdWFs
T3ZlcmZsb3cgPSBtYXgobG9naWNhbFJpZ2h0KCkgKyBib3hTaGFkb3dMb2dpY2FsUmlnaHQsIGxv
Z2ljYWxWaXN1YWxPdmVyZmxvdy5tYXhYKCkpOwogICAgIAogICAgIGxvZ2ljYWxWaXN1YWxPdmVy
ZmxvdyA9IEludFJlY3QobG9naWNhbExlZnRWaXN1YWxPdmVyZmxvdywgbG9naWNhbFRvcFZpc3Vh
bE92ZXJmbG93LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9naWNhbFJp
Z2h0VmlzdWFsT3ZlcmZsb3cgLSBsb2dpY2FsTGVmdFZpc3VhbE92ZXJmbG93LCBsb2dpY2FsQm90
dG9tVmlzdWFsT3ZlcmZsb3cgLSBsb2dpY2FsVG9wVmlzdWFsT3ZlcmZsb3cpOwpAQCAtNzgwLDkg
Kzc4MCw5IEBAIHZvaWQgSW5saW5lRmxvd0JveDo6YWRkVGV4dEJveFZpc3VhbE92ZXIKICAgICBp
bnQgY2hpbGRPdmVyZmxvd0xvZ2ljYWxSaWdodCA9IG1heCh0ZXh0U2hhZG93TG9naWNhbFJpZ2h0
ICsgcmlnaHRHbHlwaE92ZXJmbG93LCByaWdodEdseXBoT3ZlcmZsb3cpOwogCiAgICAgaW50IGxv
Z2ljYWxUb3BWaXN1YWxPdmVyZmxvdyA9IG1pbih0ZXh0Qm94LT5sb2dpY2FsVG9wKCkgKyBjaGls
ZE92ZXJmbG93TG9naWNhbFRvcCwgbG9naWNhbFZpc3VhbE92ZXJmbG93LnkoKSk7Ci0gICAgaW50
IGxvZ2ljYWxCb3R0b21WaXN1YWxPdmVyZmxvdyA9IG1heCh0ZXh0Qm94LT5sb2dpY2FsQm90dG9t
KCkgKyBjaGlsZE92ZXJmbG93TG9naWNhbEJvdHRvbSwgbG9naWNhbFZpc3VhbE92ZXJmbG93LmJv
dHRvbSgpKTsKKyAgICBpbnQgbG9naWNhbEJvdHRvbVZpc3VhbE92ZXJmbG93ID0gbWF4KHRleHRC
b3gtPmxvZ2ljYWxCb3R0b20oKSArIGNoaWxkT3ZlcmZsb3dMb2dpY2FsQm90dG9tLCBsb2dpY2Fs
VmlzdWFsT3ZlcmZsb3cubWF4WSgpKTsKICAgICBpbnQgbG9naWNhbExlZnRWaXN1YWxPdmVyZmxv
dyA9IG1pbih0ZXh0Qm94LT5sb2dpY2FsTGVmdCgpICsgY2hpbGRPdmVyZmxvd0xvZ2ljYWxMZWZ0
LCBsb2dpY2FsVmlzdWFsT3ZlcmZsb3cueCgpKTsKLSAgICBpbnQgbG9naWNhbFJpZ2h0VmlzdWFs
T3ZlcmZsb3cgPSBtYXgodGV4dEJveC0+bG9naWNhbFJpZ2h0KCkgKyBjaGlsZE92ZXJmbG93TG9n
aWNhbFJpZ2h0LCBsb2dpY2FsVmlzdWFsT3ZlcmZsb3cucmlnaHQoKSk7CisgICAgaW50IGxvZ2lj
YWxSaWdodFZpc3VhbE92ZXJmbG93ID0gbWF4KHRleHRCb3gtPmxvZ2ljYWxSaWdodCgpICsgY2hp
bGRPdmVyZmxvd0xvZ2ljYWxSaWdodCwgbG9naWNhbFZpc3VhbE92ZXJmbG93Lm1heFgoKSk7CiAg
ICAgCiAgICAgbG9naWNhbFZpc3VhbE92ZXJmbG93ID0gSW50UmVjdChsb2dpY2FsTGVmdFZpc3Vh
bE92ZXJmbG93LCBsb2dpY2FsVG9wVmlzdWFsT3ZlcmZsb3csCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBsb2dpY2FsUmlnaHRWaXN1YWxPdmVyZmxvdyAtIGxvZ2ljYWxMZWZ0
VmlzdWFsT3ZlcmZsb3csIGxvZ2ljYWxCb3R0b21WaXN1YWxPdmVyZmxvdyAtIGxvZ2ljYWxUb3BW
aXN1YWxPdmVyZmxvdyk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4
dEJveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRl
eHRCb3guY3BwCShyZXZpc2lvbiA3NzI3OCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9J
bmxpbmVUZXh0Qm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTY5LDcgKzE2OSw3IEBAIEludFJl
Y3QgSW5saW5lVGV4dEJveDo6c2VsZWN0aW9uUmVjdChpbnQKICAgICBpbnQgbG9naWNhbFdpZHRo
ID0gci53aWR0aCgpOwogICAgIGlmIChyLngoKSA+IG1fbG9naWNhbFdpZHRoKQogICAgICAgICBs
b2dpY2FsV2lkdGggID0gMDsKLSAgICBlbHNlIGlmIChyLnJpZ2h0KCkgPiBtX2xvZ2ljYWxXaWR0
aCkKKyAgICBlbHNlIGlmIChyLm1heFgoKSA+IG1fbG9naWNhbFdpZHRoKQogICAgICAgICBsb2dp
Y2FsV2lkdGggPSBtX2xvZ2ljYWxXaWR0aCAtIHIueCgpOwogICAgIAogICAgIEludFBvaW50IHRv
cFBvaW50ID0gaXNIb3Jpem9udGFsKCkgPyBJbnRQb2ludCh0eCArIG1feCArIHIueCgpLCB0eSAr
IHNlbFRvcCkgOiBJbnRQb2ludCh0eCArIHNlbFRvcCwgdHkgKyBtX3kgKyByLngoKSk7CkBAIC00
NDIsNyArNDQyLDcgQEAgdm9pZCBJbmxpbmVUZXh0Qm94OjpwYWludChQYWludEluZm8mIHBhaQog
ICAgIGludCBsb2dpY2FsU3RhcnQgPSBsb2dpY2FsTGVmdCgpIC0gbG9naWNhbExlZnRPdmVyZmxv
dyArIChpc0hvcml6b250YWwoKSA/IHR4IDogdHkpOwogICAgIGludCBsb2dpY2FsRXh0ZW50ID0g
bG9naWNhbFdpZHRoKCkgKyBsb2dpY2FsTGVmdE92ZXJmbG93ICsgbG9naWNhbFJpZ2h0T3ZlcmZs
b3c7CiAgICAgCi0gICAgaW50IHBhaW50RW5kID0gaXNIb3Jpem9udGFsKCkgPyBwYWludEluZm8u
cmVjdC5yaWdodCgpIDogcGFpbnRJbmZvLnJlY3QuYm90dG9tKCk7CisgICAgaW50IHBhaW50RW5k
ID0gaXNIb3Jpem9udGFsKCkgPyBwYWludEluZm8ucmVjdC5tYXhYKCkgOiBwYWludEluZm8ucmVj
dC5tYXhZKCk7CiAgICAgaW50IHBhaW50U3RhcnQgPSBpc0hvcml6b250YWwoKSA/IHBhaW50SW5m
by5yZWN0LngoKSA6IHBhaW50SW5mby5yZWN0LnkoKTsKICAgICAKICAgICBpZiAobG9naWNhbFN0
YXJ0ID49IHBhaW50RW5kIHx8IGxvZ2ljYWxTdGFydCArIGxvZ2ljYWxFeHRlbnQgPD0gcGFpbnRT
dGFydCkKQEAgLTQ5MSw5ICs0OTEsOSBAQCB2b2lkIElubGluZVRleHRCb3g6OnBhaW50KFBhaW50
SW5mbyYgcGFpCiAgICAgYm9vbCBzaG91bGRSb3RhdGUgPSAhaXNIb3Jpem9udGFsKCkgJiYgKCFj
b21iaW5lZFRleHQgfHwgIWNvbWJpbmVkVGV4dC0+aXNDb21iaW5lZCgpKTsKICAgICBpZiAoc2hv
dWxkUm90YXRlKSB7CiAgICAgICAgIGNvbnRleHQtPnNhdmUoKTsKLSAgICAgICAgY29udGV4dC0+
dHJhbnNsYXRlKGJveFJlY3QueCgpLCBib3hSZWN0LmJvdHRvbSgpKTsKKyAgICAgICAgY29udGV4
dC0+dHJhbnNsYXRlKGJveFJlY3QueCgpLCBib3hSZWN0Lm1heFkoKSk7CiAgICAgICAgIGNvbnRl
eHQtPnJvdGF0ZShzdGF0aWNfY2FzdDxmbG9hdD4oZGVnMnJhZCg5MC4pKSk7Ci0gICAgICAgIGNv
bnRleHQtPnRyYW5zbGF0ZSgtYm94UmVjdC54KCksIC1ib3hSZWN0LmJvdHRvbSgpKTsKKyAgICAg
ICAgY29udGV4dC0+dHJhbnNsYXRlKC1ib3hSZWN0LngoKSwgLWJveFJlY3QubWF4WSgpKTsKICAg
ICB9CiAgICAgCiAgICAgCkBAIC0xMjE2LDcgKzEyMTYsNyBAQCBpbnQgSW5saW5lVGV4dEJveDo6
cG9zaXRpb25Gb3JPZmZzZXQoaW50CiAgICAgaW50IHRvID0gIWlzTGVmdFRvUmlnaHREaXJlY3Rp
b24oKSA/IG1fbGVuIDogb2Zmc2V0IC0gbV9zdGFydDsKICAgICAvLyBGSVhNRTogRG8gd2UgbmVl
ZCB0byBhZGQgcmlnaHRCZWFyaW5nIGhlcmU/CiAgICAgcmV0dXJuIGVuY2xvc2luZ0ludFJlY3Qo
Zi5zZWxlY3Rpb25SZWN0Rm9yVGV4dChUZXh0UnVuKHRleHQtPnRleHQoKS0+Y2hhcmFjdGVycygp
ICsgbV9zdGFydCwgbV9sZW4sIHRleHRSZW5kZXJlcigpLT5hbGxvd1RhYnMoKSwgdGV4dFBvcygp
LCBtX2V4cGFuc2lvbiwgdHJhaWxpbmdFeHBhbnNpb25CZWhhdmlvcigpLCAhaXNMZWZ0VG9SaWdo
dERpcmVjdGlvbigpLCBtX2Rpck92ZXJyaWRlKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEludFBvaW50KGxvZ2ljYWxMZWZ0KCksIDApLCAwLCBm
cm9tLCB0bykpLnJpZ2h0KCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBJbnRQb2ludChsb2dpY2FsTGVmdCgpLCAwKSwgMCwgZnJvbSwgdG8pKS5t
YXhYKCk7CiB9CiAKIGJvb2wgSW5saW5lVGV4dEJveDo6Y29udGFpbnNDYXJldE9mZnNldChpbnQg
b2Zmc2V0KSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2Nr
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2su
Y3BwCShyZXZpc2lvbiA3NzI3OCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJC
bG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzMjUsMTMgKzEzMjUsMTMgQEAgdm9pZCBSZW5k
ZXJCbG9jazo6YWRkT3ZlcmZsb3dGcm9tQ2hpbGRyZQogICAgICAgICAgICAgSW50UmVjdCBsYXN0
UmVjdCA9IGNvbHVtblJlY3RBdChjb2xJbmZvLCBjb2x1bW5Db3VudChjb2xJbmZvKSAtIDEpOwog
ICAgICAgICAgICAgaWYgKHN0eWxlKCktPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpIHsKICAg
ICAgICAgICAgICAgICBpbnQgb3ZlcmZsb3dMZWZ0ID0gIXN0eWxlKCktPmlzTGVmdFRvUmlnaHRE
aXJlY3Rpb24oKSA/IG1pbigwLCBsYXN0UmVjdC54KCkpIDogMDsKLSAgICAgICAgICAgICAgICBp
bnQgb3ZlcmZsb3dSaWdodCA9IHN0eWxlKCktPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/IG1h
eCh3aWR0aCgpLCBsYXN0UmVjdC5yaWdodCgpKSA6IDA7CisgICAgICAgICAgICAgICAgaW50IG92
ZXJmbG93UmlnaHQgPSBzdHlsZSgpLT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyBtYXgod2lk
dGgoKSwgbGFzdFJlY3QubWF4WCgpKSA6IDA7CiAgICAgICAgICAgICAgICAgaW50IG92ZXJmbG93
SGVpZ2h0ID0gYm9yZGVyQmVmb3JlKCkgKyBwYWRkaW5nQmVmb3JlKCkgKyBjb2xJbmZvLT5jb2x1
bW5IZWlnaHQoKTsKICAgICAgICAgICAgICAgICBhZGRMYXlvdXRPdmVyZmxvdyhJbnRSZWN0KG92
ZXJmbG93TGVmdCwgMCwgb3ZlcmZsb3dSaWdodCAtIG92ZXJmbG93TGVmdCwgb3ZlcmZsb3dIZWln
aHQpKTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgSW50UmVjdCBsYXN0
UmVjdCA9IGNvbHVtblJlY3RBdChjb2xJbmZvLCBjb2x1bW5Db3VudChjb2xJbmZvKSAtIDEpOwog
ICAgICAgICAgICAgICAgIGludCBvdmVyZmxvd1RvcCA9ICFzdHlsZSgpLT5pc0xlZnRUb1JpZ2h0
RGlyZWN0aW9uKCkgPyBtaW4oMCwgbGFzdFJlY3QueSgpKSA6IDA7Ci0gICAgICAgICAgICAgICAg
aW50IG92ZXJmbG93Qm90dG9tID0gc3R5bGUoKS0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpID8g
bWF4KGhlaWdodCgpLCBsYXN0UmVjdC5ib3R0b20oKSkgOiAwOworICAgICAgICAgICAgICAgIGlu
dCBvdmVyZmxvd0JvdHRvbSA9IHN0eWxlKCktPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/IG1h
eChoZWlnaHQoKSwgbGFzdFJlY3QubWF4WSgpKSA6IDA7CiAgICAgICAgICAgICAgICAgaW50IG92
ZXJmbG93V2lkdGggPSBib3JkZXJCZWZvcmUoKSArIHBhZGRpbmdCZWZvcmUoKSArIGNvbEluZm8t
PmNvbHVtbkhlaWdodCgpOwogICAgICAgICAgICAgICAgIGFkZExheW91dE92ZXJmbG93KEludFJl
Y3QoMCwgb3ZlcmZsb3dUb3AsIG92ZXJmbG93V2lkdGgsIG92ZXJmbG93Qm90dG9tIC0gb3ZlcmZs
b3dUb3ApKTsKICAgICAgICAgICAgIH0KQEAgLTIzNDcsMTQgKzIzNDcsMTQgQEAgdm9pZCBSZW5k
ZXJCbG9jazo6cGFpbnRDaGlsZHJlbihQYWludEluZgogICAgICAgICBib29sIGNoZWNrQmVmb3Jl
QWx3YXlzID0gIWNoaWxkcmVuSW5saW5lKCkgJiYgKHVzZVByaW50UmVjdCAmJiBjaGlsZC0+c3R5
bGUoKS0+cGFnZUJyZWFrQmVmb3JlKCkgPT0gUEJBTFdBWVMpOwogICAgICAgICBpZiAoY2hlY2tC
ZWZvcmVBbHdheXMKICAgICAgICAgICAgICYmICh0eSArIGNoaWxkLT55KCkpID4gcGFpbnRJbmZv
LnJlY3QueSgpCi0gICAgICAgICAgICAmJiAodHkgKyBjaGlsZC0+eSgpKSA8IHBhaW50SW5mby5y
ZWN0LmJvdHRvbSgpKSB7CisgICAgICAgICAgICAmJiAodHkgKyBjaGlsZC0+eSgpKSA8IHBhaW50
SW5mby5yZWN0Lm1heFkoKSkgewogICAgICAgICAgICAgdmlldygpLT5zZXRCZXN0VHJ1bmNhdGVk
QXQodHkgKyBjaGlsZC0+eSgpLCB0aGlzLCB0cnVlKTsKICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgfQogCiAgICAgICAgIGlmICghY2hpbGQtPmlzRmxvYXRpbmcoKSAmJiBjaGlsZC0+aXNS
ZXBsYWNlZCgpICYmIHVzZVByaW50UmVjdCAmJiBjaGlsZC0+aGVpZ2h0KCkgPD0gcmVuZGVyVmll
dy0+cHJpbnRSZWN0KCkuaGVpZ2h0KCkpIHsKICAgICAgICAgICAgIC8vIFBhZ2luYXRlIGJsb2Nr
LWxldmVsIHJlcGxhY2VkIGVsZW1lbnRzLgotICAgICAgICAgICAgaWYgKHR5ICsgY2hpbGQtPnko
KSArIGNoaWxkLT5oZWlnaHQoKSA+IHJlbmRlclZpZXctPnByaW50UmVjdCgpLmJvdHRvbSgpKSB7
CisgICAgICAgICAgICBpZiAodHkgKyBjaGlsZC0+eSgpICsgY2hpbGQtPmhlaWdodCgpID4gcmVu
ZGVyVmlldy0+cHJpbnRSZWN0KCkubWF4WSgpKSB7CiAgICAgICAgICAgICAgICAgaWYgKHR5ICsg
Y2hpbGQtPnkoKSA8IHJlbmRlclZpZXctPnRydW5jYXRlZEF0KCkpCiAgICAgICAgICAgICAgICAg
ICAgIHJlbmRlclZpZXctPnNldEJlc3RUcnVuY2F0ZWRBdCh0eSArIGNoaWxkLT55KCksIGNoaWxk
KTsKICAgICAgICAgICAgICAgICAvLyBJZiB3ZSB3ZXJlIGFibGUgdG8gdHJ1bmNhdGUsIGRvbid0
IHBhaW50LgpAQCAtMjM3MSw3ICsyMzcxLDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6cGFpbnRDaGls
ZHJlbihQYWludEluZgogICAgICAgICBib29sIGNoZWNrQWZ0ZXJBbHdheXMgPSAhY2hpbGRyZW5J
bmxpbmUoKSAmJiAodXNlUHJpbnRSZWN0ICYmIGNoaWxkLT5zdHlsZSgpLT5wYWdlQnJlYWtBZnRl
cigpID09IFBCQUxXQVlTKTsKICAgICAgICAgaWYgKGNoZWNrQWZ0ZXJBbHdheXMKICAgICAgICAg
ICAgICYmICh0eSArIGNoaWxkLT55KCkgKyBjaGlsZC0+aGVpZ2h0KCkpID4gcGFpbnRJbmZvLnJl
Y3QueSgpCi0gICAgICAgICAgICAmJiAodHkgKyBjaGlsZC0+eSgpICsgY2hpbGQtPmhlaWdodCgp
KSA8IHBhaW50SW5mby5yZWN0LmJvdHRvbSgpKSB7CisgICAgICAgICAgICAmJiAodHkgKyBjaGls
ZC0+eSgpICsgY2hpbGQtPmhlaWdodCgpKSA8IHBhaW50SW5mby5yZWN0Lm1heFkoKSkgewogICAg
ICAgICAgICAgdmlldygpLT5zZXRCZXN0VHJ1bmNhdGVkQXQodHkgKyBjaGlsZC0+eSgpICsgY2hp
bGQtPmhlaWdodCgpICsgbWF4KDAsIGNoaWxkLT5jb2xsYXBzZWRNYXJnaW5BZnRlcigpKSwgdGhp
cywgdHJ1ZSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KQEAgLTI1MzcsNyArMjUz
Nyw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OnBhaW50RWxsaXBzaXNCb3hlcyhQYWkKICAgICAgICAg
Ly8gaW50ZXJzZWN0LgogICAgICAgICBpbnQgeVBvcyA9IHR5ICsgZmlyc3RMaW5lQm94KCktPnko
KTsKICAgICAgICAgaW50IGggPSBsYXN0TGluZUJveCgpLT55KCkgKyBsYXN0TGluZUJveCgpLT5s
b2dpY2FsSGVpZ2h0KCkgLSBmaXJzdExpbmVCb3goKS0+eSgpOwotICAgICAgICBpZiAoeVBvcyA+
PSBwYWludEluZm8ucmVjdC5ib3R0b20oKSB8fCB5UG9zICsgaCA8PSBwYWludEluZm8ucmVjdC55
KCkpCisgICAgICAgIGlmICh5UG9zID49IHBhaW50SW5mby5yZWN0Lm1heFkoKSB8fCB5UG9zICsg
aCA8PSBwYWludEluZm8ucmVjdC55KCkpCiAgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAg
Ly8gU2VlIGlmIG91ciBib3hlcyBpbnRlcnNlY3Qgd2l0aCB0aGUgZGlydHkgcmVjdC4gIElmIHNv
LCB0aGVuIHdlIHBhaW50CkBAIC0yNTQ2LDcgKzI1NDYsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjpw
YWludEVsbGlwc2lzQm94ZXMoUGFpCiAgICAgICAgIGZvciAoUm9vdElubGluZUJveCogY3VyciA9
IGZpcnN0Um9vdEJveCgpOyBjdXJyOyBjdXJyID0gY3Vyci0+bmV4dFJvb3RCb3goKSkgewogICAg
ICAgICAgICAgeVBvcyA9IHR5ICsgY3Vyci0+eSgpOwogICAgICAgICAgICAgaCA9IGN1cnItPmxv
Z2ljYWxIZWlnaHQoKTsKLSAgICAgICAgICAgIGlmIChjdXJyLT5lbGxpcHNpc0JveCgpICYmIHlQ
b3MgPCBwYWludEluZm8ucmVjdC5ib3R0b20oKSAmJiB5UG9zICsgaCA+IHBhaW50SW5mby5yZWN0
LnkoKSkKKyAgICAgICAgICAgIGlmIChjdXJyLT5lbGxpcHNpc0JveCgpICYmIHlQb3MgPCBwYWlu
dEluZm8ucmVjdC5tYXhZKCkgJiYgeVBvcyArIGggPiBwYWludEluZm8ucmVjdC55KCkpCiAgICAg
ICAgICAgICAgICAgY3Vyci0+cGFpbnRFbGxpcHNpc0JveChwYWludEluZm8sIHR4LCB0eSk7CiAg
ICAgICAgIH0KICAgICB9CkBAIC0yODE2LDggKzI4MTYsOCBAQCBHYXBSZWN0cyBSZW5kZXJCbG9j
azo6aW5saW5lU2VsZWN0aW9uR2FwCiAgICAgICAgIEludFJlY3QgbG9naWNhbFJlY3QoY3Vyci0+
bG9naWNhbExlZnQoKSwgc2VsVG9wLCBjdXJyLT5sb2dpY2FsV2lkdGgoKSwgc2VsVG9wICsgc2Vs
SGVpZ2h0KTsKICAgICAgICAgbG9naWNhbFJlY3QubW92ZShzdHlsZSgpLT5pc0hvcml6b250YWxX
cml0aW5nTW9kZSgpID8gb2Zmc2V0RnJvbVJvb3RCbG9jayA6IEludFNpemUob2Zmc2V0RnJvbVJv
b3RCbG9jay5oZWlnaHQoKSwgb2Zmc2V0RnJvbVJvb3RCbG9jay53aWR0aCgpKSk7CiAgICAgICAg
IEludFJlY3QgcGh5c2ljYWxSZWN0ID0gcm9vdEJsb2NrLT5sb2dpY2FsUmVjdFRvUGh5c2ljYWxS
ZWN0KHJvb3RCbG9ja1BoeXNpY2FsUG9zaXRpb24sIGxvZ2ljYWxSZWN0KTsKLSAgICAgICAgaWYg
KCFwYWludEluZm8gfHwgKHN0eWxlKCktPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgJiYgcGh5
c2ljYWxSZWN0LnkoKSA8IHBhaW50SW5mby0+cmVjdC5ib3R0b20oKSAmJiBwaHlzaWNhbFJlY3Qu
Ym90dG9tKCkgPiBwYWludEluZm8tPnJlY3QueSgpKQotICAgICAgICAgICAgfHwgKCFzdHlsZSgp
LT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpICYmIHBoeXNpY2FsUmVjdC54KCkgPCBwYWludElu
Zm8tPnJlY3QucmlnaHQoKSAmJiBwaHlzaWNhbFJlY3QucmlnaHQoKSA+IHBhaW50SW5mby0+cmVj
dC54KCkpKQorICAgICAgICBpZiAoIXBhaW50SW5mbyB8fCAoc3R5bGUoKS0+aXNIb3Jpem9udGFs
V3JpdGluZ01vZGUoKSAmJiBwaHlzaWNhbFJlY3QueSgpIDwgcGFpbnRJbmZvLT5yZWN0Lm1heFko
KSAmJiBwaHlzaWNhbFJlY3QubWF4WSgpID4gcGFpbnRJbmZvLT5yZWN0LnkoKSkKKyAgICAgICAg
ICAgIHx8ICghc3R5bGUoKS0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSAmJiBwaHlzaWNhbFJl
Y3QueCgpIDwgcGFpbnRJbmZvLT5yZWN0Lm1heFgoKSAmJiBwaHlzaWNhbFJlY3QubWF4WCgpID4g
cGFpbnRJbmZvLT5yZWN0LngoKSkpCiAgICAgICAgICAgICByZXN1bHQudW5pdGUoY3Vyci0+bGlu
ZVNlbGVjdGlvbkdhcChyb290QmxvY2ssIHJvb3RCbG9ja1BoeXNpY2FsUG9zaXRpb24sIG9mZnNl
dEZyb21Sb290QmxvY2ssIHNlbFRvcCwgc2VsSGVpZ2h0LCBwYWludEluZm8pKTsKIAogICAgICAg
ICBsYXN0U2VsZWN0ZWRMaW5lID0gY3VycjsKQEAgLTQzMjIsNyArNDMyMiw3IEBAIHZvaWQgUmVu
ZGVyQmxvY2s6OmFkanVzdFBvaW50VG9Db2x1bW5Db24KICAgICAgICAgSW50UmVjdCBjb2xSZWN0
ID0gY29sdW1uUmVjdEF0KGNvbEluZm8sIGkpOwogICAgICAgICBpZiAoc3R5bGUoKS0+aXNIb3Jp
em9udGFsV3JpdGluZ01vZGUoKSkgewogICAgICAgICAgICAgSW50UmVjdCBnYXBBbmRDb2x1bW5S
ZWN0KGNvbFJlY3QueCgpIC0gaGFsZkNvbEdhcCwgY29sUmVjdC55KCksIGNvbFJlY3Qud2lkdGgo
KSArIGNvbEdhcCwgY29sUmVjdC5oZWlnaHQoKSk7Ci0gICAgICAgICAgICBpZiAocG9pbnQueCgp
ID49IGdhcEFuZENvbHVtblJlY3QueCgpICYmIHBvaW50LngoKSA8IGdhcEFuZENvbHVtblJlY3Qu
cmlnaHQoKSkgeworICAgICAgICAgICAgaWYgKHBvaW50LngoKSA+PSBnYXBBbmRDb2x1bW5SZWN0
LngoKSAmJiBwb2ludC54KCkgPCBnYXBBbmRDb2x1bW5SZWN0Lm1heFgoKSkgewogICAgICAgICAg
ICAgICAgIC8vIEZJWE1FOiBUaGUgY2xhbXBpbmcgdGhhdCBmb2xsb3dzIGlzIG5vdCBjb21wbGV0
ZWx5IHJpZ2h0IGZvciByaWdodC10by1sZWZ0CiAgICAgICAgICAgICAgICAgLy8gY29udGVudC4K
ICAgICAgICAgICAgICAgICAvLyBDbGFtcCBldmVyeXRoaW5nIGFib3ZlIHRoZSBjb2x1bW4gdG8g
aXRzIHRvcCBsZWZ0LgpAQCAtNDMzMCw3ICs0MzMwLDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6YWRq
dXN0UG9pbnRUb0NvbHVtbkNvbgogICAgICAgICAgICAgICAgICAgICBwb2ludCA9IGdhcEFuZENv
bHVtblJlY3QubG9jYXRpb24oKTsKICAgICAgICAgICAgICAgICAvLyBDbGFtcCBldmVyeXRoaW5n
IGJlbG93IHRoZSBjb2x1bW4gdG8gdGhlIG5leHQgY29sdW1uJ3MgdG9wIGxlZnQuIElmIHRoZXJl
IGlzCiAgICAgICAgICAgICAgICAgLy8gbm8gbmV4dCBjb2x1bW4sIHRoaXMgc3RpbGwgbWFwcyB0
byBqdXN0IGFmdGVyIHRoaXMgY29sdW1uLgotICAgICAgICAgICAgICAgIGVsc2UgaWYgKHBvaW50
LnkoKSA+PSBnYXBBbmRDb2x1bW5SZWN0LmJvdHRvbSgpKSB7CisgICAgICAgICAgICAgICAgZWxz
ZSBpZiAocG9pbnQueSgpID49IGdhcEFuZENvbHVtblJlY3QubWF4WSgpKSB7CiAgICAgICAgICAg
ICAgICAgICAgIHBvaW50ID0gZ2FwQW5kQ29sdW1uUmVjdC5sb2NhdGlvbigpOwogICAgICAgICAg
ICAgICAgICAgICBwb2ludC5tb3ZlKDAsIGdhcEFuZENvbHVtblJlY3QuaGVpZ2h0KCkpOwogICAg
ICAgICAgICAgICAgIH0KQEAgLTQzNDQsNyArNDM0NCw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmFk
anVzdFBvaW50VG9Db2x1bW5Db24KICAgICAgICAgICAgIGxvZ2ljYWxPZmZzZXQgKz0gY29sUmVj
dC5oZWlnaHQoKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIEludFJlY3QgZ2FwQW5k
Q29sdW1uUmVjdChjb2xSZWN0LngoKSwgY29sUmVjdC55KCkgLSBoYWxmQ29sR2FwLCBjb2xSZWN0
LndpZHRoKCksIGNvbFJlY3QuaGVpZ2h0KCkgKyBjb2xHYXApOwotICAgICAgICAgICAgaWYgKHBv
aW50LnkoKSA+PSBnYXBBbmRDb2x1bW5SZWN0LnkoKSAmJiBwb2ludC55KCkgPCBnYXBBbmRDb2x1
bW5SZWN0LmJvdHRvbSgpKSB7CisgICAgICAgICAgICBpZiAocG9pbnQueSgpID49IGdhcEFuZENv
bHVtblJlY3QueSgpICYmIHBvaW50LnkoKSA8IGdhcEFuZENvbHVtblJlY3QubWF4WSgpKSB7CiAg
ICAgICAgICAgICAgICAgLy8gRklYTUU6IFRoZSBjbGFtcGluZyB0aGF0IGZvbGxvd3MgaXMgbm90
IGNvbXBsZXRlbHkgcmlnaHQgZm9yIHJpZ2h0LXRvLWxlZnQKICAgICAgICAgICAgICAgICAvLyBj
b250ZW50LgogICAgICAgICAgICAgICAgIC8vIENsYW1wIGV2ZXJ5dGhpbmcgYWJvdmUgdGhlIGNv
bHVtbiB0byBpdHMgdG9wIGxlZnQuCkBAIC00MzUyLDcgKzQzNTIsNyBAQCB2b2lkIFJlbmRlckJs
b2NrOjphZGp1c3RQb2ludFRvQ29sdW1uQ29uCiAgICAgICAgICAgICAgICAgICAgIHBvaW50ID0g
Z2FwQW5kQ29sdW1uUmVjdC5sb2NhdGlvbigpOwogICAgICAgICAgICAgICAgIC8vIENsYW1wIGV2
ZXJ5dGhpbmcgYmVsb3cgdGhlIGNvbHVtbiB0byB0aGUgbmV4dCBjb2x1bW4ncyB0b3AgbGVmdC4g
SWYgdGhlcmUgaXMKICAgICAgICAgICAgICAgICAvLyBubyBuZXh0IGNvbHVtbiwgdGhpcyBzdGls
bCBtYXBzIHRvIGp1c3QgYWZ0ZXIgdGhpcyBjb2x1bW4uCi0gICAgICAgICAgICAgICAgZWxzZSBp
ZiAocG9pbnQueCgpID49IGdhcEFuZENvbHVtblJlY3QucmlnaHQoKSkgeworICAgICAgICAgICAg
ICAgIGVsc2UgaWYgKHBvaW50LngoKSA+PSBnYXBBbmRDb2x1bW5SZWN0Lm1heFgoKSkgewogICAg
ICAgICAgICAgICAgICAgICBwb2ludCA9IGdhcEFuZENvbHVtblJlY3QubG9jYXRpb24oKTsKICAg
ICAgICAgICAgICAgICAgICAgcG9pbnQubW92ZShnYXBBbmRDb2x1bW5SZWN0LndpZHRoKCksIDAp
OwogICAgICAgICAgICAgICAgIH0KQEAgLTQ0MjksOSArNDQyOSw5IEBAIHZvaWQgUmVuZGVyQmxv
Y2s6OmZsaXBGb3JXcml0aW5nTW9kZUluY2wKICAgICBpbnQgY29sdW1uTG9naWNhbEhlaWdodCA9
IGNvbEluZm8tPmNvbHVtbkhlaWdodCgpOwogICAgIGludCBleHBhbmRlZExvZ2ljYWxIZWlnaHQg
PSBib3JkZXJCZWZvcmUoKSArIHBhZGRpbmdCZWZvcmUoKSArIGNvbHVtbkNvdW50KGNvbEluZm8p
ICogY29sdW1uTG9naWNhbEhlaWdodCArIGJvcmRlckFmdGVyKCkgKyBwYWRkaW5nQWZ0ZXIoKSAr
IHNjcm9sbGJhckxvZ2ljYWxIZWlnaHQoKTsKICAgICBpZiAoc3R5bGUoKS0+aXNIb3Jpem9udGFs
V3JpdGluZ01vZGUoKSkKLSAgICAgICAgcmVjdC5zZXRZKGV4cGFuZGVkTG9naWNhbEhlaWdodCAt
IHJlY3QuYm90dG9tKCkpOworICAgICAgICByZWN0LnNldFkoZXhwYW5kZWRMb2dpY2FsSGVpZ2h0
IC0gcmVjdC5tYXhZKCkpOwogICAgIGVsc2UKLSAgICAgICAgcmVjdC5zZXRYKGV4cGFuZGVkTG9n
aWNhbEhlaWdodCAtIHJlY3QucmlnaHQoKSk7CisgICAgICAgIHJlY3Quc2V0WChleHBhbmRlZExv
Z2ljYWxIZWlnaHQgLSByZWN0Lm1heFgoKSk7CiB9CiAKIHZvaWQgUmVuZGVyQmxvY2s6OmFkanVz
dEZvckNvbHVtbnMoSW50U2l6ZSYgb2Zmc2V0LCBjb25zdCBJbnRQb2ludCYgcG9pbnQpIGNvbnN0
CkBAIC00NDU5LDEyICs0NDU5LDEyIEBAIHZvaWQgUmVuZGVyQmxvY2s6OmFkanVzdEZvckNvbHVt
bnMoSW50U2kKIAogICAgICAgICAvLyBOb3cgd2UncmUgaW4gdGhlIHNhbWUgY29vcmRpbmF0ZSBz
cGFjZSBhcyB0aGUgcG9pbnQuICBTZWUgaWYgaXQgaXMgaW5zaWRlIHRoZSByZWN0YW5nbGUuCiAg
ICAgICAgIGlmIChzdHlsZSgpLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpKSB7Ci0gICAgICAg
ICAgICBpZiAocG9pbnQueSgpID49IHNsaWNlUmVjdC55KCkgJiYgcG9pbnQueSgpIDwgc2xpY2VS
ZWN0LmJvdHRvbSgpKSB7CisgICAgICAgICAgICBpZiAocG9pbnQueSgpID49IHNsaWNlUmVjdC55
KCkgJiYgcG9pbnQueSgpIDwgc2xpY2VSZWN0Lm1heFkoKSkgewogICAgICAgICAgICAgICAgIG9m
ZnNldC5leHBhbmQoY29sdW1uUmVjdEF0KGNvbEluZm8sIGkpLngoKSAtIGxvZ2ljYWxMZWZ0LCAt
bG9naWNhbE9mZnNldCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQog
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgaWYgKHBvaW50LngoKSA+PSBzbGljZVJlY3Qu
eCgpICYmIHBvaW50LngoKSA8IHNsaWNlUmVjdC5yaWdodCgpKSB7CisgICAgICAgICAgICBpZiAo
cG9pbnQueCgpID49IHNsaWNlUmVjdC54KCkgJiYgcG9pbnQueCgpIDwgc2xpY2VSZWN0Lm1heFgo
KSkgewogICAgICAgICAgICAgICAgIG9mZnNldC5leHBhbmQoLWxvZ2ljYWxPZmZzZXQsIGNvbHVt
blJlY3RBdChjb2xJbmZvLCBpKS55KCkgLSBsb2dpY2FsTGVmdCk7CiAgICAgICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckJsb2NrLmgJKHJldmlzaW9uIDc3Mjc4KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTM5OCw5ICszOTgsOSBAQCBwcml2YXRlOgog
ICAgICAgICB2b2lkIHNldElzUGxhY2VkKGJvb2wgcGxhY2VkID0gdHJ1ZSkgeyBtX2lzUGxhY2Vk
ID0gcGxhY2VkOyB9CiAKICAgICAgICAgaW50IGxlZnQoKSBjb25zdCB7IEFTU0VSVChpc1BsYWNl
ZCgpKTsgcmV0dXJuIG1fZnJhbWVSZWN0LngoKTsgfQotICAgICAgICBpbnQgcmlnaHQoKSBjb25z
dCB7IEFTU0VSVChpc1BsYWNlZCgpKTsgcmV0dXJuIG1fZnJhbWVSZWN0LnJpZ2h0KCk7IH0KKyAg
ICAgICAgaW50IHJpZ2h0KCkgY29uc3QgeyBBU1NFUlQoaXNQbGFjZWQoKSk7IHJldHVybiBtX2Zy
YW1lUmVjdC5tYXhYKCk7IH0KICAgICAgICAgaW50IHRvcCgpIGNvbnN0IHsgQVNTRVJUKGlzUGxh
Y2VkKCkpOyByZXR1cm4gbV9mcmFtZVJlY3QueSgpOyB9Ci0gICAgICAgIGludCBib3R0b20oKSBj
b25zdCB7IEFTU0VSVChpc1BsYWNlZCgpKTsgcmV0dXJuIG1fZnJhbWVSZWN0LmJvdHRvbSgpOyB9
CisgICAgICAgIGludCBib3R0b20oKSBjb25zdCB7IEFTU0VSVChpc1BsYWNlZCgpKTsgcmV0dXJu
IG1fZnJhbWVSZWN0Lm1heFkoKTsgfQogICAgICAgICBpbnQgd2lkdGgoKSBjb25zdCB7IHJldHVy
biBtX2ZyYW1lUmVjdC53aWR0aCgpOyB9CiAgICAgICAgIGludCBoZWlnaHQoKSBjb25zdCB7IHJl
dHVybiBtX2ZyYW1lUmVjdC5oZWlnaHQoKTsgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyQm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyQm94LmNwcAkocmV2aXNpb24gNzcyNzgpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyQm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTQ4LDE2ICs1NDgsMTYgQEAg
SW50UmVjdCBSZW5kZXJCb3g6OnJlZmxlY3RlZFJlY3QoY29uc3QgSQogICAgIEludFJlY3QgcmVz
dWx0ID0gcjsKICAgICBzd2l0Y2ggKHN0eWxlKCktPmJveFJlZmxlY3QoKS0+ZGlyZWN0aW9uKCkp
IHsKICAgICAgICAgY2FzZSBSZWZsZWN0aW9uQmVsb3c6Ci0gICAgICAgICAgICByZXN1bHQuc2V0
WShib3guYm90dG9tKCkgKyByZWZsZWN0aW9uT2Zmc2V0KCkgKyAoYm94LmJvdHRvbSgpIC0gci5i
b3R0b20oKSkpOworICAgICAgICAgICAgcmVzdWx0LnNldFkoYm94Lm1heFkoKSArIHJlZmxlY3Rp
b25PZmZzZXQoKSArIChib3gubWF4WSgpIC0gci5tYXhZKCkpKTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICBjYXNlIFJlZmxlY3Rpb25BYm92ZToKLSAgICAgICAgICAgIHJlc3VsdC5zZXRZ
KGJveC55KCkgLSByZWZsZWN0aW9uT2Zmc2V0KCkgLSBib3guaGVpZ2h0KCkgKyAoYm94LmJvdHRv
bSgpIC0gci5ib3R0b20oKSkpOworICAgICAgICAgICAgcmVzdWx0LnNldFkoYm94LnkoKSAtIHJl
ZmxlY3Rpb25PZmZzZXQoKSAtIGJveC5oZWlnaHQoKSArIChib3gubWF4WSgpIC0gci5tYXhZKCkp
KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFJlZmxlY3Rpb25MZWZ0OgotICAg
ICAgICAgICAgcmVzdWx0LnNldFgoYm94LngoKSAtIHJlZmxlY3Rpb25PZmZzZXQoKSAtIGJveC53
aWR0aCgpICsgKGJveC5yaWdodCgpIC0gci5yaWdodCgpKSk7CisgICAgICAgICAgICByZXN1bHQu
c2V0WChib3gueCgpIC0gcmVmbGVjdGlvbk9mZnNldCgpIC0gYm94LndpZHRoKCkgKyAoYm94Lm1h
eFgoKSAtIHIubWF4WCgpKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBSZWZs
ZWN0aW9uUmlnaHQ6Ci0gICAgICAgICAgICByZXN1bHQuc2V0WChib3gucmlnaHQoKSArIHJlZmxl
Y3Rpb25PZmZzZXQoKSArIChib3gucmlnaHQoKSAtIHIucmlnaHQoKSkpOworICAgICAgICAgICAg
cmVzdWx0LnNldFgoYm94Lm1heFgoKSArIHJlZmxlY3Rpb25PZmZzZXQoKSArIChib3gubWF4WCgp
IC0gci5tYXhYKCkpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICByZXR1cm4gcmVz
dWx0OwpAQCAtMjk4Nyw3ICsyOTg3LDcgQEAgSW50UmVjdCBSZW5kZXJCb3g6OmxvY2FsQ2FyZXRS
ZWN0KElubGluZQogICAgICAgICByZWN0LnNldEhlaWdodChmb250SGVpZ2h0KTsKIAogICAgIGlm
IChleHRyYVdpZHRoVG9FbmRPZkxpbmUpCi0gICAgICAgICpleHRyYVdpZHRoVG9FbmRPZkxpbmUg
PSB4KCkgKyB3aWR0aCgpIC0gcmVjdC5yaWdodCgpOworICAgICAgICAqZXh0cmFXaWR0aFRvRW5k
T2ZMaW5lID0geCgpICsgd2lkdGgoKSAtIHJlY3QubWF4WCgpOwogCiAgICAgLy8gTW92ZSB0byBs
b2NhbCBjb29yZHMKICAgICByZWN0Lm1vdmUoLXgoKSwgLXkoKSk7CkBAIC0zMTA4LDkgKzMxMDgs
OSBAQCB2b2lkIFJlbmRlckJveDo6YWRkU2hhZG93T3ZlcmZsb3coKQogICAgIHN0eWxlKCktPmdl
dEJveFNoYWRvd0V4dGVudChzaGFkb3dUb3AsIHNoYWRvd1JpZ2h0LCBzaGFkb3dCb3R0b20sIHNo
YWRvd0xlZnQpOwogICAgIEludFJlY3QgYm9yZGVyQm94ID0gYm9yZGVyQm94UmVjdCgpOwogICAg
IGludCBvdmVyZmxvd0xlZnQgPSBib3JkZXJCb3gueCgpICsgc2hhZG93TGVmdDsKLSAgICBpbnQg
b3ZlcmZsb3dSaWdodCA9IGJvcmRlckJveC5yaWdodCgpICsgc2hhZG93UmlnaHQ7CisgICAgaW50
IG92ZXJmbG93UmlnaHQgPSBib3JkZXJCb3gubWF4WCgpICsgc2hhZG93UmlnaHQ7CiAgICAgaW50
IG92ZXJmbG93VG9wID0gYm9yZGVyQm94LnkoKSArIHNoYWRvd1RvcDsKLSAgICBpbnQgb3ZlcmZs
b3dCb3R0b20gPSBib3JkZXJCb3guYm90dG9tKCkgKyBzaGFkb3dCb3R0b207CisgICAgaW50IG92
ZXJmbG93Qm90dG9tID0gYm9yZGVyQm94Lm1heFkoKSArIHNoYWRvd0JvdHRvbTsKICAgICBhZGRW
aXN1YWxPdmVyZmxvdyhJbnRSZWN0KG92ZXJmbG93TGVmdCwgb3ZlcmZsb3dUb3AsIG92ZXJmbG93
UmlnaHQgLSBvdmVyZmxvd0xlZnQsIG92ZXJmbG93Qm90dG9tIC0gb3ZlcmZsb3dUb3ApKTsKIH0K
IApAQCAtMzE0OSwxMyArMzE0OSwxMyBAQCB2b2lkIFJlbmRlckJveDo6YWRkTGF5b3V0T3ZlcmZs
b3coY29uc3QgCiAgICAgICAgIGJvb2wgaGFzTGVmdE92ZXJmbG93ID0gIXN0eWxlKCktPmlzTGVm
dFRvUmlnaHREaXJlY3Rpb24oKSAmJiBzdHlsZSgpLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgp
OwogICAgICAgICAKICAgICAgICAgaWYgKCFoYXNUb3BPdmVyZmxvdykKLSAgICAgICAgICAgIG92
ZXJmbG93UmVjdC5zaGlmdFRvcEVkZ2VUbyhtYXgob3ZlcmZsb3dSZWN0LnkoKSwgY2xpZW50Qm94
LnkoKSkpOworICAgICAgICAgICAgb3ZlcmZsb3dSZWN0LnNoaWZ0WUVkZ2VUbyhtYXgob3ZlcmZs
b3dSZWN0LnkoKSwgY2xpZW50Qm94LnkoKSkpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBv
dmVyZmxvd1JlY3Quc2hpZnRCb3R0b21FZGdlVG8obWluKG92ZXJmbG93UmVjdC5ib3R0b20oKSwg
Y2xpZW50Qm94LmJvdHRvbSgpKSk7CisgICAgICAgICAgICBvdmVyZmxvd1JlY3Quc2hpZnRNYXhZ
RWRnZVRvKG1pbihvdmVyZmxvd1JlY3QubWF4WSgpLCBjbGllbnRCb3gubWF4WSgpKSk7CiAgICAg
ICAgIGlmICghaGFzTGVmdE92ZXJmbG93KQotICAgICAgICAgICAgb3ZlcmZsb3dSZWN0LnNoaWZ0
TGVmdEVkZ2VUbyhtYXgob3ZlcmZsb3dSZWN0LngoKSwgY2xpZW50Qm94LngoKSkpOworICAgICAg
ICAgICAgb3ZlcmZsb3dSZWN0LnNoaWZ0WEVkZ2VUbyhtYXgob3ZlcmZsb3dSZWN0LngoKSwgY2xp
ZW50Qm94LngoKSkpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBvdmVyZmxvd1JlY3Quc2hp
ZnRSaWdodEVkZ2VUbyhtaW4ob3ZlcmZsb3dSZWN0LnJpZ2h0KCksIGNsaWVudEJveC5yaWdodCgp
KSk7CisgICAgICAgICAgICBvdmVyZmxvd1JlY3Quc2hpZnRNYXhYRWRnZVRvKG1pbihvdmVyZmxv
d1JlY3QubWF4WCgpLCBjbGllbnRCb3gubWF4WCgpKSk7CiAgICAgICAgIAogICAgICAgICAvLyBO
b3cgcmUtdGVzdCB3aXRoIHRoZSBhZGp1c3RlZCByZWN0YW5nbGUgYW5kIHNlZSBpZiBpdCBoYXMg
YmVjb21lIHVucmVhY2hhYmxlIG9yIGZ1bGx5CiAgICAgICAgIC8vIGNvbnRhaW5lZC4KQEAgLTMy
NDQsOSArMzI0NCw5IEBAIEludFJlY3QgUmVuZGVyQm94Ojp2aXN1YWxPdmVyZmxvd1JlY3RGb3IK
ICAgICAvLyBXZSBhcmUgcHV0dGluZyBvdXJzZWx2ZXMgaW50byBvdXIgcGFyZW50J3MgY29vcmRp
bmF0ZSBzcGFjZS4gIElmIHRoZXJlIGlzIGEgZmxpcHBlZCBibG9jayBtaXNtYXRjaAogICAgIC8v
IGluIGEgcGFydGljdWxhciBheGlzLCB0aGVuIHdlIGhhdmUgdG8gZmxpcCB0aGUgcmVjdCBhbG9u
ZyB0aGF0IGF4aXMuCiAgICAgaWYgKHN0eWxlKCktPndyaXRpbmdNb2RlKCkgPT0gUmlnaHRUb0xl
ZnRXcml0aW5nTW9kZSB8fCBwYXJlbnRTdHlsZS0+d3JpdGluZ01vZGUoKSA9PSBSaWdodFRvTGVm
dFdyaXRpbmdNb2RlKQotICAgICAgICByZWN0LnNldFgod2lkdGgoKSAtIHJlY3QucmlnaHQoKSk7
CisgICAgICAgIHJlY3Quc2V0WCh3aWR0aCgpIC0gcmVjdC5tYXhYKCkpOwogICAgIGVsc2UgaWYg
KHN0eWxlKCktPndyaXRpbmdNb2RlKCkgPT0gQm90dG9tVG9Ub3BXcml0aW5nTW9kZSB8fCBwYXJl
bnRTdHlsZS0+d3JpdGluZ01vZGUoKSA9PSBCb3R0b21Ub1RvcFdyaXRpbmdNb2RlKQotICAgICAg
ICByZWN0LnNldFkoaGVpZ2h0KCkgLSByZWN0LmJvdHRvbSgpKTsKKyAgICAgICAgcmVjdC5zZXRZ
KGhlaWdodCgpIC0gcmVjdC5tYXhZKCkpOwogCiAgICAgcmV0dXJuIHJlY3Q7CiB9CkBAIC0zMjkw
LDkgKzMyOTAsOSBAQCBJbnRSZWN0IFJlbmRlckJveDo6bGF5b3V0T3ZlcmZsb3dSZWN0Rm9yCiAg
ICAgLy8gV2UgYXJlIHB1dHRpbmcgb3Vyc2VsdmVzIGludG8gb3VyIHBhcmVudCdzIGNvb3JkaW5h
dGUgc3BhY2UuICBJZiB0aGVyZSBpcyBhIGZsaXBwZWQgYmxvY2sgbWlzbWF0Y2gKICAgICAvLyBp
biBhIHBhcnRpY3VsYXIgYXhpcywgdGhlbiB3ZSBoYXZlIHRvIGZsaXAgdGhlIHJlY3QgYWxvbmcg
dGhhdCBheGlzLgogICAgIGlmIChzdHlsZSgpLT53cml0aW5nTW9kZSgpID09IFJpZ2h0VG9MZWZ0
V3JpdGluZ01vZGUgfHwgcGFyZW50U3R5bGUtPndyaXRpbmdNb2RlKCkgPT0gUmlnaHRUb0xlZnRX
cml0aW5nTW9kZSkKLSAgICAgICAgcmVjdC5zZXRYKHdpZHRoKCkgLSByZWN0LnJpZ2h0KCkpOwor
ICAgICAgICByZWN0LnNldFgod2lkdGgoKSAtIHJlY3QubWF4WCgpKTsKICAgICBlbHNlIGlmIChz
dHlsZSgpLT53cml0aW5nTW9kZSgpID09IEJvdHRvbVRvVG9wV3JpdGluZ01vZGUgfHwgcGFyZW50
U3R5bGUtPndyaXRpbmdNb2RlKCkgPT0gQm90dG9tVG9Ub3BXcml0aW5nTW9kZSkKLSAgICAgICAg
cmVjdC5zZXRZKGhlaWdodCgpIC0gcmVjdC5ib3R0b20oKSk7CisgICAgICAgIHJlY3Quc2V0WSho
ZWlnaHQoKSAtIHJlY3QubWF4WSgpKTsKIAogICAgIHJldHVybiByZWN0OwogfQpAQCAtMzMxNSw5
ICszMzE1LDkgQEAgdm9pZCBSZW5kZXJCb3g6OmZsaXBGb3JXcml0aW5nTW9kZShJbnRSZQogICAg
ICAgICByZXR1cm47CiAKICAgICBpZiAoc3R5bGUoKS0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUo
KSkKLSAgICAgICAgcmVjdC5zZXRZKGhlaWdodCgpIC0gcmVjdC5ib3R0b20oKSk7CisgICAgICAg
IHJlY3Quc2V0WShoZWlnaHQoKSAtIHJlY3QubWF4WSgpKTsKICAgICBlbHNlCi0gICAgICAgIHJl
Y3Quc2V0WCh3aWR0aCgpIC0gcmVjdC5yaWdodCgpKTsKKyAgICAgICAgcmVjdC5zZXRYKHdpZHRo
KCkgLSByZWN0Lm1heFgoKSk7CiB9CiAKIGludCBSZW5kZXJCb3g6OmZsaXBGb3JXcml0aW5nTW9k
ZShpbnQgcG9zaXRpb24pIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyRnJhbWVTZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJGcmFtZVNldC5jcHAJKHJldmlzaW9uIDc3Mjc4KQorKysgU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckZyYW1lU2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTMsOCArOTMsOCBA
QCB2b2lkIFJlbmRlckZyYW1lU2V0OjpwYWludENvbHVtbkJvcmRlcihjCiAgICAgLy8gTm93IHN0
cm9rZSB0aGUgZWRnZXMgYnV0IG9ubHkgaWYgd2UgaGF2ZSBlbm91Z2ggcm9vbSB0byBwYWludCBi
b3RoIGVkZ2VzIHdpdGggYSBsaXR0bGUKICAgICAvLyBiaXQgb2YgdGhlIGZpbGwgY29sb3Igc2hv
d2luZyB0aHJvdWdoLgogICAgIGlmIChib3JkZXJSZWN0LndpZHRoKCkgPj0gMykgewotICAgICAg
ICBjb250ZXh0LT5maWxsUmVjdChJbnRSZWN0KGJvcmRlclJlY3QudG9wTGVmdCgpLCBJbnRTaXpl
KDEsIGhlaWdodCgpKSksIGJvcmRlclN0YXJ0RWRnZUNvbG9yKCksIGNvbG9yU3BhY2UpOwotICAg
ICAgICBjb250ZXh0LT5maWxsUmVjdChJbnRSZWN0KGJvcmRlclJlY3QudG9wUmlnaHQoKSwgSW50
U2l6ZSgxLCBoZWlnaHQoKSkpLCBib3JkZXJFbmRFZGdlQ29sb3IoKSwgY29sb3JTcGFjZSk7Cisg
ICAgICAgIGNvbnRleHQtPmZpbGxSZWN0KEludFJlY3QoYm9yZGVyUmVjdC5sb2NhdGlvbigpLCBJ
bnRTaXplKDEsIGhlaWdodCgpKSksIGJvcmRlclN0YXJ0RWRnZUNvbG9yKCksIGNvbG9yU3BhY2Up
OworICAgICAgICBjb250ZXh0LT5maWxsUmVjdChJbnRSZWN0KEludFBvaW50KGJvcmRlclJlY3Qu
bWF4WCgpIC0gMSwgYm9yZGVyUmVjdC55KCkpLCBJbnRTaXplKDEsIGhlaWdodCgpKSksIGJvcmRl
ckVuZEVkZ2VDb2xvcigpLCBjb2xvclNwYWNlKTsKICAgICB9CiB9CiAKQEAgLTExMyw4ICsxMTMs
OCBAQCB2b2lkIFJlbmRlckZyYW1lU2V0OjpwYWludFJvd0JvcmRlcihjb25zCiAgICAgLy8gTm93
IHN0cm9rZSB0aGUgZWRnZXMgYnV0IG9ubHkgaWYgd2UgaGF2ZSBlbm91Z2ggcm9vbSB0byBwYWlu
dCBib3RoIGVkZ2VzIHdpdGggYSBsaXR0bGUKICAgICAvLyBiaXQgb2YgdGhlIGZpbGwgY29sb3Ig
c2hvd2luZyB0aHJvdWdoLgogICAgIGlmIChib3JkZXJSZWN0LmhlaWdodCgpID49IDMpIHsKLSAg
ICAgICAgY29udGV4dC0+ZmlsbFJlY3QoSW50UmVjdChib3JkZXJSZWN0LnRvcExlZnQoKSwgSW50
U2l6ZSh3aWR0aCgpLCAxKSksIGJvcmRlclN0YXJ0RWRnZUNvbG9yKCksIGNvbG9yU3BhY2UpOwot
ICAgICAgICBjb250ZXh0LT5maWxsUmVjdChJbnRSZWN0KGJvcmRlclJlY3QuYm90dG9tTGVmdCgp
LCBJbnRTaXplKHdpZHRoKCksIDEpKSwgYm9yZGVyRW5kRWRnZUNvbG9yKCksIGNvbG9yU3BhY2Up
OworICAgICAgICBjb250ZXh0LT5maWxsUmVjdChJbnRSZWN0KGJvcmRlclJlY3QubG9jYXRpb24o
KSwgSW50U2l6ZSh3aWR0aCgpLCAxKSksIGJvcmRlclN0YXJ0RWRnZUNvbG9yKCksIGNvbG9yU3Bh
Y2UpOworICAgICAgICBjb250ZXh0LT5maWxsUmVjdChJbnRSZWN0KEludFBvaW50KGJvcmRlclJl
Y3QueCgpLCBib3JkZXJSZWN0Lm1heFkoKSAtIDEpLCBJbnRTaXplKHdpZHRoKCksIDEpKSwgYm9y
ZGVyRW5kRWRnZUNvbG9yKCksIGNvbG9yU3BhY2UpOwogICAgIH0KIH0KIApJbmRleDogU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGluZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGluZS5jcHAJKHJldmlzaW9uIDc3Mjc4KQorKysg
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGluZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEwMzcsMzAgKzEwMzcsMzAgQEAgdm9pZCBSZW5kZXJJbmxpbmU6OnBhaW50T3V0bGluZUZv
ckxpbmUoRwogCiAgICAgaW50IHQgPSB0eSArIHRoaXNsaW5lLnkoKSAtIG9mZnNldDsKICAgICBp
bnQgbCA9IHR4ICsgdGhpc2xpbmUueCgpIC0gb2Zmc2V0OwotICAgIGludCBiID0gdHkgKyB0aGlz
bGluZS5ib3R0b20oKSArIG9mZnNldDsKLSAgICBpbnQgciA9IHR4ICsgdGhpc2xpbmUucmlnaHQo
KSArIG9mZnNldDsKKyAgICBpbnQgYiA9IHR5ICsgdGhpc2xpbmUubWF4WSgpICsgb2Zmc2V0Owor
ICAgIGludCByID0gdHggKyB0aGlzbGluZS5tYXhYKCkgKyBvZmZzZXQ7CiAgICAgCiAgICAgLy8g
bGVmdCBlZGdlCiAgICAgZHJhd0xpbmVGb3JCb3hTaWRlKGdyYXBoaWNzQ29udGV4dCwKICAgICAg
ICAgICAgICAgIGwgLSBvdywKLSAgICAgICAgICAgICAgIHQgLSAobGFzdGxpbmUuaXNFbXB0eSgp
IHx8IHRoaXNsaW5lLngoKSA8IGxhc3RsaW5lLngoKSB8fCAobGFzdGxpbmUucmlnaHQoKSAtIDEp
IDw9IHRoaXNsaW5lLngoKSA/IG93IDogMCksCisgICAgICAgICAgICAgICB0IC0gKGxhc3RsaW5l
LmlzRW1wdHkoKSB8fCB0aGlzbGluZS54KCkgPCBsYXN0bGluZS54KCkgfHwgKGxhc3RsaW5lLm1h
eFgoKSAtIDEpIDw9IHRoaXNsaW5lLngoKSA/IG93IDogMCksCiAgICAgICAgICAgICAgICBsLAot
ICAgICAgICAgICAgICAgYiArIChuZXh0bGluZS5pc0VtcHR5KCkgfHwgdGhpc2xpbmUueCgpIDw9
IG5leHRsaW5lLngoKSB8fCAobmV4dGxpbmUucmlnaHQoKSAtIDEpIDw9IHRoaXNsaW5lLngoKSA/
IG93IDogMCksCisgICAgICAgICAgICAgICBiICsgKG5leHRsaW5lLmlzRW1wdHkoKSB8fCB0aGlz
bGluZS54KCkgPD0gbmV4dGxpbmUueCgpIHx8IChuZXh0bGluZS5tYXhYKCkgLSAxKSA8PSB0aGlz
bGluZS54KCkgPyBvdyA6IDApLAogICAgICAgICAgICAgICAgQlNMZWZ0LAogICAgICAgICAgICAg
ICAgb2MsIG9zLAotICAgICAgICAgICAgICAgKGxhc3RsaW5lLmlzRW1wdHkoKSB8fCB0aGlzbGlu
ZS54KCkgPCBsYXN0bGluZS54KCkgfHwgKGxhc3RsaW5lLnJpZ2h0KCkgLSAxKSA8PSB0aGlzbGlu
ZS54KCkgPyBvdyA6IC1vdyksCi0gICAgICAgICAgICAgICAobmV4dGxpbmUuaXNFbXB0eSgpIHx8
IHRoaXNsaW5lLngoKSA8PSBuZXh0bGluZS54KCkgfHwgKG5leHRsaW5lLnJpZ2h0KCkgLSAxKSA8
PSB0aGlzbGluZS54KCkgPyBvdyA6IC1vdykpOworICAgICAgICAgICAgICAgKGxhc3RsaW5lLmlz
RW1wdHkoKSB8fCB0aGlzbGluZS54KCkgPCBsYXN0bGluZS54KCkgfHwgKGxhc3RsaW5lLm1heFgo
KSAtIDEpIDw9IHRoaXNsaW5lLngoKSA/IG93IDogLW93KSwKKyAgICAgICAgICAgICAgIChuZXh0
bGluZS5pc0VtcHR5KCkgfHwgdGhpc2xpbmUueCgpIDw9IG5leHRsaW5lLngoKSB8fCAobmV4dGxp
bmUubWF4WCgpIC0gMSkgPD0gdGhpc2xpbmUueCgpID8gb3cgOiAtb3cpKTsKICAgICAKICAgICAv
LyByaWdodCBlZGdlCiAgICAgZHJhd0xpbmVGb3JCb3hTaWRlKGdyYXBoaWNzQ29udGV4dCwKICAg
ICAgICAgICAgICAgIHIsCi0gICAgICAgICAgICAgICB0IC0gKGxhc3RsaW5lLmlzRW1wdHkoKSB8
fCBsYXN0bGluZS5yaWdodCgpIDwgdGhpc2xpbmUucmlnaHQoKSB8fCAodGhpc2xpbmUucmlnaHQo
KSAtIDEpIDw9IGxhc3RsaW5lLngoKSA/IG93IDogMCksCisgICAgICAgICAgICAgICB0IC0gKGxh
c3RsaW5lLmlzRW1wdHkoKSB8fCBsYXN0bGluZS5tYXhYKCkgPCB0aGlzbGluZS5tYXhYKCkgfHwg
KHRoaXNsaW5lLm1heFgoKSAtIDEpIDw9IGxhc3RsaW5lLngoKSA/IG93IDogMCksCiAgICAgICAg
ICAgICAgICByICsgb3csCi0gICAgICAgICAgICAgICBiICsgKG5leHRsaW5lLmlzRW1wdHkoKSB8
fCBuZXh0bGluZS5yaWdodCgpIDw9IHRoaXNsaW5lLnJpZ2h0KCkgfHwgKHRoaXNsaW5lLnJpZ2h0
KCkgLSAxKSA8PSBuZXh0bGluZS54KCkgPyBvdyA6IDApLAorICAgICAgICAgICAgICAgYiArIChu
ZXh0bGluZS5pc0VtcHR5KCkgfHwgbmV4dGxpbmUubWF4WCgpIDw9IHRoaXNsaW5lLm1heFgoKSB8
fCAodGhpc2xpbmUubWF4WCgpIC0gMSkgPD0gbmV4dGxpbmUueCgpID8gb3cgOiAwKSwKICAgICAg
ICAgICAgICAgIEJTUmlnaHQsCiAgICAgICAgICAgICAgICBvYywgb3MsCi0gICAgICAgICAgICAg
ICAobGFzdGxpbmUuaXNFbXB0eSgpIHx8IGxhc3RsaW5lLnJpZ2h0KCkgPCB0aGlzbGluZS5yaWdo
dCgpIHx8ICh0aGlzbGluZS5yaWdodCgpIC0gMSkgPD0gbGFzdGxpbmUueCgpID8gb3cgOiAtb3cp
LAotICAgICAgICAgICAgICAgKG5leHRsaW5lLmlzRW1wdHkoKSB8fCBuZXh0bGluZS5yaWdodCgp
IDw9IHRoaXNsaW5lLnJpZ2h0KCkgfHwgKHRoaXNsaW5lLnJpZ2h0KCkgLSAxKSA8PSBuZXh0bGlu
ZS54KCkgPyBvdyA6IC1vdykpOworICAgICAgICAgICAgICAgKGxhc3RsaW5lLmlzRW1wdHkoKSB8
fCBsYXN0bGluZS5tYXhYKCkgPCB0aGlzbGluZS5tYXhYKCkgfHwgKHRoaXNsaW5lLm1heFgoKSAt
IDEpIDw9IGxhc3RsaW5lLngoKSA/IG93IDogLW93KSwKKyAgICAgICAgICAgICAgIChuZXh0bGlu
ZS5pc0VtcHR5KCkgfHwgbmV4dGxpbmUubWF4WCgpIDw9IHRoaXNsaW5lLm1heFgoKSB8fCAodGhp
c2xpbmUubWF4WCgpIC0gMSkgPD0gbmV4dGxpbmUueCgpID8gb3cgOiAtb3cpKTsKICAgICAvLyB1
cHBlciBlZGdlCiAgICAgaWYgKHRoaXNsaW5lLngoKSA8IGxhc3RsaW5lLngoKSkKICAgICAgICAg
ZHJhd0xpbmVGb3JCb3hTaWRlKGdyYXBoaWNzQ29udGV4dCwKQEAgLTEwNzIsMTQgKzEwNzIsMTQg
QEAgdm9pZCBSZW5kZXJJbmxpbmU6OnBhaW50T3V0bGluZUZvckxpbmUoRwogICAgICAgICAgICAg
ICAgICAgIG93LAogICAgICAgICAgICAgICAgICAgICghbGFzdGxpbmUuaXNFbXB0eSgpICYmIHR4
ICsgbGFzdGxpbmUueCgpICsgMSA8IHIgKyBvdykgPyAtb3cgOiBvdyk7CiAgICAgCi0gICAgaWYg
KGxhc3RsaW5lLnJpZ2h0KCkgPCB0aGlzbGluZS5yaWdodCgpKQorICAgIGlmIChsYXN0bGluZS5t
YXhYKCkgPCB0aGlzbGluZS5tYXhYKCkpCiAgICAgICAgIGRyYXdMaW5lRm9yQm94U2lkZShncmFw
aGljc0NvbnRleHQsCi0gICAgICAgICAgICAgICAgICAgbWF4KGxhc3RsaW5lLmlzRW1wdHkoKSA/
IC0xMDAwMDAwIDogdHggKyBsYXN0bGluZS5yaWdodCgpLCBsIC0gb3cpLAorICAgICAgICAgICAg
ICAgICAgIG1heChsYXN0bGluZS5pc0VtcHR5KCkgPyAtMTAwMDAwMCA6IHR4ICsgbGFzdGxpbmUu
bWF4WCgpLCBsIC0gb3cpLAogICAgICAgICAgICAgICAgICAgIHQgLSBvdywKICAgICAgICAgICAg
ICAgICAgICByICsgb3csCiAgICAgICAgICAgICAgICAgICAgdCAsCiAgICAgICAgICAgICAgICAg
ICAgQlNUb3AsIG9jLCBvcywKLSAgICAgICAgICAgICAgICAgICAoIWxhc3RsaW5lLmlzRW1wdHko
KSAmJiBsIC0gb3cgPCB0eCArIGxhc3RsaW5lLnJpZ2h0KCkpID8gLW93IDogb3csCisgICAgICAg
ICAgICAgICAgICAgKCFsYXN0bGluZS5pc0VtcHR5KCkgJiYgbCAtIG93IDwgdHggKyBsYXN0bGlu
ZS5tYXhYKCkpID8gLW93IDogb3csCiAgICAgICAgICAgICAgICAgICAgb3cpOwogICAgIAogICAg
IC8vIGxvd2VyIGVkZ2UKQEAgLTEwOTMsMTQgKzEwOTMsMTQgQEAgdm9pZCBSZW5kZXJJbmxpbmU6
OnBhaW50T3V0bGluZUZvckxpbmUoRwogICAgICAgICAgICAgICAgICAgIG93LAogICAgICAgICAg
ICAgICAgICAgICghbmV4dGxpbmUuaXNFbXB0eSgpICYmIHR4ICsgbmV4dGxpbmUueCgpICsgMSA8
IHIgKyBvdykgPyAtb3cgOiBvdyk7CiAgICAgCi0gICAgaWYgKG5leHRsaW5lLnJpZ2h0KCkgPCB0
aGlzbGluZS5yaWdodCgpKQorICAgIGlmIChuZXh0bGluZS5tYXhYKCkgPCB0aGlzbGluZS5tYXhY
KCkpCiAgICAgICAgIGRyYXdMaW5lRm9yQm94U2lkZShncmFwaGljc0NvbnRleHQsCi0gICAgICAg
ICAgICAgICAgICAgbWF4KCFuZXh0bGluZS5pc0VtcHR5KCkgPyB0eCArIG5leHRsaW5lLnJpZ2h0
KCkgOiAtMTAwMDAwMCwgbCAtIG93KSwKKyAgICAgICAgICAgICAgICAgICBtYXgoIW5leHRsaW5l
LmlzRW1wdHkoKSA/IHR4ICsgbmV4dGxpbmUubWF4WCgpIDogLTEwMDAwMDAsIGwgLSBvdyksCiAg
ICAgICAgICAgICAgICAgICAgYiwKICAgICAgICAgICAgICAgICAgICByICsgb3csCiAgICAgICAg
ICAgICAgICAgICAgYiArIG93LAogICAgICAgICAgICAgICAgICAgIEJTQm90dG9tLCBvYywgb3Ms
Ci0gICAgICAgICAgICAgICAgICAgKCFuZXh0bGluZS5pc0VtcHR5KCkgJiYgbCAtIG93IDwgdHgg
KyBuZXh0bGluZS5yaWdodCgpKSA/IC1vdyA6IG93LAorICAgICAgICAgICAgICAgICAgICghbmV4
dGxpbmUuaXNFbXB0eSgpICYmIGwgLSBvdyA8IHR4ICsgbmV4dGxpbmUubWF4WCgpKSA/IC1vdyA6
IG93LAogICAgICAgICAgICAgICAgICAgIG93KTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCShyZXZpc2lvbiA3NzI3OCkKKysrIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1MTYsNyAr
MTUxNiw3IEBAIEludFJlY3QgUmVuZGVyTGF5ZXI6OmdldFJlY3RUb0V4cG9zZShjb24KICAgICAg
ICAgc2Nyb2xsWCA9IFNjcm9sbEFsaWdubWVudDo6Z2V0SGlkZGVuQmVoYXZpb3IoYWxpZ25YKTsK
ICAgICAvLyBJZiB3ZSdyZSB0cnlpbmcgdG8gYWxpZ24gdG8gdGhlIGNsb3Nlc3QgZWRnZSwgYW5k
IHRoZSBleHBvc2VSZWN0IGlzIGZ1cnRoZXIgcmlnaHQKICAgICAvLyB0aGFuIHRoZSB2aXNpYmxl
UmVjdCwgYW5kIG5vdCBiaWdnZXIgdGhhbiB0aGUgdmlzaWJsZSBhcmVhLCB0aGVuIGFsaWduIHdp
dGggdGhlIHJpZ2h0LgotICAgIGlmIChzY3JvbGxYID09IGFsaWduVG9DbG9zZXN0RWRnZSAmJiBl
eHBvc2VSZWN0LnJpZ2h0KCkgPiB2aXNpYmxlUmVjdC5yaWdodCgpICYmIGV4cG9zZVJlY3Qud2lk
dGgoKSA8IHZpc2libGVSZWN0LndpZHRoKCkpCisgICAgaWYgKHNjcm9sbFggPT0gYWxpZ25Ub0Ns
b3Nlc3RFZGdlICYmIGV4cG9zZVJlY3QubWF4WCgpID4gdmlzaWJsZVJlY3QubWF4WCgpICYmIGV4
cG9zZVJlY3Qud2lkdGgoKSA8IHZpc2libGVSZWN0LndpZHRoKCkpCiAgICAgICAgIHNjcm9sbFgg
PSBhbGlnblJpZ2h0OwogCiAgICAgLy8gR2l2ZW4gdGhlIFggYmVoYXZpb3IsIGNvbXB1dGUgdGhl
IFggY29vcmRpbmF0ZS4KQEAgLTE1MjQsNyArMTUyNCw3IEBAIEludFJlY3QgUmVuZGVyTGF5ZXI6
OmdldFJlY3RUb0V4cG9zZShjb24KICAgICBpZiAoc2Nyb2xsWCA9PSBub1Njcm9sbCkgCiAgICAg
ICAgIHggPSB2aXNpYmxlUmVjdC54KCk7CiAgICAgZWxzZSBpZiAoc2Nyb2xsWCA9PSBhbGlnblJp
Z2h0KQotICAgICAgICB4ID0gZXhwb3NlUmVjdC5yaWdodCgpIC0gdmlzaWJsZVJlY3Qud2lkdGgo
KTsKKyAgICAgICAgeCA9IGV4cG9zZVJlY3QubWF4WCgpIC0gdmlzaWJsZVJlY3Qud2lkdGgoKTsK
ICAgICBlbHNlIGlmIChzY3JvbGxYID09IGFsaWduQ2VudGVyKQogICAgICAgICB4ID0gZXhwb3Nl
UmVjdC54KCkgKyAoZXhwb3NlUmVjdC53aWR0aCgpIC0gdmlzaWJsZVJlY3Qud2lkdGgoKSkgLyAy
OwogICAgIGVsc2UKQEAgLTE1NDksNyArMTU0OSw3IEBAIEludFJlY3QgUmVuZGVyTGF5ZXI6Omdl
dFJlY3RUb0V4cG9zZShjb24KICAgICAgICAgc2Nyb2xsWSA9IFNjcm9sbEFsaWdubWVudDo6Z2V0
SGlkZGVuQmVoYXZpb3IoYWxpZ25ZKTsKICAgICAvLyBJZiB3ZSdyZSB0cnlpbmcgdG8gYWxpZ24g
dG8gdGhlIGNsb3Nlc3QgZWRnZSwgYW5kIHRoZSBleHBvc2VSZWN0IGlzIGZ1cnRoZXIgZG93bgog
ICAgIC8vIHRoYW4gdGhlIHZpc2libGVSZWN0LCBhbmQgbm90IGJpZ2dlciB0aGFuIHRoZSB2aXNp
YmxlIGFyZWEsIHRoZW4gYWxpZ24gd2l0aCB0aGUgYm90dG9tLgotICAgIGlmIChzY3JvbGxZID09
IGFsaWduVG9DbG9zZXN0RWRnZSAmJiBleHBvc2VSZWN0LmJvdHRvbSgpID4gdmlzaWJsZVJlY3Qu
Ym90dG9tKCkgJiYgZXhwb3NlUmVjdC5oZWlnaHQoKSA8IHZpc2libGVSZWN0LmhlaWdodCgpKQor
ICAgIGlmIChzY3JvbGxZID09IGFsaWduVG9DbG9zZXN0RWRnZSAmJiBleHBvc2VSZWN0Lm1heFko
KSA+IHZpc2libGVSZWN0Lm1heFkoKSAmJiBleHBvc2VSZWN0LmhlaWdodCgpIDwgdmlzaWJsZVJl
Y3QuaGVpZ2h0KCkpCiAgICAgICAgIHNjcm9sbFkgPSBhbGlnbkJvdHRvbTsKIAogICAgIC8vIEdp
dmVuIHRoZSBZIGJlaGF2aW9yLCBjb21wdXRlIHRoZSBZIGNvb3JkaW5hdGUuCkBAIC0xNTU3LDcg
KzE1NTcsNyBAQCBJbnRSZWN0IFJlbmRlckxheWVyOjpnZXRSZWN0VG9FeHBvc2UoY29uCiAgICAg
aWYgKHNjcm9sbFkgPT0gbm9TY3JvbGwpIAogICAgICAgICB5ID0gdmlzaWJsZVJlY3QueSgpOwog
ICAgIGVsc2UgaWYgKHNjcm9sbFkgPT0gYWxpZ25Cb3R0b20pCi0gICAgICAgIHkgPSBleHBvc2VS
ZWN0LmJvdHRvbSgpIC0gdmlzaWJsZVJlY3QuaGVpZ2h0KCk7CisgICAgICAgIHkgPSBleHBvc2VS
ZWN0Lm1heFkoKSAtIHZpc2libGVSZWN0LmhlaWdodCgpOwogICAgIGVsc2UgaWYgKHNjcm9sbFkg
PT0gYWxpZ25DZW50ZXIpCiAgICAgICAgIHkgPSBleHBvc2VSZWN0LnkoKSArIChleHBvc2VSZWN0
LmhlaWdodCgpIC0gdmlzaWJsZVJlY3QuaGVpZ2h0KCkpIC8gMjsKICAgICBlbHNlCkBAIC0xNjk0
LDggKzE2OTQsOCBAQCBzdGF0aWMgSW50UmVjdCBjb3JuZXJSZWN0KGNvbnN0IFJlbmRlckxhCiAg
ICAgICAgIGhvcml6b250YWxUaGlja25lc3MgPSBsYXllci0+dmVydGljYWxTY3JvbGxiYXIoKS0+
d2lkdGgoKTsKICAgICAgICAgdmVydGljYWxUaGlja25lc3MgPSBsYXllci0+aG9yaXpvbnRhbFNj
cm9sbGJhcigpLT5oZWlnaHQoKTsKICAgICB9Ci0gICAgcmV0dXJuIEludFJlY3QoYm91bmRzLnJp
Z2h0KCkgLSBob3Jpem9udGFsVGhpY2tuZXNzIC0gbGF5ZXItPnJlbmRlcmVyKCktPnN0eWxlKCkt
PmJvcmRlclJpZ2h0V2lkdGgoKSwgCi0gICAgICAgICAgICAgICAgICAgYm91bmRzLmJvdHRvbSgp
IC0gdmVydGljYWxUaGlja25lc3MgLSBsYXllci0+cmVuZGVyZXIoKS0+c3R5bGUoKS0+Ym9yZGVy
Qm90dG9tV2lkdGgoKSwKKyAgICByZXR1cm4gSW50UmVjdChib3VuZHMubWF4WCgpIC0gaG9yaXpv
bnRhbFRoaWNrbmVzcyAtIGxheWVyLT5yZW5kZXJlcigpLT5zdHlsZSgpLT5ib3JkZXJSaWdodFdp
ZHRoKCksIAorICAgICAgICAgICAgICAgICAgIGJvdW5kcy5tYXhZKCkgLSB2ZXJ0aWNhbFRoaWNr
bmVzcyAtIGxheWVyLT5yZW5kZXJlcigpLT5zdHlsZSgpLT5ib3JkZXJCb3R0b21XaWR0aCgpLAog
ICAgICAgICAgICAgICAgICAgIGhvcml6b250YWxUaGlja25lc3MsIHZlcnRpY2FsVGhpY2tuZXNz
KTsKIH0KIApAQCAtMTkxMSwxNCArMTkxMSwxNCBAQCB2b2lkIFJlbmRlckxheWVyOjpwb3NpdGlv
bk92ZXJmbG93Q29udHJvCiAgICAgSW50UmVjdCBzY3JvbGxDb3JuZXIoc2Nyb2xsQ29ybmVyUmVj
dCh0aGlzLCBib3JkZXJCb3gpKTsKICAgICBJbnRSZWN0IGFic0JvdW5kcyhib3JkZXJCb3gueCgp
ICsgdHgsIGJvcmRlckJveC55KCkgKyB0eSwgYm9yZGVyQm94LndpZHRoKCksIGJvcmRlckJveC5o
ZWlnaHQoKSk7CiAgICAgaWYgKG1fdkJhcikKLSAgICAgICAgbV92QmFyLT5zZXRGcmFtZVJlY3Qo
SW50UmVjdChhYnNCb3VuZHMucmlnaHQoKSAtIGJveC0+Ym9yZGVyUmlnaHQoKSAtIG1fdkJhci0+
d2lkdGgoKSwKKyAgICAgICAgbV92QmFyLT5zZXRGcmFtZVJlY3QoSW50UmVjdChhYnNCb3VuZHMu
bWF4WCgpIC0gYm94LT5ib3JkZXJSaWdodCgpIC0gbV92QmFyLT53aWR0aCgpLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFic0JvdW5kcy55KCkgKyBib3gtPmJvcmRlclRv
cCgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fdkJhci0+d2lkdGgo
KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhYnNCb3VuZHMuaGVpZ2h0
KCkgLSAoYm94LT5ib3JkZXJUb3AoKSArIGJveC0+Ym9yZGVyQm90dG9tKCkpIC0gc2Nyb2xsQ29y
bmVyLmhlaWdodCgpKSk7CiAKICAgICBpZiAobV9oQmFyKQogICAgICAgICBtX2hCYXItPnNldEZy
YW1lUmVjdChJbnRSZWN0KGFic0JvdW5kcy54KCkgKyBib3gtPmJvcmRlckxlZnQoKSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhYnNCb3VuZHMuYm90dG9tKCkgLSBib3gt
PmJvcmRlckJvdHRvbSgpIC0gbV9oQmFyLT5oZWlnaHQoKSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBhYnNCb3VuZHMubWF4WSgpIC0gYm94LT5ib3JkZXJCb3R0b20oKSAt
IG1faEJhci0+aGVpZ2h0KCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
YWJzQm91bmRzLndpZHRoKCkgLSAoYm94LT5ib3JkZXJMZWZ0KCkgKyBib3gtPmJvcmRlclJpZ2h0
KCkpIC0gc2Nyb2xsQ29ybmVyLndpZHRoKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbV9oQmFyLT5oZWlnaHQoKSkpOwogICAgIApAQCAtMTk1NSw3ICsxOTU1LDcgQEAg
aW50IFJlbmRlckxheWVyOjpvdmVyZmxvd0JvdHRvbSgpIGNvbnN0CiAgICAgUmVuZGVyQm94KiBi
b3ggPSByZW5kZXJCb3goKTsKICAgICBJbnRSZWN0IG92ZXJmbG93UmVjdChib3gtPmxheW91dE92
ZXJmbG93UmVjdCgpKTsKICAgICBib3gtPmZsaXBGb3JXcml0aW5nTW9kZShvdmVyZmxvd1JlY3Qp
OwotICAgIHJldHVybiBvdmVyZmxvd1JlY3QuYm90dG9tKCk7CisgICAgcmV0dXJuIG92ZXJmbG93
UmVjdC5tYXhZKCk7CiB9CiAKIGludCBSZW5kZXJMYXllcjo6b3ZlcmZsb3dMZWZ0KCkgY29uc3QK
QEAgLTE5NzEsNyArMTk3MSw3IEBAIGludCBSZW5kZXJMYXllcjo6b3ZlcmZsb3dSaWdodCgpIGNv
bnN0CiAgICAgUmVuZGVyQm94KiBib3ggPSByZW5kZXJCb3goKTsKICAgICBJbnRSZWN0IG92ZXJm
bG93UmVjdChib3gtPmxheW91dE92ZXJmbG93UmVjdCgpKTsKICAgICBib3gtPmZsaXBGb3JXcml0
aW5nTW9kZShvdmVyZmxvd1JlY3QpOwotICAgIHJldHVybiBvdmVyZmxvd1JlY3QucmlnaHQoKTsK
KyAgICByZXR1cm4gb3ZlcmZsb3dSZWN0Lm1heFgoKTsKIH0KIAogdm9pZCBSZW5kZXJMYXllcjo6
Y29tcHV0ZVNjcm9sbERpbWVuc2lvbnMoYm9vbCogbmVlZEhCYXIsIGJvb2wqIG5lZWRWQmFyKQpA
QCAtMjE5Nyw3ICsyMTk3LDcgQEAgdm9pZCBSZW5kZXJMYXllcjo6cGFpbnRSZXNpemVyKEdyYXBo
aWNzQwogCiAgICAgLy8gUGFpbnQgdGhlIHJlc2l6ZXIgY29udHJvbC4KICAgICBERUZJTkVfU1RB
VElDX0xPQ0FMKFJlZlB0cjxJbWFnZT4sIHJlc2l6ZUNvcm5lckltYWdlLCAoSW1hZ2U6OmxvYWRQ
bGF0Zm9ybVJlc291cmNlKCJ0ZXh0QXJlYVJlc2l6ZUNvcm5lciIpKSk7Ci0gICAgSW50UG9pbnQg
aW1hZ2VQb2ludChhYnNSZWN0LnJpZ2h0KCkgLSByZXNpemVDb3JuZXJJbWFnZS0+d2lkdGgoKSwg
YWJzUmVjdC5ib3R0b20oKSAtIHJlc2l6ZUNvcm5lckltYWdlLT5oZWlnaHQoKSk7CisgICAgSW50
UG9pbnQgaW1hZ2VQb2ludChhYnNSZWN0Lm1heFgoKSAtIHJlc2l6ZUNvcm5lckltYWdlLT53aWR0
aCgpLCBhYnNSZWN0Lm1heFkoKSAtIHJlc2l6ZUNvcm5lckltYWdlLT5oZWlnaHQoKSk7CiAgICAg
Y29udGV4dC0+ZHJhd0ltYWdlKHJlc2l6ZUNvcm5lckltYWdlLmdldCgpLCBib3gtPnN0eWxlKCkt
PmNvbG9yU3BhY2UoKSwgaW1hZ2VQb2ludCk7CiAKICAgICAvLyBEcmF3IGEgZnJhbWUgYXJvdW5k
IHRoZSByZXNpemVyICgxcHggZ3JleSBsaW5lKSBpZiB0aGVyZSBhcmUgYW55IHNjcm9sbGJhcnMg
cHJlc2VudC4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaW5lQm94TGlz
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpbmVC
b3hMaXN0LmNwcAkocmV2aXNpb24gNzcyNzgpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTGluZUJveExpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjAsMTEgKzE2MCwxMSBA
QCBib29sIFJlbmRlckxpbmVCb3hMaXN0OjpyYW5nZUludGVyc2VjdHNSCiAgICAgCiAgICAgaWYg
KHJlbmRlcmVyLT5zdHlsZSgpLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpKSB7CiAgICAgICAg
IHBoeXNpY2FsU3RhcnQgKz0gdHk7Ci0gICAgICAgIGlmIChwaHlzaWNhbFN0YXJ0ID49IHJlY3Qu
Ym90dG9tKCkgfHwgcGh5c2ljYWxTdGFydCArIHBoeXNpY2FsRXh0ZW50IDw9IHJlY3QueSgpKQor
ICAgICAgICBpZiAocGh5c2ljYWxTdGFydCA+PSByZWN0Lm1heFkoKSB8fCBwaHlzaWNhbFN0YXJ0
ICsgcGh5c2ljYWxFeHRlbnQgPD0gcmVjdC55KCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgfSBlbHNlIHsKICAgICAgICAgcGh5c2ljYWxTdGFydCArPSB0eDsKLSAgICAgICAgaWYg
KHBoeXNpY2FsU3RhcnQgPj0gcmVjdC5yaWdodCgpIHx8IHBoeXNpY2FsU3RhcnQgKyBwaHlzaWNh
bEV4dGVudCA8PSByZWN0LngoKSkKKyAgICAgICAgaWYgKHBoeXNpY2FsU3RhcnQgPj0gcmVjdC5t
YXhYKCkgfHwgcGh5c2ljYWxTdGFydCArIHBoeXNpY2FsRXh0ZW50IDw9IHJlY3QueCgpKQogICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICAKQEAgLTIzOSwxMSArMjM5LDExIEBA
IHZvaWQgUmVuZGVyTGluZUJveExpc3Q6OnBhaW50KFJlbmRlckJveE0KICAgICAgICAgICAgICAg
ICBib3R0b21Gb3JQYWdpbmF0aW9uQ2hlY2sgPSBtYXgoYm90dG9tRm9yUGFnaW5hdGlvbkNoZWNr
LCBjdXJyLT5yb290KCktPmxpbmVCb3R0b20oKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICBpZiAoYm90dG9tRm9yUGFnaW5hdGlvbkNoZWNrIC0gdG9wRm9yUGFnaW5hdGlvbkNoZWNrIDw9
IHYtPnByaW50UmVjdCgpLmhlaWdodCgpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHR5ICsgYm90
dG9tRm9yUGFnaW5hdGlvbkNoZWNrID4gdi0+cHJpbnRSZWN0KCkuYm90dG9tKCkpIHsKKyAgICAg
ICAgICAgICAgICBpZiAodHkgKyBib3R0b21Gb3JQYWdpbmF0aW9uQ2hlY2sgPiB2LT5wcmludFJl
Y3QoKS5tYXhZKCkpIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKFJvb3RJbmxpbmVCb3gqIG5l
eHRSb290Qm94ID0gY3Vyci0+cm9vdCgpLT5uZXh0Um9vdEJveCgpKQogICAgICAgICAgICAgICAg
ICAgICAgICAgYm90dG9tRm9yUGFnaW5hdGlvbkNoZWNrID0gbWluKGJvdHRvbUZvclBhZ2luYXRp
b25DaGVjaywgbWluKG5leHRSb290Qm94LT50b3BWaXN1YWxPdmVyZmxvdygpLCBuZXh0Um9vdEJv
eC0+bGluZVRvcCgpKSk7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmICh0
eSArIGJvdHRvbUZvclBhZ2luYXRpb25DaGVjayA+IHYtPnByaW50UmVjdCgpLmJvdHRvbSgpKSB7
CisgICAgICAgICAgICAgICAgaWYgKHR5ICsgYm90dG9tRm9yUGFnaW5hdGlvbkNoZWNrID4gdi0+
cHJpbnRSZWN0KCkubWF4WSgpKSB7CiAgICAgICAgICAgICAgICAgICAgIGlmICh0eSArIHRvcEZv
clBhZ2luYXRpb25DaGVjayA8IHYtPnRydW5jYXRlZEF0KCkpCiAgICAgICAgICAgICAgICAgICAg
ICAgICB2LT5zZXRCZXN0VHJ1bmNhdGVkQXQodHkgKyB0b3BGb3JQYWdpbmF0aW9uQ2hlY2ssIHJl
bmRlcmVyKTsKICAgICAgICAgICAgICAgICAgICAgLy8gSWYgd2Ugd2VyZSBhYmxlIHRvIHRydW5j
YXRlLCBkb24ndCBwYWludC4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJM
aXN0SXRlbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckxpc3RJdGVtLmNwcAkocmV2aXNpb24gNzcyNzgpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyTGlzdEl0ZW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOTcsMTIgKzI5NywxMiBA
QCB2b2lkIFJlbmRlckxpc3RJdGVtOjpwb3NpdGlvbkxpc3RNYXJrZXIoCiAgICAgICAgICAgICBm
b3IgKElubGluZUZsb3dCb3gqIGJveCA9IG1fbWFya2VyLT5pbmxpbmVCb3hXcmFwcGVyKCktPnBh
cmVudCgpOyBib3g7IGJveCA9IGJveC0+cGFyZW50KCkpIHsKICAgICAgICAgICAgICAgICBJbnRS
ZWN0IG5ld0xvZ2ljYWxWaXN1YWxPdmVyZmxvd1JlY3QgPSBib3gtPmxvZ2ljYWxWaXN1YWxPdmVy
Zmxvd1JlY3QoKTsKICAgICAgICAgICAgICAgICBJbnRSZWN0IG5ld0xvZ2ljYWxMYXlvdXRPdmVy
Zmxvd1JlY3QgPSBib3gtPmxvZ2ljYWxMYXlvdXRPdmVyZmxvd1JlY3QoKTsKLSAgICAgICAgICAg
ICAgICBpZiAobWFya2VyTG9naWNhbExlZnQgKyBtX21hcmtlci0+bG9naWNhbFdpZHRoKCkgPiBu
ZXdMb2dpY2FsVmlzdWFsT3ZlcmZsb3dSZWN0LnJpZ2h0KCkgJiYgIWhpdFNlbGZQYWludGluZ0xh
eWVyKSB7CisgICAgICAgICAgICAgICAgaWYgKG1hcmtlckxvZ2ljYWxMZWZ0ICsgbV9tYXJrZXIt
PmxvZ2ljYWxXaWR0aCgpID4gbmV3TG9naWNhbFZpc3VhbE92ZXJmbG93UmVjdC5tYXhYKCkgJiYg
IWhpdFNlbGZQYWludGluZ0xheWVyKSB7CiAgICAgICAgICAgICAgICAgICAgIG5ld0xvZ2ljYWxW
aXN1YWxPdmVyZmxvd1JlY3Quc2V0V2lkdGgobWFya2VyTG9naWNhbExlZnQgKyBtX21hcmtlci0+
bG9naWNhbFdpZHRoKCkgLSBib3gtPmxvZ2ljYWxMZWZ0VmlzdWFsT3ZlcmZsb3coKSk7CiAgICAg
ICAgICAgICAgICAgICAgIGlmIChib3ggPT0gcm9vdCkKICAgICAgICAgICAgICAgICAgICAgICAg
IGFkanVzdE92ZXJmbG93ID0gdHJ1ZTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgaWYgKG1hcmtlckxvZ2ljYWxMZWZ0ICsgbV9tYXJrZXItPmxvZ2ljYWxXaWR0aCgpID4gbmV3
TG9naWNhbExheW91dE92ZXJmbG93UmVjdC5yaWdodCgpKSB7CisgICAgICAgICAgICAgICAgaWYg
KG1hcmtlckxvZ2ljYWxMZWZ0ICsgbV9tYXJrZXItPmxvZ2ljYWxXaWR0aCgpID4gbmV3TG9naWNh
bExheW91dE92ZXJmbG93UmVjdC5tYXhYKCkpIHsKICAgICAgICAgICAgICAgICAgICAgbmV3TG9n
aWNhbExheW91dE92ZXJmbG93UmVjdC5zZXRXaWR0aChtYXJrZXJMb2dpY2FsTGVmdCArIG1fbWFy
a2VyLT5sb2dpY2FsV2lkdGgoKSAtIGJveC0+bG9naWNhbExlZnRMYXlvdXRPdmVyZmxvdygpKTsK
ICAgICAgICAgICAgICAgICAgICAgaWYgKGJveCA9PSByb290KQogICAgICAgICAgICAgICAgICAg
ICAgICAgYWRqdXN0T3ZlcmZsb3cgPSB0cnVlOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckxpc3RNYXJrZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJMaXN0TWFya2VyLmNwcAkocmV2aXNpb24gNzcyNzgpCisrKyBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdE1hcmtlci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEyNjAsOSArMTI2MCw5IEBAIHZvaWQgUmVuZGVyTGlzdE1hcmtlcjo6cGFpbnQoUGFpbnRJbmZv
JiAKICAgICAgICAgbWFya2VyID0gbWFya2VyLnRyYW5zcG9zZWRSZWN0KCk7CiAgICAgICAgIG1h
cmtlci5tb3ZlKGJveC54KCksIGJveC55KCkgLSBsb2dpY2FsSGVpZ2h0KCkpOwogICAgICAgICBj
b250ZXh0LT5zYXZlKCk7Ci0gICAgICAgIGNvbnRleHQtPnRyYW5zbGF0ZShtYXJrZXIueCgpLCBt
YXJrZXIuYm90dG9tKCkpOworICAgICAgICBjb250ZXh0LT50cmFuc2xhdGUobWFya2VyLngoKSwg
bWFya2VyLm1heFkoKSk7CiAgICAgICAgIGNvbnRleHQtPnJvdGF0ZShzdGF0aWNfY2FzdDxmbG9h
dD4oZGVnMnJhZCg5MC4pKSk7Ci0gICAgICAgIGNvbnRleHQtPnRyYW5zbGF0ZSgtbWFya2VyLngo
KSwgLW1hcmtlci5ib3R0b20oKSk7CisgICAgICAgIGNvbnRleHQtPnRyYW5zbGF0ZSgtbWFya2Vy
LngoKSwgLW1hcmtlci5tYXhZKCkpOwogICAgIH0KIAogICAgIEludFBvaW50IHRleHRPcmlnaW4g
PSBJbnRQb2ludChtYXJrZXIueCgpLCBtYXJrZXIueSgpICsgc3R5bGUoKS0+Zm9udE1ldHJpY3Mo
KS5hc2NlbnQoKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0
LmNwcAkocmV2aXNpb24gNzcyNzgpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
T2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM3OCwxMSArMTM3OCwxMSBAQCBib29sIFJl
bmRlck9iamVjdDo6cmVwYWludEFmdGVyTGF5b3V0SWZOCiAgICAgZWxzZSBpZiAoZGVsdGFMZWZ0
IDwgMCkKICAgICAgICAgcmVwYWludFVzaW5nQ29udGFpbmVyKHJlcGFpbnRDb250YWluZXIsIElu
dFJlY3QobmV3Qm91bmRzLngoKSwgbmV3Qm91bmRzLnkoKSwgLWRlbHRhTGVmdCwgbmV3Qm91bmRz
LmhlaWdodCgpKSk7CiAKLSAgICBpbnQgZGVsdGFSaWdodCA9IG5ld0JvdW5kcy5yaWdodCgpIC0g
b2xkQm91bmRzLnJpZ2h0KCk7CisgICAgaW50IGRlbHRhUmlnaHQgPSBuZXdCb3VuZHMubWF4WCgp
IC0gb2xkQm91bmRzLm1heFgoKTsKICAgICBpZiAoZGVsdGFSaWdodCA+IDApCi0gICAgICAgIHJl
cGFpbnRVc2luZ0NvbnRhaW5lcihyZXBhaW50Q29udGFpbmVyLCBJbnRSZWN0KG9sZEJvdW5kcy5y
aWdodCgpLCBuZXdCb3VuZHMueSgpLCBkZWx0YVJpZ2h0LCBuZXdCb3VuZHMuaGVpZ2h0KCkpKTsK
KyAgICAgICAgcmVwYWludFVzaW5nQ29udGFpbmVyKHJlcGFpbnRDb250YWluZXIsIEludFJlY3Qo
b2xkQm91bmRzLm1heFgoKSwgbmV3Qm91bmRzLnkoKSwgZGVsdGFSaWdodCwgbmV3Qm91bmRzLmhl
aWdodCgpKSk7CiAgICAgZWxzZSBpZiAoZGVsdGFSaWdodCA8IDApCi0gICAgICAgIHJlcGFpbnRV
c2luZ0NvbnRhaW5lcihyZXBhaW50Q29udGFpbmVyLCBJbnRSZWN0KG5ld0JvdW5kcy5yaWdodCgp
LCBvbGRCb3VuZHMueSgpLCAtZGVsdGFSaWdodCwgb2xkQm91bmRzLmhlaWdodCgpKSk7CisgICAg
ICAgIHJlcGFpbnRVc2luZ0NvbnRhaW5lcihyZXBhaW50Q29udGFpbmVyLCBJbnRSZWN0KG5ld0Jv
dW5kcy5tYXhYKCksIG9sZEJvdW5kcy55KCksIC1kZWx0YVJpZ2h0LCBvbGRCb3VuZHMuaGVpZ2h0
KCkpKTsKIAogICAgIGludCBkZWx0YVRvcCA9IG5ld0JvdW5kcy55KCkgLSBvbGRCb3VuZHMueSgp
OwogICAgIGlmIChkZWx0YVRvcCA+IDApCkBAIC0xMzkwLDExICsxMzkwLDExIEBAIGJvb2wgUmVu
ZGVyT2JqZWN0OjpyZXBhaW50QWZ0ZXJMYXlvdXRJZk4KICAgICBlbHNlIGlmIChkZWx0YVRvcCA8
IDApCiAgICAgICAgIHJlcGFpbnRVc2luZ0NvbnRhaW5lcihyZXBhaW50Q29udGFpbmVyLCBJbnRS
ZWN0KG5ld0JvdW5kcy54KCksIG5ld0JvdW5kcy55KCksIG5ld0JvdW5kcy53aWR0aCgpLCAtZGVs
dGFUb3ApKTsKIAotICAgIGludCBkZWx0YUJvdHRvbSA9IG5ld0JvdW5kcy5ib3R0b20oKSAtIG9s
ZEJvdW5kcy5ib3R0b20oKTsKKyAgICBpbnQgZGVsdGFCb3R0b20gPSBuZXdCb3VuZHMubWF4WSgp
IC0gb2xkQm91bmRzLm1heFkoKTsKICAgICBpZiAoZGVsdGFCb3R0b20gPiAwKQotICAgICAgICBy
ZXBhaW50VXNpbmdDb250YWluZXIocmVwYWludENvbnRhaW5lciwgSW50UmVjdChuZXdCb3VuZHMu
eCgpLCBvbGRCb3VuZHMuYm90dG9tKCksIG5ld0JvdW5kcy53aWR0aCgpLCBkZWx0YUJvdHRvbSkp
OworICAgICAgICByZXBhaW50VXNpbmdDb250YWluZXIocmVwYWludENvbnRhaW5lciwgSW50UmVj
dChuZXdCb3VuZHMueCgpLCBvbGRCb3VuZHMubWF4WSgpLCBuZXdCb3VuZHMud2lkdGgoKSwgZGVs
dGFCb3R0b20pKTsKICAgICBlbHNlIGlmIChkZWx0YUJvdHRvbSA8IDApCi0gICAgICAgIHJlcGFp
bnRVc2luZ0NvbnRhaW5lcihyZXBhaW50Q29udGFpbmVyLCBJbnRSZWN0KG9sZEJvdW5kcy54KCks
IG5ld0JvdW5kcy5ib3R0b20oKSwgb2xkQm91bmRzLndpZHRoKCksIC1kZWx0YUJvdHRvbSkpOwor
ICAgICAgICByZXBhaW50VXNpbmdDb250YWluZXIocmVwYWludENvbnRhaW5lciwgSW50UmVjdChv
bGRCb3VuZHMueCgpLCBuZXdCb3VuZHMubWF4WSgpLCBvbGRCb3VuZHMud2lkdGgoKSwgLWRlbHRh
Qm90dG9tKSk7CiAKICAgICBpZiAobmV3T3V0bGluZUJveCA9PSBvbGRPdXRsaW5lQm94KQogICAg
ICAgICByZXR1cm4gZmFsc2U7CkBAIC0xNDE2LDcgKzE0MTYsNyBAQCBib29sIFJlbmRlck9iamVj
dDo6cmVwYWludEFmdGVyTGF5b3V0SWZOCiAgICAgICAgICAgICBuZXdPdXRsaW5lQm94LnkoKSwK
ICAgICAgICAgICAgIHdpZHRoICsgYm9yZGVyV2lkdGgsCiAgICAgICAgICAgICBtYXgobmV3T3V0
bGluZUJveC5oZWlnaHQoKSwgb2xkT3V0bGluZUJveC5oZWlnaHQoKSkpOwotICAgICAgICBpbnQg
cmlnaHQgPSBtaW4obmV3Qm91bmRzLnJpZ2h0KCksIG9sZEJvdW5kcy5yaWdodCgpKTsKKyAgICAg
ICAgaW50IHJpZ2h0ID0gbWluKG5ld0JvdW5kcy5tYXhYKCksIG9sZEJvdW5kcy5tYXhYKCkpOwog
ICAgICAgICBpZiAocmlnaHRSZWN0LngoKSA8IHJpZ2h0KSB7CiAgICAgICAgICAgICByaWdodFJl
Y3Quc2V0V2lkdGgobWluKHJpZ2h0UmVjdC53aWR0aCgpLCByaWdodCAtIHJpZ2h0UmVjdC54KCkp
KTsKICAgICAgICAgICAgIHJlcGFpbnRVc2luZ0NvbnRhaW5lcihyZXBhaW50Q29udGFpbmVyLCBy
aWdodFJlY3QpOwpAQCAtMTQzMiwxMCArMTQzMiwxMCBAQCBib29sIFJlbmRlck9iamVjdDo6cmVw
YWludEFmdGVyTGF5b3V0SWZOCiAgICAgICAgIGludCBib3hIZWlnaHQgPSBpc0JveCgpID8gdG9S
ZW5kZXJCb3godGhpcyktPmhlaWdodCgpIDogMDsKICAgICAgICAgaW50IGJvcmRlckhlaWdodCA9
IG1heCgtb3V0bGluZVN0eWxlLT5vdXRsaW5lT2Zmc2V0KCksIG1heChib3JkZXJCb3R0b20sIG1h
eChzdHlsZSgpLT5ib3JkZXJCb3R0b21MZWZ0UmFkaXVzKCkuaGVpZ2h0KCkuY2FsY1ZhbHVlKGJv
eEhlaWdodCksIHN0eWxlKCktPmJvcmRlckJvdHRvbVJpZ2h0UmFkaXVzKCkuaGVpZ2h0KCkuY2Fs
Y1ZhbHVlKGJveEhlaWdodCkpKSkgKyBtYXgob3csIHNoYWRvd0JvdHRvbSk7CiAgICAgICAgIElu
dFJlY3QgYm90dG9tUmVjdChuZXdPdXRsaW5lQm94LngoKSwKLSAgICAgICAgICAgIG1pbihuZXdP
dXRsaW5lQm94LmJvdHRvbSgpLCBvbGRPdXRsaW5lQm94LmJvdHRvbSgpKSAtIGJvcmRlckhlaWdo
dCwKKyAgICAgICAgICAgIG1pbihuZXdPdXRsaW5lQm94Lm1heFkoKSwgb2xkT3V0bGluZUJveC5t
YXhZKCkpIC0gYm9yZGVySGVpZ2h0LAogICAgICAgICAgICAgbWF4KG5ld091dGxpbmVCb3gud2lk
dGgoKSwgb2xkT3V0bGluZUJveC53aWR0aCgpKSwKICAgICAgICAgICAgIGhlaWdodCArIGJvcmRl
ckhlaWdodCk7Ci0gICAgICAgIGludCBib3R0b20gPSBtaW4obmV3Qm91bmRzLmJvdHRvbSgpLCBv
bGRCb3VuZHMuYm90dG9tKCkpOworICAgICAgICBpbnQgYm90dG9tID0gbWluKG5ld0JvdW5kcy5t
YXhZKCksIG9sZEJvdW5kcy5tYXhZKCkpOwogICAgICAgICBpZiAoYm90dG9tUmVjdC55KCkgPCBi
b3R0b20pIHsKICAgICAgICAgICAgIGJvdHRvbVJlY3Quc2V0SGVpZ2h0KG1pbihib3R0b21SZWN0
LmhlaWdodCgpLCBib3R0b20gLSBib3R0b21SZWN0LnkoKSkpOwogICAgICAgICAgICAgcmVwYWlu
dFVzaW5nQ29udGFpbmVyKHJlcGFpbnRDb250YWluZXIsIGJvdHRvbVJlY3QpOwpJbmRleDogU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck92ZXJmbG93LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck92ZXJmbG93LmgJKHJldmlzaW9uIDc3Mjc4KQor
KysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck92ZXJmbG93LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQyLDEzICs0MiwxMyBAQCBjbGFzcyBSZW5kZXJPdmVyZmxvdyB7CiBwdWJsaWM6CiAg
ICAgUmVuZGVyT3ZlcmZsb3coY29uc3QgSW50UmVjdCYgbGF5b3V0UmVjdCwgY29uc3QgSW50UmVj
dCYgdmlzdWFsUmVjdCkgCiAgICAgICAgIDogbV90b3BMYXlvdXRPdmVyZmxvdyhsYXlvdXRSZWN0
LnkoKSkKLSAgICAgICAgLCBtX2JvdHRvbUxheW91dE92ZXJmbG93KGxheW91dFJlY3QuYm90dG9t
KCkpCisgICAgICAgICwgbV9ib3R0b21MYXlvdXRPdmVyZmxvdyhsYXlvdXRSZWN0Lm1heFkoKSkK
ICAgICAgICAgLCBtX2xlZnRMYXlvdXRPdmVyZmxvdyhsYXlvdXRSZWN0LngoKSkKLSAgICAgICAg
LCBtX3JpZ2h0TGF5b3V0T3ZlcmZsb3cobGF5b3V0UmVjdC5yaWdodCgpKQorICAgICAgICAsIG1f
cmlnaHRMYXlvdXRPdmVyZmxvdyhsYXlvdXRSZWN0Lm1heFgoKSkKICAgICAgICAgLCBtX3RvcFZp
c3VhbE92ZXJmbG93KHZpc3VhbFJlY3QueSgpKQotICAgICAgICAsIG1fYm90dG9tVmlzdWFsT3Zl
cmZsb3codmlzdWFsUmVjdC5ib3R0b20oKSkKKyAgICAgICAgLCBtX2JvdHRvbVZpc3VhbE92ZXJm
bG93KHZpc3VhbFJlY3QubWF4WSgpKQogICAgICAgICAsIG1fbGVmdFZpc3VhbE92ZXJmbG93KHZp
c3VhbFJlY3QueCgpKQotICAgICAgICAsIG1fcmlnaHRWaXN1YWxPdmVyZmxvdyh2aXN1YWxSZWN0
LnJpZ2h0KCkpCisgICAgICAgICwgbV9yaWdodFZpc3VhbE92ZXJmbG93KHZpc3VhbFJlY3QubWF4
WCgpKQogICAgIHsKICAgICB9CiAgICAKQEAgLTEyMiw0MSArMTIyLDQxIEBAIGlubGluZSB2b2lk
IFJlbmRlck92ZXJmbG93Ojptb3ZlKGludCBkeCwKIGlubGluZSB2b2lkIFJlbmRlck92ZXJmbG93
OjphZGRMYXlvdXRPdmVyZmxvdyhjb25zdCBJbnRSZWN0JiByZWN0KQogewogICAgIG1fdG9wTGF5
b3V0T3ZlcmZsb3cgPSBzdGQ6Om1pbihyZWN0LnkoKSwgbV90b3BMYXlvdXRPdmVyZmxvdyk7Ci0g
ICAgbV9ib3R0b21MYXlvdXRPdmVyZmxvdyA9IHN0ZDo6bWF4KHJlY3QuYm90dG9tKCksIG1fYm90
dG9tTGF5b3V0T3ZlcmZsb3cpOworICAgIG1fYm90dG9tTGF5b3V0T3ZlcmZsb3cgPSBzdGQ6Om1h
eChyZWN0Lm1heFkoKSwgbV9ib3R0b21MYXlvdXRPdmVyZmxvdyk7CiAgICAgbV9sZWZ0TGF5b3V0
T3ZlcmZsb3cgPSBzdGQ6Om1pbihyZWN0LngoKSwgbV9sZWZ0TGF5b3V0T3ZlcmZsb3cpOwotICAg
IG1fcmlnaHRMYXlvdXRPdmVyZmxvdyA9IHN0ZDo6bWF4KHJlY3QucmlnaHQoKSwgbV9yaWdodExh
eW91dE92ZXJmbG93KTsKKyAgICBtX3JpZ2h0TGF5b3V0T3ZlcmZsb3cgPSBzdGQ6Om1heChyZWN0
Lm1heFgoKSwgbV9yaWdodExheW91dE92ZXJmbG93KTsKIH0KIAogaW5saW5lIHZvaWQgUmVuZGVy
T3ZlcmZsb3c6OmFkZFZpc3VhbE92ZXJmbG93KGNvbnN0IEludFJlY3QmIHJlY3QpCiB7CiAgICAg
bV90b3BWaXN1YWxPdmVyZmxvdyA9IHN0ZDo6bWluKHJlY3QueSgpLCBtX3RvcFZpc3VhbE92ZXJm
bG93KTsKLSAgICBtX2JvdHRvbVZpc3VhbE92ZXJmbG93ID0gc3RkOjptYXgocmVjdC5ib3R0b20o
KSwgbV9ib3R0b21WaXN1YWxPdmVyZmxvdyk7CisgICAgbV9ib3R0b21WaXN1YWxPdmVyZmxvdyA9
IHN0ZDo6bWF4KHJlY3QubWF4WSgpLCBtX2JvdHRvbVZpc3VhbE92ZXJmbG93KTsKICAgICBtX2xl
ZnRWaXN1YWxPdmVyZmxvdyA9IHN0ZDo6bWluKHJlY3QueCgpLCBtX2xlZnRWaXN1YWxPdmVyZmxv
dyk7Ci0gICAgbV9yaWdodFZpc3VhbE92ZXJmbG93ID0gc3RkOjptYXgocmVjdC5yaWdodCgpLCBt
X3JpZ2h0VmlzdWFsT3ZlcmZsb3cpOworICAgIG1fcmlnaHRWaXN1YWxPdmVyZmxvdyA9IHN0ZDo6
bWF4KHJlY3QubWF4WCgpLCBtX3JpZ2h0VmlzdWFsT3ZlcmZsb3cpOwogfQogCiBpbmxpbmUgdm9p
ZCBSZW5kZXJPdmVyZmxvdzo6c2V0TGF5b3V0T3ZlcmZsb3coY29uc3QgSW50UmVjdCYgcmVjdCkK
IHsKICAgICBtX3RvcExheW91dE92ZXJmbG93ID0gcmVjdC55KCk7Ci0gICAgbV9ib3R0b21MYXlv
dXRPdmVyZmxvdyA9IHJlY3QuYm90dG9tKCk7CisgICAgbV9ib3R0b21MYXlvdXRPdmVyZmxvdyA9
IHJlY3QubWF4WSgpOwogICAgIG1fbGVmdExheW91dE92ZXJmbG93ID0gcmVjdC54KCk7Ci0gICAg
bV9yaWdodExheW91dE92ZXJmbG93ID0gcmVjdC5yaWdodCgpOworICAgIG1fcmlnaHRMYXlvdXRP
dmVyZmxvdyA9IHJlY3QubWF4WCgpOwogfQogCiBpbmxpbmUgdm9pZCBSZW5kZXJPdmVyZmxvdzo6
c2V0VmlzdWFsT3ZlcmZsb3coY29uc3QgSW50UmVjdCYgcmVjdCkKIHsKICAgICBtX3RvcFZpc3Vh
bE92ZXJmbG93ID0gcmVjdC55KCk7Ci0gICAgbV9ib3R0b21WaXN1YWxPdmVyZmxvdyA9IHJlY3Qu
Ym90dG9tKCk7CisgICAgbV9ib3R0b21WaXN1YWxPdmVyZmxvdyA9IHJlY3QubWF4WSgpOwogICAg
IG1fbGVmdFZpc3VhbE92ZXJmbG93ID0gcmVjdC54KCk7Ci0gICAgbV9yaWdodFZpc3VhbE92ZXJm
bG93ID0gcmVjdC5yaWdodCgpOworICAgIG1fcmlnaHRWaXN1YWxPdmVyZmxvdyA9IHJlY3QubWF4
WCgpOwogfQogCiBpbmxpbmUgdm9pZCBSZW5kZXJPdmVyZmxvdzo6cmVzZXRMYXlvdXRPdmVyZmxv
dyhjb25zdCBJbnRSZWN0JiByZWN0KQogewogICAgIG1fdG9wTGF5b3V0T3ZlcmZsb3cgPSByZWN0
LnkoKTsKLSAgICBtX2JvdHRvbUxheW91dE92ZXJmbG93ID0gcmVjdC5ib3R0b20oKTsKKyAgICBt
X2JvdHRvbUxheW91dE92ZXJmbG93ID0gcmVjdC5tYXhZKCk7CiAgICAgbV9sZWZ0TGF5b3V0T3Zl
cmZsb3cgPSByZWN0LngoKTsKLSAgICBtX3JpZ2h0TGF5b3V0T3ZlcmZsb3cgPSByZWN0LnJpZ2h0
KCk7CisgICAgbV9yaWdodExheW91dE92ZXJmbG93ID0gcmVjdC5tYXhYKCk7CiB9CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJS
ZXBsYWNlZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clJlcGxhY2VkLmNwcAkocmV2aXNpb24gNzcyNzgpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyUmVwbGFjZWQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODIsOSArMTgyLDkgQEAg
Ym9vbCBSZW5kZXJSZXBsYWNlZDo6c2hvdWxkUGFpbnQoUGFpbnRJbgogICAgIH0KICAgICAKICAg
ICBpbnQgb3MgPSAyICogbWF4aW1hbE91dGxpbmVTaXplKHBhaW50SW5mby5waGFzZSk7Ci0gICAg
aWYgKGN1cnJlbnRUWCArIGxlZnRWaXN1YWxPdmVyZmxvdygpID49IHBhaW50SW5mby5yZWN0LnJp
Z2h0KCkgKyBvcyB8fCBjdXJyZW50VFggKyByaWdodFZpc3VhbE92ZXJmbG93KCkgPD0gcGFpbnRJ
bmZvLnJlY3QueCgpIC0gb3MpCisgICAgaWYgKGN1cnJlbnRUWCArIGxlZnRWaXN1YWxPdmVyZmxv
dygpID49IHBhaW50SW5mby5yZWN0Lm1heFgoKSArIG9zIHx8IGN1cnJlbnRUWCArIHJpZ2h0Vmlz
dWFsT3ZlcmZsb3coKSA8PSBwYWludEluZm8ucmVjdC54KCkgLSBvcykKICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIGlmICh0b3AgPj0gcGFpbnRJbmZvLnJlY3QuYm90dG9tKCkgKyBvcyB8fCBi
b3R0b20gPD0gcGFpbnRJbmZvLnJlY3QueSgpIC0gb3MpCisgICAgaWYgKHRvcCA+PSBwYWludElu
Zm8ucmVjdC5tYXhZKCkgKyBvcyB8fCBib3R0b20gPD0gcGFpbnRJbmZvLnJlY3QueSgpIC0gb3Mp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIHJldHVybiB0cnVlOwpJbmRleDogU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNjcm9sbGJhclRoZW1lLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU2Nyb2xsYmFyVGhlbWUuY3BwCShyZXZp
c2lvbiA3NzI3OCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTY3JvbGxiYXJU
aGVtZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk4LDEwICs5OCwxMCBAQCBJbnRSZWN0IFJlbmRl
clNjcm9sbGJhclRoZW1lOjpjb25zdHJhaW5UCiAgICAgSW50UmVjdCByZXN1bHQgPSByZWN0Owog
ICAgIGlmIChzY3JvbGxiYXItPm9yaWVudGF0aW9uKCkgPT0gSG9yaXpvbnRhbFNjcm9sbGJhcikg
ewogICAgICAgICByZXN1bHQuc2V0WChiYWNrUmVjdC54KCkpOwotICAgICAgICByZXN1bHQuc2V0
V2lkdGgoZm9yd2FyZFJlY3QucmlnaHQoKSAtIGJhY2tSZWN0LngoKSk7CisgICAgICAgIHJlc3Vs
dC5zZXRXaWR0aChmb3J3YXJkUmVjdC5tYXhYKCkgLSBiYWNrUmVjdC54KCkpOwogICAgIH0gZWxz
ZSB7CiAgICAgICAgIHJlc3VsdC5zZXRZKGJhY2tSZWN0LnkoKSk7Ci0gICAgICAgIHJlc3VsdC5z
ZXRIZWlnaHQoZm9yd2FyZFJlY3QuYm90dG9tKCkgLSBiYWNrUmVjdC55KCkpOworICAgICAgICBy
ZXN1bHQuc2V0SGVpZ2h0KGZvcndhcmRSZWN0Lm1heFkoKSAtIGJhY2tSZWN0LnkoKSk7CiAgICAg
fQogICAgIHJldHVybiByZXN1bHQ7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVGFibGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUYWJsZS5jcHAJKHJldmlzaW9uIDc3Mjc4KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRhYmxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDU0LDkgKzQ1NCw5IEBAIHZv
aWQgUmVuZGVyVGFibGU6OnBhaW50KFBhaW50SW5mbyYgcGFpbnQKICAgICBQYWludFBoYXNlIHBh
aW50UGhhc2UgPSBwYWludEluZm8ucGhhc2U7CiAKICAgICBpbnQgb3MgPSAyICogbWF4aW1hbE91
dGxpbmVTaXplKHBhaW50UGhhc2UpOwotICAgIGlmICh0eSArIHRvcFZpc3VhbE92ZXJmbG93KCkg
Pj0gcGFpbnRJbmZvLnJlY3QuYm90dG9tKCkgKyBvcyB8fCB0eSArIGJvdHRvbVZpc3VhbE92ZXJm
bG93KCkgPD0gcGFpbnRJbmZvLnJlY3QueSgpIC0gb3MpCisgICAgaWYgKHR5ICsgdG9wVmlzdWFs
T3ZlcmZsb3coKSA+PSBwYWludEluZm8ucmVjdC5tYXhZKCkgKyBvcyB8fCB0eSArIGJvdHRvbVZp
c3VhbE92ZXJmbG93KCkgPD0gcGFpbnRJbmZvLnJlY3QueSgpIC0gb3MpCiAgICAgICAgIHJldHVy
bjsKLSAgICBpZiAodHggKyBsZWZ0VmlzdWFsT3ZlcmZsb3coKSA+PSBwYWludEluZm8ucmVjdC5y
aWdodCgpICsgb3MgfHwgdHggKyByaWdodFZpc3VhbE92ZXJmbG93KCkgPD0gcGFpbnRJbmZvLnJl
Y3QueCgpIC0gb3MpCisgICAgaWYgKHR4ICsgbGVmdFZpc3VhbE92ZXJmbG93KCkgPj0gcGFpbnRJ
bmZvLnJlY3QubWF4WCgpICsgb3MgfHwgdHggKyByaWdodFZpc3VhbE92ZXJmbG93KCkgPD0gcGFp
bnRJbmZvLnJlY3QueCgpIC0gb3MpCiAgICAgICAgIHJldHVybjsKIAogICAgIGJvb2wgcHVzaGVk
Q2xpcCA9IHB1c2hDb250ZW50c0NsaXAocGFpbnRJbmZvLCB0eCwgdHkpOyAgICAKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZUNlbGwuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZUNlbGwuY3BwCShyZXZpc2lvbiA3
NzI3OCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZUNlbGwuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC04MDMsOCArODAzLDggQEAgdm9pZCBSZW5kZXJUYWJsZUNlbGw6OnBh
aW50KFBhaW50SW5mbyYgcAogICAgICAgICB0eCArPSB4KCk7CiAgICAgICAgIHR5ICs9IHkoKTsK
ICAgICAgICAgaW50IG9zID0gMiAqIG1heGltYWxPdXRsaW5lU2l6ZShwYWludEluZm8ucGhhc2Up
OwotICAgICAgICBpZiAodHkgLSB0YWJsZSgpLT5vdXRlckJvcmRlclRvcCgpIDwgcGFpbnRJbmZv
LnJlY3QuYm90dG9tKCkgKyBvcyAmJgotICAgICAgICAgICAgdHkgKyBoZWlnaHQoKSArIHRhYmxl
KCktPm91dGVyQm9yZGVyQm90dG9tKCkgPiBwYWludEluZm8ucmVjdC55KCkgLSBvcykKKyAgICAg
ICAgaWYgKHR5IC0gdGFibGUoKS0+b3V0ZXJCb3JkZXJUb3AoKSA8IHBhaW50SW5mby5yZWN0Lm1h
eFkoKSArIG9zCisgICAgICAgICAgICAmJiB0eSArIGhlaWdodCgpICsgdGFibGUoKS0+b3V0ZXJC
b3JkZXJCb3R0b20oKSA+IHBhaW50SW5mby5yZWN0LnkoKSAtIG9zKQogICAgICAgICAgICAgcGFp
bnRDb2xsYXBzZWRCb3JkZXIocGFpbnRJbmZvLmNvbnRleHQsIHR4LCB0eSwgd2lkdGgoKSwgaGVp
Z2h0KCkpOwogICAgICAgICByZXR1cm47CiAgICAgfSAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uY3BwCShyZXZpc2lvbiA3NzI3OCkKKysr
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC05NjQsOSArOTY0LDkgQEAgdm9pZCBSZW5kZXJUYWJsZVNlY3Rpb246OnBhaW50
T2JqZWN0KFBhaQogICAgIGxvY2FsUmVwYWludFJlY3QubW92ZSgtdHgsIC10eSk7CiAgICAgaWYg
KHN0eWxlKCktPmlzRmxpcHBlZEJsb2Nrc1dyaXRpbmdNb2RlKCkpIHsKICAgICAgICAgaWYgKHN0
eWxlKCktPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpCi0gICAgICAgICAgICBsb2NhbFJlcGFp
bnRSZWN0LnNldFkoaGVpZ2h0KCkgLSBsb2NhbFJlcGFpbnRSZWN0LmJvdHRvbSgpKTsKKyAgICAg
ICAgICAgIGxvY2FsUmVwYWludFJlY3Quc2V0WShoZWlnaHQoKSAtIGxvY2FsUmVwYWludFJlY3Qu
bWF4WSgpKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgbG9jYWxSZXBhaW50UmVjdC5zZXRY
KHdpZHRoKCkgLSBsb2NhbFJlcGFpbnRSZWN0LnJpZ2h0KCkpOworICAgICAgICAgICAgbG9jYWxS
ZXBhaW50UmVjdC5zZXRYKHdpZHRoKCkgLSBsb2NhbFJlcGFpbnRSZWN0Lm1heFgoKSk7CiAgICAg
fQogCiAgICAgLy8gSWYgc29tZSBjZWxsIG92ZXJmbG93cywganVzdCBwYWludCBhbGwgb2YgdGhl
bS4KQEAgLTk4MSw3ICs5ODEsNyBAQCB2b2lkIFJlbmRlclRhYmxlU2VjdGlvbjo6cGFpbnRPYmpl
Y3QoUGFpCiAgICAgICAgIGlmIChzdGFydHJvdyA9PSBtX3Jvd1Bvcy5zaXplKCkgfHwgKHN0YXJ0
cm93ID4gMCAmJiAobV9yb3dQb3Nbc3RhcnRyb3ddID4gIGJlZm9yZSkpKQogICAgICAgICAgIC0t
c3RhcnRyb3c7CiAKLSAgICAgICAgaW50IGFmdGVyID0gKHN0eWxlKCktPmlzSG9yaXpvbnRhbFdy
aXRpbmdNb2RlKCkgPyBsb2NhbFJlcGFpbnRSZWN0LmJvdHRvbSgpIDogbG9jYWxSZXBhaW50UmVj
dC5yaWdodCgpKSArIG9zOworICAgICAgICBpbnQgYWZ0ZXIgPSAoc3R5bGUoKS0+aXNIb3Jpem9u
dGFsV3JpdGluZ01vZGUoKSA/IGxvY2FsUmVwYWludFJlY3QubWF4WSgpIDogbG9jYWxSZXBhaW50
UmVjdC5tYXhYKCkpICsgb3M7CiAgICAgICAgIGVuZHJvdyA9IHN0ZDo6bG93ZXJfYm91bmQobV9y
b3dQb3MuYmVnaW4oKSwgbV9yb3dQb3MuZW5kKCksIGFmdGVyKSAtIG1fcm93UG9zLmJlZ2luKCk7
CiAgICAgICAgIGlmIChlbmRyb3cgPT0gbV9yb3dQb3Muc2l6ZSgpKQogICAgICAgICAgIC0tZW5k
cm93OwpAQCAtMTAwMCw3ICsxMDAwLDcgQEAgdm9pZCBSZW5kZXJUYWJsZVNlY3Rpb246OnBhaW50
T2JqZWN0KFBhaQogICAgICAgICBpZiAoKHN0YXJ0Y29sID09IGNvbHVtblBvcy5zaXplKCkpIHx8
IChzdGFydGNvbCA+IDAgJiYgKGNvbHVtblBvc1tzdGFydGNvbF0gPiBzdGFydCkpKQogICAgICAg
ICAgICAgLS1zdGFydGNvbDsKIAotICAgICAgICBpbnQgZW5kID0gKHN0eWxlKCktPmlzSG9yaXpv
bnRhbFdyaXRpbmdNb2RlKCkgPyBsb2NhbFJlcGFpbnRSZWN0LnJpZ2h0KCkgOiBsb2NhbFJlcGFp
bnRSZWN0LmJvdHRvbSgpKSArIG9zOworICAgICAgICBpbnQgZW5kID0gKHN0eWxlKCktPmlzSG9y
aXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBsb2NhbFJlcGFpbnRSZWN0Lm1heFgoKSA6IGxvY2FsUmVw
YWludFJlY3QubWF4WSgpKSArIG9zOwogICAgICAgICBlbmRjb2wgPSBzdGQ6Omxvd2VyX2JvdW5k
KGNvbHVtblBvcy5iZWdpbigpLCBjb2x1bW5Qb3MuZW5kKCksIGVuZCkgLSBjb2x1bW5Qb3MuYmVn
aW4oKTsKICAgICAgICAgaWYgKGVuZGNvbCA9PSBjb2x1bW5Qb3Muc2l6ZSgpKQogICAgICAgICAg
ICAgLS1lbmRjb2w7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuY3Bw
CShyZXZpc2lvbiA3NzI3OCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQ4LDkgKzM0OCw5IEBAIHZvaWQgUmVuZGVyVGV4dDo6
YWJzb2x1dGVRdWFkcyhWZWN0b3I8RmwKICAgICAgICAgSW50UmVjdCBlbGxpcHNpc1JlY3QgPSAo
b3B0aW9uID09IENsaXBUb0VsbGlwc2lzKSA/IGVsbGlwc2lzUmVjdEZvckJveChib3gsIDAsIHRl
eHRMZW5ndGgoKSkgOiBJbnRSZWN0KCk7CiAgICAgICAgIGlmICghZWxsaXBzaXNSZWN0LmlzRW1w
dHkoKSkgewogICAgICAgICAgICAgaWYgKHN0eWxlKCktPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2Rl
KCkpCi0gICAgICAgICAgICAgICAgYm91bmRhcmllcy5zZXRXaWR0aChlbGxpcHNpc1JlY3Qucmln
aHQoKSAtIGJvdW5kYXJpZXMueCgpKTsKKyAgICAgICAgICAgICAgICBib3VuZGFyaWVzLnNldFdp
ZHRoKGVsbGlwc2lzUmVjdC5tYXhYKCkgLSBib3VuZGFyaWVzLngoKSk7CiAgICAgICAgICAgICBl
bHNlCi0gICAgICAgICAgICAgICAgYm91bmRhcmllcy5zZXRIZWlnaHQoZWxsaXBzaXNSZWN0LmJv
dHRvbSgpIC0gYm91bmRhcmllcy55KCkpOworICAgICAgICAgICAgICAgIGJvdW5kYXJpZXMuc2V0
SGVpZ2h0KGVsbGlwc2lzUmVjdC5tYXhZKCkgLSBib3VuZGFyaWVzLnkoKSk7CiAgICAgICAgIH0K
ICAgICAgICAgcXVhZHMuYXBwZW5kKGxvY2FsVG9BYnNvbHV0ZVF1YWQoRmxvYXRSZWN0KGJvdW5k
YXJpZXMpKSk7CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRl
eHRDb250cm9sU2luZ2xlTGluZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5jcHAJKHJldmlzaW9uIDc3Mjc4KQor
KysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTM5Myw3ICszOTMsNyBAQCB2b2lkIFJlbmRlclRleHRDb250
cm9sU2luZ2xlTGluZTo6Zm9yd2FyCiAjZW5kaWYKIAogICAgIEZsb2F0UG9pbnQgbG9jYWxQb2lu
dCA9IGlubmVyVGV4dFJlbmRlcmVyLT5hYnNvbHV0ZVRvTG9jYWwoc3RhdGljX2Nhc3Q8TW91c2VF
dmVudCo+KGV2ZW50KS0+YWJzb2x1dGVMb2NhdGlvbigpLCBmYWxzZSwgdHJ1ZSk7Ci0gICAgaW50
IHRleHRSaWdodCA9IGlubmVyVGV4dFJlbmRlcmVyLT5ib3JkZXJCb3hSZWN0KCkucmlnaHQoKTsK
KyAgICBpbnQgdGV4dFJpZ2h0ID0gaW5uZXJUZXh0UmVuZGVyZXItPmJvcmRlckJveFJlY3QoKS5t
YXhYKCk7CiAKICAgICBpZiAobV9yZXN1bHRzQnV0dG9uICYmIGxvY2FsUG9pbnQueCgpIDwgaW5u
ZXJUZXh0UmVuZGVyZXItPmJvcmRlckJveFJlY3QoKS54KCkpCiAgICAgICAgIG1fcmVzdWx0c0J1
dHRvbi0+ZGVmYXVsdEV2ZW50SGFuZGxlcihldmVudCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tCShyZXZpc2lvbiA3NzI3OCkKKysrIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMTA0
MSwyMCArMTA0MSwyMCBAQCB2b2lkIFJlbmRlclRoZW1lTWFjOjpwYWludE1lbnVMaXN0QnV0dG9u
CiAgICAgRmxvYXRSZWN0IHRvcEdyYWRpZW50KHIueCgpLCByLnkoKSwgci53aWR0aCgpLCByLmhl
aWdodCgpIC8gMi4wZik7CiAgICAgc3RydWN0IENHRnVuY3Rpb25DYWxsYmFja3MgdG9wQ2FsbGJh
Y2tzID0geyAwLCBUb3BHcmFkaWVudEludGVycG9sYXRlLCBOVUxMIH07CiAgICAgUmV0YWluUHRy
PENHRnVuY3Rpb25SZWY+IHRvcEZ1bmN0aW9uKEFkb3B0Q0YsIENHRnVuY3Rpb25DcmVhdGUoTlVM
TCwgMSwgTlVMTCwgNCwgTlVMTCwgJnRvcENhbGxiYWNrcykpOwotICAgIFJldGFpblB0cjxDR1No
YWRpbmdSZWY+IHRvcFNoYWRpbmcoQWRvcHRDRiwgQ0dTaGFkaW5nQ3JlYXRlQXhpYWwoY3NwYWNl
LCBDR1BvaW50TWFrZSh0b3BHcmFkaWVudC54KCksIHRvcEdyYWRpZW50LnkoKSksIENHUG9pbnRN
YWtlKHRvcEdyYWRpZW50LngoKSwgdG9wR3JhZGllbnQuYm90dG9tKCkpLCB0b3BGdW5jdGlvbi5n
ZXQoKSwgZmFsc2UsIGZhbHNlKSk7CisgICAgUmV0YWluUHRyPENHU2hhZGluZ1JlZj4gdG9wU2hh
ZGluZyhBZG9wdENGLCBDR1NoYWRpbmdDcmVhdGVBeGlhbChjc3BhY2UsIENHUG9pbnRNYWtlKHRv
cEdyYWRpZW50LngoKSwgdG9wR3JhZGllbnQueSgpKSwgQ0dQb2ludE1ha2UodG9wR3JhZGllbnQu
eCgpLCB0b3BHcmFkaWVudC5tYXhZKCkpLCB0b3BGdW5jdGlvbi5nZXQoKSwgZmFsc2UsIGZhbHNl
KSk7CiAKICAgICBGbG9hdFJlY3QgYm90dG9tR3JhZGllbnQoci54KCkgKyByYWRpdXMsIHIueSgp
ICsgci5oZWlnaHQoKSAvIDIuMGYsIHIud2lkdGgoKSAtIDIuMGYgKiByYWRpdXMsIHIuaGVpZ2h0
KCkgLyAyLjBmKTsKICAgICBzdHJ1Y3QgQ0dGdW5jdGlvbkNhbGxiYWNrcyBib3R0b21DYWxsYmFj
a3MgPSB7IDAsIEJvdHRvbUdyYWRpZW50SW50ZXJwb2xhdGUsIE5VTEwgfTsKICAgICBSZXRhaW5Q
dHI8Q0dGdW5jdGlvblJlZj4gYm90dG9tRnVuY3Rpb24oQWRvcHRDRiwgQ0dGdW5jdGlvbkNyZWF0
ZShOVUxMLCAxLCBOVUxMLCA0LCBOVUxMLCAmYm90dG9tQ2FsbGJhY2tzKSk7Ci0gICAgUmV0YWlu
UHRyPENHU2hhZGluZ1JlZj4gYm90dG9tU2hhZGluZyhBZG9wdENGLCBDR1NoYWRpbmdDcmVhdGVB
eGlhbChjc3BhY2UsIENHUG9pbnRNYWtlKGJvdHRvbUdyYWRpZW50LngoKSwgIGJvdHRvbUdyYWRp
ZW50LnkoKSksIENHUG9pbnRNYWtlKGJvdHRvbUdyYWRpZW50LngoKSwgYm90dG9tR3JhZGllbnQu
Ym90dG9tKCkpLCBib3R0b21GdW5jdGlvbi5nZXQoKSwgZmFsc2UsIGZhbHNlKSk7CisgICAgUmV0
YWluUHRyPENHU2hhZGluZ1JlZj4gYm90dG9tU2hhZGluZyhBZG9wdENGLCBDR1NoYWRpbmdDcmVh
dGVBeGlhbChjc3BhY2UsIENHUG9pbnRNYWtlKGJvdHRvbUdyYWRpZW50LngoKSwgIGJvdHRvbUdy
YWRpZW50LnkoKSksIENHUG9pbnRNYWtlKGJvdHRvbUdyYWRpZW50LngoKSwgYm90dG9tR3JhZGll
bnQubWF4WSgpKSwgYm90dG9tRnVuY3Rpb24uZ2V0KCksIGZhbHNlLCBmYWxzZSkpOwogCiAgICAg
c3RydWN0IENHRnVuY3Rpb25DYWxsYmFja3MgbWFpbkNhbGxiYWNrcyA9IHsgMCwgTWFpbkdyYWRp
ZW50SW50ZXJwb2xhdGUsIE5VTEwgfTsKICAgICBSZXRhaW5QdHI8Q0dGdW5jdGlvblJlZj4gbWFp
bkZ1bmN0aW9uKEFkb3B0Q0YsIENHRnVuY3Rpb25DcmVhdGUoTlVMTCwgMSwgTlVMTCwgNCwgTlVM
TCwgJm1haW5DYWxsYmFja3MpKTsKLSAgICBSZXRhaW5QdHI8Q0dTaGFkaW5nUmVmPiBtYWluU2hh
ZGluZyhBZG9wdENGLCBDR1NoYWRpbmdDcmVhdGVBeGlhbChjc3BhY2UsIENHUG9pbnRNYWtlKHIu
eCgpLCAgci55KCkpLCBDR1BvaW50TWFrZShyLngoKSwgci5ib3R0b20oKSksIG1haW5GdW5jdGlv
bi5nZXQoKSwgZmFsc2UsIGZhbHNlKSk7CisgICAgUmV0YWluUHRyPENHU2hhZGluZ1JlZj4gbWFp
blNoYWRpbmcoQWRvcHRDRiwgQ0dTaGFkaW5nQ3JlYXRlQXhpYWwoY3NwYWNlLCBDR1BvaW50TWFr
ZShyLngoKSwgIHIueSgpKSwgQ0dQb2ludE1ha2Uoci54KCksIHIubWF4WSgpKSwgbWFpbkZ1bmN0
aW9uLmdldCgpLCBmYWxzZSwgZmFsc2UpKTsKIAogICAgIFJldGFpblB0cjxDR1NoYWRpbmdSZWY+
IGxlZnRTaGFkaW5nKEFkb3B0Q0YsIENHU2hhZGluZ0NyZWF0ZUF4aWFsKGNzcGFjZSwgQ0dQb2lu
dE1ha2Uoci54KCksICByLnkoKSksIENHUG9pbnRNYWtlKHIueCgpICsgcmFkaXVzLCByLnkoKSks
IG1haW5GdW5jdGlvbi5nZXQoKSwgZmFsc2UsIGZhbHNlKSk7CiAKLSAgICBSZXRhaW5QdHI8Q0dT
aGFkaW5nUmVmPiByaWdodFNoYWRpbmcoQWRvcHRDRiwgQ0dTaGFkaW5nQ3JlYXRlQXhpYWwoY3Nw
YWNlLCBDR1BvaW50TWFrZShyLnJpZ2h0KCksICByLnkoKSksIENHUG9pbnRNYWtlKHIucmlnaHQo
KSAtIHJhZGl1cywgci55KCkpLCBtYWluRnVuY3Rpb24uZ2V0KCksIGZhbHNlLCBmYWxzZSkpOwor
ICAgIFJldGFpblB0cjxDR1NoYWRpbmdSZWY+IHJpZ2h0U2hhZGluZyhBZG9wdENGLCBDR1NoYWRp
bmdDcmVhdGVBeGlhbChjc3BhY2UsIENHUG9pbnRNYWtlKHIubWF4WCgpLCAgci55KCkpLCBDR1Bv
aW50TWFrZShyLm1heFgoKSAtIHJhZGl1cywgci55KCkpLCBtYWluRnVuY3Rpb24uZ2V0KCksIGZh
bHNlLCBmYWxzZSkpOwogICAgIHBhaW50SW5mby5jb250ZXh0LT5zYXZlKCk7CiAgICAgQ0dDb250
ZXh0Q2xpcFRvUmVjdChjb250ZXh0LCByKTsKICAgICBwYWludEluZm8uY29udGV4dC0+YWRkUm91
bmRlZFJlY3RDbGlwKGJvcmRlcik7CkBAIC0xMDk5LDcgKzEwOTksNyBAQCBib29sIFJlbmRlclRo
ZW1lTWFjOjpwYWludE1lbnVMaXN0QnV0dG9uCiAgICAgZmxvYXQgY2VudGVyWSA9IGJvdW5kcy55
KCkgKyBib3VuZHMuaGVpZ2h0KCkgLyAyLjBmOwogICAgIGZsb2F0IGFycm93SGVpZ2h0ID0gYmFz
ZUFycm93SGVpZ2h0ICogZm9udFNjYWxlOwogICAgIGZsb2F0IGFycm93V2lkdGggPSBiYXNlQXJy
b3dXaWR0aCAqIGZvbnRTY2FsZTsKLSAgICBmbG9hdCBsZWZ0RWRnZSA9IGJvdW5kcy5yaWdodCgp
IC0gYXJyb3dQYWRkaW5nUmlnaHQgKiBvLT5zdHlsZSgpLT5lZmZlY3RpdmVab29tKCkgLSBhcnJv
d1dpZHRoOworICAgIGZsb2F0IGxlZnRFZGdlID0gYm91bmRzLm1heFgoKSAtIGFycm93UGFkZGlu
Z1JpZ2h0ICogby0+c3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgpIC0gYXJyb3dXaWR0aDsKICAgICBm
bG9hdCBzcGFjZUJldHdlZW5BcnJvd3MgPSBiYXNlU3BhY2VCZXR3ZWVuQXJyb3dzICogZm9udFNj
YWxlOwogCiAgICAgaWYgKGJvdW5kcy53aWR0aCgpIDwgYXJyb3dXaWR0aCArIGFycm93UGFkZGlu
Z0xlZnQgKiBvLT5zdHlsZSgpLT5lZmZlY3RpdmVab29tKCkpCkBAIC0xMTM4LDExICsxMTM4LDEx
IEBAIGJvb2wgUmVuZGVyVGhlbWVNYWM6OnBhaW50TWVudUxpc3RCdXR0b24KICAgICBwYWludElu
Zm8uY29udGV4dC0+c2V0U3Ryb2tlU3R5bGUoU29saWRTdHJva2UpOwogICAgIHBhaW50SW5mby5j
b250ZXh0LT5zZXRTdHJva2VDb2xvcihsZWZ0U2VwYXJhdG9yQ29sb3IsIENvbG9yU3BhY2VEZXZp
Y2VSR0IpOwogICAgIHBhaW50SW5mby5jb250ZXh0LT5kcmF3TGluZShJbnRQb2ludChsZWZ0RWRn
ZU9mU2VwYXJhdG9yLCBib3VuZHMueSgpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgSW50UG9pbnQobGVmdEVkZ2VPZlNlcGFyYXRvciwgYm91bmRzLmJvdHRvbSgpKSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEludFBvaW50KGxlZnRFZGdlT2ZTZXBhcmF0b3Is
IGJvdW5kcy5tYXhZKCkpKTsKIAogICAgIHBhaW50SW5mby5jb250ZXh0LT5zZXRTdHJva2VDb2xv
cihyaWdodFNlcGFyYXRvckNvbG9yLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKICAgICBwYWludElu
Zm8uY29udGV4dC0+ZHJhd0xpbmUoSW50UG9pbnQobGVmdEVkZ2VPZlNlcGFyYXRvciArIHNlcGFy
YXRvclNwYWNlLCBib3VuZHMueSgpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
SW50UG9pbnQobGVmdEVkZ2VPZlNlcGFyYXRvciArIHNlcGFyYXRvclNwYWNlLCBib3VuZHMuYm90
dG9tKCkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW50UG9pbnQobGVmdEVk
Z2VPZlNlcGFyYXRvciArIHNlcGFyYXRvclNwYWNlLCBib3VuZHMubWF4WSgpKSk7CiAKICAgICBw
YWludEluZm8uY29udGV4dC0+cmVzdG9yZSgpOwogICAgIHJldHVybiBmYWxzZTsKQEAgLTEyOTMs
OSArMTI5Myw5IEBAIGJvb2wgUmVuZGVyVGhlbWVNYWM6OnBhaW50U2xpZGVyVHJhY2soUmUKICAg
ICBSZXRhaW5QdHI8Q0dGdW5jdGlvblJlZj4gbWFpbkZ1bmN0aW9uKEFkb3B0Q0YsIENHRnVuY3Rp
b25DcmVhdGUoTlVMTCwgMSwgTlVMTCwgNCwgTlVMTCwgJm1haW5DYWxsYmFja3MpKTsKICAgICBS
ZXRhaW5QdHI8Q0dTaGFkaW5nUmVmPiBtYWluU2hhZGluZzsKICAgICBpZiAoby0+c3R5bGUoKS0+
YXBwZWFyYW5jZSgpID09IFNsaWRlclZlcnRpY2FsUGFydCkKLSAgICAgICAgbWFpblNoYWRpbmcu
YWRvcHRDRihDR1NoYWRpbmdDcmVhdGVBeGlhbChjc3BhY2UsIENHUG9pbnRNYWtlKGJvdW5kcy54
KCksICBib3VuZHMuYm90dG9tKCkpLCBDR1BvaW50TWFrZShib3VuZHMucmlnaHQoKSwgYm91bmRz
LmJvdHRvbSgpKSwgbWFpbkZ1bmN0aW9uLmdldCgpLCBmYWxzZSwgZmFsc2UpKTsKKyAgICAgICAg
bWFpblNoYWRpbmcuYWRvcHRDRihDR1NoYWRpbmdDcmVhdGVBeGlhbChjc3BhY2UsIENHUG9pbnRN
YWtlKGJvdW5kcy54KCksICBib3VuZHMubWF4WSgpKSwgQ0dQb2ludE1ha2UoYm91bmRzLm1heFgo
KSwgYm91bmRzLm1heFkoKSksIG1haW5GdW5jdGlvbi5nZXQoKSwgZmFsc2UsIGZhbHNlKSk7CiAg
ICAgZWxzZQotICAgICAgICBtYWluU2hhZGluZy5hZG9wdENGKENHU2hhZGluZ0NyZWF0ZUF4aWFs
KGNzcGFjZSwgQ0dQb2ludE1ha2UoYm91bmRzLngoKSwgIGJvdW5kcy55KCkpLCBDR1BvaW50TWFr
ZShib3VuZHMueCgpLCBib3VuZHMuYm90dG9tKCkpLCBtYWluRnVuY3Rpb24uZ2V0KCksIGZhbHNl
LCBmYWxzZSkpOworICAgICAgICBtYWluU2hhZGluZy5hZG9wdENGKENHU2hhZGluZ0NyZWF0ZUF4
aWFsKGNzcGFjZSwgQ0dQb2ludE1ha2UoYm91bmRzLngoKSwgIGJvdW5kcy55KCkpLCBDR1BvaW50
TWFrZShib3VuZHMueCgpLCBib3VuZHMubWF4WSgpKSwgbWFpbkZ1bmN0aW9uLmdldCgpLCBmYWxz
ZSwgZmFsc2UpKTsKIAogICAgIEludFNpemUgcmFkaXVzKHRyYWNrUmFkaXVzLCB0cmFja1JhZGl1
cyk7CiAgICAgcGFpbnRJbmZvLmNvbnRleHQtPmFkZFJvdW5kZWRSZWN0Q2xpcChSb3VuZGVkSW50
UmVjdChib3VuZHMsIHJhZGl1cywgcmFkaXVzLCByYWRpdXMsIHJhZGl1cykpOwpJbmRleDogU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZXcuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3LmNwcAkocmV2aXNpb24gNzcyNzgpCisrKyBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTMwNCw5ICszMDQsOSBAQCB2b2lkIFJlbmRlclZpZXc6OmNvbXB1dGVSZWN0Rm9yUmVwYWludChS
CiAgICAgICAgIC8vIFdlIGhhdmUgdG8gZmxpcCBieSBoYW5kIHNpbmNlIHRoZSB2aWV3J3MgbG9n
aWNhbCBoZWlnaHQgaGFzIG5vdCBiZWVuIGRldGVybWluZWQuICBXZQogICAgICAgICAvLyBjYW4g
dXNlIHRoZSB2aWV3cG9ydCB3aWR0aCBhbmQgaGVpZ2h0LgogICAgICAgICBpZiAoc3R5bGUoKS0+
aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkKLSAgICAgICAgICAgIHJlY3Quc2V0WSh2aWV3SGVp
Z2h0KCkgLSByZWN0LmJvdHRvbSgpKTsKKyAgICAgICAgICAgIHJlY3Quc2V0WSh2aWV3SGVpZ2h0
KCkgLSByZWN0Lm1heFkoKSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHJlY3Quc2V0WCh2
aWV3V2lkdGgoKSAtIHJlY3QucmlnaHQoKSk7CisgICAgICAgICAgICByZWN0LnNldFgodmlld1dp
ZHRoKCkgLSByZWN0Lm1heFgoKSk7CiAgICAgfQogCiAgICAgaWYgKGZpeGVkICYmIG1fZnJhbWVW
aWV3KQpAQCAtNjY0LDcgKzY2NCw3IEBAIGludCBSZW5kZXJWaWV3Ojpkb2NCb3R0b20oKSBjb25z
dAogICAgIGZsaXBGb3JXcml0aW5nTW9kZShvdmVyZmxvd1JlY3QpOwogICAgIGlmIChoYXNUcmFu
c2Zvcm0oKSkKICAgICAgICAgb3ZlcmZsb3dSZWN0ID0gbGF5ZXIoKS0+Y3VycmVudFRyYW5zZm9y
bSgpLm1hcFJlY3Qob3ZlcmZsb3dSZWN0KTsKLSAgICByZXR1cm4gb3ZlcmZsb3dSZWN0LmJvdHRv
bSgpOworICAgIHJldHVybiBvdmVyZmxvd1JlY3QubWF4WSgpOwogfQogCiBpbnQgUmVuZGVyVmll
dzo6ZG9jTGVmdCgpIGNvbnN0CkBAIC02ODIsNyArNjgyLDcgQEAgaW50IFJlbmRlclZpZXc6OmRv
Y1JpZ2h0KCkgY29uc3QKICAgICBmbGlwRm9yV3JpdGluZ01vZGUob3ZlcmZsb3dSZWN0KTsKICAg
ICBpZiAoaGFzVHJhbnNmb3JtKCkpCiAgICAgICAgIG92ZXJmbG93UmVjdCA9IGxheWVyKCktPmN1
cnJlbnRUcmFuc2Zvcm0oKS5tYXBSZWN0KG92ZXJmbG93UmVjdCk7Ci0gICAgcmV0dXJuIG92ZXJm
bG93UmVjdC5yaWdodCgpOworICAgIHJldHVybiBvdmVyZmxvd1JlY3QubWF4WCgpOwogfQogCiBp
bnQgUmVuZGVyVmlldzo6dmlld0hlaWdodCgpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUm9vdElubGluZUJveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1Jvb3RJbmxpbmVCb3guY3BwCShyZXZpc2lvbiA3NzI3OCkKKysrIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9Sb290SW5saW5lQm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTQ0
LDE0ICs1NDQsMTQgQEAgSW50UmVjdCBSb290SW5saW5lQm94OjpwYWRkZWRMYXlvdXRPdmVyZgog
ICAgIAogICAgIGlmIChpc0hvcml6b250YWwoKSkgewogICAgICAgICBpZiAoaXNMZWZ0VG9SaWdo
dERpcmVjdGlvbigpKQotICAgICAgICAgICAgbGluZUxheW91dE92ZXJmbG93LnNoaWZ0UmlnaHRF
ZGdlVG8obWF4KGxpbmVMYXlvdXRPdmVyZmxvdy5yaWdodCgpLCBsb2dpY2FsUmlnaHQoKSArIGVu
ZFBhZGRpbmcpKTsKKyAgICAgICAgICAgIGxpbmVMYXlvdXRPdmVyZmxvdy5zaGlmdE1heFhFZGdl
VG8obWF4KGxpbmVMYXlvdXRPdmVyZmxvdy5tYXhYKCksIGxvZ2ljYWxSaWdodCgpICsgZW5kUGFk
ZGluZykpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBsaW5lTGF5b3V0T3ZlcmZsb3cuc2hp
ZnRMZWZ0RWRnZVRvKG1pbihsaW5lTGF5b3V0T3ZlcmZsb3cueCgpLCBsb2dpY2FsTGVmdCgpIC0g
ZW5kUGFkZGluZykpOworICAgICAgICAgICAgbGluZUxheW91dE92ZXJmbG93LnNoaWZ0WEVkZ2VU
byhtaW4obGluZUxheW91dE92ZXJmbG93LngoKSwgbG9naWNhbExlZnQoKSAtIGVuZFBhZGRpbmcp
KTsKICAgICB9IGVsc2UgewogICAgICAgICBpZiAoaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpKQot
ICAgICAgICAgICAgbGluZUxheW91dE92ZXJmbG93LnNoaWZ0Qm90dG9tRWRnZVRvKG1heChsaW5l
TGF5b3V0T3ZlcmZsb3cuYm90dG9tKCksIGxvZ2ljYWxSaWdodCgpICsgZW5kUGFkZGluZykpOwor
ICAgICAgICAgICAgbGluZUxheW91dE92ZXJmbG93LnNoaWZ0TWF4WUVkZ2VUbyhtYXgobGluZUxh
eW91dE92ZXJmbG93Lm1heFkoKSwgbG9naWNhbFJpZ2h0KCkgKyBlbmRQYWRkaW5nKSk7CiAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgIGxpbmVMYXlvdXRPdmVyZmxvdy5zaGlmdFRvcEVkZ2VUbyht
aW4obGluZUxheW91dE92ZXJmbG93LnkoKSwgbG9naWNhbFJpZ2h0KCkgLSBlbmRQYWRkaW5nKSk7
CisgICAgICAgICAgICBsaW5lTGF5b3V0T3ZlcmZsb3cuc2hpZnRZRWRnZVRvKG1pbihsaW5lTGF5
b3V0T3ZlcmZsb3cueSgpLCBsb2dpY2FsUmlnaHQoKSAtIGVuZFBhZGRpbmcpKTsKICAgICB9CiAg
ICAgCiAgICAgcmV0dXJuIGxpbmVMYXlvdXRPdmVyZmxvdzsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHSW5saW5lVGV4dC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdJbmxpbmVUZXh0LmNwcAkocmV2aXNp
b24gNzcyNzgpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0lubGlu
ZVRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDMsMTIgKzEwMywxMiBAQCBJbnRSZWN0IFJl
bmRlclNWR0lubGluZVRleHQ6OmxvY2FsQ2FyZXRSCiAgICAgLy8gVXNlIHRoZSBlZGdlIG9mIHRo
ZSBzZWxlY3Rpb24gcmVjdCB0byBkZXRlcm1pbmUgdGhlIGNhcmV0IHJlY3QuCiAgICAgaWYgKHN0
YXRpY19jYXN0PHVuc2lnbmVkPihjYXJldE9mZnNldCkgPCB0ZXh0Qm94LT5zdGFydCgpICsgdGV4
dEJveC0+bGVuKCkpIHsKICAgICAgICAgSW50UmVjdCByZWN0ID0gdGV4dEJveC0+c2VsZWN0aW9u
UmVjdCgwLCAwLCBjYXJldE9mZnNldCwgY2FyZXRPZmZzZXQgKyAxKTsKLSAgICAgICAgaW50IHgg
PSBib3gtPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/IHJlY3QueCgpIDogcmVjdC5yaWdodCgp
OworICAgICAgICBpbnQgeCA9IGJveC0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpID8gcmVjdC54
KCkgOiByZWN0Lm1heFgoKTsKICAgICAgICAgcmV0dXJuIEludFJlY3QoeCwgcmVjdC55KCksIGNh
cmV0V2lkdGgsIHJlY3QuaGVpZ2h0KCkpOwogICAgIH0KIAogICAgIEludFJlY3QgcmVjdCA9IHRl
eHRCb3gtPnNlbGVjdGlvblJlY3QoMCwgMCwgY2FyZXRPZmZzZXQgLSAxLCBjYXJldE9mZnNldCk7
Ci0gICAgaW50IHggPSBib3gtPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/IHJlY3QucmlnaHQo
KSA6IHJlY3QueCgpOworICAgIGludCB4ID0gYm94LT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkg
PyByZWN0Lm1heFgoKSA6IHJlY3QueCgpOwogICAgIHJldHVybiBJbnRSZWN0KHgsIHJlY3QueSgp
LCBjYXJldFdpZHRoLCByZWN0LmhlaWdodCgpKTsKIH0KIApJbmRleDogU291cmNlL1dlYktpdDIv
UGxhdGZvcm0vUmVnaW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9y
bS9SZWdpb24uY3BwCShyZXZpc2lvbiA3NzI3OCkKKysrIFNvdXJjZS9XZWJLaXQyL1BsYXRmb3Jt
L1JlZ2lvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTczLDggKzczLDggQEAgUmVnaW9uOjpTaGFw
ZTo6U2hhcGUoY29uc3QgSW50UmVjdCYgcmVjdAogewogICAgIGFwcGVuZFNwYW4ocmVjdC55KCkp
OwogICAgIGFwcGVuZFNlZ21lbnQocmVjdC54KCkpOwotICAgIGFwcGVuZFNlZ21lbnQocmVjdC5y
aWdodCgpKTsKLSAgICBhcHBlbmRTcGFuKHJlY3QuYm90dG9tKCkpOworICAgIGFwcGVuZFNlZ21l
bnQocmVjdC5tYXhYKCkpOworICAgIGFwcGVuZFNwYW4ocmVjdC5tYXhZKCkpOwogfQogCiB2b2lk
IFJlZ2lvbjo6U2hhcGU6OmFwcGVuZFNwYW4oaW50IHkpCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvRmluZEluZGljYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0ZpbmRJbmRpY2F0b3IuY3BwCShyZXZpc2lvbiA3NzI3OCkKKysrIFNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9GaW5kSW5kaWNhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU3
LDcgKzE1Nyw3IEBAIHZvaWQgRmluZEluZGljYXRvcjo6ZHJhdyhHcmFwaGljc0NvbnRleHQKICAg
ICAgICAgZ3JhcGhpY3NDb250ZXh0LnNhdmUoKTsKICAgICAgICAgRmxvYXRSZWN0IGlubmVyUGF0
aFJlY3QgPSBpbmZsYXRlUmVjdCh0ZXh0UmVjdCwgaG9yaXpvbnRhbFBhZGRpbmdJbnNpZGVMaWdo
dEJvcmRlciwgdmVydGljYWxQYWRkaW5nSW5zaWRlTGlnaHRCb3JkZXIpOwogICAgICAgICBncmFw
aGljc0NvbnRleHQuY2xpcChwYXRoV2l0aFJvdW5kZWRSZWN0KGlubmVyUGF0aFJlY3QsIGNvcm5l
clJhZGl1cykpOwotICAgICAgICBSZWZQdHI8R3JhZGllbnQ+IGdyYWRpZW50ID0gR3JhZGllbnQ6
OmNyZWF0ZShGbG9hdFBvaW50KGlubmVyUGF0aFJlY3QueCgpLCBpbm5lclBhdGhSZWN0LnkoKSks
IEZsb2F0UG9pbnQoaW5uZXJQYXRoUmVjdC54KCksIGlubmVyUGF0aFJlY3QuYm90dG9tKCkpKTsK
KyAgICAgICAgUmVmUHRyPEdyYWRpZW50PiBncmFkaWVudCA9IEdyYWRpZW50OjpjcmVhdGUoRmxv
YXRQb2ludChpbm5lclBhdGhSZWN0LngoKSwgaW5uZXJQYXRoUmVjdC55KCkpLCBGbG9hdFBvaW50
KGlubmVyUGF0aFJlY3QueCgpLCBpbm5lclBhdGhSZWN0Lm1heFkoKSkpOwogICAgICAgICBncmFk
aWVudC0+YWRkQ29sb3JTdG9wKDAsIGdyYWRpZW50TGlnaHRDb2xvcigpKTsKICAgICAgICAgZ3Jh
ZGllbnQtPmFkZENvbG9yU3RvcCgxLCBncmFkaWVudERhcmtDb2xvcigpKTsKICAgICAgICAgZ3Jh
cGhpY3NDb250ZXh0LnNldEZpbGxHcmFkaWVudChncmFkaWVudCk7CkluZGV4OiBTb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvVGlsZWREcmF3aW5nQXJlYVByb3h5LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvVGlsZWREcmF3aW5nQXJlYVByb3h5LmNwcAkocmV2aXNp
b24gNzcyNzgpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvVGlsZWREcmF3aW5nQXJlYVBy
b3h5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQwLDE1ICsyNDAsMTUgQEAgdm9pZCBUaWxlZERy
YXdpbmdBcmVhUHJveHk6OmludmFsaWRhdGUoYwogewogICAgIEludFJlY3QgZGlydHlSZWN0KG1h
cEZyb21Db250ZW50cyhjb250ZW50c0RpcnR5UmVjdCkpOwogCi0gICAgVGlsZWREcmF3aW5nQXJl
YVRpbGU6OkNvb3JkaW5hdGUgdG9wTGVmdCA9IHRpbGVDb29yZGluYXRlRm9yUG9pbnQoZGlydHlS
ZWN0LnRvcExlZnQoKSk7Ci0gICAgVGlsZWREcmF3aW5nQXJlYVRpbGU6OkNvb3JkaW5hdGUgYm90
dG9tUmlnaHQgPSB0aWxlQ29vcmRpbmF0ZUZvclBvaW50KGRpcnR5UmVjdC5ib3R0b21SaWdodCgp
KTsKKyAgICBUaWxlZERyYXdpbmdBcmVhVGlsZTo6Q29vcmRpbmF0ZSB0b3BMZWZ0ID0gdGlsZUNv
b3JkaW5hdGVGb3JQb2ludChkaXJ0eVJlY3QubG9jYXRpb24oKSk7CisgICAgVGlsZWREcmF3aW5n
QXJlYVRpbGU6OkNvb3JkaW5hdGUgYm90dG9tUmlnaHQgPSB0aWxlQ29vcmRpbmF0ZUZvclBvaW50
KEludFBvaW50KGRpcnR5UmVjdC5tYXhYKCksIGRpcnR5UmVjdC5tYXhZKCkpKTsKIAogICAgIElu
dFJlY3QgY292ZXJSZWN0ID0gY2FsY3VsYXRlQ292ZXJSZWN0KG1fcHJldmlvdXNWaXNpYmxlUmVj
dCk7CiAKICAgICBWZWN0b3I8VGlsZWREcmF3aW5nQXJlYVRpbGU6OkNvb3JkaW5hdGU+IHRpbGVz
VG9SZW1vdmU7CiAKLSAgICBmb3IgKHVuc2lnbmVkIHlDb29yZGluYXRlID0gdG9wTGVmdC55KCk7
IHlDb29yZGluYXRlIDw9IGJvdHRvbVJpZ2h0LnkoKTsgKyt5Q29vcmRpbmF0ZSkgewotICAgICAg
ICBmb3IgKHVuc2lnbmVkIHhDb29yZGluYXRlID0gdG9wTGVmdC54KCk7IHhDb29yZGluYXRlIDw9
IGJvdHRvbVJpZ2h0LngoKTsgKyt4Q29vcmRpbmF0ZSkgeworICAgIGZvciAodW5zaWduZWQgeUNv
b3JkaW5hdGUgPSB0b3BMZWZ0LnkoKTsgeUNvb3JkaW5hdGUgPCBib3R0b21SaWdodC55KCk7ICsr
eUNvb3JkaW5hdGUpIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCB4Q29vcmRpbmF0ZSA9IHRvcExl
ZnQueCgpOyB4Q29vcmRpbmF0ZSA8IGJvdHRvbVJpZ2h0LngoKTsgKyt4Q29vcmRpbmF0ZSkgewog
ICAgICAgICAgICAgUmVmUHRyPFRpbGVkRHJhd2luZ0FyZWFUaWxlPiBjdXJyZW50VGlsZSA9IHRp
bGVBdChUaWxlZERyYXdpbmdBcmVhVGlsZTo6Q29vcmRpbmF0ZSh4Q29vcmRpbmF0ZSwgeUNvb3Jk
aW5hdGUpKTsKICAgICAgICAgICAgIGlmICghY3VycmVudFRpbGUpCiAgICAgICAgICAgICAgICAg
Y29udGludWU7CkBAIC0zMzgsMTEgKzMzOCwxMSBAQCBib29sIFRpbGVkRHJhd2luZ0FyZWFQcm94
eTo6cGFpbnQoY29uc3QgCiAKICAgICBJbnRSZWN0IGRpcnR5UmVjdCA9IG1hcEZyb21Db250ZW50
cyhyZWN0KTsKIAotICAgIFRpbGVkRHJhd2luZ0FyZWFUaWxlOjpDb29yZGluYXRlIHRvcExlZnQg
PSB0aWxlQ29vcmRpbmF0ZUZvclBvaW50KGRpcnR5UmVjdC50b3BMZWZ0KCkpOwotICAgIFRpbGVk
RHJhd2luZ0FyZWFUaWxlOjpDb29yZGluYXRlIGJvdHRvbVJpZ2h0ID0gdGlsZUNvb3JkaW5hdGVG
b3JQb2ludChkaXJ0eVJlY3QuYm90dG9tUmlnaHQoKSk7CisgICAgVGlsZWREcmF3aW5nQXJlYVRp
bGU6OkNvb3JkaW5hdGUgdG9wTGVmdCA9IHRpbGVDb29yZGluYXRlRm9yUG9pbnQoZGlydHlSZWN0
LmxvY2F0aW9uKCkpOworICAgIFRpbGVkRHJhd2luZ0FyZWFUaWxlOjpDb29yZGluYXRlIGJvdHRv
bVJpZ2h0ID0gdGlsZUNvb3JkaW5hdGVGb3JQb2ludChJbnRQb2ludChkaXJ0eVJlY3QubWF4WCgp
LCBkaXJ0eVJlY3QubWF4WSgpKSk7CiAKLSAgICBmb3IgKHVuc2lnbmVkIHlDb29yZGluYXRlID0g
dG9wTGVmdC55KCk7IHlDb29yZGluYXRlIDw9IGJvdHRvbVJpZ2h0LnkoKTsgKyt5Q29vcmRpbmF0
ZSkgewotICAgICAgICBmb3IgKHVuc2lnbmVkIHhDb29yZGluYXRlID0gdG9wTGVmdC54KCk7IHhD
b29yZGluYXRlIDw9IGJvdHRvbVJpZ2h0LngoKTsgKyt4Q29vcmRpbmF0ZSkgeworICAgIGZvciAo
dW5zaWduZWQgeUNvb3JkaW5hdGUgPSB0b3BMZWZ0LnkoKTsgeUNvb3JkaW5hdGUgPCBib3R0b21S
aWdodC55KCk7ICsreUNvb3JkaW5hdGUpIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCB4Q29vcmRp
bmF0ZSA9IHRvcExlZnQueCgpOyB4Q29vcmRpbmF0ZSA8IGJvdHRvbVJpZ2h0LngoKTsgKyt4Q29v
cmRpbmF0ZSkgewogICAgICAgICAgICAgVGlsZWREcmF3aW5nQXJlYVRpbGU6OkNvb3JkaW5hdGUg
Y3VycmVudENvb3JkaW5hdGUoeENvb3JkaW5hdGUsIHlDb29yZGluYXRlKTsKICAgICAgICAgICAg
IFJlZlB0cjxUaWxlZERyYXdpbmdBcmVhVGlsZT4gY3VycmVudFRpbGUgPSB0aWxlQXQoY3VycmVu
dENvb3JkaW5hdGUpOwogICAgICAgICAgICAgaWYgKGN1cnJlbnRUaWxlICYmIGN1cnJlbnRUaWxl
LT5pc1JlYWR5VG9QYWludCgpKQpAQCAtNDM2LDEwICs0MzYsMTAgQEAgdm9pZCBUaWxlZERyYXdp
bmdBcmVhUHJveHk6OmNyZWF0ZVRpbGVzKAogICAgIFZlY3RvcjxUaWxlZERyYXdpbmdBcmVhVGls
ZTo6Q29vcmRpbmF0ZT4gdGlsZXNUb0NyZWF0ZTsKICAgICB1bnNpZ25lZCByZXF1aXJlZFRpbGVD
b3VudCA9IDA7CiAgICAgYm9vbCBoYXNWaXNpYmxlQ2hlY2tlcnMgPSBmYWxzZTsKLSAgICBUaWxl
ZERyYXdpbmdBcmVhVGlsZTo6Q29vcmRpbmF0ZSB0b3BMZWZ0ID0gdGlsZUNvb3JkaW5hdGVGb3JQ
b2ludChjb3ZlclJlY3QudG9wTGVmdCgpKTsKLSAgICBUaWxlZERyYXdpbmdBcmVhVGlsZTo6Q29v
cmRpbmF0ZSBib3R0b21SaWdodCA9IHRpbGVDb29yZGluYXRlRm9yUG9pbnQoY292ZXJSZWN0LmJv
dHRvbVJpZ2h0KCkpOwotICAgIGZvciAodW5zaWduZWQgeUNvb3JkaW5hdGUgPSB0b3BMZWZ0Lnko
KTsgeUNvb3JkaW5hdGUgPD0gYm90dG9tUmlnaHQueSgpOyArK3lDb29yZGluYXRlKSB7Ci0gICAg
ICAgIGZvciAodW5zaWduZWQgeENvb3JkaW5hdGUgPSB0b3BMZWZ0LngoKTsgeENvb3JkaW5hdGUg
PD0gYm90dG9tUmlnaHQueCgpOyArK3hDb29yZGluYXRlKSB7CisgICAgVGlsZWREcmF3aW5nQXJl
YVRpbGU6OkNvb3JkaW5hdGUgdG9wTGVmdCA9IHRpbGVDb29yZGluYXRlRm9yUG9pbnQoZGlydHlS
ZWN0LmxvY2F0aW9uKCkpOworICAgIFRpbGVkRHJhd2luZ0FyZWFUaWxlOjpDb29yZGluYXRlIGJv
dHRvbVJpZ2h0ID0gdGlsZUNvb3JkaW5hdGVGb3JQb2ludChJbnRQb2ludChkaXJ0eVJlY3QubWF4
WCgpLCBkaXJ0eVJlY3QubWF4WSgpKSk7CisgICAgZm9yICh1bnNpZ25lZCB5Q29vcmRpbmF0ZSA9
IHRvcExlZnQueSgpOyB5Q29vcmRpbmF0ZSA8IGJvdHRvbVJpZ2h0LnkoKTsgKyt5Q29vcmRpbmF0
ZSkgeworICAgICAgICBmb3IgKHVuc2lnbmVkIHhDb29yZGluYXRlID0gdG9wTGVmdC54KCk7IHhD
b29yZGluYXRlIDwgYm90dG9tUmlnaHQueCgpOyArK3hDb29yZGluYXRlKSB7CiAgICAgICAgICAg
ICBUaWxlZERyYXdpbmdBcmVhVGlsZTo6Q29vcmRpbmF0ZSBjdXJyZW50Q29vcmRpbmF0ZSh4Q29v
cmRpbmF0ZSwgeUNvb3JkaW5hdGUpOwogICAgICAgICAgICAgLy8gRGlzdGFuY2UgaXMgMCBmb3Ig
YWxsIGN1cnJlbnRseSB2aXNpYmxlIHRpbGVzLgogICAgICAgICAgICAgZG91YmxlIGRpc3RhbmNl
ID0gdGlsZURpc3RhbmNlKHZpc2libGVSZWN0LCBjdXJyZW50Q29vcmRpbmF0ZSk7CkluZGV4OiBT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9XS1ByaW50aW5nVmlldy5tbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9XS1ByaW50aW5nVmlldy5t
bQkocmV2aXNpb24gNzcyNzgpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9X
S1ByaW50aW5nVmlldy5tbQkod29ya2luZyBjb3B5KQpAQCAtMjMzLDggKzIzMyw4IEBAIHN0YXRp
YyB2b2lkIHBhZ2VEaWRDb21wdXRlUGFnZVJlY3RzKGNvbnMKIAogICAgICAgICBjb25zdCBJbnRS
ZWN0JiBsYXN0UHJpbnRpbmdQYWdlUmVjdCA9IHZpZXctPl9wcmludGluZ1BhZ2VSZWN0c1t2aWV3
LT5fcHJpbnRpbmdQYWdlUmVjdHMuc2l6ZSgpIC0gMV07CiAgICAgICAgIE5TUmVjdCBuZXdGcmFt
ZVNpemUgPSBOU01ha2VSZWN0KDAsIDAsIAotICAgICAgICAgICAgY2VpbChsYXN0UHJpbnRpbmdQ
YWdlUmVjdC5yaWdodCgpICogdmlldy0+X3RvdGFsU2NhbGVGYWN0b3JGb3JQcmludGluZyksIAot
ICAgICAgICAgICAgY2VpbChsYXN0UHJpbnRpbmdQYWdlUmVjdC5ib3R0b20oKSAqIHZpZXctPl90
b3RhbFNjYWxlRmFjdG9yRm9yUHJpbnRpbmcpKTsKKyAgICAgICAgICAgIGNlaWwobGFzdFByaW50
aW5nUGFnZVJlY3QubWF4WCgpICogdmlldy0+X3RvdGFsU2NhbGVGYWN0b3JGb3JQcmludGluZyks
IAorICAgICAgICAgICAgY2VpbChsYXN0UHJpbnRpbmdQYWdlUmVjdC5tYXhZKCkgKiB2aWV3LT5f
dG90YWxTY2FsZUZhY3RvckZvclByaW50aW5nKSk7CiAgICAgICAgIExPRyhWaWV3LCAiV0tQcmlu
dGluZ1ZpZXcgc2V0dGluZyBmcmFtZSBzaXplIHRvIHg6JWcgeTolZyB3aWR0aDolZyBoZWlnaHQ6
JWciLCBuZXdGcmFtZVNpemUub3JpZ2luLngsIG5ld0ZyYW1lU2l6ZS5vcmlnaW4ueSwgbmV3RnJh
bWVTaXplLnNpemUud2lkdGgsIG5ld0ZyYW1lU2l6ZS5zaXplLmhlaWdodCk7CiAgICAgICAgIFt2
aWV3IHNldEZyYW1lOm5ld0ZyYW1lU2l6ZV07CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9tYWMvQ2h1bmtlZFVwZGF0ZURyYXdpbmdBcmVhUHJveHlNYWMubW0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9DaHVua2VkVXBkYXRlRHJhd2luZ0FyZWFQ
cm94eU1hYy5tbQkocmV2aXNpb24gNzcyNzgpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
bWFjL0NodW5rZWRVcGRhdGVEcmF3aW5nQXJlYVByb3h5TWFjLm1tCSh3b3JraW5nIGNvcHkpCkBA
IC05Nyw3ICs5Nyw3IEBAIHZvaWQgQ2h1bmtlZFVwZGF0ZURyYXdpbmdBcmVhUHJveHk6OmRyYXcK
IAogICAgIC8vIEZsaXAgdGhlIGRlc3RpbmF0aW9uLgogICAgIENHQ29udGV4dFNjYWxlQ1RNKG1f
Yml0bWFwQ29udGV4dC5nZXQoKSwgMSwgLTEpOwotICAgIENHQ29udGV4dFRyYW5zbGF0ZUNUTSht
X2JpdG1hcENvbnRleHQuZ2V0KCksIDAsIC0odXBkYXRlQ2h1bmtSZWN0LnkoKSArIHVwZGF0ZUNo
dW5rUmVjdC5ib3R0b20oKSkpOworICAgIENHQ29udGV4dFRyYW5zbGF0ZUNUTShtX2JpdG1hcENv
bnRleHQuZ2V0KCksIDAsIC0odXBkYXRlQ2h1bmtSZWN0LnkoKSArIHVwZGF0ZUNodW5rUmVjdC5t
YXhZKCkpKTsKIAogICAgIENHQ29udGV4dERyYXdJbWFnZShtX2JpdG1hcENvbnRleHQuZ2V0KCks
IHVwZGF0ZUNodW5rUmVjdCwgaW1hZ2UuZ2V0KCkpOwogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvTmV0c2NhcGVQbHVnaW4uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9OZXRzY2FwZVBs
dWdpbi5jcHAJKHJldmlzaW9uIDc3Mjc4KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Q
bHVnaW5zL05ldHNjYXBlL05ldHNjYXBlUGx1Z2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUy
LDggKzM1Miw4IEBAIHZvaWQgTmV0c2NhcGVQbHVnaW46OmNhbGxTZXRXaW5kb3coKQogICAgIG1f
bnBXaW5kb3cuaGVpZ2h0ID0gbV9mcmFtZVJlY3QuaGVpZ2h0KCk7CiAgICAgbV9ucFdpbmRvdy5j
bGlwUmVjdC50b3AgPSBtX2NsaXBSZWN0LnkoKTsKICAgICBtX25wV2luZG93LmNsaXBSZWN0Lmxl
ZnQgPSBtX2NsaXBSZWN0LngoKTsKLSAgICBtX25wV2luZG93LmNsaXBSZWN0LmJvdHRvbSA9IG1f
Y2xpcFJlY3QuYm90dG9tKCk7Ci0gICAgbV9ucFdpbmRvdy5jbGlwUmVjdC5yaWdodCA9IG1fY2xp
cFJlY3QucmlnaHQoKTsKKyAgICBtX25wV2luZG93LmNsaXBSZWN0LmJvdHRvbSA9IG1fY2xpcFJl
Y3QubWF4WSgpOworICAgIG1fbnBXaW5kb3cuY2xpcFJlY3QucmlnaHQgPSBtX2NsaXBSZWN0Lm1h
eFgoKTsKIAogICAgIE5QUF9TZXRXaW5kb3coJm1fbnBXaW5kb3cpOwogfQpJbmRleDogU291cmNl
L1dlYktpdC9tYWMvV2ViVmlldy9XZWJIVE1MVmlldy5tbQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0L21hYy9XZWJWaWV3L1dlYkhUTUxWaWV3Lm1tCShyZXZpc2lvbiA3NzI3OCkKKysrIFNv
dXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViSFRNTFZpZXcubW0JKHdvcmtpbmcgY29weSkKQEAg
LTMxMiw3ICszMTIsNyBAQCBzdGF0aWMgdm9pZCBzZXROZWVkc0Rpc3BsYXlJblJlY3QoTlNWaWV3
CiAgICAgTlNSZWN0IGludmFsaWRSZWN0SW5XZWJGcmFtZVZpZXdDb29yZGluYXRlcyA9IFtlbmNs
b3NpbmdXZWJGcmFtZVZpZXcgY29udmVydFJlY3Q6aW52YWxpZFJlY3QgZnJvbVZpZXc6c2VsZl07
CiAgICAgSW50UmVjdCBpbnZhbGlkUmVjdEluRnJhbWVWaWV3Q29vcmRpbmF0ZXMoaW52YWxpZFJl
Y3RJbldlYkZyYW1lVmlld0Nvb3JkaW5hdGVzKTsKICAgICBpZiAoIVtlbmNsb3NpbmdXZWJGcmFt
ZVZpZXcgaXNGbGlwcGVkXSkKLSAgICAgICAgaW52YWxpZFJlY3RJbkZyYW1lVmlld0Nvb3JkaW5h
dGVzLnNldFkoZnJhbWVWaWV3LT5mcmFtZVJlY3QoKS5zaXplKCkuaGVpZ2h0KCkgLSBpbnZhbGlk
UmVjdEluRnJhbWVWaWV3Q29vcmRpbmF0ZXMuYm90dG9tKCkpOworICAgICAgICBpbnZhbGlkUmVj
dEluRnJhbWVWaWV3Q29vcmRpbmF0ZXMuc2V0WShmcmFtZVZpZXctPmZyYW1lUmVjdCgpLnNpemUo
KS5oZWlnaHQoKSAtIGludmFsaWRSZWN0SW5GcmFtZVZpZXdDb29yZGluYXRlcy5tYXhZKCkpOwog
CiAgICAgZnJhbWVWaWV3LT5pbnZhbGlkYXRlUmVjdChpbnZhbGlkUmVjdEluRnJhbWVWaWV3Q29v
cmRpbmF0ZXMpOwogfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>80813</attachid>
            <date>2011-02-01 13:25:06 -0800</date>
            <delta_ts>2011-02-01 13:41:25 -0800</delta_ts>
            <desc>Step 1: Convert most of WebCore and WebKit without getting rid of the methods yet.</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>114068</size>
            <attacher name="Dave Hyatt">hyatt</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9i
amVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nl
c3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcAkocmV2aXNpb24gNzcyNzgpCisrKyBTb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yNTE5LDcgKzI1MTksNyBAQCBJbnRSZWN0IEFjY2Vzc2liaWxpdHlSZW5kZXJP
YmplY3Q6OmJvdW5kCiAgICAgb3VycmVjdC51bml0ZShyZWN0Mik7CiAgICAgCiAgICAgLy8gaWYg
dGhlIHJlY3RhbmdsZSBzcGFucyBsaW5lcyBhbmQgY29udGFpbnMgbXVsdGlwbGUgdGV4dCBjaGFy
cywgdXNlIHRoZSByYW5nZSdzIGJvdW5kaW5nIGJveCBpbnRlYWQKLSAgICBpZiAocmVjdDEuYm90
dG9tKCkgIT0gcmVjdDIuYm90dG9tKCkpIHsKKyAgICBpZiAocmVjdDEubWF4WSgpICE9IHJlY3Qy
Lm1heFkoKSkgewogICAgICAgICBSZWZQdHI8UmFuZ2U+IGRhdGFSYW5nZSA9IG1ha2VSYW5nZShy
YW5nZS5zdGFydCwgcmFuZ2UuZW5kKTsKICAgICAgICAgSW50UmVjdCBib3VuZGluZ0JveCA9IGRh
dGFSYW5nZS0+Ym91bmRpbmdCb3goKTsKICAgICAgICAgU3RyaW5nIHJhbmdlU3RyaW5nID0gcGxh
aW5UZXh0KGRhdGFSYW5nZS5nZXQoKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L21hYy9BY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlci5tbQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9BY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlci5t
bQkocmV2aXNpb24gNzcyNzgpCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9B
Y2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlci5tbQkod29ya2luZyBjb3B5KQpAQCAtMTEyNSw3ICsx
MTI1LDcgQEAgLSAoTlNWYWx1ZSopcG9zaXRpb24KICAgICAgICAgcG9pbnQueSA9IHNjcmVlbkhl
aWdodCAtIChwb2ludC55ICsgcmVtb3RlUG9zaXRpb24ueSArIHJlY3QuaGVpZ2h0KCkgLSBzY3Jv
bGxQb3NpdGlvbi55KTsKICAgICB9IGVsc2UgewogICAgICAgICAvLyBUaGUgQ29jb2EgYWNjZXNz
aWJpbGl0eSBBUEkgd2FudHMgdGhlIGxvd2VyLWxlZnQgY29ybmVyLgotICAgICAgICBwb2ludCA9
IE5TTWFrZVBvaW50KHJlY3QueCgpLCByZWN0LmJvdHRvbSgpKTsKKyAgICAgICAgcG9pbnQgPSBO
U01ha2VQb2ludChyZWN0LngoKSwgcmVjdC5tYXhZKCkpOwogICAgICAgICAKICAgICAgICAgaWYg
KGZyYW1lVmlldykgewogICAgICAgICAgICAgTlNWaWV3KiB2aWV3ID0gZnJhbWVWaWV3LT5kb2N1
bWVudFZpZXcoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9DbGllbnRSZWN0LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0NsaWVudFJlY3QuaAkocmV2aXNpb24gNzcyNzgp
CisrKyBTb3VyY2UvV2ViQ29yZS9kb20vQ2xpZW50UmVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC00
Miw4ICs0Miw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgc3RhdGljIFBhc3NSZWZQ
dHI8Q2xpZW50UmVjdD4gY3JlYXRlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkgeyByZXR1cm4gYWRv
cHRSZWYobmV3IENsaWVudFJlY3QocmVjdCkpOyB9CiAKICAgICAgICAgZmxvYXQgdG9wKCkgY29u
c3QgeyByZXR1cm4gbV9yZWN0LnkoKTsgfQotICAgICAgICBmbG9hdCByaWdodCgpIGNvbnN0IHsg
cmV0dXJuIG1fcmVjdC5yaWdodCgpOyB9Ci0gICAgICAgIGZsb2F0IGJvdHRvbSgpIGNvbnN0IHsg
cmV0dXJuIG1fcmVjdC5ib3R0b20oKTsgfQorICAgICAgICBmbG9hdCByaWdodCgpIGNvbnN0IHsg
cmV0dXJuIG1fcmVjdC5tYXhYKCk7IH0KKyAgICAgICAgZmxvYXQgYm90dG9tKCkgY29uc3QgeyBy
ZXR1cm4gbV9yZWN0Lm1heFkoKTsgfQogICAgICAgICBmbG9hdCBsZWZ0KCkgY29uc3QgeyByZXR1
cm4gbV9yZWN0LngoKTsgfQogICAgICAgICBmbG9hdCB3aWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1f
cmVjdC53aWR0aCgpOyB9CiAgICAgICAgIGZsb2F0IGhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIG1f
cmVjdC5oZWlnaHQoKTsgfQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxl
bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxl
bWVudC5jcHAJKHJldmlzaW9uIDc3Mjc4KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2Fu
dmFzRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0NCwxMCArMzQ0LDEwIEBAIFN0cmlu
ZyBIVE1MQ2FudmFzRWxlbWVudDo6dG9EYXRhVVJMKGNvbnMKIAogSW50UmVjdCBIVE1MQ2FudmFz
RWxlbWVudDo6Y29udmVydExvZ2ljYWxUb0RldmljZShjb25zdCBGbG9hdFJlY3QmIGxvZ2ljYWxS
ZWN0KSBjb25zdAogewotICAgIGZsb2F0IGxlZnQgPSBmbG9vcmYobG9naWNhbFJlY3QubGVmdCgp
ICogbV9wYWdlU2NhbGVGYWN0b3IpOwotICAgIGZsb2F0IHRvcCA9IGZsb29yZihsb2dpY2FsUmVj
dC50b3AoKSAqIG1fcGFnZVNjYWxlRmFjdG9yKTsKLSAgICBmbG9hdCByaWdodCA9IGNlaWxmKGxv
Z2ljYWxSZWN0LnJpZ2h0KCkgKiBtX3BhZ2VTY2FsZUZhY3Rvcik7Ci0gICAgZmxvYXQgYm90dG9t
ID0gY2VpbGYobG9naWNhbFJlY3QuYm90dG9tKCkgKiBtX3BhZ2VTY2FsZUZhY3Rvcik7CisgICAg
ZmxvYXQgbGVmdCA9IGZsb29yZihsb2dpY2FsUmVjdC54KCkgKiBtX3BhZ2VTY2FsZUZhY3Rvcik7
CisgICAgZmxvYXQgdG9wID0gZmxvb3JmKGxvZ2ljYWxSZWN0LnkoKSAqIG1fcGFnZVNjYWxlRmFj
dG9yKTsKKyAgICBmbG9hdCByaWdodCA9IGNlaWxmKGxvZ2ljYWxSZWN0Lm1heFgoKSAqIG1fcGFn
ZVNjYWxlRmFjdG9yKTsKKyAgICBmbG9hdCBib3R0b20gPSBjZWlsZihsb2dpY2FsUmVjdC5tYXhZ
KCkgKiBtX3BhZ2VTY2FsZUZhY3Rvcik7CiAgICAgCiAgICAgcmV0dXJuIEludFJlY3QoSW50UG9p
bnQobGVmdCwgdG9wKSwgY29udmVydFRvVmFsaWREZXZpY2VTaXplKHJpZ2h0IC0gbGVmdCwgYm90
dG9tIC0gdG9wKSk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwv
Y2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAJKHJldmlzaW9uIDc3Mjc4KQorKysg
U291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTEwNSw4ICsxMTA1LDggQEAgc3RhdGljIEludFNpemUgc2l6ZShI
VE1MVmlkZW9FbGVtZW50KiB2aQogCiBzdGF0aWMgaW5saW5lIEZsb2F0UmVjdCBub3JtYWxpemVS
ZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKLSAgICByZXR1cm4gRmxvYXRSZWN0KG1pbihy
ZWN0LngoKSwgcmVjdC5yaWdodCgpKSwKLSAgICAgICAgbWluKHJlY3QueSgpLCByZWN0LmJvdHRv
bSgpKSwKKyAgICByZXR1cm4gRmxvYXRSZWN0KG1pbihyZWN0LngoKSwgcmVjdC5tYXhYKCkpLAor
ICAgICAgICBtaW4ocmVjdC55KCksIHJlY3QubWF4WSgpKSwKICAgICAgICAgbWF4KHJlY3Qud2lk
dGgoKSwgLXJlY3Qud2lkdGgoKSksCiAgICAgICAgIG1heChyZWN0LmhlaWdodCgpLCAtcmVjdC5o
ZWlnaHQoKSkpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckFn
ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
QWdlbnQuY3BwCShyZXZpc2lvbiA3NzI3OCkKKysrIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JBZ2VudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyNzQsNyArMTI3NCw3IEBAIHZv
aWQgSW5zcGVjdG9yQWdlbnQ6OmRyYXdFbGVtZW50VGl0bGUoR3IKICAgICBmb250LnVwZGF0ZSgw
KTsKIAogICAgIFRleHRSdW4gbm9kZVRpdGxlUnVuKG5vZGVUaXRsZSk7Ci0gICAgSW50UG9pbnQg
dGl0bGVCYXNlUG9pbnQgPSBib3VuZGluZ0JveC5ib3R0b21MZWZ0KCk7CisgICAgSW50UG9pbnQg
dGl0bGVCYXNlUG9pbnQgPSBJbnRQb2ludChib3VuZGluZ0JveC54KCksIGJvdW5kaW5nQm94Lm1h
eFkoKSAtIDEpOwogICAgIHRpdGxlQmFzZVBvaW50Lm1vdmUocmVjdEluZmxhdGVQeCwgcmVjdElu
ZmxhdGVQeCk7CiAgICAgSW50UmVjdCB0aXRsZVJlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KGZvbnQu
c2VsZWN0aW9uUmVjdEZvclRleHQobm9kZVRpdGxlUnVuLCB0aXRsZUJhc2VQb2ludCwgZm9udEhl
aWdodFB4KSk7CiAgICAgdGl0bGVSZWN0LmluZmxhdGUocmVjdEluZmxhdGVQeCk7CkBAIC0xMjg0
LDE5ICsxMjg0LDE5IEBAIHZvaWQgSW5zcGVjdG9yQWdlbnQ6OmRyYXdFbGVtZW50VGl0bGUoR3IK
ICAgICBpbnQgZHkgPSBib3JkZXJXaWR0aFB4OwogCiAgICAgLy8gSWYgdGhlIHRpcCBzdGlja3Mg
YmV5b25kIHRoZSByaWdodCBvZiBvdmVybGF5UmVjdCwgcmlnaHQtYWxpZ24gdGhlIHRpcCB3aXRo
IHRoZSBzYWlkIGJvdW5kYXJ5LgotICAgIGlmICh0aXRsZVJlY3QucmlnaHQoKSA+IG92ZXJsYXlS
ZWN0LnJpZ2h0KCkpCi0gICAgICAgIGR4ID0gb3ZlcmxheVJlY3QucmlnaHQoKSAtIHRpdGxlUmVj
dC5yaWdodCgpOworICAgIGlmICh0aXRsZVJlY3QubWF4WCgpID4gb3ZlcmxheVJlY3QubWF4WCgp
KQorICAgICAgICBkeCA9IG92ZXJsYXlSZWN0Lm1heFgoKSAtIHRpdGxlUmVjdC5tYXhYKCk7CiAK
ICAgICAvLyBJZiB0aGUgdGlwIHN0aWNrcyBiZXlvbmQgdGhlIGxlZnQgb2Ygb3ZlcmxheVJlY3Qs
IGxlZnQtYWxpZ24gdGhlIHRpcCB3aXRoIHRoZSBzYWlkIGJvdW5kYXJ5LgogICAgIGlmICh0aXRs
ZVJlY3QueCgpICsgZHggPCBvdmVybGF5UmVjdC54KCkpCiAgICAgICAgIGR4ID0gb3ZlcmxheVJl
Y3QueCgpIC0gdGl0bGVSZWN0LngoKSAtIGJvcmRlcldpZHRoUHg7CiAKICAgICAvLyBJZiB0aGUg
dGlwIHN0aWNrcyBiZXlvbmQgdGhlIGJvdHRvbSBvZiBvdmVybGF5UmVjdCwgc2hvdyB0aGUgdGlw
IGF0IHRvcCBvZiBib3VuZGluZyBib3guCi0gICAgaWYgKHRpdGxlUmVjdC5ib3R0b20oKSA+IG92
ZXJsYXlSZWN0LmJvdHRvbSgpKSB7Ci0gICAgICAgIGR5ID0gYm91bmRpbmdCb3gueSgpIC0gdGl0
bGVSZWN0LmJvdHRvbSgpIC0gYm9yZGVyV2lkdGhQeDsKKyAgICBpZiAodGl0bGVSZWN0Lm1heFko
KSA+IG92ZXJsYXlSZWN0Lm1heFkoKSkgeworICAgICAgICBkeSA9IGJvdW5kaW5nQm94LnkoKSAt
IHRpdGxlUmVjdC5tYXhZKCkgLSBib3JkZXJXaWR0aFB4OwogICAgICAgICAvLyBJZiB0aGUgdGlw
IHN0aWxsIHN0aWNrcyBiZXlvbmQgdGhlIGJvdHRvbSBvZiBvdmVybGF5UmVjdCwgYm90dG9tLWFs
aWduIHRoZSB0aXAgd2l0aCB0aGUgc2FpZCBib3VuZGFyeS4KLSAgICAgICAgaWYgKHRpdGxlUmVj
dC5ib3R0b20oKSArIGR5ID4gb3ZlcmxheVJlY3QuYm90dG9tKCkpCi0gICAgICAgICAgICBkeSA9
IG92ZXJsYXlSZWN0LmJvdHRvbSgpIC0gdGl0bGVSZWN0LmJvdHRvbSgpOworICAgICAgICBpZiAo
dGl0bGVSZWN0Lm1heFkoKSArIGR5ID4gb3ZlcmxheVJlY3QubWF4WSgpKQorICAgICAgICAgICAg
ZHkgPSBvdmVybGF5UmVjdC5tYXhZKCkgLSB0aXRsZVJlY3QubWF4WSgpOwogICAgIH0KIAogICAg
IC8vIElmIHRoZSB0aXAgc3RpY2tzIGJleW9uZCB0aGUgdG9wIG9mIG92ZXJsYXlSZWN0LCBzaG93
IHRoZSB0aXAgYXQgdG9wIG9mIG92ZXJsYXlSZWN0LgpJbmRleDogU291cmNlL1dlYkNvcmUvcGFn
ZS9ET01XaW5kb3cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2lu
ZG93LmNwcAkocmV2aXNpb24gNzcyNzgpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRv
dy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0Miw4ICszNDIsOCBAQCB2b2lkIERPTVdpbmRvdzo6
YWRqdXN0V2luZG93UmVjdChjb25zdCBGCiAgICAgd2luZG93LnNldEhlaWdodChtaW4obWF4KDEw
MC4wZiwgd2luZG93LmhlaWdodCgpKSwgc2NyZWVuLmhlaWdodCgpKSk7CiAgICAgCiAgICAgLy8g
Q29uc3RyYWluIHRoZSB3aW5kb3cgcG9zaXRpb24gdG8gdGhlIHNjcmVlbi4KLSAgICB3aW5kb3cu
c2V0WChtYXgoc2NyZWVuLngoKSwgbWluKHdpbmRvdy54KCksIHNjcmVlbi5yaWdodCgpIC0gd2lu
ZG93LndpZHRoKCkpKSk7Ci0gICAgd2luZG93LnNldFkobWF4KHNjcmVlbi55KCksIG1pbih3aW5k
b3cueSgpLCBzY3JlZW4uYm90dG9tKCkgLSB3aW5kb3cuaGVpZ2h0KCkpKSk7CisgICAgd2luZG93
LnNldFgobWF4KHNjcmVlbi54KCksIG1pbih3aW5kb3cueCgpLCBzY3JlZW4ubWF4WCgpIC0gd2lu
ZG93LndpZHRoKCkpKSk7CisgICAgd2luZG93LnNldFkobWF4KHNjcmVlbi55KCksIG1pbih3aW5k
b3cueSgpLCBzY3JlZW4ubWF4WSgpIC0gd2luZG93LmhlaWdodCgpKSkpOwogfQogCiAvLyBGSVhN
RTogV2UgY2FuIHJlbW92ZSB0aGlzIGZ1bmN0aW9uIG9uY2UgVjggc2hvd01vZGFsRGlhbG9nIGlz
IGNoYW5nZWQgdG8gdXNlIERPTVdpbmRvdy4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvRHJh
Z0NvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRHJhZ0Nv
bnRyb2xsZXIuY3BwCShyZXZpc2lvbiA3NzI3OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRHJh
Z0NvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NDQsOSArNjQ0LDkgQEAgc3RhdGlj
IEludFBvaW50IGRyYWdMb2NGb3JESFRNTERyYWcoY29ucwogc3RhdGljIEludFBvaW50IGRyYWdM
b2NGb3JTZWxlY3Rpb25EcmFnKEZyYW1lKiBzcmMpCiB7CiAgICAgSW50UmVjdCBkcmFnZ2luZ1Jl
Y3QgPSBlbmNsb3NpbmdJbnRSZWN0KHNyYy0+c2VsZWN0aW9uKCktPmJvdW5kcygpKTsKLSAgICBp
bnQgeHBvcyA9IGRyYWdnaW5nUmVjdC5yaWdodCgpOworICAgIGludCB4cG9zID0gZHJhZ2dpbmdS
ZWN0Lm1heFgoKTsKICAgICB4cG9zID0gZHJhZ2dpbmdSZWN0LngoKSA8IHhwb3MgPyBkcmFnZ2lu
Z1JlY3QueCgpIDogeHBvczsKLSAgICBpbnQgeXBvcyA9IGRyYWdnaW5nUmVjdC5ib3R0b20oKTsK
KyAgICBpbnQgeXBvcyA9IGRyYWdnaW5nUmVjdC5tYXhZKCk7CiAjaWYgUExBVEZPUk0oTUFDKQog
ICAgIC8vIERlYWwgd2l0aCBmbGlwcGVkIGNvb3JkaW5hdGVzIG9uIE1hYwogICAgIHlwb3MgPSBk
cmFnZ2luZ1JlY3QueSgpID4geXBvcyA/IGRyYWdnaW5nUmVjdC55KCkgOiB5cG9zOwpJbmRleDog
U291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAkocmV2aXNpb24gNzcyNzgpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxMzIs
MTIgKzIxMzIsMTIgQEAgYm9vbCBFdmVudEhhbmRsZXI6OnNlbmRDb250ZXh0TWVudUV2ZW50Rgog
ICAgICAgICBSZWZQdHI8UmFuZ2U+IHNlbGVjdGlvbiA9IHNlbGVjdGlvbkNvbnRyb2xsZXItPnRv
Tm9ybWFsaXplZFJhbmdlKCk7CiAgICAgICAgIEludFJlY3QgZmlyc3RSZWN0ID0gbV9mcmFtZS0+
ZWRpdG9yKCktPmZpcnN0UmVjdEZvclJhbmdlKHNlbGVjdGlvbi5nZXQoKSk7CiAKLSAgICAgICAg
aW50IHggPSByaWdodEFsaWduZWQgPyBmaXJzdFJlY3QucmlnaHQoKSA6IGZpcnN0UmVjdC54KCk7
Ci0gICAgICAgIGxvY2F0aW9uID0gSW50UG9pbnQoeCwgZmlyc3RSZWN0LmJvdHRvbSgpKTsKKyAg
ICAgICAgaW50IHggPSByaWdodEFsaWduZWQgPyBmaXJzdFJlY3QubWF4WCgpIDogZmlyc3RSZWN0
LngoKTsKKyAgICAgICAgbG9jYXRpb24gPSBJbnRQb2ludCh4LCBmaXJzdFJlY3QubWF4WSgpKTsK
ICAgICB9IGVsc2UgaWYgKGZvY3VzZWROb2RlKSB7CiAgICAgICAgIFJlbmRlckJveE1vZGVsT2Jq
ZWN0KiBib3ggPSBmb2N1c2VkTm9kZS0+cmVuZGVyQm94TW9kZWxPYmplY3QoKTsKICAgICAgICAg
SW50UmVjdCBjbGlwcGVkUmVjdCA9IGJveC0+YWJzb2x1dGVDbGlwcGVkT3ZlcmZsb3dSZWN0KCk7
Ci0gICAgICAgIGxvY2F0aW9uID0gY2xpcHBlZFJlY3QuYm90dG9tTGVmdCgpOworICAgICAgICBs
b2NhdGlvbiA9IEludFBvaW50KGNsaXBwZWRSZWN0LngoKSwgY2xpcHBlZFJlY3QubWF4WSgpIC0g
MSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgbG9jYXRpb24gPSBJbnRQb2ludCgKICAgICAgICAg
ICAgIHJpZ2h0QWxpZ25lZCA/IHZpZXctPmNvbnRlbnRzV2lkdGgoKSAtIGtDb250ZXh0TWVudU1h
cmdpbiA6IGtDb250ZXh0TWVudU1hcmdpbiwKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvUHJp
bnRDb250ZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL1ByaW50Q29u
dGV4dC5jcHAJKHJldmlzaW9uIDc3Mjc4KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9QcmludENv
bnRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzUsMjQgKzEzNSwyNCBAQCB2b2lkIFByaW50
Q29udGV4dDo6Y29tcHV0ZVBhZ2VSZWN0c1dpdGhQCiAgICAgaW50IGJsb2NrRGlyZWN0aW9uRW5k
OwogICAgIGlmIChpc0hvcml6b250YWwpIHsKICAgICAgICAgaWYgKHZpZXctPnN0eWxlKCktPmlz
RmxpcHBlZEJsb2Nrc1dyaXRpbmdNb2RlKCkpIHsKLSAgICAgICAgICAgIGJsb2NrRGlyZWN0aW9u
U3RhcnQgPSBkb2NSZWN0LmJvdHRvbSgpOworICAgICAgICAgICAgYmxvY2tEaXJlY3Rpb25TdGFy
dCA9IGRvY1JlY3QubWF4WSgpOwogICAgICAgICAgICAgYmxvY2tEaXJlY3Rpb25FbmQgPSBkb2NS
ZWN0LnkoKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGJsb2NrRGlyZWN0aW9uU3Rh
cnQgPSBkb2NSZWN0LnkoKTsKLSAgICAgICAgICAgIGJsb2NrRGlyZWN0aW9uRW5kID0gZG9jUmVj
dC5ib3R0b20oKTsKKyAgICAgICAgICAgIGJsb2NrRGlyZWN0aW9uRW5kID0gZG9jUmVjdC5tYXhZ
KCk7CiAgICAgICAgIH0KLSAgICAgICAgaW5saW5lRGlyZWN0aW9uU3RhcnQgPSB2aWV3LT5zdHls
ZSgpLT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyBkb2NSZWN0LngoKSA6IGRvY1JlY3Qucmln
aHQoKTsKLSAgICAgICAgaW5saW5lRGlyZWN0aW9uRW5kID0gdmlldy0+c3R5bGUoKS0+aXNMZWZ0
VG9SaWdodERpcmVjdGlvbigpID8gZG9jUmVjdC5yaWdodCgpIDogZG9jUmVjdC54KCk7CisgICAg
ICAgIGlubGluZURpcmVjdGlvblN0YXJ0ID0gdmlldy0+c3R5bGUoKS0+aXNMZWZ0VG9SaWdodERp
cmVjdGlvbigpID8gZG9jUmVjdC54KCkgOiBkb2NSZWN0Lm1heFgoKTsKKyAgICAgICAgaW5saW5l
RGlyZWN0aW9uRW5kID0gdmlldy0+c3R5bGUoKS0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpID8g
ZG9jUmVjdC5tYXhYKCkgOiBkb2NSZWN0LngoKTsKICAgICB9IGVsc2UgewogICAgICAgICBpZiAo
dmlldy0+c3R5bGUoKS0+aXNGbGlwcGVkQmxvY2tzV3JpdGluZ01vZGUoKSkgewotICAgICAgICAg
ICAgYmxvY2tEaXJlY3Rpb25TdGFydCA9IGRvY1JlY3QucmlnaHQoKTsKKyAgICAgICAgICAgIGJs
b2NrRGlyZWN0aW9uU3RhcnQgPSBkb2NSZWN0Lm1heFgoKTsKICAgICAgICAgICAgIGJsb2NrRGly
ZWN0aW9uRW5kID0gZG9jUmVjdC54KCk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBi
bG9ja0RpcmVjdGlvblN0YXJ0ID0gZG9jUmVjdC54KCk7Ci0gICAgICAgICAgICBibG9ja0RpcmVj
dGlvbkVuZCA9IGRvY1JlY3QucmlnaHQoKTsKKyAgICAgICAgICAgIGJsb2NrRGlyZWN0aW9uRW5k
ID0gZG9jUmVjdC5tYXhYKCk7CiAgICAgICAgIH0KLSAgICAgICAgaW5saW5lRGlyZWN0aW9uU3Rh
cnQgPSB2aWV3LT5zdHlsZSgpLT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyBkb2NSZWN0Lnko
KSA6IGRvY1JlY3QuYm90dG9tKCk7Ci0gICAgICAgIGlubGluZURpcmVjdGlvbkVuZCA9IHZpZXct
PnN0eWxlKCktPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/IGRvY1JlY3QuYm90dG9tKCkgOiBk
b2NSZWN0LnkoKTsKKyAgICAgICAgaW5saW5lRGlyZWN0aW9uU3RhcnQgPSB2aWV3LT5zdHlsZSgp
LT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyBkb2NSZWN0LnkoKSA6IGRvY1JlY3QubWF4WSgp
OworICAgICAgICBpbmxpbmVEaXJlY3Rpb25FbmQgPSB2aWV3LT5zdHlsZSgpLT5pc0xlZnRUb1Jp
Z2h0RGlyZWN0aW9uKCkgPyBkb2NSZWN0Lm1heFkoKSA6IGRvY1JlY3QueSgpOwogICAgIH0KIAog
ICAgIHVuc2lnbmVkIHBhZ2VDb3VudCA9IGNlaWxmKChmbG9hdClkb2NMb2dpY2FsSGVpZ2h0IC8g
cGFnZUxvZ2ljYWxIZWlnaHQpOwpAQCAtMjc0LDcgKzI3NCw3IEBAIGludCBQcmludENvbnRleHQ6
OnBhZ2VOdW1iZXJGb3JFbGVtZW50KEUKICAgICBzaXplX3QgcGFnZU51bWJlciA9IDA7CiAgICAg
Zm9yICg7IHBhZ2VOdW1iZXIgPCBwcmludENvbnRleHQucGFnZUNvdW50KCk7IHBhZ2VOdW1iZXIr
KykgewogICAgICAgICBjb25zdCBJbnRSZWN0JiBwYWdlID0gcHJpbnRDb250ZXh0LnBhZ2VSZWN0
KHBhZ2VOdW1iZXIpOwotICAgICAgICBpZiAocGFnZS54KCkgPD0gbGVmdCAmJiBsZWZ0IDwgcGFn
ZS5yaWdodCgpICYmIHBhZ2UueSgpIDw9IHRvcCAmJiB0b3AgPCBwYWdlLmJvdHRvbSgpKQorICAg
ICAgICBpZiAocGFnZS54KCkgPD0gbGVmdCAmJiBsZWZ0IDwgcGFnZS5tYXhYKCkgJiYgcGFnZS55
KCkgPD0gdG9wICYmIHRvcCA8IHBhZ2UubWF4WSgpKQogICAgICAgICAgICAgcmV0dXJuIHBhZ2VO
dW1iZXI7CiAgICAgfQogICAgIHJldHVybiAtMTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2Uv
U3BhdGlhbE5hdmlnYXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2Uv
U3BhdGlhbE5hdmlnYXRpb24uY3BwCShyZXZpc2lvbiA3NzI3OCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BhZ2UvU3BhdGlhbE5hdmlnYXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjcsNyArMTI3
LDcgQEAgc3RhdGljIGlubGluZSBpbnQgbWlkZGxlKEZvY3VzRGlyZWN0aW9uIAogCiBzdGF0aWMg
aW5saW5lIGludCBlbmQoRm9jdXNEaXJlY3Rpb24gZGlyZWN0aW9uLCBjb25zdCBJbnRSZWN0JiBy
ZWN0KQogewotICAgIHJldHVybiBpc0hvcml6b250YWxNb3ZlKGRpcmVjdGlvbikgPyByZWN0LmJv
dHRvbSgpIDogcmVjdC5yaWdodCgpOworICAgIHJldHVybiBpc0hvcml6b250YWxNb3ZlKGRpcmVj
dGlvbikgPyByZWN0Lm1heFkoKSA6IHJlY3QubWF4WCgpOwogfQogCiAvLyBUaGlzIG1ldGhvZCBj
aGVja3MgaWYgcmVjdHMgfGF8IGFuZCB8YnwgYXJlIGZ1bGx5IGFsaWduZWQgZWl0aGVyIHZlcnRp
Y2FsbHkgb3IKQEAgLTE0NCwxMSArMTQ0LDExIEBAIHN0YXRpYyBib29sIGFyZVJlY3RzRnVsbHlB
bGlnbmVkKEZvY3VzRGkKICAgICBzd2l0Y2ggKGRpcmVjdGlvbikgewogICAgIGNhc2UgRm9jdXNE
aXJlY3Rpb25MZWZ0OgogICAgICAgICBhU3RhcnQgPSBhLngoKTsKLSAgICAgICAgYkVuZCA9IGIu
cmlnaHQoKTsKKyAgICAgICAgYkVuZCA9IGIubWF4WCgpOwogICAgICAgICBicmVhazsKICAgICBj
YXNlIEZvY3VzRGlyZWN0aW9uUmlnaHQ6CiAgICAgICAgIGFTdGFydCA9IGIueCgpOwotICAgICAg
ICBiRW5kID0gYS5yaWdodCgpOworICAgICAgICBiRW5kID0gYS5tYXhYKCk7CiAgICAgICAgIGJy
ZWFrOwogICAgIGNhc2UgRm9jdXNEaXJlY3Rpb25VcDoKICAgICAgICAgYVN0YXJ0ID0gYS55KCk7
CkBAIC0yNDUsMTMgKzI0NSwxMyBAQCBzdGF0aWMgYm9vbCBhcmVSZWN0c01vcmVUaGFuRnVsbFNj
cmVlbkFwCiAKICAgICBzd2l0Y2ggKGRpcmVjdGlvbikgewogICAgIGNhc2UgRm9jdXNEaXJlY3Rp
b25MZWZ0OgotICAgICAgICByZXR1cm4gY3VyUmVjdC54KCkgLSB0YXJnZXRSZWN0LnJpZ2h0KCkg
PiB2aWV3U2l6ZS53aWR0aCgpOworICAgICAgICByZXR1cm4gY3VyUmVjdC54KCkgLSB0YXJnZXRS
ZWN0Lm1heFgoKSA+IHZpZXdTaXplLndpZHRoKCk7CiAgICAgY2FzZSBGb2N1c0RpcmVjdGlvblJp
Z2h0OgotICAgICAgICByZXR1cm4gdGFyZ2V0UmVjdC54KCkgLSBjdXJSZWN0LnJpZ2h0KCkgPiB2
aWV3U2l6ZS53aWR0aCgpOworICAgICAgICByZXR1cm4gdGFyZ2V0UmVjdC54KCkgLSBjdXJSZWN0
Lm1heFgoKSA+IHZpZXdTaXplLndpZHRoKCk7CiAgICAgY2FzZSBGb2N1c0RpcmVjdGlvblVwOgot
ICAgICAgICByZXR1cm4gY3VyUmVjdC55KCkgLSB0YXJnZXRSZWN0LmJvdHRvbSgpID4gdmlld1Np
emUuaGVpZ2h0KCk7CisgICAgICAgIHJldHVybiBjdXJSZWN0LnkoKSAtIHRhcmdldFJlY3QubWF4
WSgpID4gdmlld1NpemUuaGVpZ2h0KCk7CiAgICAgY2FzZSBGb2N1c0RpcmVjdGlvbkRvd246Ci0g
ICAgICAgIHJldHVybiB0YXJnZXRSZWN0LnkoKSAtIGN1clJlY3QuYm90dG9tKCkgPiB2aWV3U2l6
ZS5oZWlnaHQoKTsKKyAgICAgICAgcmV0dXJuIHRhcmdldFJlY3QueSgpIC0gY3VyUmVjdC5tYXhZ
KCkgPiB2aWV3U2l6ZS5oZWlnaHQoKTsKICAgICBkZWZhdWx0OgogICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0yNjEsMjYgKzI2MSwyNiBAQCBz
dGF0aWMgYm9vbCBhcmVSZWN0c01vcmVUaGFuRnVsbFNjcmVlbkFwCiAvLyBSZXR1cm4gdHJ1ZSBp
ZiByZWN0IHxhfCBpcyBiZWxvdyB8YnwuIEZhbHNlIG90aGVyd2lzZS4KIHN0YXRpYyBpbmxpbmUg
Ym9vbCBiZWxvdyhjb25zdCBJbnRSZWN0JiBhLCBjb25zdCBJbnRSZWN0JiBiKQogewotICAgIHJl
dHVybiBhLnkoKSA+IGIuYm90dG9tKCk7CisgICAgcmV0dXJuIGEueSgpID4gYi5tYXhZKCk7CiB9
CiAKIC8vIFJldHVybiB0cnVlIGlmIHJlY3QgfGF8IGlzIG9uIHRoZSByaWdodCBvZiB8YnwuIEZh
bHNlIG90aGVyd2lzZS4KIHN0YXRpYyBpbmxpbmUgYm9vbCByaWdodE9mKGNvbnN0IEludFJlY3Qm
IGEsIGNvbnN0IEludFJlY3QmIGIpCiB7Ci0gICAgcmV0dXJuIGEueCgpID4gYi5yaWdodCgpOwor
ICAgIHJldHVybiBhLngoKSA+IGIubWF4WCgpOwogfQogCiBzdGF0aWMgYm9vbCBpc1JlY3RJbkRp
cmVjdGlvbihGb2N1c0RpcmVjdGlvbiBkaXJlY3Rpb24sIGNvbnN0IEludFJlY3QmIGN1clJlY3Qs
IGNvbnN0IEludFJlY3QmIHRhcmdldFJlY3QpCiB7CiAgICAgc3dpdGNoIChkaXJlY3Rpb24pIHsK
ICAgICBjYXNlIEZvY3VzRGlyZWN0aW9uTGVmdDoKLSAgICAgICAgcmV0dXJuIHRhcmdldFJlY3Qu
cmlnaHQoKSA8PSBjdXJSZWN0LngoKTsKKyAgICAgICAgcmV0dXJuIHRhcmdldFJlY3QubWF4WCgp
IDw9IGN1clJlY3QueCgpOwogICAgIGNhc2UgRm9jdXNEaXJlY3Rpb25SaWdodDoKLSAgICAgICAg
cmV0dXJuIHRhcmdldFJlY3QueCgpID49IGN1clJlY3QucmlnaHQoKTsKKyAgICAgICAgcmV0dXJu
IHRhcmdldFJlY3QueCgpID49IGN1clJlY3QubWF4WCgpOwogICAgIGNhc2UgRm9jdXNEaXJlY3Rp
b25VcDoKLSAgICAgICAgcmV0dXJuIHRhcmdldFJlY3QuYm90dG9tKCkgPD0gY3VyUmVjdC55KCk7
CisgICAgICAgIHJldHVybiB0YXJnZXRSZWN0Lm1heFkoKSA8PSBjdXJSZWN0LnkoKTsKICAgICBj
YXNlIEZvY3VzRGlyZWN0aW9uRG93bjoKLSAgICAgICAgcmV0dXJuIHRhcmdldFJlY3QueSgpID49
IGN1clJlY3QuYm90dG9tKCk7CisgICAgICAgIHJldHVybiB0YXJnZXRSZWN0LnkoKSA+PSBjdXJS
ZWN0Lm1heFkoKTsKICAgICBkZWZhdWx0OgogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNTQ0LDE4ICs1NDQsMTggQEAgdm9pZCBlbnRyeUFu
ZEV4aXRQb2ludHNGb3JEaXJlY3Rpb24oRm9jdQogICAgIHN3aXRjaCAoZGlyZWN0aW9uKSB7CiAg
ICAgY2FzZSBGb2N1c0RpcmVjdGlvbkxlZnQ6CiAgICAgICAgIGV4aXRQb2ludC5zZXRYKHN0YXJ0
aW5nUmVjdC54KCkpOwotICAgICAgICBlbnRyeVBvaW50LnNldFgocG90ZW50aWFsUmVjdC5yaWdo
dCgpKTsKKyAgICAgICAgZW50cnlQb2ludC5zZXRYKHBvdGVudGlhbFJlY3QubWF4WCgpKTsKICAg
ICAgICAgYnJlYWs7CiAgICAgY2FzZSBGb2N1c0RpcmVjdGlvblVwOgogICAgICAgICBleGl0UG9p
bnQuc2V0WShzdGFydGluZ1JlY3QueSgpKTsKLSAgICAgICAgZW50cnlQb2ludC5zZXRZKHBvdGVu
dGlhbFJlY3QuYm90dG9tKCkpOworICAgICAgICBlbnRyeVBvaW50LnNldFkocG90ZW50aWFsUmVj
dC5tYXhZKCkpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEZvY3VzRGlyZWN0aW9uUmlnaHQ6
Ci0gICAgICAgIGV4aXRQb2ludC5zZXRYKHN0YXJ0aW5nUmVjdC5yaWdodCgpKTsKKyAgICAgICAg
ZXhpdFBvaW50LnNldFgoc3RhcnRpbmdSZWN0Lm1heFgoKSk7CiAgICAgICAgIGVudHJ5UG9pbnQu
c2V0WChwb3RlbnRpYWxSZWN0LngoKSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgRm9jdXNE
aXJlY3Rpb25Eb3duOgotICAgICAgICBleGl0UG9pbnQuc2V0WShzdGFydGluZ1JlY3QuYm90dG9t
KCkpOworICAgICAgICBleGl0UG9pbnQuc2V0WShzdGFydGluZ1JlY3QubWF4WSgpKTsKICAgICAg
ICAgZW50cnlQb2ludC5zZXRZKHBvdGVudGlhbFJlY3QueSgpKTsKICAgICAgICAgYnJlYWs7CiAg
ICAgZGVmYXVsdDoKQEAgLTU2Nyw5ICs1NjcsOSBAQCB2b2lkIGVudHJ5QW5kRXhpdFBvaW50c0Zv
ckRpcmVjdGlvbihGb2N1CiAgICAgY2FzZSBGb2N1c0RpcmVjdGlvblJpZ2h0OgogICAgICAgICBp
ZiAoYmVsb3coc3RhcnRpbmdSZWN0LCBwb3RlbnRpYWxSZWN0KSkgewogICAgICAgICAgICAgZXhp
dFBvaW50LnNldFkoc3RhcnRpbmdSZWN0LnkoKSk7Ci0gICAgICAgICAgICBlbnRyeVBvaW50LnNl
dFkocG90ZW50aWFsUmVjdC5ib3R0b20oKSk7CisgICAgICAgICAgICBlbnRyeVBvaW50LnNldFko
cG90ZW50aWFsUmVjdC5tYXhZKCkpOwogICAgICAgICB9IGVsc2UgaWYgKGJlbG93KHBvdGVudGlh
bFJlY3QsIHN0YXJ0aW5nUmVjdCkpIHsKLSAgICAgICAgICAgIGV4aXRQb2ludC5zZXRZKHN0YXJ0
aW5nUmVjdC5ib3R0b20oKSk7CisgICAgICAgICAgICBleGl0UG9pbnQuc2V0WShzdGFydGluZ1Jl
Y3QubWF4WSgpKTsKICAgICAgICAgICAgIGVudHJ5UG9pbnQuc2V0WShwb3RlbnRpYWxSZWN0Lnko
KSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBleGl0UG9pbnQuc2V0WShtYXgoc3Rh
cnRpbmdSZWN0LnkoKSwgcG90ZW50aWFsUmVjdC55KCkpKTsKQEAgLTU4MCw5ICs1ODAsOSBAQCB2
b2lkIGVudHJ5QW5kRXhpdFBvaW50c0ZvckRpcmVjdGlvbihGb2N1CiAgICAgY2FzZSBGb2N1c0Rp
cmVjdGlvbkRvd246CiAgICAgICAgIGlmIChyaWdodE9mKHN0YXJ0aW5nUmVjdCwgcG90ZW50aWFs
UmVjdCkpIHsKICAgICAgICAgICAgIGV4aXRQb2ludC5zZXRYKHN0YXJ0aW5nUmVjdC54KCkpOwot
ICAgICAgICAgICAgZW50cnlQb2ludC5zZXRYKHBvdGVudGlhbFJlY3QucmlnaHQoKSk7CisgICAg
ICAgICAgICBlbnRyeVBvaW50LnNldFgocG90ZW50aWFsUmVjdC5tYXhYKCkpOwogICAgICAgICB9
IGVsc2UgaWYgKHJpZ2h0T2YocG90ZW50aWFsUmVjdCwgc3RhcnRpbmdSZWN0KSkgewotICAgICAg
ICAgICAgZXhpdFBvaW50LnNldFgoc3RhcnRpbmdSZWN0LnJpZ2h0KCkpOworICAgICAgICAgICAg
ZXhpdFBvaW50LnNldFgoc3RhcnRpbmdSZWN0Lm1heFgoKSk7CiAgICAgICAgICAgICBlbnRyeVBv
aW50LnNldFgocG90ZW50aWFsUmVjdC54KCkpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAg
ICAgZXhpdFBvaW50LnNldFgobWF4KHN0YXJ0aW5nUmVjdC54KCksIHBvdGVudGlhbFJlY3QueCgp
KSk7CkBAIC02NzUsMTEgKzY3NSwxMSBAQCBJbnRSZWN0IHZpcnR1YWxSZWN0Rm9yRGlyZWN0aW9u
KEZvY3VzRGlyCiAgICAgSW50UmVjdCB2aXJ0dWFsU3RhcnRpbmdSZWN0ID0gc3RhcnRpbmdSZWN0
OwogICAgIHN3aXRjaCAoZGlyZWN0aW9uKSB7CiAgICAgY2FzZSBGb2N1c0RpcmVjdGlvbkxlZnQ6
Ci0gICAgICAgIHZpcnR1YWxTdGFydGluZ1JlY3Quc2V0WCh2aXJ0dWFsU3RhcnRpbmdSZWN0LnJp
Z2h0KCkgLSB3aWR0aCk7CisgICAgICAgIHZpcnR1YWxTdGFydGluZ1JlY3Quc2V0WCh2aXJ0dWFs
U3RhcnRpbmdSZWN0Lm1heFgoKSAtIHdpZHRoKTsKICAgICAgICAgdmlydHVhbFN0YXJ0aW5nUmVj
dC5zZXRXaWR0aCh3aWR0aCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgRm9jdXNEaXJlY3Rp
b25VcDoKLSAgICAgICAgdmlydHVhbFN0YXJ0aW5nUmVjdC5zZXRZKHZpcnR1YWxTdGFydGluZ1Jl
Y3QuYm90dG9tKCkgLSB3aWR0aCk7CisgICAgICAgIHZpcnR1YWxTdGFydGluZ1JlY3Quc2V0WSh2
aXJ0dWFsU3RhcnRpbmdSZWN0Lm1heFkoKSAtIHdpZHRoKTsKICAgICAgICAgdmlydHVhbFN0YXJ0
aW5nUmVjdC5zZXRIZWlnaHQod2lkdGgpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEZvY3Vz
RGlyZWN0aW9uUmlnaHQ6CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL1dpbmRvd0ZlYXR1cmVz
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL1dpbmRvd0ZlYXR1cmVzLmNw
cAkocmV2aXNpb24gNzcyNzgpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL1dpbmRvd0ZlYXR1cmVz
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTg2LDkgKzE4Niw5IEBAIFdpbmRvd0ZlYXR1cmVzOjpX
aW5kb3dGZWF0dXJlcyhjb25zdCBTdHIKICAgICB3aWR0aCA9IGZsb2F0RmVhdHVyZShmZWF0dXJl
cywgImRpYWxvZ3dpZHRoIiwgMTAwLCBzY3JlZW5BdmFpbGFibGVSZWN0LndpZHRoKCksIDYyMCk7
IC8vIGRlZmF1bHQgaGVyZSBjYW1lIGZyb20gZnJhbWUgc2l6ZSBvZiBkaWFsb2cgaW4gTWFjSUUK
ICAgICBoZWlnaHQgPSBmbG9hdEZlYXR1cmUoZmVhdHVyZXMsICJkaWFsb2doZWlnaHQiLCAxMDAs
IHNjcmVlbkF2YWlsYWJsZVJlY3QuaGVpZ2h0KCksIDQ1MCk7IC8vIGRlZmF1bHQgaGVyZSBjYW1l
IGZyb20gZnJhbWUgc2l6ZSBvZiBkaWFsb2cgaW4gTWFjSUUKIAotICAgIHggPSBmbG9hdEZlYXR1
cmUoZmVhdHVyZXMsICJkaWFsb2dsZWZ0Iiwgc2NyZWVuQXZhaWxhYmxlUmVjdC54KCksIHNjcmVl
bkF2YWlsYWJsZVJlY3QucmlnaHQoKSAtIHdpZHRoLCAtMSk7CisgICAgeCA9IGZsb2F0RmVhdHVy
ZShmZWF0dXJlcywgImRpYWxvZ2xlZnQiLCBzY3JlZW5BdmFpbGFibGVSZWN0LngoKSwgc2NyZWVu
QXZhaWxhYmxlUmVjdC5tYXhYKCkgLSB3aWR0aCwgLTEpOwogICAgIHhTZXQgPSB4ID4gMDsKLSAg
ICB5ID0gZmxvYXRGZWF0dXJlKGZlYXR1cmVzLCAiZGlhbG9ndG9wIiwgc2NyZWVuQXZhaWxhYmxl
UmVjdC55KCksIHNjcmVlbkF2YWlsYWJsZVJlY3QuYm90dG9tKCkgLSBoZWlnaHQsIC0xKTsKKyAg
ICB5ID0gZmxvYXRGZWF0dXJlKGZlYXR1cmVzLCAiZGlhbG9ndG9wIiwgc2NyZWVuQXZhaWxhYmxl
UmVjdC55KCksIHNjcmVlbkF2YWlsYWJsZVJlY3QubWF4WSgpIC0gaGVpZ2h0LCAtMSk7CiAgICAg
eVNldCA9IHkgPiAwOwogCiAgICAgaWYgKGJvb2xGZWF0dXJlKGZlYXR1cmVzLCAiY2VudGVyIiwg
dHJ1ZSkpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbFZpZXcuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbFZpZXcuY3BwCShyZXZp
c2lvbiA3NzI3OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbFZpZXcuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC05MjUsNyArOTI1LDcgQEAgdm9pZCBTY3JvbGxWaWV3OjpjYWxjdWxh
dGVPdmVyaGFuZ0FyZWFzRgogICAgIH0gZWxzZSBpZiAoc2Nyb2xsWSgpID4gY29udGVudHNIZWln
aHQoKSAtIHZpc2libGVDb250ZW50UmVjdCh0cnVlKS5oZWlnaHQoKSkgewogICAgICAgICBpbnQg
aGVpZ2h0ID0gc2Nyb2xsWSgpIC0gKGNvbnRlbnRzSGVpZ2h0KCkgLSB2aXNpYmxlQ29udGVudFJl
Y3QodHJ1ZSkuaGVpZ2h0KCkpOwogICAgICAgICBob3Jpem9udGFsT3ZlcmhhbmdSZWN0ID0gZnJh
bWVSZWN0KCk7Ci0gICAgICAgIGhvcml6b250YWxPdmVyaGFuZ1JlY3Quc2V0WShmcmFtZVJlY3Qo
KS5ib3R0b20oKSAtIGhlaWdodCk7CisgICAgICAgIGhvcml6b250YWxPdmVyaGFuZ1JlY3Quc2V0
WShmcmFtZVJlY3QoKS5tYXhZKCkgLSBoZWlnaHQpOwogICAgICAgICBob3Jpem9udGFsT3Zlcmhh
bmdSZWN0LnNldEhlaWdodChoZWlnaHQpOwogICAgIH0KIApAQCAtOTQxLDcgKzk0MSw3IEBAIHZv
aWQgU2Nyb2xsVmlldzo6Y2FsY3VsYXRlT3ZlcmhhbmdBcmVhc0YKICAgICAgICAgaW50IHdpZHRo
ID0gc2Nyb2xsWCgpIC0gKGNvbnRlbnRzV2lkdGgoKSAtIHZpc2libGVDb250ZW50UmVjdCh0cnVl
KS53aWR0aCgpKTsKICAgICAgICAgdmVydGljYWxPdmVyaGFuZ1JlY3Quc2V0V2lkdGgod2lkdGgp
OwogICAgICAgICB2ZXJ0aWNhbE92ZXJoYW5nUmVjdC5zZXRIZWlnaHQoZnJhbWVSZWN0KCkuaGVp
Z2h0KCkgLSBob3Jpem9udGFsT3ZlcmhhbmdSZWN0LmhlaWdodCgpKTsKLSAgICAgICAgdmVydGlj
YWxPdmVyaGFuZ1JlY3Quc2V0WChmcmFtZVJlY3QoKS5yaWdodCgpIC0gd2lkdGgpOworICAgICAg
ICB2ZXJ0aWNhbE92ZXJoYW5nUmVjdC5zZXRYKGZyYW1lUmVjdCgpLm1heFgoKSAtIHdpZHRoKTsK
ICAgICAgICAgaWYgKGhvcml6b250YWxPdmVyaGFuZ1JlY3QueSgpID09IGZyYW1lUmVjdCgpLnko
KSkKICAgICAgICAgICAgIHZlcnRpY2FsT3ZlcmhhbmdSZWN0LnNldFkoZnJhbWVSZWN0KCkueSgp
ICsgaG9yaXpvbnRhbE92ZXJoYW5nUmVjdC5oZWlnaHQoKSk7CiAgICAgICAgIGVsc2UKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGJhci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFyLmNwcAkocmV2aXNpb24gNzcyNzgpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
OTMsMTQgKzM5MywxNCBAQCB2b2lkIFNjcm9sbGJhcjo6c2V0RnJhbWVSZWN0KGNvbnN0IEludFJl
CiAgICAgICAgIEludFJlY3QgcmVzaXplclJlY3QgPSB2aWV3LT5jb252ZXJ0RnJvbUNvbnRhaW5p
bmdXaW5kb3codmlldy0+d2luZG93UmVzaXplclJlY3QoKSk7CiAgICAgICAgIGlmIChyZWN0Lmlu
dGVyc2VjdHMocmVzaXplclJlY3QpKSB7CiAgICAgICAgICAgICBpZiAob3JpZW50YXRpb24oKSA9
PSBIb3Jpem9udGFsU2Nyb2xsYmFyKSB7Ci0gICAgICAgICAgICAgICAgaW50IG92ZXJsYXAgPSBy
ZWN0LnJpZ2h0KCkgLSByZXNpemVyUmVjdC54KCk7Ci0gICAgICAgICAgICAgICAgaWYgKG92ZXJs
YXAgPiAwICYmIHJlc2l6ZXJSZWN0LnJpZ2h0KCkgPj0gcmVjdC5yaWdodCgpKSB7CisgICAgICAg
ICAgICAgICAgaW50IG92ZXJsYXAgPSByZWN0Lm1heFgoKSAtIHJlc2l6ZXJSZWN0LngoKTsKKyAg
ICAgICAgICAgICAgICBpZiAob3ZlcmxhcCA+IDAgJiYgcmVzaXplclJlY3QubWF4WCgpID49IHJl
Y3QubWF4WCgpKSB7CiAgICAgICAgICAgICAgICAgICAgIGFkanVzdGVkUmVjdC5zZXRXaWR0aChy
ZWN0LndpZHRoKCkgLSBvdmVybGFwKTsKICAgICAgICAgICAgICAgICAgICAgb3ZlcmxhcHNSZXNp
emVyID0gdHJ1ZTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgICAgIGludCBvdmVybGFwID0gcmVjdC5ib3R0b20oKSAtIHJlc2l6ZXJSZWN0Lnko
KTsKLSAgICAgICAgICAgICAgICBpZiAob3ZlcmxhcCA+IDAgJiYgcmVzaXplclJlY3QuYm90dG9t
KCkgPj0gcmVjdC5ib3R0b20oKSkgeworICAgICAgICAgICAgICAgIGludCBvdmVybGFwID0gcmVj
dC5tYXhZKCkgLSByZXNpemVyUmVjdC55KCk7CisgICAgICAgICAgICAgICAgaWYgKG92ZXJsYXAg
PiAwICYmIHJlc2l6ZXJSZWN0Lm1heFkoKSA+PSByZWN0Lm1heFkoKSkgewogICAgICAgICAgICAg
ICAgICAgICBhZGp1c3RlZFJlY3Quc2V0SGVpZ2h0KHJlY3QuaGVpZ2h0KCkgLSBvdmVybGFwKTsK
ICAgICAgICAgICAgICAgICAgICAgb3ZlcmxhcHNSZXNpemVyID0gdHJ1ZTsKICAgICAgICAgICAg
ICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXJUaGVtZUNvbXBv
c2l0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFy
VGhlbWVDb21wb3NpdGUuY3BwCShyZXZpc2lvbiA3NzI3OCkKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL1Njcm9sbGJhclRoZW1lQ29tcG9zaXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQ4
LDExICsyNDgsMTEgQEAgdm9pZCBTY3JvbGxiYXJUaGVtZUNvbXBvc2l0ZTo6c3BsaXRUcmFjawog
ICAgIGlmIChzY3JvbGxiYXItPm9yaWVudGF0aW9uKCkgPT0gSG9yaXpvbnRhbFNjcm9sbGJhcikg
ewogICAgICAgICB0aHVtYlJlY3QgPSBJbnRSZWN0KHRyYWNrUmVjdC54KCkgKyB0aHVtYlBvcywg
dHJhY2tSZWN0LnkoKSArICh0cmFja1JlY3QuaGVpZ2h0KCkgLSB0aGlja25lc3MpIC8gMiwgdGh1
bWJMZW5ndGgoc2Nyb2xsYmFyKSwgdGhpY2tuZXNzKTsgCiAgICAgICAgIGJlZm9yZVRodW1iUmVj
dCA9IEludFJlY3QodHJhY2tSZWN0LngoKSwgdHJhY2tSZWN0LnkoKSwgdGh1bWJQb3MgKyB0aHVt
YlJlY3Qud2lkdGgoKSAvIDIsIHRyYWNrUmVjdC5oZWlnaHQoKSk7IAotICAgICAgICBhZnRlclRo
dW1iUmVjdCA9IEludFJlY3QodHJhY2tSZWN0LngoKSArIGJlZm9yZVRodW1iUmVjdC53aWR0aCgp
LCB0cmFja1JlY3QueSgpLCB0cmFja1JlY3QucmlnaHQoKSAtIGJlZm9yZVRodW1iUmVjdC5yaWdo
dCgpLCB0cmFja1JlY3QuaGVpZ2h0KCkpOworICAgICAgICBhZnRlclRodW1iUmVjdCA9IEludFJl
Y3QodHJhY2tSZWN0LngoKSArIGJlZm9yZVRodW1iUmVjdC53aWR0aCgpLCB0cmFja1JlY3QueSgp
LCB0cmFja1JlY3QubWF4WCgpIC0gYmVmb3JlVGh1bWJSZWN0Lm1heFgoKSwgdHJhY2tSZWN0Lmhl
aWdodCgpKTsKICAgICB9IGVsc2UgewogICAgICAgICB0aHVtYlJlY3QgPSBJbnRSZWN0KHRyYWNr
UmVjdC54KCkgKyAodHJhY2tSZWN0LndpZHRoKCkgLSB0aGlja25lc3MpIC8gMiwgdHJhY2tSZWN0
LnkoKSArIHRodW1iUG9zLCB0aGlja25lc3MsIHRodW1iTGVuZ3RoKHNjcm9sbGJhcikpOwogICAg
ICAgICBiZWZvcmVUaHVtYlJlY3QgPSBJbnRSZWN0KHRyYWNrUmVjdC54KCksIHRyYWNrUmVjdC55
KCksIHRyYWNrUmVjdC53aWR0aCgpLCB0aHVtYlBvcyArIHRodW1iUmVjdC5oZWlnaHQoKSAvIDIp
OyAKLSAgICAgICAgYWZ0ZXJUaHVtYlJlY3QgPSBJbnRSZWN0KHRyYWNrUmVjdC54KCksIHRyYWNr
UmVjdC55KCkgKyBiZWZvcmVUaHVtYlJlY3QuaGVpZ2h0KCksIHRyYWNrUmVjdC53aWR0aCgpLCB0
cmFja1JlY3QuYm90dG9tKCkgLSBiZWZvcmVUaHVtYlJlY3QuYm90dG9tKCkpOworICAgICAgICBh
ZnRlclRodW1iUmVjdCA9IEludFJlY3QodHJhY2tSZWN0LngoKSwgdHJhY2tSZWN0LnkoKSArIGJl
Zm9yZVRodW1iUmVjdC5oZWlnaHQoKSwgdHJhY2tSZWN0LndpZHRoKCksIHRyYWNrUmVjdC5tYXhZ
KCkgLSBiZWZvcmVUaHVtYlJlY3QubWF4WSgpKTsKICAgICB9CiB9CiAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1Njcm9sbGJhclRoZW1lQ2hyb21pdW0uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1Njcm9sbGJhclRoZW1l
Q2hyb21pdW0uY3BwCShyZXZpc2lvbiA3NzI3OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2Nocm9taXVtL1Njcm9sbGJhclRoZW1lQ2hyb21pdW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
MjgsNyArMTI4LDcgQEAgdm9pZCBTY3JvbGxiYXJUaGVtZUNocm9taXVtOjpwYWludFRpY2ttYQog
ICAgICAgICBjb25zdCBmbG9hdCBwZXJjZW50ID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KGktPnkoKSkg
LyBzY3JvbGxiYXItPnRvdGFsU2l6ZSgpOwogCiAgICAgICAgIC8vIENhbGN1bGF0ZSBob3cgZmFy
IGRvd24gKGluIHBpeGVscykgdGhlIHRpY2stbWFyayBzaG91bGQgYXBwZWFyLgotICAgICAgICBj
b25zdCBpbnQgeVBvcyA9IHJlY3QudG9wTGVmdCgpLnkoKSArIChyZWN0LmhlaWdodCgpICogcGVy
Y2VudCk7CisgICAgICAgIGNvbnN0IGludCB5UG9zID0gcmVjdC55KCkgKyAocmVjdC5oZWlnaHQo
KSAqIHBlcmNlbnQpOwogCiAgICAgICAgIEludFBvaW50IHRpY2soc2Nyb2xsYmFyLT54KCksIHlQ
b3MpOwogICAgICAgICBjb250ZXh0LT5kcmF3SW1hZ2UoZGFzaC5nZXQoKSwgQ29sb3JTcGFjZURl
dmljZVJHQiwgdGljayk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9G
bG9hdFF1YWQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9GbG9hdFF1YWQuaAkocmV2aXNpb24gNzcyNzgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9GbG9hdFF1YWQuaAkod29ya2luZyBjb3B5KQpAQCAtNTQsOSArNTQsOSBAQCBw
dWJsaWM6CiAKICAgICBGbG9hdFF1YWQoY29uc3QgRmxvYXRSZWN0JiBpblJlY3QpCiAgICAgICAg
IDogbV9wMShpblJlY3QubG9jYXRpb24oKSkKLSAgICAgICAgLCBtX3AyKGluUmVjdC5yaWdodCgp
LCBpblJlY3QueSgpKQotICAgICAgICAsIG1fcDMoaW5SZWN0LnJpZ2h0KCksIGluUmVjdC5ib3R0
b20oKSkKLSAgICAgICAgLCBtX3A0KGluUmVjdC54KCksIGluUmVjdC5ib3R0b20oKSkKKyAgICAg
ICAgLCBtX3AyKGluUmVjdC5tYXhYKCksIGluUmVjdC55KCkpCisgICAgICAgICwgbV9wMyhpblJl
Y3QubWF4WCgpLCBpblJlY3QubWF4WSgpKQorICAgICAgICAsIG1fcDQoaW5SZWN0LngoKSwgaW5S
ZWN0Lm1heFkoKSkKICAgICB7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9GbG9hdFJlY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0Zsb2F0UmVjdC5jcHAJKHJldmlzaW9uIDc3Mjc4KQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRSZWN0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNTEsMjIgKzUxLDIyIEBAIGJvb2wgRmxvYXRSZWN0OjppbnRlcnNlY3RzKGNvbnN0IEZsb2F0
UmUKIHsKICAgICAvLyBDaGVja2luZyBlbXB0aW5lc3MgaGFuZGxlcyBuZWdhdGl2ZSB3aWR0aHMg
YXMgd2VsbCBhcyB6ZXJvLgogICAgIHJldHVybiAhaXNFbXB0eSgpICYmICFvdGhlci5pc0VtcHR5
KCkKLSAgICAgICAgJiYgeCgpIDwgb3RoZXIucmlnaHQoKSAmJiBvdGhlci54KCkgPCByaWdodCgp
Ci0gICAgICAgICYmIHkoKSA8IG90aGVyLmJvdHRvbSgpICYmIG90aGVyLnkoKSA8IGJvdHRvbSgp
OworICAgICAgICAmJiB4KCkgPCBvdGhlci5tYXhYKCkgJiYgb3RoZXIueCgpIDwgbWF4WCgpCisg
ICAgICAgICYmIHkoKSA8IG90aGVyLm1heFkoKSAmJiBvdGhlci55KCkgPCBtYXhZKCk7CiB9CiAK
IGJvb2wgRmxvYXRSZWN0Ojpjb250YWlucyhjb25zdCBGbG9hdFJlY3QmIG90aGVyKSBjb25zdAog
ewotICAgIHJldHVybiB4KCkgPD0gb3RoZXIueCgpICYmIHJpZ2h0KCkgPj0gb3RoZXIucmlnaHQo
KQotICAgICAgICAmJiB5KCkgPD0gb3RoZXIueSgpICYmIGJvdHRvbSgpID49IG90aGVyLmJvdHRv
bSgpOworICAgIHJldHVybiB4KCkgPD0gb3RoZXIueCgpICYmIG1heFgoKSA+PSBvdGhlci5tYXhY
KCkKKyAgICAgICAgJiYgeSgpIDw9IG90aGVyLnkoKSAmJiBtYXhZKCkgPj0gb3RoZXIubWF4WSgp
OwogfQogCiB2b2lkIEZsb2F0UmVjdDo6aW50ZXJzZWN0KGNvbnN0IEZsb2F0UmVjdCYgb3RoZXIp
CiB7CiAgICAgZmxvYXQgbCA9IG1heCh4KCksIG90aGVyLngoKSk7CiAgICAgZmxvYXQgdCA9IG1h
eCh5KCksIG90aGVyLnkoKSk7Ci0gICAgZmxvYXQgciA9IG1pbihyaWdodCgpLCBvdGhlci5yaWdo
dCgpKTsKLSAgICBmbG9hdCBiID0gbWluKGJvdHRvbSgpLCBvdGhlci5ib3R0b20oKSk7CisgICAg
ZmxvYXQgciA9IG1pbihtYXhYKCksIG90aGVyLm1heFgoKSk7CisgICAgZmxvYXQgYiA9IG1pbiht
YXhZKCksIG90aGVyLm1heFkoKSk7CiAKICAgICAvLyBSZXR1cm4gYSBjbGVhbiBlbXB0eSByZWN0
YW5nbGUgZm9yIG5vbi1pbnRlcnNlY3RpbmcgY2FzZXMuCiAgICAgaWYgKGwgPj0gciB8fCB0ID49
IGIpIHsKQEAgLTkxLDggKzkxLDggQEAgdm9pZCBGbG9hdFJlY3Q6OnVuaXRlKGNvbnN0IEZsb2F0
UmVjdCYgbwogCiAgICAgZmxvYXQgbCA9IG1pbih4KCksIG90aGVyLngoKSk7CiAgICAgZmxvYXQg
dCA9IG1pbih5KCksIG90aGVyLnkoKSk7Ci0gICAgZmxvYXQgciA9IG1heChyaWdodCgpLCBvdGhl
ci5yaWdodCgpKTsKLSAgICBmbG9hdCBiID0gbWF4KGJvdHRvbSgpLCBvdGhlci5ib3R0b20oKSk7
CisgICAgZmxvYXQgciA9IG1heChtYXhYKCksIG90aGVyLm1heFgoKSk7CisgICAgZmxvYXQgYiA9
IG1heChtYXhZKCksIG90aGVyLm1heFkoKSk7CiAKICAgICBzZXRMb2NhdGlvbkFuZFNpemVGcm9t
RWRnZXMobCwgdCwgciwgYik7CiB9CkBAIC0xODAsOCArMTgwLDggQEAgSW50UmVjdCBlbmNsb3Np
bmdJbnRSZWN0KGNvbnN0IEZsb2F0UmVjdAogewogICAgIGZsb2F0IGxlZnQgPSBmbG9vcmYocmVj
dC54KCkpOwogICAgIGZsb2F0IHRvcCA9IGZsb29yZihyZWN0LnkoKSk7Ci0gICAgZmxvYXQgd2lk
dGggPSBjZWlsZihyZWN0LnJpZ2h0KCkpIC0gbGVmdDsKLSAgICBmbG9hdCBoZWlnaHQgPSBjZWls
ZihyZWN0LmJvdHRvbSgpKSAtIHRvcDsKKyAgICBmbG9hdCB3aWR0aCA9IGNlaWxmKHJlY3QubWF4
WCgpKSAtIGxlZnQ7CisgICAgZmxvYXQgaGVpZ2h0ID0gY2VpbGYocmVjdC5tYXhZKCkpIC0gdG9w
OwogICAgIHJldHVybiBJbnRSZWN0KHNhZmVGbG9hdFRvSW50KGxlZnQpLCBzYWZlRmxvYXRUb0lu
dCh0b3ApLCAKICAgICAgICAgICAgICAgICAgICBzYWZlRmxvYXRUb0ludCh3aWR0aCksIHNhZmVG
bG9hdFRvSW50KGhlaWdodCkpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvRmxvYXRSZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvRmxvYXRSZWN0LmgJKHJldmlzaW9uIDc3Mjc4KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRSZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTkwLDYgKzkw
LDggQEAgcHVibGljOgogCiAgICAgZmxvYXQgeCgpIGNvbnN0IHsgcmV0dXJuIG1fbG9jYXRpb24u
eCgpOyB9CiAgICAgZmxvYXQgeSgpIGNvbnN0IHsgcmV0dXJuIG1fbG9jYXRpb24ueSgpOyB9Cisg
ICAgZmxvYXQgbWF4WCgpIGNvbnN0IHsgcmV0dXJuIHgoKSArIHdpZHRoKCk7IH0KKyAgICBmbG9h
dCBtYXhZKCkgY29uc3QgeyByZXR1cm4geSgpICsgaGVpZ2h0KCk7IH0KICAgICBmbG9hdCB3aWR0
aCgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZS53aWR0aCgpOyB9CiAgICAgZmxvYXQgaGVpZ2h0KCkg
Y29uc3QgeyByZXR1cm4gbV9zaXplLmhlaWdodCgpOyB9CiAKQEAgLTExOSw3ICsxMjEsNyBAQCBw
dWJsaWM6CiAgICAgLy8gTm90ZSwgdGhpcyBkb2Vzbid0IG1hdGNoIHdoYXQgSW50UmVjdDo6Y29u
dGFpbnMoSW50UG9pbnQmKSBkb2VzOyB0aGUgaW50IHZlcnNpb24KICAgICAvLyBpcyByZWFsbHkg
Y2hlY2tpbmcgZm9yIGNvbnRhaW5tZW50IG9mIDF4MSByZWN0LCBidXQgdGhhdCBkb2Vzbid0IG1h
a2Ugc2Vuc2Ugd2l0aCBmbG9hdHMuCiAgICAgYm9vbCBjb250YWlucyhmbG9hdCBweCwgZmxvYXQg
cHkpIGNvbnN0Ci0gICAgICAgIHsgcmV0dXJuIHB4ID49IHgoKSAmJiBweCA8PSByaWdodCgpICYm
IHB5ID49IHkoKSAmJiBweSA8PSBib3R0b20oKTsgfQorICAgICAgICB7IHJldHVybiBweCA+PSB4
KCkgJiYgcHggPD0gbWF4WCgpICYmIHB5ID49IHkoKSAmJiBweSA8PSBtYXhZKCk7IH0KICAgICBi
b29sIGNvbnRhaW5zKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KSBjb25zdCB7IHJldHVybiBjb250
YWlucyhwb2ludC54KCksIHBvaW50LnkoKSk7IH0KIAogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9JbnRSZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9JbnRSZWN0LmNwcAkocmV2aXNpb24gNzcyNzgpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbnRSZWN0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDQsMjIgKzQ0LDIyIEBAIGJvb2wgSW50UmVjdDo6aW50ZXJzZWN0cyhjb25zdCBJbnRSZWN0
JiAKIHsKICAgICAvLyBDaGVja2luZyBlbXB0aW5lc3MgaGFuZGxlcyBuZWdhdGl2ZSB3aWR0aHMg
YXMgd2VsbCBhcyB6ZXJvLgogICAgIHJldHVybiAhaXNFbXB0eSgpICYmICFvdGhlci5pc0VtcHR5
KCkKLSAgICAgICAgJiYgeCgpIDwgb3RoZXIucmlnaHQoKSAmJiBvdGhlci54KCkgPCByaWdodCgp
Ci0gICAgICAgICYmIHkoKSA8IG90aGVyLmJvdHRvbSgpICYmIG90aGVyLnkoKSA8IGJvdHRvbSgp
OworICAgICAgICAmJiB4KCkgPCBvdGhlci5tYXhYKCkgJiYgb3RoZXIueCgpIDwgbWF4WCgpCisg
ICAgICAgICYmIHkoKSA8IG90aGVyLm1heFkoKSAmJiBvdGhlci55KCkgPCBtYXhZKCk7CiB9CiAK
IGJvb2wgSW50UmVjdDo6Y29udGFpbnMoY29uc3QgSW50UmVjdCYgb3RoZXIpIGNvbnN0CiB7Ci0g
ICAgcmV0dXJuIHgoKSA8PSBvdGhlci54KCkgJiYgcmlnaHQoKSA+PSBvdGhlci5yaWdodCgpCi0g
ICAgICAgICYmIHkoKSA8PSBvdGhlci55KCkgJiYgYm90dG9tKCkgPj0gb3RoZXIuYm90dG9tKCk7
CisgICAgcmV0dXJuIHgoKSA8PSBvdGhlci54KCkgJiYgbWF4WCgpID49IG90aGVyLm1heFgoKQor
ICAgICAgICAmJiB5KCkgPD0gb3RoZXIueSgpICYmIG1heFkoKSA+PSBvdGhlci5tYXhZKCk7CiB9
CiAKIHZvaWQgSW50UmVjdDo6aW50ZXJzZWN0KGNvbnN0IEludFJlY3QmIG90aGVyKQogewogICAg
IGludCBsID0gbWF4KHgoKSwgb3RoZXIueCgpKTsKICAgICBpbnQgdCA9IG1heCh5KCksIG90aGVy
LnkoKSk7Ci0gICAgaW50IHIgPSBtaW4ocmlnaHQoKSwgb3RoZXIucmlnaHQoKSk7Ci0gICAgaW50
IGIgPSBtaW4oYm90dG9tKCksIG90aGVyLmJvdHRvbSgpKTsKKyAgICBpbnQgciA9IG1pbihtYXhY
KCksIG90aGVyLm1heFgoKSk7CisgICAgaW50IGIgPSBtaW4obWF4WSgpLCBvdGhlci5tYXhZKCkp
OwogCiAgICAgLy8gUmV0dXJuIGEgY2xlYW4gZW1wdHkgcmVjdGFuZ2xlIGZvciBub24taW50ZXJz
ZWN0aW5nIGNhc2VzLgogICAgIGlmIChsID49IHIgfHwgdCA+PSBiKSB7CkBAIC04Nyw4ICs4Nyw4
IEBAIHZvaWQgSW50UmVjdDo6dW5pdGUoY29uc3QgSW50UmVjdCYgb3RoZXIKIAogICAgIGludCBs
ID0gbWluKHgoKSwgb3RoZXIueCgpKTsKICAgICBpbnQgdCA9IG1pbih5KCksIG90aGVyLnkoKSk7
Ci0gICAgaW50IHIgPSBtYXgocmlnaHQoKSwgb3RoZXIucmlnaHQoKSk7Ci0gICAgaW50IGIgPSBt
YXgoYm90dG9tKCksIG90aGVyLmJvdHRvbSgpKTsKKyAgICBpbnQgciA9IG1heChtYXhYKCksIG90
aGVyLm1heFgoKSk7CisgICAgaW50IGIgPSBtYXgobWF4WSgpLCBvdGhlci5tYXhZKCkpOwogCiAg
ICAgbV9sb2NhdGlvbi5zZXRYKGwpOwogICAgIG1fbG9jYXRpb24uc2V0WSh0KTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ludFJlY3QuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbnRSZWN0LmgJKHJldmlzaW9uIDc3Mjc4
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW50UmVjdC5oCSh3b3JraW5n
IGNvcHkpCkBAIC05MSw2ICs5MSw4IEBAIHB1YmxpYzoKIAogICAgIGludCB4KCkgY29uc3QgeyBy
ZXR1cm4gbV9sb2NhdGlvbi54KCk7IH0KICAgICBpbnQgeSgpIGNvbnN0IHsgcmV0dXJuIG1fbG9j
YXRpb24ueSgpOyB9CisgICAgaW50IG1heFgoKSBjb25zdCB7IHJldHVybiB4KCkgKyB3aWR0aCgp
OyB9CisgICAgaW50IG1heFkoKSBjb25zdCB7IHJldHVybiB5KCkgKyBoZWlnaHQoKTsgfQogICAg
IGludCB3aWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZS53aWR0aCgpOyB9CiAgICAgaW50IGhl
aWdodCgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZS5oZWlnaHQoKTsgfQogCkBAIC05OSwxMyArMTAx
LDYgQEAgcHVibGljOgogICAgIHZvaWQgc2V0V2lkdGgoaW50IHdpZHRoKSB7IG1fc2l6ZS5zZXRX
aWR0aCh3aWR0aCk7IH0KICAgICB2b2lkIHNldEhlaWdodChpbnQgaGVpZ2h0KSB7IG1fc2l6ZS5z
ZXRIZWlnaHQoaGVpZ2h0KTsgfQogCi0gICAgLy8gQmUgY2FyZWZ1bCB3aXRoIHRoZXNlIGZ1bmN0
aW9ucy4gIFRoZSBwb2ludCBpcyBjb25zaWRlcmVkIHRvIGJlIHRvIHRoZSByaWdodCBhbmQgYmVs
b3cuICBUaGVzZSBhcmUgbm90Ci0gICAgLy8gc3Vic3RpdHV0ZXMgZm9yIHJpZ2h0KCkgYW5kIGJv
dHRvbSgpLgotICAgIEludFBvaW50IHRvcExlZnQoKSBjb25zdCB7IHJldHVybiBtX2xvY2F0aW9u
OyB9Ci0gICAgSW50UG9pbnQgdG9wUmlnaHQoKSBjb25zdCB7IHJldHVybiBJbnRQb2ludChyaWdo
dCgpIC0gMSwgeSgpKTsgfQotICAgIEludFBvaW50IGJvdHRvbUxlZnQoKSBjb25zdCB7IHJldHVy
biBJbnRQb2ludCh4KCksIGJvdHRvbSgpIC0gMSk7IH0KLSAgICBJbnRQb2ludCBib3R0b21SaWdo
dCgpIGNvbnN0IHsgcmV0dXJuIEludFBvaW50KHJpZ2h0KCkgLSAxLCBib3R0b20oKSAtIDEpOyB9
Ci0KICAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiBtX3NpemUuaXNFbXB0eSgpOyB9
CiAKICAgICBpbnQgcmlnaHQoKSBjb25zdCB7IHJldHVybiB4KCkgKyB3aWR0aCgpOyB9CkBAIC0x
MTgsMjYgKzExMywyNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBtb3ZlKGNvbnN0IEludFNpemUmIHMp
IHsgbV9sb2NhdGlvbiArPSBzOyB9IAogICAgIHZvaWQgbW92ZShpbnQgZHgsIGludCBkeSkgeyBt
X2xvY2F0aW9uLm1vdmUoZHgsIGR5KTsgfSAKICAgICAKLSAgICB2b2lkIHNoaWZ0TGVmdEVkZ2VU
byhpbnQgZWRnZSkKKyAgICB2b2lkIHNoaWZ0WEVkZ2VUbyhpbnQgZWRnZSkKICAgICB7CiAgICAg
ICAgIGludCBkZWx0YSA9IGVkZ2UgLSB4KCk7CiAgICAgICAgIHNldFgoZWRnZSk7CiAgICAgICAg
IHNldFdpZHRoKHN0ZDo6bWF4KDAsIHdpZHRoKCkgLSBkZWx0YSkpOwogICAgIH0KLSAgICB2b2lk
IHNoaWZ0UmlnaHRFZGdlVG8oaW50IGVkZ2UpCisgICAgdm9pZCBzaGlmdE1heFhFZGdlVG8oaW50
IGVkZ2UpCiAgICAgewotICAgICAgICBpbnQgZGVsdGEgPSBlZGdlIC0gcmlnaHQoKTsKKyAgICAg
ICAgaW50IGRlbHRhID0gZWRnZSAtIG1heFgoKTsKICAgICAgICAgc2V0V2lkdGgoc3RkOjptYXgo
MCwgd2lkdGgoKSArIGRlbHRhKSk7CiAgICAgfQotICAgIHZvaWQgc2hpZnRUb3BFZGdlVG8oaW50
IGVkZ2UpCisgICAgdm9pZCBzaGlmdFlFZGdlVG8oaW50IGVkZ2UpCiAgICAgewogICAgICAgICBp
bnQgZGVsdGEgPSBlZGdlIC0geSgpOwogICAgICAgICBzZXRZKGVkZ2UpOwogICAgICAgICBzZXRI
ZWlnaHQoc3RkOjptYXgoMCwgaGVpZ2h0KCkgLSBkZWx0YSkpOwogICAgIH0KLSAgICB2b2lkIHNo
aWZ0Qm90dG9tRWRnZVRvKGludCBlZGdlKQorICAgIHZvaWQgc2hpZnRNYXhZRWRnZVRvKGludCBl
ZGdlKQogICAgIHsKLSAgICAgICAgaW50IGRlbHRhID0gZWRnZSAtIGJvdHRvbSgpOworICAgICAg
ICBpbnQgZGVsdGEgPSBlZGdlIC0gbWF4WSgpOwogICAgICAgICBzZXRIZWlnaHQoc3RkOjptYXgo
MCwgaGVpZ2h0KCkgKyBkZWx0YSkpOwogICAgIH0KIApAQCAtMTQ3LDcgKzE0Miw3IEBAIHB1Ymxp
YzoKICAgICAvLyBUaGlzIGNoZWNrcyB0byBzZWUgaWYgdGhlIHJlY3QgY29udGFpbnMgeCx5IGlu
IHRoZSB0cmFkaXRpb25hbCBzZW5zZS4KICAgICAvLyBFcXVpdmFsZW50IHRvIGNoZWNraW5nIGlm
IHRoZSByZWN0IGNvbnRhaW5zIGEgMXgxIHJlY3QgYmVsb3cgYW5kIHRvIHRoZSByaWdodCBvZiAo
cHgscHkpLgogICAgIGJvb2wgY29udGFpbnMoaW50IHB4LCBpbnQgcHkpIGNvbnN0Ci0gICAgICAg
IHsgcmV0dXJuIHB4ID49IHgoKSAmJiBweCA8IHJpZ2h0KCkgJiYgcHkgPj0geSgpICYmIHB5IDwg
Ym90dG9tKCk7IH0KKyAgICAgICAgeyByZXR1cm4gcHggPj0geCgpICYmIHB4IDwgbWF4WCgpICYm
IHB5ID49IHkoKSAmJiBweSA8IG1heFkoKTsgfQogICAgIGJvb2wgY29udGFpbnMoY29uc3QgSW50
UG9pbnQmIHBvaW50KSBjb25zdCB7IHJldHVybiBjb250YWlucyhwb2ludC54KCksIHBvaW50Lnko
KSk7IH0KIAogICAgIHZvaWQgaW50ZXJzZWN0KGNvbnN0IEludFJlY3QmKTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1dpZHRoSXRlcmF0b3IuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1dpZHRoSXRlcmF0b3IuY3BwCShy
ZXZpc2lvbiA3NzI3OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1dpZHRo
SXRlcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNTUsOSArMjU1LDkgQEAgdm9pZCBXaWR0
aEl0ZXJhdG9yOjphZHZhbmNlKGludCBvZmZzZXQsIAogICAgICAgICBsYXN0Um91bmRpbmdXaWR0
aCA9IHdpZHRoIC0gb2xkV2lkdGg7CiAKICAgICAgICAgaWYgKG1fYWNjb3VudEZvckdseXBoQm91
bmRzKSB7Ci0gICAgICAgICAgICBtX21heEdseXBoQm91bmRpbmdCb3hZID0gbWF4KG1fbWF4R2x5
cGhCb3VuZGluZ0JveFksIGJvdW5kcy5ib3R0b20oKSk7CisgICAgICAgICAgICBtX21heEdseXBo
Qm91bmRpbmdCb3hZID0gbWF4KG1fbWF4R2x5cGhCb3VuZGluZ0JveFksIGJvdW5kcy5tYXhZKCkp
OwogICAgICAgICAgICAgbV9taW5HbHlwaEJvdW5kaW5nQm94WSA9IG1pbihtX21pbkdseXBoQm91
bmRpbmdCb3hZLCBib3VuZHMueSgpKTsKLSAgICAgICAgICAgIG1fbGFzdEdseXBoT3ZlcmZsb3cg
PSBtYXg8ZmxvYXQ+KDAsIGJvdW5kcy5yaWdodCgpIC0gd2lkdGgpOworICAgICAgICAgICAgbV9s
YXN0R2x5cGhPdmVyZmxvdyA9IG1heDxmbG9hdD4oMCwgYm91bmRzLm1heFgoKSAtIHdpZHRoKTsK
ICAgICAgICAgfQogICAgIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmNwcAkocmV2aXNpb24gNzcy
NzgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRl
eHRDRy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2Niw5ICsxNjYsOSBAQCB2b2lkIEdyYXBoaWNz
Q29udGV4dDo6ZHJhd1JlY3QoY29uc3QgSW50CiAgICAgICAgICAgICBzZXRDR0ZpbGxDb2xvcihj
b250ZXh0LCBzdHJva2VDb2xvcigpLCBzdHJva2VDb2xvclNwYWNlKCkpOwogICAgICAgICBDR1Jl
Y3QgcmVjdHNbNF0gPSB7CiAgICAgICAgICAgICBGbG9hdFJlY3QocmVjdC54KCksIHJlY3QueSgp
LCByZWN0LndpZHRoKCksIDEpLAotICAgICAgICAgICAgRmxvYXRSZWN0KHJlY3QueCgpLCByZWN0
LmJvdHRvbSgpIC0gMSwgcmVjdC53aWR0aCgpLCAxKSwKKyAgICAgICAgICAgIEZsb2F0UmVjdChy
ZWN0LngoKSwgcmVjdC5tYXhZKCkgLSAxLCByZWN0LndpZHRoKCksIDEpLAogICAgICAgICAgICAg
RmxvYXRSZWN0KHJlY3QueCgpLCByZWN0LnkoKSArIDEsIDEsIHJlY3QuaGVpZ2h0KCkgLSAyKSwK
LSAgICAgICAgICAgIEZsb2F0UmVjdChyZWN0LnJpZ2h0KCkgLSAxLCByZWN0LnkoKSArIDEsIDEs
IHJlY3QuaGVpZ2h0KCkgLSAyKQorICAgICAgICAgICAgRmxvYXRSZWN0KHJlY3QubWF4WCgpIC0g
MSwgcmVjdC55KCkgKyAxLCAxLCByZWN0LmhlaWdodCgpIC0gMikKICAgICAgICAgfTsKICAgICAg
ICAgQ0dDb250ZXh0RmlsbFJlY3RzKGNvbnRleHQsIHJlY3RzLCA0KTsKICAgICAgICAgaWYgKG9s
ZEZpbGxDb2xvciAhPSBzdHJva2VDb2xvcigpKQpAQCAtNTY0LDcgKzU2NCw3IEBAIHZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpmaWxsUGF0aChjb25zdCBQYXQKICAgICAgICAgICAgICAgICBDR0NvbnRl
eHRDbGlwKGxheWVyQ29udGV4dCk7CiAKICAgICAgICAgICAgIG1fc3RhdGUuZmlsbEdyYWRpZW50
LT5wYWludChsYXllckNvbnRleHQpOwotICAgICAgICAgICAgQ0dDb250ZXh0RHJhd0xheWVyQXRQ
b2ludChjb250ZXh0LCBDR1BvaW50TWFrZShyZWN0LmxlZnQoKSwgcmVjdC50b3AoKSksIGxheWVy
KTsKKyAgICAgICAgICAgIENHQ29udGV4dERyYXdMYXllckF0UG9pbnQoY29udGV4dCwgQ0dQb2lu
dE1ha2UocmVjdC54KCksIHJlY3QueSgpKSwgbGF5ZXIpOwogICAgICAgICAgICAgQ0dMYXllclJl
bGVhc2UobGF5ZXIpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgQ0dDb250ZXh0QmVn
aW5QYXRoKGNvbnRleHQpOwpAQCAtNjQ2LDcgKzY0Niw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0
OjpmaWxsUmVjdChjb25zdCBGbG8KIAogICAgICAgICAgICAgQ0dDb250ZXh0Q29uY2F0Q1RNKGxh
eWVyQ29udGV4dCwgbV9zdGF0ZS5maWxsR3JhZGllbnQtPmdyYWRpZW50U3BhY2VUcmFuc2Zvcm0o
KSk7CiAgICAgICAgICAgICBtX3N0YXRlLmZpbGxHcmFkaWVudC0+cGFpbnQobGF5ZXJDb250ZXh0
KTsKLSAgICAgICAgICAgIENHQ29udGV4dERyYXdMYXllckF0UG9pbnQoY29udGV4dCwgQ0dQb2lu
dE1ha2UocmVjdC5sZWZ0KCksIHJlY3QudG9wKCkpLCBsYXllcik7CisgICAgICAgICAgICBDR0Nv
bnRleHREcmF3TGF5ZXJBdFBvaW50KGNvbnRleHQsIENHUG9pbnRNYWtlKHJlY3QueCgpLCByZWN0
LnkoKSksIGxheWVyKTsKICAgICAgICAgICAgIENHTGF5ZXJSZWxlYXNlKGxheWVyKTsKICAgICAg
ICAgfSBlbHNlIHsKICAgICAgICAgICAgIENHQ29udGV4dENsaXBUb1JlY3QoY29udGV4dCwgcmVj
dCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZl
ckNHLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
Zy9JbWFnZUJ1ZmZlckNHLmNwcAkocmV2aXNpb24gNzcyNzgpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjY3LDcgKzI2Nyw3IEBAIFBhc3NSZWZQdHI8Qnl0ZUFycmF5PiBnZXRJbWFnZURhdGEoY29uc3QK
ICAgICBSZWZQdHI8Qnl0ZUFycmF5PiByZXN1bHQgPSBCeXRlQXJyYXk6OmNyZWF0ZShyZWN0Lndp
ZHRoKCkgKiByZWN0LmhlaWdodCgpICogNCk7CiAgICAgdW5zaWduZWQgY2hhciogZGF0YSA9IHJl
c3VsdC0+ZGF0YSgpOwogCi0gICAgaWYgKHJlY3QueCgpIDwgMCB8fCByZWN0LnkoKSA8IDAgfHwg
cmVjdC5yaWdodCgpID4gc2l6ZS53aWR0aCgpIHx8IHJlY3QuYm90dG9tKCkgPiBzaXplLmhlaWdo
dCgpKQorICAgIGlmIChyZWN0LngoKSA8IDAgfHwgcmVjdC55KCkgPCAwIHx8IHJlY3QubWF4WCgp
ID4gc2l6ZS53aWR0aCgpIHx8IHJlY3QubWF4WSgpID4gc2l6ZS5oZWlnaHQoKSkKICAgICAgICAg
bWVtc2V0KGRhdGEsIDAsIHJlc3VsdC0+bGVuZ3RoKCkpOwogCiAgICAgaW50IG9yaWdpbnggPSBy
ZWN0LngoKTsKQEAgLTI3Niw3ICsyNzYsNyBAQCBQYXNzUmVmUHRyPEJ5dGVBcnJheT4gZ2V0SW1h
Z2VEYXRhKGNvbnN0CiAgICAgICAgIGRlc3R4ID0gLW9yaWdpbng7CiAgICAgICAgIG9yaWdpbngg
PSAwOwogICAgIH0KLSAgICBpbnQgZW5keCA9IHJlY3QucmlnaHQoKTsKKyAgICBpbnQgZW5keCA9
IHJlY3QubWF4WCgpOwogICAgIGlmIChlbmR4ID4gc2l6ZS53aWR0aCgpKQogICAgICAgICBlbmR4
ID0gc2l6ZS53aWR0aCgpOwogICAgIGludCBudW1Db2x1bW5zID0gZW5keCAtIG9yaWdpbng7CkBA
IC0yODcsNyArMjg3LDcgQEAgUGFzc1JlZlB0cjxCeXRlQXJyYXk+IGdldEltYWdlRGF0YShjb25z
dAogICAgICAgICBkZXN0eSA9IC1vcmlnaW55OwogICAgICAgICBvcmlnaW55ID0gMDsKICAgICB9
Ci0gICAgaW50IGVuZHkgPSByZWN0LmJvdHRvbSgpOworICAgIGludCBlbmR5ID0gcmVjdC5tYXhZ
KCk7CiAgICAgaWYgKGVuZHkgPiBzaXplLmhlaWdodCgpKQogICAgICAgICBlbmR5ID0gc2l6ZS5o
ZWlnaHQoKTsKICAgICBpbnQgbnVtUm93cyA9IGVuZHkgLSBvcmlnaW55OwpAQCAtMzc3LDkgKzM3
Nyw5IEBAIHZvaWQgcHV0SW1hZ2VEYXRhKEJ5dGVBcnJheSomIHNvdXJjZSwgY28KICAgICBBU1NF
UlQoZGVzdHggPj0gMCk7CiAgICAgQVNTRVJUKGRlc3R4IDwgc2l6ZS53aWR0aCgpKTsKICAgICBB
U1NFUlQob3JpZ2lueCA+PSAwKTsKLSAgICBBU1NFUlQob3JpZ2lueCA8PSBzb3VyY2VSZWN0LnJp
Z2h0KCkpOworICAgIEFTU0VSVChvcmlnaW54IDw9IHNvdXJjZVJlY3QubWF4WCgpKTsKIAotICAg
IGludCBlbmR4ID0gZGVzdFBvaW50LngoKSArIHNvdXJjZVJlY3QucmlnaHQoKTsKKyAgICBpbnQg
ZW5keCA9IGRlc3RQb2ludC54KCkgKyBzb3VyY2VSZWN0Lm1heFgoKTsKICAgICBBU1NFUlQoZW5k
eCA8PSBzaXplLndpZHRoKCkpOwogCiAgICAgaW50IG51bUNvbHVtbnMgPSBlbmR4IC0gZGVzdHg7
CkBAIC0zODksOSArMzg5LDkgQEAgdm9pZCBwdXRJbWFnZURhdGEoQnl0ZUFycmF5KiYgc291cmNl
LCBjbwogICAgIEFTU0VSVChkZXN0eSA+PSAwKTsKICAgICBBU1NFUlQoZGVzdHkgPCBzaXplLmhl
aWdodCgpKTsKICAgICBBU1NFUlQob3JpZ2lueSA+PSAwKTsKLSAgICBBU1NFUlQob3JpZ2lueSA8
PSBzb3VyY2VSZWN0LmJvdHRvbSgpKTsKKyAgICBBU1NFUlQob3JpZ2lueSA8PSBzb3VyY2VSZWN0
Lm1heFkoKSk7CiAKLSAgICBpbnQgZW5keSA9IGRlc3RQb2ludC55KCkgKyBzb3VyY2VSZWN0LmJv
dHRvbSgpOworICAgIGludCBlbmR5ID0gZGVzdFBvaW50LnkoKSArIHNvdXJjZVJlY3QubWF4WSgp
OwogICAgIEFTU0VSVChlbmR5IDw9IHNpemUuaGVpZ2h0KCkpOwogICAgIGludCBudW1Sb3dzID0g
ZW5keSAtIGRlc3R5OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
Zy9JbWFnZUNHLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jZy9JbWFnZUNHLmNwcAkocmV2aXNpb24gNzcyNzgpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUNHLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjA0LDcg
KzIwNCw3IEBAIHZvaWQgQml0bWFwSW1hZ2U6OmRyYXcoR3JhcGhpY3NDb250ZXh0KiAKICAgICAg
ICAgICAgIGFkanVzdGVkRGVzdFJlY3Quc2V0SGVpZ2h0KHN1YmltYWdlUmVjdC5oZWlnaHQoKSAv
IHlTY2FsZSk7CiAKICAgICAgICAgICAgIGltYWdlLmFkb3B0Q0YoQ0dJbWFnZUNyZWF0ZVdpdGhJ
bWFnZUluUmVjdChpbWFnZS5nZXQoKSwgc3ViaW1hZ2VSZWN0KSk7Ci0gICAgICAgICAgICBpZiAo
Y3VyckhlaWdodCA8IHNyY1JlY3QuYm90dG9tKCkpIHsKKyAgICAgICAgICAgIGlmIChjdXJySGVp
Z2h0IDwgc3JjUmVjdC5tYXhZKCkpIHsKICAgICAgICAgICAgICAgICBBU1NFUlQoQ0dJbWFnZUdl
dEhlaWdodChpbWFnZS5nZXQoKSkgPT0gY3VyckhlaWdodCAtIENHUmVjdEludGVncmFsKHNyY1Jl
Y3QpLm9yaWdpbi55KTsKICAgICAgICAgICAgICAgICBhZGp1c3RlZERlc3RSZWN0LnNldEhlaWdo
dChDR0ltYWdlR2V0SGVpZ2h0KGltYWdlLmdldCgpKSAvIHlTY2FsZSk7CiAgICAgICAgICAgICB9
CkBAIC0yMjQsNyArMjI0LDcgQEAgdm9pZCBCaXRtYXBJbWFnZTo6ZHJhdyhHcmFwaGljc0NvbnRl
eHQqIAogCiAgICAgLy8gRmxpcCB0aGUgY29vcmRzLgogICAgIENHQ29udGV4dFNjYWxlQ1RNKGNv
bnRleHQsIDEsIC0xKTsKLSAgICBhZGp1c3RlZERlc3RSZWN0LnNldFkoLWFkanVzdGVkRGVzdFJl
Y3QuYm90dG9tKCkpOworICAgIGFkanVzdGVkRGVzdFJlY3Quc2V0WSgtYWRqdXN0ZWREZXN0UmVj
dC5tYXhZKCkpOwogCiAgICAgLy8gQWRqdXN0IHRoZSBjb2xvciBzcGFjZS4KICAgICBpbWFnZSA9
IGltYWdlV2l0aENvbG9yU3BhY2UoaW1hZ2UuZ2V0KCksIHN0eWxlQ29sb3JTcGFjZSk7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GaWx0ZXJFZmZlY3QuY3BwCShyZXZpc2lvbiA3NzI3OCkKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTE5LDcgKzExOSw3IEBAIFBhc3NSZWZQdHI8Qnl0ZUFycmF5PiBGaWx0ZXJFZmZlY3Q6OmFz
UHIKIGlubGluZSB2b2lkIEZpbHRlckVmZmVjdDo6Y29weUltYWdlQnl0ZXMoQnl0ZUFycmF5KiBz
b3VyY2UsIEJ5dGVBcnJheSogZGVzdGluYXRpb24sIGNvbnN0IEludFJlY3QmIHJlY3QpCiB7CiAg
ICAgLy8gQ29weSB0aGUgbmVjZXNzYXJ5IGxpbmVzLgotICAgIGlmIChyZWN0LngoKSA8IDAgfHwg
cmVjdC55KCkgPCAwIHx8IHJlY3QuYm90dG9tKCkgPiBtX2Fic29sdXRlUGFpbnRSZWN0LndpZHRo
KCkgfHwgcmVjdC5ib3R0b20oKSA+IG1fYWJzb2x1dGVQYWludFJlY3QuaGVpZ2h0KCkpCisgICAg
aWYgKHJlY3QueCgpIDwgMCB8fCByZWN0LnkoKSA8IDAgfHwgcmVjdC5tYXhZKCkgPiBtX2Fic29s
dXRlUGFpbnRSZWN0LndpZHRoKCkgfHwgcmVjdC5tYXhZKCkgPiBtX2Fic29sdXRlUGFpbnRSZWN0
LmhlaWdodCgpKQogICAgICAgICBtZW1zZXQoZGVzdGluYXRpb24tPmRhdGEoKSwgMCwgZGVzdGlu
YXRpb24tPmxlbmd0aCgpKTsKIAogICAgIGludCB4T3JpZ2luID0gcmVjdC54KCk7CkBAIC0xMjgs
NyArMTI4LDcgQEAgaW5saW5lIHZvaWQgRmlsdGVyRWZmZWN0Ojpjb3B5SW1hZ2VCeXRlcwogICAg
ICAgICB4RGVzdCA9IC14T3JpZ2luOwogICAgICAgICB4T3JpZ2luID0gMDsKICAgICB9Ci0gICAg
aW50IHhFbmQgPSByZWN0LnJpZ2h0KCk7CisgICAgaW50IHhFbmQgPSByZWN0Lm1heFgoKTsKICAg
ICBpZiAoeEVuZCA+IG1fYWJzb2x1dGVQYWludFJlY3Qud2lkdGgoKSkKICAgICAgICAgeEVuZCA9
IG1fYWJzb2x1dGVQYWludFJlY3Qud2lkdGgoKTsKIApAQCAtMTM4LDcgKzEzOCw3IEBAIGlubGlu
ZSB2b2lkIEZpbHRlckVmZmVjdDo6Y29weUltYWdlQnl0ZXMKICAgICAgICAgeURlc3QgPSAteU9y
aWdpbjsKICAgICAgICAgeU9yaWdpbiA9IDA7CiAgICAgfQotICAgIGludCB5RW5kID0gcmVjdC5i
b3R0b20oKTsKKyAgICBpbnQgeUVuZCA9IHJlY3QubWF4WSgpOwogICAgIGlmICh5RW5kID4gbV9h
YnNvbHV0ZVBhaW50UmVjdC5oZWlnaHQoKSkKICAgICAgICAgeUVuZCA9IG1fYWJzb2x1dGVQYWlu
dFJlY3QuaGVpZ2h0KCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L21hYy9Db21wbGV4VGV4dENvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Db21wbGV4VGV4dENvbnRyb2xsZXIuY3BwCShyZXZp
c2lvbiA3NzI3OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Db21w
bGV4VGV4dENvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NTMsOSArNTUzLDkgQEAg
dm9pZCBDb21wbGV4VGV4dENvbnRyb2xsZXI6OmFkanVzdEdseXBocwogICAgICAgICAgICAgRmxv
YXRSZWN0IGdseXBoQm91bmRzID0gZm9udERhdGEtPmJvdW5kc0ZvckdseXBoKGdseXBoKTsKICAg
ICAgICAgICAgIGdseXBoQm91bmRzLm1vdmUoZ2x5cGhPcmlnaW4ueCwgZ2x5cGhPcmlnaW4ueSk7
CiAgICAgICAgICAgICBtX21pbkdseXBoQm91bmRpbmdCb3hYID0gbWluKG1fbWluR2x5cGhCb3Vu
ZGluZ0JveFgsIGdseXBoQm91bmRzLngoKSk7Ci0gICAgICAgICAgICBtX21heEdseXBoQm91bmRp
bmdCb3hYID0gbWF4KG1fbWF4R2x5cGhCb3VuZGluZ0JveFgsIGdseXBoQm91bmRzLnJpZ2h0KCkp
OworICAgICAgICAgICAgbV9tYXhHbHlwaEJvdW5kaW5nQm94WCA9IG1heChtX21heEdseXBoQm91
bmRpbmdCb3hYLCBnbHlwaEJvdW5kcy5tYXhYKCkpOwogICAgICAgICAgICAgbV9taW5HbHlwaEJv
dW5kaW5nQm94WSA9IG1pbihtX21pbkdseXBoQm91bmRpbmdCb3hZLCBnbHlwaEJvdW5kcy55KCkp
OwotICAgICAgICAgICAgbV9tYXhHbHlwaEJvdW5kaW5nQm94WSA9IG1heChtX21heEdseXBoQm91
bmRpbmdCb3hZLCBnbHlwaEJvdW5kcy5ib3R0b20oKSk7CisgICAgICAgICAgICBtX21heEdseXBo
Qm91bmRpbmdCb3hZID0gbWF4KG1fbWF4R2x5cGhCb3VuZGluZ0JveFksIGdseXBoQm91bmRzLm1h
eFkoKSk7CiAgICAgICAgICAgICBnbHlwaE9yaWdpbi54ICs9IGFkdmFuY2Uud2lkdGg7CiAgICAg
ICAgICAgICBnbHlwaE9yaWdpbi55ICs9IGFkdmFuY2UuaGVpZ2h0OwogICAgICAgICAgICAgCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvU2ltcGxlRm9udERhdGFN
YWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFj
L1NpbXBsZUZvbnREYXRhTWFjLm1tCShyZXZpc2lvbiA3NzI3OCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL21hYy9TaW1wbGVGb250RGF0YU1hYy5tbQkod29ya2luZyBjb3B5
KQpAQCAtNDc3LDEzICs0NzcsMTMgQEAgRmxvYXRSZWN0IFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9y
bUJvdW5kcwogI2lmbmRlZiBCVUlMRElOR19PTl9USUdFUgogICAgIGJvdW5kaW5nQm94ID0gQ1RG
b250R2V0Qm91bmRpbmdSZWN0c0ZvckdseXBocyhtX3BsYXRmb3JtRGF0YS5jdEZvbnQoKSwKICAg
ICAgICAgICAgICAgICAgICAgb3JpZW50YXRpb24oKSA9PSBWZXJ0aWNhbCA/IGtDVEZvbnRWZXJ0
aWNhbE9yaWVudGF0aW9uIDoga0NURm9udEhvcml6b250YWxPcmllbnRhdGlvbiwgJmdseXBoLCAw
LCAxKTsKLSAgICBib3VuZGluZ0JveC5zZXRZKC1ib3VuZGluZ0JveC5ib3R0b20oKSk7CisgICAg
Ym91bmRpbmdCb3guc2V0WSgtYm91bmRpbmdCb3gubWF4WSgpKTsKICNlbHNlCiAgICAgLy8gRklY
TUU6IEN1c3RvbSBmb250cyBkb24ndCBoYXZlIE5TRm9udHMsIHNvIHRoaXMgZnVuY3Rpb24gZG9l
c24ndCBjb21wdXRlIGNvcnJlY3QgYm91bmRzIGZvciB0aGVzZSBvbiBUaWdlci4KICAgICBpZiAo
IW1fcGxhdGZvcm1EYXRhLmZvbnQoKSkKICAgICAgICAgcmV0dXJuIGJvdW5kaW5nQm94OwogICAg
IGJvdW5kaW5nQm94ID0gW21fcGxhdGZvcm1EYXRhLmZvbnQoKSBib3VuZGluZ1JlY3RGb3JHbHlw
aDpnbHlwaF07Ci0gICAgYm91bmRpbmdCb3guc2V0WSgtYm91bmRpbmdCb3guYm90dG9tKCkpOwor
ICAgIGJvdW5kaW5nQm94LnNldFkoLWJvdW5kaW5nQm94Lm1heFkoKSk7CiAjZW5kaWYKICAgICBp
ZiAobV9zeW50aGV0aWNCb2xkT2Zmc2V0KQogICAgICAgICBib3VuZGluZ0JveC5zZXRXaWR0aChi
b3VuZGluZ0JveC53aWR0aCgpICsgbV9zeW50aGV0aWNCb2xkT2Zmc2V0KTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvQWZmaW5lVHJhbnNmb3JtLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zv
cm1zL0FmZmluZVRyYW5zZm9ybS5jcHAJKHJldmlzaW9uIDc3Mjc4KQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9BZmZpbmVUcmFuc2Zvcm0uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMTYsOSArMzE2LDkgQEAgRmxvYXRSZWN0IEFmZmluZVRyYW5zZm9ybTo6
bWFwUmVjdChjb25zdAogCiAgICAgRmxvYXRRdWFkIHJlc3VsdDsKICAgICByZXN1bHQuc2V0UDEo
bWFwUG9pbnQocmVjdC5sb2NhdGlvbigpKSk7Ci0gICAgcmVzdWx0LnNldFAyKG1hcFBvaW50KEZs
b2F0UG9pbnQocmVjdC5yaWdodCgpLCByZWN0LnkoKSkpKTsKLSAgICByZXN1bHQuc2V0UDMobWFw
UG9pbnQoRmxvYXRQb2ludChyZWN0LnJpZ2h0KCksIHJlY3QuYm90dG9tKCkpKSk7Ci0gICAgcmVz
dWx0LnNldFA0KG1hcFBvaW50KEZsb2F0UG9pbnQocmVjdC54KCksIHJlY3QuYm90dG9tKCkpKSk7
CisgICAgcmVzdWx0LnNldFAyKG1hcFBvaW50KEZsb2F0UG9pbnQocmVjdC5tYXhYKCksIHJlY3Qu
eSgpKSkpOworICAgIHJlc3VsdC5zZXRQMyhtYXBQb2ludChGbG9hdFBvaW50KHJlY3QubWF4WCgp
LCByZWN0Lm1heFkoKSkpKTsKKyAgICByZXN1bHQuc2V0UDQobWFwUG9pbnQoRmxvYXRQb2ludChy
ZWN0LngoKSwgcmVjdC5tYXhZKCkpKSk7CiAgICAgcmV0dXJuIHJlc3VsdC5ib3VuZGluZ0JveCgp
OwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udENH
V2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93
aW4vRm9udENHV2luLmNwcAkocmV2aXNpb24gNzcyNzgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy93aW4vRm9udENHV2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjkyLDcg
KzI5Miw3IEBAIHN0YXRpYyB2b2lkIGRyYXdHRElHbHlwaHMoR3JhcGhpY3NDb250ZXgKICAgICAg
ICAgICAgIGJ1ZmZlcltpICsgMl0gPSBmaWxsQ29sb3IucmVkKCk7CiAgICAgICAgICAgICBidWZm
ZXJbaSArIDNdID0gYWxwaGE7CiAgICAgICAgIH0KLSAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5k
cmF3V2luZG93c0JpdG1hcChiaXRtYXAuZ2V0KCksIHRleHRSZWN0LnRvcExlZnQoKSk7CisgICAg
ICAgIGdyYXBoaWNzQ29udGV4dC0+ZHJhd1dpbmRvd3NCaXRtYXAoYml0bWFwLmdldCgpLCB0ZXh0
UmVjdC5sb2NhdGlvbigpKTsKICAgICB9IGVsc2UKICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5y
ZWxlYXNlV2luZG93c0NvbnRleHQoaGRjLCB0ZXh0UmVjdCwgdHJ1ZSwgZmFsc2UpOwogfQpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL01lZGlhUGxheWVyUHJpdmF0
ZVF1aWNrVGltZVdpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvd2luL01lZGlhUGxheWVyUHJpdmF0ZVF1aWNrVGltZVdpbi5jcHAJKHJldmlzaW9u
IDc3Mjc4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL01lZGlhUGxh
eWVyUHJpdmF0ZVF1aWNrVGltZVdpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYyMiw3ICs2MjIs
NyBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6cGFpbnQoR3JhcGhpY3NDCiAKICAgICBtX3F0
R1dvcmxkLT5wYWludChoZGMsIHIueCgpLCByLnkoKSk7CiAgICAgaWYgKHVzaW5nVGVtcEJpdG1h
cCkKLSAgICAgICAgcC0+ZHJhd1dpbmRvd3NCaXRtYXAoYml0bWFwLmdldCgpLCByLnRvcExlZnQo
KSk7CisgICAgICAgIHAtPmRyYXdXaW5kb3dzQml0bWFwKGJpdG1hcC5nZXQoKSwgci5sb2NhdGlv
bigpKTsKICAgICBlbHNlCiAgICAgICAgIHAtPnJlbGVhc2VXaW5kb3dzQ29udGV4dChoZGMsIHIp
OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUmVuZGVyVGhlbWVHdGsuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9SZW5kZXJUaGVtZUd0
ay5jcHAJKHJldmlzaW9uIDc3Mjc4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1Jl
bmRlclRoZW1lR3RrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjU4LDcgKzI1OCw3IEBAIHN0YXRp
YyBJbnRQb2ludCBjZW50ZXJSZWN0VmVydGljYWxseUluUGEKIHsKICAgICBOb2RlKiBpbnB1dCA9
IG9iamVjdC0+bm9kZSgpLT5zaGFkb3dBbmNlc3Rvck5vZGUoKTsgLy8gR2V0IHRoZSByZW5kZXJl
ciBvZiA8aW5wdXQ+IGVsZW1lbnQuCiAgICAgaWYgKCFpbnB1dC0+cmVuZGVyZXIoKS0+aXNCb3go
KSkKLSAgICAgICAgcmV0dXJuIHJlY3QudG9wTGVmdCgpOworICAgICAgICByZXR1cm4gcmVjdC5s
b2NhdGlvbigpOwogCiAgICAgLy8gSWYgcG9zc2libGUgY2VudGVyIHRoZSB5LWNvb3JkaW5hdGUg
b2YgdGhlIHJlY3QgdmVydGljYWxseSBpbiB0aGUgcGFyZW50IGlucHV0IGVsZW1lbnQuCiAgICAg
Ly8gV2UgYWxzbyBhZGQgb25lIHBpeGVsIGhlcmUgdG8gZW5zdXJlIHRoYXQgdGhlIHkgY29vcmRp
bmF0ZSBpcyByb3VuZGVkIHVwIGZvciBib3ggaGVpZ2h0cwpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbWFjL1dpZGdldE1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tYWMvV2lkZ2V0TWFjLm1tCShyZXZpc2lvbiA3NzI3OCkKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL21hYy9XaWRnZXRNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTI1Miw3ICsy
NTIsNyBAQCB2b2lkIFdpZGdldDo6cGFpbnQoR3JhcGhpY3NDb250ZXh0KiBwLCBjCiAgICAgICAg
IEludFJlY3QgZGlydHlSZWN0ID0gcjsKICAgICAgICAgZGlydHlSZWN0Lm1vdmUoLXRyYW5zZm9y
bU9yaWdpbi54KCksIC10cmFuc2Zvcm1PcmlnaW4ueSgpKTsKICAgICAgICAgaWYgKCFbdmlldyBp
c0ZsaXBwZWRdKQotICAgICAgICAgICAgZGlydHlSZWN0LnNldFkoW3ZpZXcgYm91bmRzXS5zaXpl
LmhlaWdodCAtIGRpcnR5UmVjdC5ib3R0b20oKSk7CisgICAgICAgICAgICBkaXJ0eVJlY3Quc2V0
WShbdmlldyBib3VuZHNdLnNpemUuaGVpZ2h0IC0gZGlydHlSZWN0Lm1heFkoKSk7CiAKICAgICAg
ICAgW3ZpZXcgZGlzcGxheVJlY3RJZ25vcmluZ09wYWNpdHk6ZGlydHlSZWN0XTsKIApAQCAtMjk2
LDcgKzI5Niw3IEBAIHZvaWQgV2lkZ2V0OjpwYWludChHcmFwaGljc0NvbnRleHQqIHAsIGMKICAg
ICAgICAgSW50UmVjdCBkaXJ0eVJlY3QgPSByOwogICAgICAgICBkaXJ0eVJlY3QubW92ZSgtdHJh
bnNmb3JtT3JpZ2luLngoKSwgLXRyYW5zZm9ybU9yaWdpbi55KCkpOwogICAgICAgICBpZiAoIVt2
aWV3IGlzRmxpcHBlZF0pCi0gICAgICAgICAgICBkaXJ0eVJlY3Quc2V0WShbdmlldyBib3VuZHNd
LnNpemUuaGVpZ2h0IC0gZGlydHlSZWN0LmJvdHRvbSgpKTsKKyAgICAgICAgICAgIGRpcnR5UmVj
dC5zZXRZKFt2aWV3IGJvdW5kc10uc2l6ZS5oZWlnaHQgLSBkaXJ0eVJlY3QubWF4WSgpKTsKIAog
ICAgICAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CiAgICAgICAgIHsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVGbG93Qm94LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lRmxvd0JveC5jcHAJKHJldmlzaW9uIDc3Mjc4
KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUZsb3dCb3guY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC03MTgsMTQgKzcxOCwxNCBAQCB2b2lkIElubGluZUZsb3dCb3g6OmFkZEJveFNo
YWRvd1Zpc3VhbE92CiAgICAgcmVuZGVyZXIoKS0+c3R5bGUobV9maXJzdExpbmUpLT5nZXRCb3hT
aGFkb3dCbG9ja0RpcmVjdGlvbkV4dGVudChib3hTaGFkb3dMb2dpY2FsVG9wLCBib3hTaGFkb3dM
b2dpY2FsQm90dG9tKTsKICAgICAKICAgICBpbnQgbG9naWNhbFRvcFZpc3VhbE92ZXJmbG93ID0g
bWluKGxvZ2ljYWxUb3AoKSArIGJveFNoYWRvd0xvZ2ljYWxUb3AsIGxvZ2ljYWxWaXN1YWxPdmVy
Zmxvdy55KCkpOwotICAgIGludCBsb2dpY2FsQm90dG9tVmlzdWFsT3ZlcmZsb3cgPSBtYXgobG9n
aWNhbEJvdHRvbSgpICsgYm94U2hhZG93TG9naWNhbEJvdHRvbSwgbG9naWNhbFZpc3VhbE92ZXJm
bG93LmJvdHRvbSgpKTsKKyAgICBpbnQgbG9naWNhbEJvdHRvbVZpc3VhbE92ZXJmbG93ID0gbWF4
KGxvZ2ljYWxCb3R0b20oKSArIGJveFNoYWRvd0xvZ2ljYWxCb3R0b20sIGxvZ2ljYWxWaXN1YWxP
dmVyZmxvdy5tYXhZKCkpOwogICAgIAogICAgIGludCBib3hTaGFkb3dMb2dpY2FsTGVmdDsKICAg
ICBpbnQgYm94U2hhZG93TG9naWNhbFJpZ2h0OwogICAgIHJlbmRlcmVyKCktPnN0eWxlKG1fZmly
c3RMaW5lKS0+Z2V0Qm94U2hhZG93SW5saW5lRGlyZWN0aW9uRXh0ZW50KGJveFNoYWRvd0xvZ2lj
YWxMZWZ0LCBib3hTaGFkb3dMb2dpY2FsUmlnaHQpOwogCiAgICAgaW50IGxvZ2ljYWxMZWZ0Vmlz
dWFsT3ZlcmZsb3cgPSBtaW4obG9naWNhbExlZnQoKSArIGJveFNoYWRvd0xvZ2ljYWxMZWZ0LCBs
b2dpY2FsVmlzdWFsT3ZlcmZsb3cueCgpKTsKLSAgICBpbnQgbG9naWNhbFJpZ2h0VmlzdWFsT3Zl
cmZsb3cgPSBtYXgobG9naWNhbFJpZ2h0KCkgKyBib3hTaGFkb3dMb2dpY2FsUmlnaHQsIGxvZ2lj
YWxWaXN1YWxPdmVyZmxvdy5yaWdodCgpKTsKKyAgICBpbnQgbG9naWNhbFJpZ2h0VmlzdWFsT3Zl
cmZsb3cgPSBtYXgobG9naWNhbFJpZ2h0KCkgKyBib3hTaGFkb3dMb2dpY2FsUmlnaHQsIGxvZ2lj
YWxWaXN1YWxPdmVyZmxvdy5tYXhYKCkpOwogICAgIAogICAgIGxvZ2ljYWxWaXN1YWxPdmVyZmxv
dyA9IEludFJlY3QobG9naWNhbExlZnRWaXN1YWxPdmVyZmxvdywgbG9naWNhbFRvcFZpc3VhbE92
ZXJmbG93LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9naWNhbFJpZ2h0
VmlzdWFsT3ZlcmZsb3cgLSBsb2dpY2FsTGVmdFZpc3VhbE92ZXJmbG93LCBsb2dpY2FsQm90dG9t
VmlzdWFsT3ZlcmZsb3cgLSBsb2dpY2FsVG9wVmlzdWFsT3ZlcmZsb3cpOwpAQCAtNzgwLDkgKzc4
MCw5IEBAIHZvaWQgSW5saW5lRmxvd0JveDo6YWRkVGV4dEJveFZpc3VhbE92ZXIKICAgICBpbnQg
Y2hpbGRPdmVyZmxvd0xvZ2ljYWxSaWdodCA9IG1heCh0ZXh0U2hhZG93TG9naWNhbFJpZ2h0ICsg
cmlnaHRHbHlwaE92ZXJmbG93LCByaWdodEdseXBoT3ZlcmZsb3cpOwogCiAgICAgaW50IGxvZ2lj
YWxUb3BWaXN1YWxPdmVyZmxvdyA9IG1pbih0ZXh0Qm94LT5sb2dpY2FsVG9wKCkgKyBjaGlsZE92
ZXJmbG93TG9naWNhbFRvcCwgbG9naWNhbFZpc3VhbE92ZXJmbG93LnkoKSk7Ci0gICAgaW50IGxv
Z2ljYWxCb3R0b21WaXN1YWxPdmVyZmxvdyA9IG1heCh0ZXh0Qm94LT5sb2dpY2FsQm90dG9tKCkg
KyBjaGlsZE92ZXJmbG93TG9naWNhbEJvdHRvbSwgbG9naWNhbFZpc3VhbE92ZXJmbG93LmJvdHRv
bSgpKTsKKyAgICBpbnQgbG9naWNhbEJvdHRvbVZpc3VhbE92ZXJmbG93ID0gbWF4KHRleHRCb3gt
PmxvZ2ljYWxCb3R0b20oKSArIGNoaWxkT3ZlcmZsb3dMb2dpY2FsQm90dG9tLCBsb2dpY2FsVmlz
dWFsT3ZlcmZsb3cubWF4WSgpKTsKICAgICBpbnQgbG9naWNhbExlZnRWaXN1YWxPdmVyZmxvdyA9
IG1pbih0ZXh0Qm94LT5sb2dpY2FsTGVmdCgpICsgY2hpbGRPdmVyZmxvd0xvZ2ljYWxMZWZ0LCBs
b2dpY2FsVmlzdWFsT3ZlcmZsb3cueCgpKTsKLSAgICBpbnQgbG9naWNhbFJpZ2h0VmlzdWFsT3Zl
cmZsb3cgPSBtYXgodGV4dEJveC0+bG9naWNhbFJpZ2h0KCkgKyBjaGlsZE92ZXJmbG93TG9naWNh
bFJpZ2h0LCBsb2dpY2FsVmlzdWFsT3ZlcmZsb3cucmlnaHQoKSk7CisgICAgaW50IGxvZ2ljYWxS
aWdodFZpc3VhbE92ZXJmbG93ID0gbWF4KHRleHRCb3gtPmxvZ2ljYWxSaWdodCgpICsgY2hpbGRP
dmVyZmxvd0xvZ2ljYWxSaWdodCwgbG9naWNhbFZpc3VhbE92ZXJmbG93Lm1heFgoKSk7CiAgICAg
CiAgICAgbG9naWNhbFZpc3VhbE92ZXJmbG93ID0gSW50UmVjdChsb2dpY2FsTGVmdFZpc3VhbE92
ZXJmbG93LCBsb2dpY2FsVG9wVmlzdWFsT3ZlcmZsb3csCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBsb2dpY2FsUmlnaHRWaXN1YWxPdmVyZmxvdyAtIGxvZ2ljYWxMZWZ0Vmlz
dWFsT3ZlcmZsb3csIGxvZ2ljYWxCb3R0b21WaXN1YWxPdmVyZmxvdyAtIGxvZ2ljYWxUb3BWaXN1
YWxPdmVyZmxvdyk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJv
eC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRC
b3guY3BwCShyZXZpc2lvbiA3NzI3OCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Jbmxp
bmVUZXh0Qm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTY5LDcgKzE2OSw3IEBAIEludFJlY3Qg
SW5saW5lVGV4dEJveDo6c2VsZWN0aW9uUmVjdChpbnQKICAgICBpbnQgbG9naWNhbFdpZHRoID0g
ci53aWR0aCgpOwogICAgIGlmIChyLngoKSA+IG1fbG9naWNhbFdpZHRoKQogICAgICAgICBsb2dp
Y2FsV2lkdGggID0gMDsKLSAgICBlbHNlIGlmIChyLnJpZ2h0KCkgPiBtX2xvZ2ljYWxXaWR0aCkK
KyAgICBlbHNlIGlmIChyLm1heFgoKSA+IG1fbG9naWNhbFdpZHRoKQogICAgICAgICBsb2dpY2Fs
V2lkdGggPSBtX2xvZ2ljYWxXaWR0aCAtIHIueCgpOwogICAgIAogICAgIEludFBvaW50IHRvcFBv
aW50ID0gaXNIb3Jpem9udGFsKCkgPyBJbnRQb2ludCh0eCArIG1feCArIHIueCgpLCB0eSArIHNl
bFRvcCkgOiBJbnRQb2ludCh0eCArIHNlbFRvcCwgdHkgKyBtX3kgKyByLngoKSk7CkBAIC00NDIs
NyArNDQyLDcgQEAgdm9pZCBJbmxpbmVUZXh0Qm94OjpwYWludChQYWludEluZm8mIHBhaQogICAg
IGludCBsb2dpY2FsU3RhcnQgPSBsb2dpY2FsTGVmdCgpIC0gbG9naWNhbExlZnRPdmVyZmxvdyAr
IChpc0hvcml6b250YWwoKSA/IHR4IDogdHkpOwogICAgIGludCBsb2dpY2FsRXh0ZW50ID0gbG9n
aWNhbFdpZHRoKCkgKyBsb2dpY2FsTGVmdE92ZXJmbG93ICsgbG9naWNhbFJpZ2h0T3ZlcmZsb3c7
CiAgICAgCi0gICAgaW50IHBhaW50RW5kID0gaXNIb3Jpem9udGFsKCkgPyBwYWludEluZm8ucmVj
dC5yaWdodCgpIDogcGFpbnRJbmZvLnJlY3QuYm90dG9tKCk7CisgICAgaW50IHBhaW50RW5kID0g
aXNIb3Jpem9udGFsKCkgPyBwYWludEluZm8ucmVjdC5tYXhYKCkgOiBwYWludEluZm8ucmVjdC5t
YXhZKCk7CiAgICAgaW50IHBhaW50U3RhcnQgPSBpc0hvcml6b250YWwoKSA/IHBhaW50SW5mby5y
ZWN0LngoKSA6IHBhaW50SW5mby5yZWN0LnkoKTsKICAgICAKICAgICBpZiAobG9naWNhbFN0YXJ0
ID49IHBhaW50RW5kIHx8IGxvZ2ljYWxTdGFydCArIGxvZ2ljYWxFeHRlbnQgPD0gcGFpbnRTdGFy
dCkKQEAgLTQ5MSw5ICs0OTEsOSBAQCB2b2lkIElubGluZVRleHRCb3g6OnBhaW50KFBhaW50SW5m
byYgcGFpCiAgICAgYm9vbCBzaG91bGRSb3RhdGUgPSAhaXNIb3Jpem9udGFsKCkgJiYgKCFjb21i
aW5lZFRleHQgfHwgIWNvbWJpbmVkVGV4dC0+aXNDb21iaW5lZCgpKTsKICAgICBpZiAoc2hvdWxk
Um90YXRlKSB7CiAgICAgICAgIGNvbnRleHQtPnNhdmUoKTsKLSAgICAgICAgY29udGV4dC0+dHJh
bnNsYXRlKGJveFJlY3QueCgpLCBib3hSZWN0LmJvdHRvbSgpKTsKKyAgICAgICAgY29udGV4dC0+
dHJhbnNsYXRlKGJveFJlY3QueCgpLCBib3hSZWN0Lm1heFkoKSk7CiAgICAgICAgIGNvbnRleHQt
PnJvdGF0ZShzdGF0aWNfY2FzdDxmbG9hdD4oZGVnMnJhZCg5MC4pKSk7Ci0gICAgICAgIGNvbnRl
eHQtPnRyYW5zbGF0ZSgtYm94UmVjdC54KCksIC1ib3hSZWN0LmJvdHRvbSgpKTsKKyAgICAgICAg
Y29udGV4dC0+dHJhbnNsYXRlKC1ib3hSZWN0LngoKSwgLWJveFJlY3QubWF4WSgpKTsKICAgICB9
CiAgICAgCiAgICAgCkBAIC0xMjE2LDcgKzEyMTYsNyBAQCBpbnQgSW5saW5lVGV4dEJveDo6cG9z
aXRpb25Gb3JPZmZzZXQoaW50CiAgICAgaW50IHRvID0gIWlzTGVmdFRvUmlnaHREaXJlY3Rpb24o
KSA/IG1fbGVuIDogb2Zmc2V0IC0gbV9zdGFydDsKICAgICAvLyBGSVhNRTogRG8gd2UgbmVlZCB0
byBhZGQgcmlnaHRCZWFyaW5nIGhlcmU/CiAgICAgcmV0dXJuIGVuY2xvc2luZ0ludFJlY3QoZi5z
ZWxlY3Rpb25SZWN0Rm9yVGV4dChUZXh0UnVuKHRleHQtPnRleHQoKS0+Y2hhcmFjdGVycygpICsg
bV9zdGFydCwgbV9sZW4sIHRleHRSZW5kZXJlcigpLT5hbGxvd1RhYnMoKSwgdGV4dFBvcygpLCBt
X2V4cGFuc2lvbiwgdHJhaWxpbmdFeHBhbnNpb25CZWhhdmlvcigpLCAhaXNMZWZ0VG9SaWdodERp
cmVjdGlvbigpLCBtX2Rpck92ZXJyaWRlKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEludFBvaW50KGxvZ2ljYWxMZWZ0KCksIDApLCAwLCBmcm9t
LCB0bykpLnJpZ2h0KCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBJbnRQb2ludChsb2dpY2FsTGVmdCgpLCAwKSwgMCwgZnJvbSwgdG8pKS5tYXhY
KCk7CiB9CiAKIGJvb2wgSW5saW5lVGV4dEJveDo6Y29udGFpbnNDYXJldE9mZnNldChpbnQgb2Zm
c2V0KSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3Bw
CShyZXZpc2lvbiA3NzI3OCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9j
ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzMjUsMTMgKzEzMjUsMTMgQEAgdm9pZCBSZW5kZXJC
bG9jazo6YWRkT3ZlcmZsb3dGcm9tQ2hpbGRyZQogICAgICAgICAgICAgSW50UmVjdCBsYXN0UmVj
dCA9IGNvbHVtblJlY3RBdChjb2xJbmZvLCBjb2x1bW5Db3VudChjb2xJbmZvKSAtIDEpOwogICAg
ICAgICAgICAgaWYgKHN0eWxlKCktPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpIHsKICAgICAg
ICAgICAgICAgICBpbnQgb3ZlcmZsb3dMZWZ0ID0gIXN0eWxlKCktPmlzTGVmdFRvUmlnaHREaXJl
Y3Rpb24oKSA/IG1pbigwLCBsYXN0UmVjdC54KCkpIDogMDsKLSAgICAgICAgICAgICAgICBpbnQg
b3ZlcmZsb3dSaWdodCA9IHN0eWxlKCktPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/IG1heCh3
aWR0aCgpLCBsYXN0UmVjdC5yaWdodCgpKSA6IDA7CisgICAgICAgICAgICAgICAgaW50IG92ZXJm
bG93UmlnaHQgPSBzdHlsZSgpLT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyBtYXgod2lkdGgo
KSwgbGFzdFJlY3QubWF4WCgpKSA6IDA7CiAgICAgICAgICAgICAgICAgaW50IG92ZXJmbG93SGVp
Z2h0ID0gYm9yZGVyQmVmb3JlKCkgKyBwYWRkaW5nQmVmb3JlKCkgKyBjb2xJbmZvLT5jb2x1bW5I
ZWlnaHQoKTsKICAgICAgICAgICAgICAgICBhZGRMYXlvdXRPdmVyZmxvdyhJbnRSZWN0KG92ZXJm
bG93TGVmdCwgMCwgb3ZlcmZsb3dSaWdodCAtIG92ZXJmbG93TGVmdCwgb3ZlcmZsb3dIZWlnaHQp
KTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgSW50UmVjdCBsYXN0UmVj
dCA9IGNvbHVtblJlY3RBdChjb2xJbmZvLCBjb2x1bW5Db3VudChjb2xJbmZvKSAtIDEpOwogICAg
ICAgICAgICAgICAgIGludCBvdmVyZmxvd1RvcCA9ICFzdHlsZSgpLT5pc0xlZnRUb1JpZ2h0RGly
ZWN0aW9uKCkgPyBtaW4oMCwgbGFzdFJlY3QueSgpKSA6IDA7Ci0gICAgICAgICAgICAgICAgaW50
IG92ZXJmbG93Qm90dG9tID0gc3R5bGUoKS0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpID8gbWF4
KGhlaWdodCgpLCBsYXN0UmVjdC5ib3R0b20oKSkgOiAwOworICAgICAgICAgICAgICAgIGludCBv
dmVyZmxvd0JvdHRvbSA9IHN0eWxlKCktPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/IG1heCho
ZWlnaHQoKSwgbGFzdFJlY3QubWF4WSgpKSA6IDA7CiAgICAgICAgICAgICAgICAgaW50IG92ZXJm
bG93V2lkdGggPSBib3JkZXJCZWZvcmUoKSArIHBhZGRpbmdCZWZvcmUoKSArIGNvbEluZm8tPmNv
bHVtbkhlaWdodCgpOwogICAgICAgICAgICAgICAgIGFkZExheW91dE92ZXJmbG93KEludFJlY3Qo
MCwgb3ZlcmZsb3dUb3AsIG92ZXJmbG93V2lkdGgsIG92ZXJmbG93Qm90dG9tIC0gb3ZlcmZsb3dU
b3ApKTsKICAgICAgICAgICAgIH0KQEAgLTIzNDcsMTQgKzIzNDcsMTQgQEAgdm9pZCBSZW5kZXJC
bG9jazo6cGFpbnRDaGlsZHJlbihQYWludEluZgogICAgICAgICBib29sIGNoZWNrQmVmb3JlQWx3
YXlzID0gIWNoaWxkcmVuSW5saW5lKCkgJiYgKHVzZVByaW50UmVjdCAmJiBjaGlsZC0+c3R5bGUo
KS0+cGFnZUJyZWFrQmVmb3JlKCkgPT0gUEJBTFdBWVMpOwogICAgICAgICBpZiAoY2hlY2tCZWZv
cmVBbHdheXMKICAgICAgICAgICAgICYmICh0eSArIGNoaWxkLT55KCkpID4gcGFpbnRJbmZvLnJl
Y3QueSgpCi0gICAgICAgICAgICAmJiAodHkgKyBjaGlsZC0+eSgpKSA8IHBhaW50SW5mby5yZWN0
LmJvdHRvbSgpKSB7CisgICAgICAgICAgICAmJiAodHkgKyBjaGlsZC0+eSgpKSA8IHBhaW50SW5m
by5yZWN0Lm1heFkoKSkgewogICAgICAgICAgICAgdmlldygpLT5zZXRCZXN0VHJ1bmNhdGVkQXQo
dHkgKyBjaGlsZC0+eSgpLCB0aGlzLCB0cnVlKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgfQogCiAgICAgICAgIGlmICghY2hpbGQtPmlzRmxvYXRpbmcoKSAmJiBjaGlsZC0+aXNSZXBs
YWNlZCgpICYmIHVzZVByaW50UmVjdCAmJiBjaGlsZC0+aGVpZ2h0KCkgPD0gcmVuZGVyVmlldy0+
cHJpbnRSZWN0KCkuaGVpZ2h0KCkpIHsKICAgICAgICAgICAgIC8vIFBhZ2luYXRlIGJsb2NrLWxl
dmVsIHJlcGxhY2VkIGVsZW1lbnRzLgotICAgICAgICAgICAgaWYgKHR5ICsgY2hpbGQtPnkoKSAr
IGNoaWxkLT5oZWlnaHQoKSA+IHJlbmRlclZpZXctPnByaW50UmVjdCgpLmJvdHRvbSgpKSB7Cisg
ICAgICAgICAgICBpZiAodHkgKyBjaGlsZC0+eSgpICsgY2hpbGQtPmhlaWdodCgpID4gcmVuZGVy
Vmlldy0+cHJpbnRSZWN0KCkubWF4WSgpKSB7CiAgICAgICAgICAgICAgICAgaWYgKHR5ICsgY2hp
bGQtPnkoKSA8IHJlbmRlclZpZXctPnRydW5jYXRlZEF0KCkpCiAgICAgICAgICAgICAgICAgICAg
IHJlbmRlclZpZXctPnNldEJlc3RUcnVuY2F0ZWRBdCh0eSArIGNoaWxkLT55KCksIGNoaWxkKTsK
ICAgICAgICAgICAgICAgICAvLyBJZiB3ZSB3ZXJlIGFibGUgdG8gdHJ1bmNhdGUsIGRvbid0IHBh
aW50LgpAQCAtMjM3MSw3ICsyMzcxLDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6cGFpbnRDaGlsZHJl
bihQYWludEluZgogICAgICAgICBib29sIGNoZWNrQWZ0ZXJBbHdheXMgPSAhY2hpbGRyZW5Jbmxp
bmUoKSAmJiAodXNlUHJpbnRSZWN0ICYmIGNoaWxkLT5zdHlsZSgpLT5wYWdlQnJlYWtBZnRlcigp
ID09IFBCQUxXQVlTKTsKICAgICAgICAgaWYgKGNoZWNrQWZ0ZXJBbHdheXMKICAgICAgICAgICAg
ICYmICh0eSArIGNoaWxkLT55KCkgKyBjaGlsZC0+aGVpZ2h0KCkpID4gcGFpbnRJbmZvLnJlY3Qu
eSgpCi0gICAgICAgICAgICAmJiAodHkgKyBjaGlsZC0+eSgpICsgY2hpbGQtPmhlaWdodCgpKSA8
IHBhaW50SW5mby5yZWN0LmJvdHRvbSgpKSB7CisgICAgICAgICAgICAmJiAodHkgKyBjaGlsZC0+
eSgpICsgY2hpbGQtPmhlaWdodCgpKSA8IHBhaW50SW5mby5yZWN0Lm1heFkoKSkgewogICAgICAg
ICAgICAgdmlldygpLT5zZXRCZXN0VHJ1bmNhdGVkQXQodHkgKyBjaGlsZC0+eSgpICsgY2hpbGQt
PmhlaWdodCgpICsgbWF4KDAsIGNoaWxkLT5jb2xsYXBzZWRNYXJnaW5BZnRlcigpKSwgdGhpcywg
dHJ1ZSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KQEAgLTI1MzcsNyArMjUzNyw3
IEBAIHZvaWQgUmVuZGVyQmxvY2s6OnBhaW50RWxsaXBzaXNCb3hlcyhQYWkKICAgICAgICAgLy8g
aW50ZXJzZWN0LgogICAgICAgICBpbnQgeVBvcyA9IHR5ICsgZmlyc3RMaW5lQm94KCktPnkoKTsK
ICAgICAgICAgaW50IGggPSBsYXN0TGluZUJveCgpLT55KCkgKyBsYXN0TGluZUJveCgpLT5sb2dp
Y2FsSGVpZ2h0KCkgLSBmaXJzdExpbmVCb3goKS0+eSgpOwotICAgICAgICBpZiAoeVBvcyA+PSBw
YWludEluZm8ucmVjdC5ib3R0b20oKSB8fCB5UG9zICsgaCA8PSBwYWludEluZm8ucmVjdC55KCkp
CisgICAgICAgIGlmICh5UG9zID49IHBhaW50SW5mby5yZWN0Lm1heFkoKSB8fCB5UG9zICsgaCA8
PSBwYWludEluZm8ucmVjdC55KCkpCiAgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgLy8g
U2VlIGlmIG91ciBib3hlcyBpbnRlcnNlY3Qgd2l0aCB0aGUgZGlydHkgcmVjdC4gIElmIHNvLCB0
aGVuIHdlIHBhaW50CkBAIC0yNTQ2LDcgKzI1NDYsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjpwYWlu
dEVsbGlwc2lzQm94ZXMoUGFpCiAgICAgICAgIGZvciAoUm9vdElubGluZUJveCogY3VyciA9IGZp
cnN0Um9vdEJveCgpOyBjdXJyOyBjdXJyID0gY3Vyci0+bmV4dFJvb3RCb3goKSkgewogICAgICAg
ICAgICAgeVBvcyA9IHR5ICsgY3Vyci0+eSgpOwogICAgICAgICAgICAgaCA9IGN1cnItPmxvZ2lj
YWxIZWlnaHQoKTsKLSAgICAgICAgICAgIGlmIChjdXJyLT5lbGxpcHNpc0JveCgpICYmIHlQb3Mg
PCBwYWludEluZm8ucmVjdC5ib3R0b20oKSAmJiB5UG9zICsgaCA+IHBhaW50SW5mby5yZWN0Lnko
KSkKKyAgICAgICAgICAgIGlmIChjdXJyLT5lbGxpcHNpc0JveCgpICYmIHlQb3MgPCBwYWludElu
Zm8ucmVjdC5tYXhZKCkgJiYgeVBvcyArIGggPiBwYWludEluZm8ucmVjdC55KCkpCiAgICAgICAg
ICAgICAgICAgY3Vyci0+cGFpbnRFbGxpcHNpc0JveChwYWludEluZm8sIHR4LCB0eSk7CiAgICAg
ICAgIH0KICAgICB9CkBAIC0yODE2LDggKzI4MTYsOCBAQCBHYXBSZWN0cyBSZW5kZXJCbG9jazo6
aW5saW5lU2VsZWN0aW9uR2FwCiAgICAgICAgIEludFJlY3QgbG9naWNhbFJlY3QoY3Vyci0+bG9n
aWNhbExlZnQoKSwgc2VsVG9wLCBjdXJyLT5sb2dpY2FsV2lkdGgoKSwgc2VsVG9wICsgc2VsSGVp
Z2h0KTsKICAgICAgICAgbG9naWNhbFJlY3QubW92ZShzdHlsZSgpLT5pc0hvcml6b250YWxXcml0
aW5nTW9kZSgpID8gb2Zmc2V0RnJvbVJvb3RCbG9jayA6IEludFNpemUob2Zmc2V0RnJvbVJvb3RC
bG9jay5oZWlnaHQoKSwgb2Zmc2V0RnJvbVJvb3RCbG9jay53aWR0aCgpKSk7CiAgICAgICAgIElu
dFJlY3QgcGh5c2ljYWxSZWN0ID0gcm9vdEJsb2NrLT5sb2dpY2FsUmVjdFRvUGh5c2ljYWxSZWN0
KHJvb3RCbG9ja1BoeXNpY2FsUG9zaXRpb24sIGxvZ2ljYWxSZWN0KTsKLSAgICAgICAgaWYgKCFw
YWludEluZm8gfHwgKHN0eWxlKCktPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgJiYgcGh5c2lj
YWxSZWN0LnkoKSA8IHBhaW50SW5mby0+cmVjdC5ib3R0b20oKSAmJiBwaHlzaWNhbFJlY3QuYm90
dG9tKCkgPiBwYWludEluZm8tPnJlY3QueSgpKQotICAgICAgICAgICAgfHwgKCFzdHlsZSgpLT5p
c0hvcml6b250YWxXcml0aW5nTW9kZSgpICYmIHBoeXNpY2FsUmVjdC54KCkgPCBwYWludEluZm8t
PnJlY3QucmlnaHQoKSAmJiBwaHlzaWNhbFJlY3QucmlnaHQoKSA+IHBhaW50SW5mby0+cmVjdC54
KCkpKQorICAgICAgICBpZiAoIXBhaW50SW5mbyB8fCAoc3R5bGUoKS0+aXNIb3Jpem9udGFsV3Jp
dGluZ01vZGUoKSAmJiBwaHlzaWNhbFJlY3QueSgpIDwgcGFpbnRJbmZvLT5yZWN0Lm1heFkoKSAm
JiBwaHlzaWNhbFJlY3QubWF4WSgpID4gcGFpbnRJbmZvLT5yZWN0LnkoKSkKKyAgICAgICAgICAg
IHx8ICghc3R5bGUoKS0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSAmJiBwaHlzaWNhbFJlY3Qu
eCgpIDwgcGFpbnRJbmZvLT5yZWN0Lm1heFgoKSAmJiBwaHlzaWNhbFJlY3QubWF4WCgpID4gcGFp
bnRJbmZvLT5yZWN0LngoKSkpCiAgICAgICAgICAgICByZXN1bHQudW5pdGUoY3Vyci0+bGluZVNl
bGVjdGlvbkdhcChyb290QmxvY2ssIHJvb3RCbG9ja1BoeXNpY2FsUG9zaXRpb24sIG9mZnNldEZy
b21Sb290QmxvY2ssIHNlbFRvcCwgc2VsSGVpZ2h0LCBwYWludEluZm8pKTsKIAogICAgICAgICBs
YXN0U2VsZWN0ZWRMaW5lID0gY3VycjsKQEAgLTQzMjIsNyArNDMyMiw3IEBAIHZvaWQgUmVuZGVy
QmxvY2s6OmFkanVzdFBvaW50VG9Db2x1bW5Db24KICAgICAgICAgSW50UmVjdCBjb2xSZWN0ID0g
Y29sdW1uUmVjdEF0KGNvbEluZm8sIGkpOwogICAgICAgICBpZiAoc3R5bGUoKS0+aXNIb3Jpem9u
dGFsV3JpdGluZ01vZGUoKSkgewogICAgICAgICAgICAgSW50UmVjdCBnYXBBbmRDb2x1bW5SZWN0
KGNvbFJlY3QueCgpIC0gaGFsZkNvbEdhcCwgY29sUmVjdC55KCksIGNvbFJlY3Qud2lkdGgoKSAr
IGNvbEdhcCwgY29sUmVjdC5oZWlnaHQoKSk7Ci0gICAgICAgICAgICBpZiAocG9pbnQueCgpID49
IGdhcEFuZENvbHVtblJlY3QueCgpICYmIHBvaW50LngoKSA8IGdhcEFuZENvbHVtblJlY3Qucmln
aHQoKSkgeworICAgICAgICAgICAgaWYgKHBvaW50LngoKSA+PSBnYXBBbmRDb2x1bW5SZWN0Lngo
KSAmJiBwb2ludC54KCkgPCBnYXBBbmRDb2x1bW5SZWN0Lm1heFgoKSkgewogICAgICAgICAgICAg
ICAgIC8vIEZJWE1FOiBUaGUgY2xhbXBpbmcgdGhhdCBmb2xsb3dzIGlzIG5vdCBjb21wbGV0ZWx5
IHJpZ2h0IGZvciByaWdodC10by1sZWZ0CiAgICAgICAgICAgICAgICAgLy8gY29udGVudC4KICAg
ICAgICAgICAgICAgICAvLyBDbGFtcCBldmVyeXRoaW5nIGFib3ZlIHRoZSBjb2x1bW4gdG8gaXRz
IHRvcCBsZWZ0LgpAQCAtNDMzMCw3ICs0MzMwLDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6YWRqdXN0
UG9pbnRUb0NvbHVtbkNvbgogICAgICAgICAgICAgICAgICAgICBwb2ludCA9IGdhcEFuZENvbHVt
blJlY3QubG9jYXRpb24oKTsKICAgICAgICAgICAgICAgICAvLyBDbGFtcCBldmVyeXRoaW5nIGJl
bG93IHRoZSBjb2x1bW4gdG8gdGhlIG5leHQgY29sdW1uJ3MgdG9wIGxlZnQuIElmIHRoZXJlIGlz
CiAgICAgICAgICAgICAgICAgLy8gbm8gbmV4dCBjb2x1bW4sIHRoaXMgc3RpbGwgbWFwcyB0byBq
dXN0IGFmdGVyIHRoaXMgY29sdW1uLgotICAgICAgICAgICAgICAgIGVsc2UgaWYgKHBvaW50Lnko
KSA+PSBnYXBBbmRDb2x1bW5SZWN0LmJvdHRvbSgpKSB7CisgICAgICAgICAgICAgICAgZWxzZSBp
ZiAocG9pbnQueSgpID49IGdhcEFuZENvbHVtblJlY3QubWF4WSgpKSB7CiAgICAgICAgICAgICAg
ICAgICAgIHBvaW50ID0gZ2FwQW5kQ29sdW1uUmVjdC5sb2NhdGlvbigpOwogICAgICAgICAgICAg
ICAgICAgICBwb2ludC5tb3ZlKDAsIGdhcEFuZENvbHVtblJlY3QuaGVpZ2h0KCkpOwogICAgICAg
ICAgICAgICAgIH0KQEAgLTQzNDQsNyArNDM0NCw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmFkanVz
dFBvaW50VG9Db2x1bW5Db24KICAgICAgICAgICAgIGxvZ2ljYWxPZmZzZXQgKz0gY29sUmVjdC5o
ZWlnaHQoKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIEludFJlY3QgZ2FwQW5kQ29s
dW1uUmVjdChjb2xSZWN0LngoKSwgY29sUmVjdC55KCkgLSBoYWxmQ29sR2FwLCBjb2xSZWN0Lndp
ZHRoKCksIGNvbFJlY3QuaGVpZ2h0KCkgKyBjb2xHYXApOwotICAgICAgICAgICAgaWYgKHBvaW50
LnkoKSA+PSBnYXBBbmRDb2x1bW5SZWN0LnkoKSAmJiBwb2ludC55KCkgPCBnYXBBbmRDb2x1bW5S
ZWN0LmJvdHRvbSgpKSB7CisgICAgICAgICAgICBpZiAocG9pbnQueSgpID49IGdhcEFuZENvbHVt
blJlY3QueSgpICYmIHBvaW50LnkoKSA8IGdhcEFuZENvbHVtblJlY3QubWF4WSgpKSB7CiAgICAg
ICAgICAgICAgICAgLy8gRklYTUU6IFRoZSBjbGFtcGluZyB0aGF0IGZvbGxvd3MgaXMgbm90IGNv
bXBsZXRlbHkgcmlnaHQgZm9yIHJpZ2h0LXRvLWxlZnQKICAgICAgICAgICAgICAgICAvLyBjb250
ZW50LgogICAgICAgICAgICAgICAgIC8vIENsYW1wIGV2ZXJ5dGhpbmcgYWJvdmUgdGhlIGNvbHVt
biB0byBpdHMgdG9wIGxlZnQuCkBAIC00MzUyLDcgKzQzNTIsNyBAQCB2b2lkIFJlbmRlckJsb2Nr
OjphZGp1c3RQb2ludFRvQ29sdW1uQ29uCiAgICAgICAgICAgICAgICAgICAgIHBvaW50ID0gZ2Fw
QW5kQ29sdW1uUmVjdC5sb2NhdGlvbigpOwogICAgICAgICAgICAgICAgIC8vIENsYW1wIGV2ZXJ5
dGhpbmcgYmVsb3cgdGhlIGNvbHVtbiB0byB0aGUgbmV4dCBjb2x1bW4ncyB0b3AgbGVmdC4gSWYg
dGhlcmUgaXMKICAgICAgICAgICAgICAgICAvLyBubyBuZXh0IGNvbHVtbiwgdGhpcyBzdGlsbCBt
YXBzIHRvIGp1c3QgYWZ0ZXIgdGhpcyBjb2x1bW4uCi0gICAgICAgICAgICAgICAgZWxzZSBpZiAo
cG9pbnQueCgpID49IGdhcEFuZENvbHVtblJlY3QucmlnaHQoKSkgeworICAgICAgICAgICAgICAg
IGVsc2UgaWYgKHBvaW50LngoKSA+PSBnYXBBbmRDb2x1bW5SZWN0Lm1heFgoKSkgewogICAgICAg
ICAgICAgICAgICAgICBwb2ludCA9IGdhcEFuZENvbHVtblJlY3QubG9jYXRpb24oKTsKICAgICAg
ICAgICAgICAgICAgICAgcG9pbnQubW92ZShnYXBBbmRDb2x1bW5SZWN0LndpZHRoKCksIDApOwog
ICAgICAgICAgICAgICAgIH0KQEAgLTQ0MjksOSArNDQyOSw5IEBAIHZvaWQgUmVuZGVyQmxvY2s6
OmZsaXBGb3JXcml0aW5nTW9kZUluY2wKICAgICBpbnQgY29sdW1uTG9naWNhbEhlaWdodCA9IGNv
bEluZm8tPmNvbHVtbkhlaWdodCgpOwogICAgIGludCBleHBhbmRlZExvZ2ljYWxIZWlnaHQgPSBi
b3JkZXJCZWZvcmUoKSArIHBhZGRpbmdCZWZvcmUoKSArIGNvbHVtbkNvdW50KGNvbEluZm8pICog
Y29sdW1uTG9naWNhbEhlaWdodCArIGJvcmRlckFmdGVyKCkgKyBwYWRkaW5nQWZ0ZXIoKSArIHNj
cm9sbGJhckxvZ2ljYWxIZWlnaHQoKTsKICAgICBpZiAoc3R5bGUoKS0+aXNIb3Jpem9udGFsV3Jp
dGluZ01vZGUoKSkKLSAgICAgICAgcmVjdC5zZXRZKGV4cGFuZGVkTG9naWNhbEhlaWdodCAtIHJl
Y3QuYm90dG9tKCkpOworICAgICAgICByZWN0LnNldFkoZXhwYW5kZWRMb2dpY2FsSGVpZ2h0IC0g
cmVjdC5tYXhZKCkpOwogICAgIGVsc2UKLSAgICAgICAgcmVjdC5zZXRYKGV4cGFuZGVkTG9naWNh
bEhlaWdodCAtIHJlY3QucmlnaHQoKSk7CisgICAgICAgIHJlY3Quc2V0WChleHBhbmRlZExvZ2lj
YWxIZWlnaHQgLSByZWN0Lm1heFgoKSk7CiB9CiAKIHZvaWQgUmVuZGVyQmxvY2s6OmFkanVzdEZv
ckNvbHVtbnMoSW50U2l6ZSYgb2Zmc2V0LCBjb25zdCBJbnRQb2ludCYgcG9pbnQpIGNvbnN0CkBA
IC00NDU5LDEyICs0NDU5LDEyIEBAIHZvaWQgUmVuZGVyQmxvY2s6OmFkanVzdEZvckNvbHVtbnMo
SW50U2kKIAogICAgICAgICAvLyBOb3cgd2UncmUgaW4gdGhlIHNhbWUgY29vcmRpbmF0ZSBzcGFj
ZSBhcyB0aGUgcG9pbnQuICBTZWUgaWYgaXQgaXMgaW5zaWRlIHRoZSByZWN0YW5nbGUuCiAgICAg
ICAgIGlmIChzdHlsZSgpLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpKSB7Ci0gICAgICAgICAg
ICBpZiAocG9pbnQueSgpID49IHNsaWNlUmVjdC55KCkgJiYgcG9pbnQueSgpIDwgc2xpY2VSZWN0
LmJvdHRvbSgpKSB7CisgICAgICAgICAgICBpZiAocG9pbnQueSgpID49IHNsaWNlUmVjdC55KCkg
JiYgcG9pbnQueSgpIDwgc2xpY2VSZWN0Lm1heFkoKSkgewogICAgICAgICAgICAgICAgIG9mZnNl
dC5leHBhbmQoY29sdW1uUmVjdEF0KGNvbEluZm8sIGkpLngoKSAtIGxvZ2ljYWxMZWZ0LCAtbG9n
aWNhbE9mZnNldCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgaWYgKHBvaW50LngoKSA+PSBzbGljZVJlY3QueCgp
ICYmIHBvaW50LngoKSA8IHNsaWNlUmVjdC5yaWdodCgpKSB7CisgICAgICAgICAgICBpZiAocG9p
bnQueCgpID49IHNsaWNlUmVjdC54KCkgJiYgcG9pbnQueCgpIDwgc2xpY2VSZWN0Lm1heFgoKSkg
ewogICAgICAgICAgICAgICAgIG9mZnNldC5leHBhbmQoLWxvZ2ljYWxPZmZzZXQsIGNvbHVtblJl
Y3RBdChjb2xJbmZvLCBpKS55KCkgLSBsb2dpY2FsTGVmdCk7CiAgICAgICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJs
b2NrLmgJKHJldmlzaW9uIDc3Mjc4KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTM5OCw5ICszOTgsOSBAQCBwcml2YXRlOgogICAg
ICAgICB2b2lkIHNldElzUGxhY2VkKGJvb2wgcGxhY2VkID0gdHJ1ZSkgeyBtX2lzUGxhY2VkID0g
cGxhY2VkOyB9CiAKICAgICAgICAgaW50IGxlZnQoKSBjb25zdCB7IEFTU0VSVChpc1BsYWNlZCgp
KTsgcmV0dXJuIG1fZnJhbWVSZWN0LngoKTsgfQotICAgICAgICBpbnQgcmlnaHQoKSBjb25zdCB7
IEFTU0VSVChpc1BsYWNlZCgpKTsgcmV0dXJuIG1fZnJhbWVSZWN0LnJpZ2h0KCk7IH0KKyAgICAg
ICAgaW50IHJpZ2h0KCkgY29uc3QgeyBBU1NFUlQoaXNQbGFjZWQoKSk7IHJldHVybiBtX2ZyYW1l
UmVjdC5tYXhYKCk7IH0KICAgICAgICAgaW50IHRvcCgpIGNvbnN0IHsgQVNTRVJUKGlzUGxhY2Vk
KCkpOyByZXR1cm4gbV9mcmFtZVJlY3QueSgpOyB9Ci0gICAgICAgIGludCBib3R0b20oKSBjb25z
dCB7IEFTU0VSVChpc1BsYWNlZCgpKTsgcmV0dXJuIG1fZnJhbWVSZWN0LmJvdHRvbSgpOyB9Cisg
ICAgICAgIGludCBib3R0b20oKSBjb25zdCB7IEFTU0VSVChpc1BsYWNlZCgpKTsgcmV0dXJuIG1f
ZnJhbWVSZWN0Lm1heFkoKTsgfQogICAgICAgICBpbnQgd2lkdGgoKSBjb25zdCB7IHJldHVybiBt
X2ZyYW1lUmVjdC53aWR0aCgpOyB9CiAgICAgICAgIGludCBoZWlnaHQoKSBjb25zdCB7IHJldHVy
biBtX2ZyYW1lUmVjdC5oZWlnaHQoKTsgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyQm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyQm94LmNwcAkocmV2aXNpb24gNzcyNzgpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyQm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTQ4LDE2ICs1NDgsMTYgQEAgSW50
UmVjdCBSZW5kZXJCb3g6OnJlZmxlY3RlZFJlY3QoY29uc3QgSQogICAgIEludFJlY3QgcmVzdWx0
ID0gcjsKICAgICBzd2l0Y2ggKHN0eWxlKCktPmJveFJlZmxlY3QoKS0+ZGlyZWN0aW9uKCkpIHsK
ICAgICAgICAgY2FzZSBSZWZsZWN0aW9uQmVsb3c6Ci0gICAgICAgICAgICByZXN1bHQuc2V0WShi
b3guYm90dG9tKCkgKyByZWZsZWN0aW9uT2Zmc2V0KCkgKyAoYm94LmJvdHRvbSgpIC0gci5ib3R0
b20oKSkpOworICAgICAgICAgICAgcmVzdWx0LnNldFkoYm94Lm1heFkoKSArIHJlZmxlY3Rpb25P
ZmZzZXQoKSArIChib3gubWF4WSgpIC0gci5tYXhZKCkpKTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICBjYXNlIFJlZmxlY3Rpb25BYm92ZToKLSAgICAgICAgICAgIHJlc3VsdC5zZXRZKGJv
eC55KCkgLSByZWZsZWN0aW9uT2Zmc2V0KCkgLSBib3guaGVpZ2h0KCkgKyAoYm94LmJvdHRvbSgp
IC0gci5ib3R0b20oKSkpOworICAgICAgICAgICAgcmVzdWx0LnNldFkoYm94LnkoKSAtIHJlZmxl
Y3Rpb25PZmZzZXQoKSAtIGJveC5oZWlnaHQoKSArIChib3gubWF4WSgpIC0gci5tYXhZKCkpKTsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFJlZmxlY3Rpb25MZWZ0OgotICAgICAg
ICAgICAgcmVzdWx0LnNldFgoYm94LngoKSAtIHJlZmxlY3Rpb25PZmZzZXQoKSAtIGJveC53aWR0
aCgpICsgKGJveC5yaWdodCgpIC0gci5yaWdodCgpKSk7CisgICAgICAgICAgICByZXN1bHQuc2V0
WChib3gueCgpIC0gcmVmbGVjdGlvbk9mZnNldCgpIC0gYm94LndpZHRoKCkgKyAoYm94Lm1heFgo
KSAtIHIubWF4WCgpKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBSZWZsZWN0
aW9uUmlnaHQ6Ci0gICAgICAgICAgICByZXN1bHQuc2V0WChib3gucmlnaHQoKSArIHJlZmxlY3Rp
b25PZmZzZXQoKSArIChib3gucmlnaHQoKSAtIHIucmlnaHQoKSkpOworICAgICAgICAgICAgcmVz
dWx0LnNldFgoYm94Lm1heFgoKSArIHJlZmxlY3Rpb25PZmZzZXQoKSArIChib3gubWF4WCgpIC0g
ci5tYXhYKCkpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICByZXR1cm4gcmVzdWx0
OwpAQCAtMjk4Nyw3ICsyOTg3LDcgQEAgSW50UmVjdCBSZW5kZXJCb3g6OmxvY2FsQ2FyZXRSZWN0
KElubGluZQogICAgICAgICByZWN0LnNldEhlaWdodChmb250SGVpZ2h0KTsKIAogICAgIGlmIChl
eHRyYVdpZHRoVG9FbmRPZkxpbmUpCi0gICAgICAgICpleHRyYVdpZHRoVG9FbmRPZkxpbmUgPSB4
KCkgKyB3aWR0aCgpIC0gcmVjdC5yaWdodCgpOworICAgICAgICAqZXh0cmFXaWR0aFRvRW5kT2ZM
aW5lID0geCgpICsgd2lkdGgoKSAtIHJlY3QubWF4WCgpOwogCiAgICAgLy8gTW92ZSB0byBsb2Nh
bCBjb29yZHMKICAgICByZWN0Lm1vdmUoLXgoKSwgLXkoKSk7CkBAIC0zMTA4LDkgKzMxMDgsOSBA
QCB2b2lkIFJlbmRlckJveDo6YWRkU2hhZG93T3ZlcmZsb3coKQogICAgIHN0eWxlKCktPmdldEJv
eFNoYWRvd0V4dGVudChzaGFkb3dUb3AsIHNoYWRvd1JpZ2h0LCBzaGFkb3dCb3R0b20sIHNoYWRv
d0xlZnQpOwogICAgIEludFJlY3QgYm9yZGVyQm94ID0gYm9yZGVyQm94UmVjdCgpOwogICAgIGlu
dCBvdmVyZmxvd0xlZnQgPSBib3JkZXJCb3gueCgpICsgc2hhZG93TGVmdDsKLSAgICBpbnQgb3Zl
cmZsb3dSaWdodCA9IGJvcmRlckJveC5yaWdodCgpICsgc2hhZG93UmlnaHQ7CisgICAgaW50IG92
ZXJmbG93UmlnaHQgPSBib3JkZXJCb3gubWF4WCgpICsgc2hhZG93UmlnaHQ7CiAgICAgaW50IG92
ZXJmbG93VG9wID0gYm9yZGVyQm94LnkoKSArIHNoYWRvd1RvcDsKLSAgICBpbnQgb3ZlcmZsb3dC
b3R0b20gPSBib3JkZXJCb3guYm90dG9tKCkgKyBzaGFkb3dCb3R0b207CisgICAgaW50IG92ZXJm
bG93Qm90dG9tID0gYm9yZGVyQm94Lm1heFkoKSArIHNoYWRvd0JvdHRvbTsKICAgICBhZGRWaXN1
YWxPdmVyZmxvdyhJbnRSZWN0KG92ZXJmbG93TGVmdCwgb3ZlcmZsb3dUb3AsIG92ZXJmbG93Umln
aHQgLSBvdmVyZmxvd0xlZnQsIG92ZXJmbG93Qm90dG9tIC0gb3ZlcmZsb3dUb3ApKTsKIH0KIApA
QCAtMzE0OSwxMyArMzE0OSwxMyBAQCB2b2lkIFJlbmRlckJveDo6YWRkTGF5b3V0T3ZlcmZsb3co
Y29uc3QgCiAgICAgICAgIGJvb2wgaGFzTGVmdE92ZXJmbG93ID0gIXN0eWxlKCktPmlzTGVmdFRv
UmlnaHREaXJlY3Rpb24oKSAmJiBzdHlsZSgpLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpOwog
ICAgICAgICAKICAgICAgICAgaWYgKCFoYXNUb3BPdmVyZmxvdykKLSAgICAgICAgICAgIG92ZXJm
bG93UmVjdC5zaGlmdFRvcEVkZ2VUbyhtYXgob3ZlcmZsb3dSZWN0LnkoKSwgY2xpZW50Qm94Lnko
KSkpOworICAgICAgICAgICAgb3ZlcmZsb3dSZWN0LnNoaWZ0WUVkZ2VUbyhtYXgob3ZlcmZsb3dS
ZWN0LnkoKSwgY2xpZW50Qm94LnkoKSkpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBvdmVy
Zmxvd1JlY3Quc2hpZnRCb3R0b21FZGdlVG8obWluKG92ZXJmbG93UmVjdC5ib3R0b20oKSwgY2xp
ZW50Qm94LmJvdHRvbSgpKSk7CisgICAgICAgICAgICBvdmVyZmxvd1JlY3Quc2hpZnRNYXhZRWRn
ZVRvKG1pbihvdmVyZmxvd1JlY3QubWF4WSgpLCBjbGllbnRCb3gubWF4WSgpKSk7CiAgICAgICAg
IGlmICghaGFzTGVmdE92ZXJmbG93KQotICAgICAgICAgICAgb3ZlcmZsb3dSZWN0LnNoaWZ0TGVm
dEVkZ2VUbyhtYXgob3ZlcmZsb3dSZWN0LngoKSwgY2xpZW50Qm94LngoKSkpOworICAgICAgICAg
ICAgb3ZlcmZsb3dSZWN0LnNoaWZ0WEVkZ2VUbyhtYXgob3ZlcmZsb3dSZWN0LngoKSwgY2xpZW50
Qm94LngoKSkpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBvdmVyZmxvd1JlY3Quc2hpZnRS
aWdodEVkZ2VUbyhtaW4ob3ZlcmZsb3dSZWN0LnJpZ2h0KCksIGNsaWVudEJveC5yaWdodCgpKSk7
CisgICAgICAgICAgICBvdmVyZmxvd1JlY3Quc2hpZnRNYXhYRWRnZVRvKG1pbihvdmVyZmxvd1Jl
Y3QubWF4WCgpLCBjbGllbnRCb3gubWF4WCgpKSk7CiAgICAgICAgIAogICAgICAgICAvLyBOb3cg
cmUtdGVzdCB3aXRoIHRoZSBhZGp1c3RlZCByZWN0YW5nbGUgYW5kIHNlZSBpZiBpdCBoYXMgYmVj
b21lIHVucmVhY2hhYmxlIG9yIGZ1bGx5CiAgICAgICAgIC8vIGNvbnRhaW5lZC4KQEAgLTMyNDQs
OSArMzI0NCw5IEBAIEludFJlY3QgUmVuZGVyQm94Ojp2aXN1YWxPdmVyZmxvd1JlY3RGb3IKICAg
ICAvLyBXZSBhcmUgcHV0dGluZyBvdXJzZWx2ZXMgaW50byBvdXIgcGFyZW50J3MgY29vcmRpbmF0
ZSBzcGFjZS4gIElmIHRoZXJlIGlzIGEgZmxpcHBlZCBibG9jayBtaXNtYXRjaAogICAgIC8vIGlu
IGEgcGFydGljdWxhciBheGlzLCB0aGVuIHdlIGhhdmUgdG8gZmxpcCB0aGUgcmVjdCBhbG9uZyB0
aGF0IGF4aXMuCiAgICAgaWYgKHN0eWxlKCktPndyaXRpbmdNb2RlKCkgPT0gUmlnaHRUb0xlZnRX
cml0aW5nTW9kZSB8fCBwYXJlbnRTdHlsZS0+d3JpdGluZ01vZGUoKSA9PSBSaWdodFRvTGVmdFdy
aXRpbmdNb2RlKQotICAgICAgICByZWN0LnNldFgod2lkdGgoKSAtIHJlY3QucmlnaHQoKSk7Cisg
ICAgICAgIHJlY3Quc2V0WCh3aWR0aCgpIC0gcmVjdC5tYXhYKCkpOwogICAgIGVsc2UgaWYgKHN0
eWxlKCktPndyaXRpbmdNb2RlKCkgPT0gQm90dG9tVG9Ub3BXcml0aW5nTW9kZSB8fCBwYXJlbnRT
dHlsZS0+d3JpdGluZ01vZGUoKSA9PSBCb3R0b21Ub1RvcFdyaXRpbmdNb2RlKQotICAgICAgICBy
ZWN0LnNldFkoaGVpZ2h0KCkgLSByZWN0LmJvdHRvbSgpKTsKKyAgICAgICAgcmVjdC5zZXRZKGhl
aWdodCgpIC0gcmVjdC5tYXhZKCkpOwogCiAgICAgcmV0dXJuIHJlY3Q7CiB9CkBAIC0zMjkwLDkg
KzMyOTAsOSBAQCBJbnRSZWN0IFJlbmRlckJveDo6bGF5b3V0T3ZlcmZsb3dSZWN0Rm9yCiAgICAg
Ly8gV2UgYXJlIHB1dHRpbmcgb3Vyc2VsdmVzIGludG8gb3VyIHBhcmVudCdzIGNvb3JkaW5hdGUg
c3BhY2UuICBJZiB0aGVyZSBpcyBhIGZsaXBwZWQgYmxvY2sgbWlzbWF0Y2gKICAgICAvLyBpbiBh
IHBhcnRpY3VsYXIgYXhpcywgdGhlbiB3ZSBoYXZlIHRvIGZsaXAgdGhlIHJlY3QgYWxvbmcgdGhh
dCBheGlzLgogICAgIGlmIChzdHlsZSgpLT53cml0aW5nTW9kZSgpID09IFJpZ2h0VG9MZWZ0V3Jp
dGluZ01vZGUgfHwgcGFyZW50U3R5bGUtPndyaXRpbmdNb2RlKCkgPT0gUmlnaHRUb0xlZnRXcml0
aW5nTW9kZSkKLSAgICAgICAgcmVjdC5zZXRYKHdpZHRoKCkgLSByZWN0LnJpZ2h0KCkpOworICAg
ICAgICByZWN0LnNldFgod2lkdGgoKSAtIHJlY3QubWF4WCgpKTsKICAgICBlbHNlIGlmIChzdHls
ZSgpLT53cml0aW5nTW9kZSgpID09IEJvdHRvbVRvVG9wV3JpdGluZ01vZGUgfHwgcGFyZW50U3R5
bGUtPndyaXRpbmdNb2RlKCkgPT0gQm90dG9tVG9Ub3BXcml0aW5nTW9kZSkKLSAgICAgICAgcmVj
dC5zZXRZKGhlaWdodCgpIC0gcmVjdC5ib3R0b20oKSk7CisgICAgICAgIHJlY3Quc2V0WShoZWln
aHQoKSAtIHJlY3QubWF4WSgpKTsKIAogICAgIHJldHVybiByZWN0OwogfQpAQCAtMzMxNSw5ICsz
MzE1LDkgQEAgdm9pZCBSZW5kZXJCb3g6OmZsaXBGb3JXcml0aW5nTW9kZShJbnRSZQogICAgICAg
ICByZXR1cm47CiAKICAgICBpZiAoc3R5bGUoKS0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkK
LSAgICAgICAgcmVjdC5zZXRZKGhlaWdodCgpIC0gcmVjdC5ib3R0b20oKSk7CisgICAgICAgIHJl
Y3Quc2V0WShoZWlnaHQoKSAtIHJlY3QubWF4WSgpKTsKICAgICBlbHNlCi0gICAgICAgIHJlY3Qu
c2V0WCh3aWR0aCgpIC0gcmVjdC5yaWdodCgpKTsKKyAgICAgICAgcmVjdC5zZXRYKHdpZHRoKCkg
LSByZWN0Lm1heFgoKSk7CiB9CiAKIGludCBSZW5kZXJCb3g6OmZsaXBGb3JXcml0aW5nTW9kZShp
bnQgcG9zaXRpb24pIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
RnJhbWVTZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJGcmFtZVNldC5jcHAJKHJldmlzaW9uIDc3Mjc4KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckZyYW1lU2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTMsOCArOTMsOCBAQCB2
b2lkIFJlbmRlckZyYW1lU2V0OjpwYWludENvbHVtbkJvcmRlcihjCiAgICAgLy8gTm93IHN0cm9r
ZSB0aGUgZWRnZXMgYnV0IG9ubHkgaWYgd2UgaGF2ZSBlbm91Z2ggcm9vbSB0byBwYWludCBib3Ro
IGVkZ2VzIHdpdGggYSBsaXR0bGUKICAgICAvLyBiaXQgb2YgdGhlIGZpbGwgY29sb3Igc2hvd2lu
ZyB0aHJvdWdoLgogICAgIGlmIChib3JkZXJSZWN0LndpZHRoKCkgPj0gMykgewotICAgICAgICBj
b250ZXh0LT5maWxsUmVjdChJbnRSZWN0KGJvcmRlclJlY3QudG9wTGVmdCgpLCBJbnRTaXplKDEs
IGhlaWdodCgpKSksIGJvcmRlclN0YXJ0RWRnZUNvbG9yKCksIGNvbG9yU3BhY2UpOwotICAgICAg
ICBjb250ZXh0LT5maWxsUmVjdChJbnRSZWN0KGJvcmRlclJlY3QudG9wUmlnaHQoKSwgSW50U2l6
ZSgxLCBoZWlnaHQoKSkpLCBib3JkZXJFbmRFZGdlQ29sb3IoKSwgY29sb3JTcGFjZSk7CisgICAg
ICAgIGNvbnRleHQtPmZpbGxSZWN0KEludFJlY3QoYm9yZGVyUmVjdC5sb2NhdGlvbigpLCBJbnRT
aXplKDEsIGhlaWdodCgpKSksIGJvcmRlclN0YXJ0RWRnZUNvbG9yKCksIGNvbG9yU3BhY2UpOwor
ICAgICAgICBjb250ZXh0LT5maWxsUmVjdChJbnRSZWN0KEludFBvaW50KGJvcmRlclJlY3QubWF4
WCgpIC0gMSwgYm9yZGVyUmVjdC55KCkpLCBJbnRTaXplKDEsIGhlaWdodCgpKSksIGJvcmRlckVu
ZEVkZ2VDb2xvcigpLCBjb2xvclNwYWNlKTsKICAgICB9CiB9CiAKQEAgLTExMyw4ICsxMTMsOCBA
QCB2b2lkIFJlbmRlckZyYW1lU2V0OjpwYWludFJvd0JvcmRlcihjb25zCiAgICAgLy8gTm93IHN0
cm9rZSB0aGUgZWRnZXMgYnV0IG9ubHkgaWYgd2UgaGF2ZSBlbm91Z2ggcm9vbSB0byBwYWludCBi
b3RoIGVkZ2VzIHdpdGggYSBsaXR0bGUKICAgICAvLyBiaXQgb2YgdGhlIGZpbGwgY29sb3Igc2hv
d2luZyB0aHJvdWdoLgogICAgIGlmIChib3JkZXJSZWN0LmhlaWdodCgpID49IDMpIHsKLSAgICAg
ICAgY29udGV4dC0+ZmlsbFJlY3QoSW50UmVjdChib3JkZXJSZWN0LnRvcExlZnQoKSwgSW50U2l6
ZSh3aWR0aCgpLCAxKSksIGJvcmRlclN0YXJ0RWRnZUNvbG9yKCksIGNvbG9yU3BhY2UpOwotICAg
ICAgICBjb250ZXh0LT5maWxsUmVjdChJbnRSZWN0KGJvcmRlclJlY3QuYm90dG9tTGVmdCgpLCBJ
bnRTaXplKHdpZHRoKCksIDEpKSwgYm9yZGVyRW5kRWRnZUNvbG9yKCksIGNvbG9yU3BhY2UpOwor
ICAgICAgICBjb250ZXh0LT5maWxsUmVjdChJbnRSZWN0KGJvcmRlclJlY3QubG9jYXRpb24oKSwg
SW50U2l6ZSh3aWR0aCgpLCAxKSksIGJvcmRlclN0YXJ0RWRnZUNvbG9yKCksIGNvbG9yU3BhY2Up
OworICAgICAgICBjb250ZXh0LT5maWxsUmVjdChJbnRSZWN0KEludFBvaW50KGJvcmRlclJlY3Qu
eCgpLCBib3JkZXJSZWN0Lm1heFkoKSAtIDEpLCBJbnRTaXplKHdpZHRoKCksIDEpKSwgYm9yZGVy
RW5kRWRnZUNvbG9yKCksIGNvbG9yU3BhY2UpOwogICAgIH0KIH0KIApJbmRleDogU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGluZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGluZS5jcHAJKHJldmlzaW9uIDc3Mjc4KQorKysgU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGluZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEwMzcsMzAgKzEwMzcsMzAgQEAgdm9pZCBSZW5kZXJJbmxpbmU6OnBhaW50T3V0bGluZUZvckxp
bmUoRwogCiAgICAgaW50IHQgPSB0eSArIHRoaXNsaW5lLnkoKSAtIG9mZnNldDsKICAgICBpbnQg
bCA9IHR4ICsgdGhpc2xpbmUueCgpIC0gb2Zmc2V0OwotICAgIGludCBiID0gdHkgKyB0aGlzbGlu
ZS5ib3R0b20oKSArIG9mZnNldDsKLSAgICBpbnQgciA9IHR4ICsgdGhpc2xpbmUucmlnaHQoKSAr
IG9mZnNldDsKKyAgICBpbnQgYiA9IHR5ICsgdGhpc2xpbmUubWF4WSgpICsgb2Zmc2V0OworICAg
IGludCByID0gdHggKyB0aGlzbGluZS5tYXhYKCkgKyBvZmZzZXQ7CiAgICAgCiAgICAgLy8gbGVm
dCBlZGdlCiAgICAgZHJhd0xpbmVGb3JCb3hTaWRlKGdyYXBoaWNzQ29udGV4dCwKICAgICAgICAg
ICAgICAgIGwgLSBvdywKLSAgICAgICAgICAgICAgIHQgLSAobGFzdGxpbmUuaXNFbXB0eSgpIHx8
IHRoaXNsaW5lLngoKSA8IGxhc3RsaW5lLngoKSB8fCAobGFzdGxpbmUucmlnaHQoKSAtIDEpIDw9
IHRoaXNsaW5lLngoKSA/IG93IDogMCksCisgICAgICAgICAgICAgICB0IC0gKGxhc3RsaW5lLmlz
RW1wdHkoKSB8fCB0aGlzbGluZS54KCkgPCBsYXN0bGluZS54KCkgfHwgKGxhc3RsaW5lLm1heFgo
KSAtIDEpIDw9IHRoaXNsaW5lLngoKSA/IG93IDogMCksCiAgICAgICAgICAgICAgICBsLAotICAg
ICAgICAgICAgICAgYiArIChuZXh0bGluZS5pc0VtcHR5KCkgfHwgdGhpc2xpbmUueCgpIDw9IG5l
eHRsaW5lLngoKSB8fCAobmV4dGxpbmUucmlnaHQoKSAtIDEpIDw9IHRoaXNsaW5lLngoKSA/IG93
IDogMCksCisgICAgICAgICAgICAgICBiICsgKG5leHRsaW5lLmlzRW1wdHkoKSB8fCB0aGlzbGlu
ZS54KCkgPD0gbmV4dGxpbmUueCgpIHx8IChuZXh0bGluZS5tYXhYKCkgLSAxKSA8PSB0aGlzbGlu
ZS54KCkgPyBvdyA6IDApLAogICAgICAgICAgICAgICAgQlNMZWZ0LAogICAgICAgICAgICAgICAg
b2MsIG9zLAotICAgICAgICAgICAgICAgKGxhc3RsaW5lLmlzRW1wdHkoKSB8fCB0aGlzbGluZS54
KCkgPCBsYXN0bGluZS54KCkgfHwgKGxhc3RsaW5lLnJpZ2h0KCkgLSAxKSA8PSB0aGlzbGluZS54
KCkgPyBvdyA6IC1vdyksCi0gICAgICAgICAgICAgICAobmV4dGxpbmUuaXNFbXB0eSgpIHx8IHRo
aXNsaW5lLngoKSA8PSBuZXh0bGluZS54KCkgfHwgKG5leHRsaW5lLnJpZ2h0KCkgLSAxKSA8PSB0
aGlzbGluZS54KCkgPyBvdyA6IC1vdykpOworICAgICAgICAgICAgICAgKGxhc3RsaW5lLmlzRW1w
dHkoKSB8fCB0aGlzbGluZS54KCkgPCBsYXN0bGluZS54KCkgfHwgKGxhc3RsaW5lLm1heFgoKSAt
IDEpIDw9IHRoaXNsaW5lLngoKSA/IG93IDogLW93KSwKKyAgICAgICAgICAgICAgIChuZXh0bGlu
ZS5pc0VtcHR5KCkgfHwgdGhpc2xpbmUueCgpIDw9IG5leHRsaW5lLngoKSB8fCAobmV4dGxpbmUu
bWF4WCgpIC0gMSkgPD0gdGhpc2xpbmUueCgpID8gb3cgOiAtb3cpKTsKICAgICAKICAgICAvLyBy
aWdodCBlZGdlCiAgICAgZHJhd0xpbmVGb3JCb3hTaWRlKGdyYXBoaWNzQ29udGV4dCwKICAgICAg
ICAgICAgICAgIHIsCi0gICAgICAgICAgICAgICB0IC0gKGxhc3RsaW5lLmlzRW1wdHkoKSB8fCBs
YXN0bGluZS5yaWdodCgpIDwgdGhpc2xpbmUucmlnaHQoKSB8fCAodGhpc2xpbmUucmlnaHQoKSAt
IDEpIDw9IGxhc3RsaW5lLngoKSA/IG93IDogMCksCisgICAgICAgICAgICAgICB0IC0gKGxhc3Rs
aW5lLmlzRW1wdHkoKSB8fCBsYXN0bGluZS5tYXhYKCkgPCB0aGlzbGluZS5tYXhYKCkgfHwgKHRo
aXNsaW5lLm1heFgoKSAtIDEpIDw9IGxhc3RsaW5lLngoKSA/IG93IDogMCksCiAgICAgICAgICAg
ICAgICByICsgb3csCi0gICAgICAgICAgICAgICBiICsgKG5leHRsaW5lLmlzRW1wdHkoKSB8fCBu
ZXh0bGluZS5yaWdodCgpIDw9IHRoaXNsaW5lLnJpZ2h0KCkgfHwgKHRoaXNsaW5lLnJpZ2h0KCkg
LSAxKSA8PSBuZXh0bGluZS54KCkgPyBvdyA6IDApLAorICAgICAgICAgICAgICAgYiArIChuZXh0
bGluZS5pc0VtcHR5KCkgfHwgbmV4dGxpbmUubWF4WCgpIDw9IHRoaXNsaW5lLm1heFgoKSB8fCAo
dGhpc2xpbmUubWF4WCgpIC0gMSkgPD0gbmV4dGxpbmUueCgpID8gb3cgOiAwKSwKICAgICAgICAg
ICAgICAgIEJTUmlnaHQsCiAgICAgICAgICAgICAgICBvYywgb3MsCi0gICAgICAgICAgICAgICAo
bGFzdGxpbmUuaXNFbXB0eSgpIHx8IGxhc3RsaW5lLnJpZ2h0KCkgPCB0aGlzbGluZS5yaWdodCgp
IHx8ICh0aGlzbGluZS5yaWdodCgpIC0gMSkgPD0gbGFzdGxpbmUueCgpID8gb3cgOiAtb3cpLAot
ICAgICAgICAgICAgICAgKG5leHRsaW5lLmlzRW1wdHkoKSB8fCBuZXh0bGluZS5yaWdodCgpIDw9
IHRoaXNsaW5lLnJpZ2h0KCkgfHwgKHRoaXNsaW5lLnJpZ2h0KCkgLSAxKSA8PSBuZXh0bGluZS54
KCkgPyBvdyA6IC1vdykpOworICAgICAgICAgICAgICAgKGxhc3RsaW5lLmlzRW1wdHkoKSB8fCBs
YXN0bGluZS5tYXhYKCkgPCB0aGlzbGluZS5tYXhYKCkgfHwgKHRoaXNsaW5lLm1heFgoKSAtIDEp
IDw9IGxhc3RsaW5lLngoKSA/IG93IDogLW93KSwKKyAgICAgICAgICAgICAgIChuZXh0bGluZS5p
c0VtcHR5KCkgfHwgbmV4dGxpbmUubWF4WCgpIDw9IHRoaXNsaW5lLm1heFgoKSB8fCAodGhpc2xp
bmUubWF4WCgpIC0gMSkgPD0gbmV4dGxpbmUueCgpID8gb3cgOiAtb3cpKTsKICAgICAvLyB1cHBl
ciBlZGdlCiAgICAgaWYgKHRoaXNsaW5lLngoKSA8IGxhc3RsaW5lLngoKSkKICAgICAgICAgZHJh
d0xpbmVGb3JCb3hTaWRlKGdyYXBoaWNzQ29udGV4dCwKQEAgLTEwNzIsMTQgKzEwNzIsMTQgQEAg
dm9pZCBSZW5kZXJJbmxpbmU6OnBhaW50T3V0bGluZUZvckxpbmUoRwogICAgICAgICAgICAgICAg
ICAgIG93LAogICAgICAgICAgICAgICAgICAgICghbGFzdGxpbmUuaXNFbXB0eSgpICYmIHR4ICsg
bGFzdGxpbmUueCgpICsgMSA8IHIgKyBvdykgPyAtb3cgOiBvdyk7CiAgICAgCi0gICAgaWYgKGxh
c3RsaW5lLnJpZ2h0KCkgPCB0aGlzbGluZS5yaWdodCgpKQorICAgIGlmIChsYXN0bGluZS5tYXhY
KCkgPCB0aGlzbGluZS5tYXhYKCkpCiAgICAgICAgIGRyYXdMaW5lRm9yQm94U2lkZShncmFwaGlj
c0NvbnRleHQsCi0gICAgICAgICAgICAgICAgICAgbWF4KGxhc3RsaW5lLmlzRW1wdHkoKSA/IC0x
MDAwMDAwIDogdHggKyBsYXN0bGluZS5yaWdodCgpLCBsIC0gb3cpLAorICAgICAgICAgICAgICAg
ICAgIG1heChsYXN0bGluZS5pc0VtcHR5KCkgPyAtMTAwMDAwMCA6IHR4ICsgbGFzdGxpbmUubWF4
WCgpLCBsIC0gb3cpLAogICAgICAgICAgICAgICAgICAgIHQgLSBvdywKICAgICAgICAgICAgICAg
ICAgICByICsgb3csCiAgICAgICAgICAgICAgICAgICAgdCAsCiAgICAgICAgICAgICAgICAgICAg
QlNUb3AsIG9jLCBvcywKLSAgICAgICAgICAgICAgICAgICAoIWxhc3RsaW5lLmlzRW1wdHkoKSAm
JiBsIC0gb3cgPCB0eCArIGxhc3RsaW5lLnJpZ2h0KCkpID8gLW93IDogb3csCisgICAgICAgICAg
ICAgICAgICAgKCFsYXN0bGluZS5pc0VtcHR5KCkgJiYgbCAtIG93IDwgdHggKyBsYXN0bGluZS5t
YXhYKCkpID8gLW93IDogb3csCiAgICAgICAgICAgICAgICAgICAgb3cpOwogICAgIAogICAgIC8v
IGxvd2VyIGVkZ2UKQEAgLTEwOTMsMTQgKzEwOTMsMTQgQEAgdm9pZCBSZW5kZXJJbmxpbmU6OnBh
aW50T3V0bGluZUZvckxpbmUoRwogICAgICAgICAgICAgICAgICAgIG93LAogICAgICAgICAgICAg
ICAgICAgICghbmV4dGxpbmUuaXNFbXB0eSgpICYmIHR4ICsgbmV4dGxpbmUueCgpICsgMSA8IHIg
KyBvdykgPyAtb3cgOiBvdyk7CiAgICAgCi0gICAgaWYgKG5leHRsaW5lLnJpZ2h0KCkgPCB0aGlz
bGluZS5yaWdodCgpKQorICAgIGlmIChuZXh0bGluZS5tYXhYKCkgPCB0aGlzbGluZS5tYXhYKCkp
CiAgICAgICAgIGRyYXdMaW5lRm9yQm94U2lkZShncmFwaGljc0NvbnRleHQsCi0gICAgICAgICAg
ICAgICAgICAgbWF4KCFuZXh0bGluZS5pc0VtcHR5KCkgPyB0eCArIG5leHRsaW5lLnJpZ2h0KCkg
OiAtMTAwMDAwMCwgbCAtIG93KSwKKyAgICAgICAgICAgICAgICAgICBtYXgoIW5leHRsaW5lLmlz
RW1wdHkoKSA/IHR4ICsgbmV4dGxpbmUubWF4WCgpIDogLTEwMDAwMDAsIGwgLSBvdyksCiAgICAg
ICAgICAgICAgICAgICAgYiwKICAgICAgICAgICAgICAgICAgICByICsgb3csCiAgICAgICAgICAg
ICAgICAgICAgYiArIG93LAogICAgICAgICAgICAgICAgICAgIEJTQm90dG9tLCBvYywgb3MsCi0g
ICAgICAgICAgICAgICAgICAgKCFuZXh0bGluZS5pc0VtcHR5KCkgJiYgbCAtIG93IDwgdHggKyBu
ZXh0bGluZS5yaWdodCgpKSA/IC1vdyA6IG93LAorICAgICAgICAgICAgICAgICAgICghbmV4dGxp
bmUuaXNFbXB0eSgpICYmIGwgLSBvdyA8IHR4ICsgbmV4dGxpbmUubWF4WCgpKSA/IC1vdyA6IG93
LAogICAgICAgICAgICAgICAgICAgIG93KTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckxheWVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCShyZXZpc2lvbiA3NzI3OCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1MTYsNyArMTUx
Niw3IEBAIEludFJlY3QgUmVuZGVyTGF5ZXI6OmdldFJlY3RUb0V4cG9zZShjb24KICAgICAgICAg
c2Nyb2xsWCA9IFNjcm9sbEFsaWdubWVudDo6Z2V0SGlkZGVuQmVoYXZpb3IoYWxpZ25YKTsKICAg
ICAvLyBJZiB3ZSdyZSB0cnlpbmcgdG8gYWxpZ24gdG8gdGhlIGNsb3Nlc3QgZWRnZSwgYW5kIHRo
ZSBleHBvc2VSZWN0IGlzIGZ1cnRoZXIgcmlnaHQKICAgICAvLyB0aGFuIHRoZSB2aXNpYmxlUmVj
dCwgYW5kIG5vdCBiaWdnZXIgdGhhbiB0aGUgdmlzaWJsZSBhcmVhLCB0aGVuIGFsaWduIHdpdGgg
dGhlIHJpZ2h0LgotICAgIGlmIChzY3JvbGxYID09IGFsaWduVG9DbG9zZXN0RWRnZSAmJiBleHBv
c2VSZWN0LnJpZ2h0KCkgPiB2aXNpYmxlUmVjdC5yaWdodCgpICYmIGV4cG9zZVJlY3Qud2lkdGgo
KSA8IHZpc2libGVSZWN0LndpZHRoKCkpCisgICAgaWYgKHNjcm9sbFggPT0gYWxpZ25Ub0Nsb3Nl
c3RFZGdlICYmIGV4cG9zZVJlY3QubWF4WCgpID4gdmlzaWJsZVJlY3QubWF4WCgpICYmIGV4cG9z
ZVJlY3Qud2lkdGgoKSA8IHZpc2libGVSZWN0LndpZHRoKCkpCiAgICAgICAgIHNjcm9sbFggPSBh
bGlnblJpZ2h0OwogCiAgICAgLy8gR2l2ZW4gdGhlIFggYmVoYXZpb3IsIGNvbXB1dGUgdGhlIFgg
Y29vcmRpbmF0ZS4KQEAgLTE1MjQsNyArMTUyNCw3IEBAIEludFJlY3QgUmVuZGVyTGF5ZXI6Omdl
dFJlY3RUb0V4cG9zZShjb24KICAgICBpZiAoc2Nyb2xsWCA9PSBub1Njcm9sbCkgCiAgICAgICAg
IHggPSB2aXNpYmxlUmVjdC54KCk7CiAgICAgZWxzZSBpZiAoc2Nyb2xsWCA9PSBhbGlnblJpZ2h0
KQotICAgICAgICB4ID0gZXhwb3NlUmVjdC5yaWdodCgpIC0gdmlzaWJsZVJlY3Qud2lkdGgoKTsK
KyAgICAgICAgeCA9IGV4cG9zZVJlY3QubWF4WCgpIC0gdmlzaWJsZVJlY3Qud2lkdGgoKTsKICAg
ICBlbHNlIGlmIChzY3JvbGxYID09IGFsaWduQ2VudGVyKQogICAgICAgICB4ID0gZXhwb3NlUmVj
dC54KCkgKyAoZXhwb3NlUmVjdC53aWR0aCgpIC0gdmlzaWJsZVJlY3Qud2lkdGgoKSkgLyAyOwog
ICAgIGVsc2UKQEAgLTE1NDksNyArMTU0OSw3IEBAIEludFJlY3QgUmVuZGVyTGF5ZXI6OmdldFJl
Y3RUb0V4cG9zZShjb24KICAgICAgICAgc2Nyb2xsWSA9IFNjcm9sbEFsaWdubWVudDo6Z2V0SGlk
ZGVuQmVoYXZpb3IoYWxpZ25ZKTsKICAgICAvLyBJZiB3ZSdyZSB0cnlpbmcgdG8gYWxpZ24gdG8g
dGhlIGNsb3Nlc3QgZWRnZSwgYW5kIHRoZSBleHBvc2VSZWN0IGlzIGZ1cnRoZXIgZG93bgogICAg
IC8vIHRoYW4gdGhlIHZpc2libGVSZWN0LCBhbmQgbm90IGJpZ2dlciB0aGFuIHRoZSB2aXNpYmxl
IGFyZWEsIHRoZW4gYWxpZ24gd2l0aCB0aGUgYm90dG9tLgotICAgIGlmIChzY3JvbGxZID09IGFs
aWduVG9DbG9zZXN0RWRnZSAmJiBleHBvc2VSZWN0LmJvdHRvbSgpID4gdmlzaWJsZVJlY3QuYm90
dG9tKCkgJiYgZXhwb3NlUmVjdC5oZWlnaHQoKSA8IHZpc2libGVSZWN0LmhlaWdodCgpKQorICAg
IGlmIChzY3JvbGxZID09IGFsaWduVG9DbG9zZXN0RWRnZSAmJiBleHBvc2VSZWN0Lm1heFkoKSA+
IHZpc2libGVSZWN0Lm1heFkoKSAmJiBleHBvc2VSZWN0LmhlaWdodCgpIDwgdmlzaWJsZVJlY3Qu
aGVpZ2h0KCkpCiAgICAgICAgIHNjcm9sbFkgPSBhbGlnbkJvdHRvbTsKIAogICAgIC8vIEdpdmVu
IHRoZSBZIGJlaGF2aW9yLCBjb21wdXRlIHRoZSBZIGNvb3JkaW5hdGUuCkBAIC0xNTU3LDcgKzE1
NTcsNyBAQCBJbnRSZWN0IFJlbmRlckxheWVyOjpnZXRSZWN0VG9FeHBvc2UoY29uCiAgICAgaWYg
KHNjcm9sbFkgPT0gbm9TY3JvbGwpIAogICAgICAgICB5ID0gdmlzaWJsZVJlY3QueSgpOwogICAg
IGVsc2UgaWYgKHNjcm9sbFkgPT0gYWxpZ25Cb3R0b20pCi0gICAgICAgIHkgPSBleHBvc2VSZWN0
LmJvdHRvbSgpIC0gdmlzaWJsZVJlY3QuaGVpZ2h0KCk7CisgICAgICAgIHkgPSBleHBvc2VSZWN0
Lm1heFkoKSAtIHZpc2libGVSZWN0LmhlaWdodCgpOwogICAgIGVsc2UgaWYgKHNjcm9sbFkgPT0g
YWxpZ25DZW50ZXIpCiAgICAgICAgIHkgPSBleHBvc2VSZWN0LnkoKSArIChleHBvc2VSZWN0Lmhl
aWdodCgpIC0gdmlzaWJsZVJlY3QuaGVpZ2h0KCkpIC8gMjsKICAgICBlbHNlCkBAIC0xNjk0LDgg
KzE2OTQsOCBAQCBzdGF0aWMgSW50UmVjdCBjb3JuZXJSZWN0KGNvbnN0IFJlbmRlckxhCiAgICAg
ICAgIGhvcml6b250YWxUaGlja25lc3MgPSBsYXllci0+dmVydGljYWxTY3JvbGxiYXIoKS0+d2lk
dGgoKTsKICAgICAgICAgdmVydGljYWxUaGlja25lc3MgPSBsYXllci0+aG9yaXpvbnRhbFNjcm9s
bGJhcigpLT5oZWlnaHQoKTsKICAgICB9Ci0gICAgcmV0dXJuIEludFJlY3QoYm91bmRzLnJpZ2h0
KCkgLSBob3Jpem9udGFsVGhpY2tuZXNzIC0gbGF5ZXItPnJlbmRlcmVyKCktPnN0eWxlKCktPmJv
cmRlclJpZ2h0V2lkdGgoKSwgCi0gICAgICAgICAgICAgICAgICAgYm91bmRzLmJvdHRvbSgpIC0g
dmVydGljYWxUaGlja25lc3MgLSBsYXllci0+cmVuZGVyZXIoKS0+c3R5bGUoKS0+Ym9yZGVyQm90
dG9tV2lkdGgoKSwKKyAgICByZXR1cm4gSW50UmVjdChib3VuZHMubWF4WCgpIC0gaG9yaXpvbnRh
bFRoaWNrbmVzcyAtIGxheWVyLT5yZW5kZXJlcigpLT5zdHlsZSgpLT5ib3JkZXJSaWdodFdpZHRo
KCksIAorICAgICAgICAgICAgICAgICAgIGJvdW5kcy5tYXhZKCkgLSB2ZXJ0aWNhbFRoaWNrbmVz
cyAtIGxheWVyLT5yZW5kZXJlcigpLT5zdHlsZSgpLT5ib3JkZXJCb3R0b21XaWR0aCgpLAogICAg
ICAgICAgICAgICAgICAgIGhvcml6b250YWxUaGlja25lc3MsIHZlcnRpY2FsVGhpY2tuZXNzKTsK
IH0KIApAQCAtMTkxMSwxNCArMTkxMSwxNCBAQCB2b2lkIFJlbmRlckxheWVyOjpwb3NpdGlvbk92
ZXJmbG93Q29udHJvCiAgICAgSW50UmVjdCBzY3JvbGxDb3JuZXIoc2Nyb2xsQ29ybmVyUmVjdCh0
aGlzLCBib3JkZXJCb3gpKTsKICAgICBJbnRSZWN0IGFic0JvdW5kcyhib3JkZXJCb3gueCgpICsg
dHgsIGJvcmRlckJveC55KCkgKyB0eSwgYm9yZGVyQm94LndpZHRoKCksIGJvcmRlckJveC5oZWln
aHQoKSk7CiAgICAgaWYgKG1fdkJhcikKLSAgICAgICAgbV92QmFyLT5zZXRGcmFtZVJlY3QoSW50
UmVjdChhYnNCb3VuZHMucmlnaHQoKSAtIGJveC0+Ym9yZGVyUmlnaHQoKSAtIG1fdkJhci0+d2lk
dGgoKSwKKyAgICAgICAgbV92QmFyLT5zZXRGcmFtZVJlY3QoSW50UmVjdChhYnNCb3VuZHMubWF4
WCgpIC0gYm94LT5ib3JkZXJSaWdodCgpIC0gbV92QmFyLT53aWR0aCgpLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGFic0JvdW5kcy55KCkgKyBib3gtPmJvcmRlclRvcCgp
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fdkJhci0+d2lkdGgoKSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhYnNCb3VuZHMuaGVpZ2h0KCkg
LSAoYm94LT5ib3JkZXJUb3AoKSArIGJveC0+Ym9yZGVyQm90dG9tKCkpIC0gc2Nyb2xsQ29ybmVy
LmhlaWdodCgpKSk7CiAKICAgICBpZiAobV9oQmFyKQogICAgICAgICBtX2hCYXItPnNldEZyYW1l
UmVjdChJbnRSZWN0KGFic0JvdW5kcy54KCkgKyBib3gtPmJvcmRlckxlZnQoKSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhYnNCb3VuZHMuYm90dG9tKCkgLSBib3gtPmJv
cmRlckJvdHRvbSgpIC0gbV9oQmFyLT5oZWlnaHQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBhYnNCb3VuZHMubWF4WSgpIC0gYm94LT5ib3JkZXJCb3R0b20oKSAtIG1f
aEJhci0+aGVpZ2h0KCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWJz
Qm91bmRzLndpZHRoKCkgLSAoYm94LT5ib3JkZXJMZWZ0KCkgKyBib3gtPmJvcmRlclJpZ2h0KCkp
IC0gc2Nyb2xsQ29ybmVyLndpZHRoKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbV9oQmFyLT5oZWlnaHQoKSkpOwogICAgIApAQCAtMTk1NSw3ICsxOTU1LDcgQEAgaW50
IFJlbmRlckxheWVyOjpvdmVyZmxvd0JvdHRvbSgpIGNvbnN0CiAgICAgUmVuZGVyQm94KiBib3gg
PSByZW5kZXJCb3goKTsKICAgICBJbnRSZWN0IG92ZXJmbG93UmVjdChib3gtPmxheW91dE92ZXJm
bG93UmVjdCgpKTsKICAgICBib3gtPmZsaXBGb3JXcml0aW5nTW9kZShvdmVyZmxvd1JlY3QpOwot
ICAgIHJldHVybiBvdmVyZmxvd1JlY3QuYm90dG9tKCk7CisgICAgcmV0dXJuIG92ZXJmbG93UmVj
dC5tYXhZKCk7CiB9CiAKIGludCBSZW5kZXJMYXllcjo6b3ZlcmZsb3dMZWZ0KCkgY29uc3QKQEAg
LTE5NzEsNyArMTk3MSw3IEBAIGludCBSZW5kZXJMYXllcjo6b3ZlcmZsb3dSaWdodCgpIGNvbnN0
CiAgICAgUmVuZGVyQm94KiBib3ggPSByZW5kZXJCb3goKTsKICAgICBJbnRSZWN0IG92ZXJmbG93
UmVjdChib3gtPmxheW91dE92ZXJmbG93UmVjdCgpKTsKICAgICBib3gtPmZsaXBGb3JXcml0aW5n
TW9kZShvdmVyZmxvd1JlY3QpOwotICAgIHJldHVybiBvdmVyZmxvd1JlY3QucmlnaHQoKTsKKyAg
ICByZXR1cm4gb3ZlcmZsb3dSZWN0Lm1heFgoKTsKIH0KIAogdm9pZCBSZW5kZXJMYXllcjo6Y29t
cHV0ZVNjcm9sbERpbWVuc2lvbnMoYm9vbCogbmVlZEhCYXIsIGJvb2wqIG5lZWRWQmFyKQpAQCAt
MjE5Nyw3ICsyMTk3LDcgQEAgdm9pZCBSZW5kZXJMYXllcjo6cGFpbnRSZXNpemVyKEdyYXBoaWNz
QwogCiAgICAgLy8gUGFpbnQgdGhlIHJlc2l6ZXIgY29udHJvbC4KICAgICBERUZJTkVfU1RBVElD
X0xPQ0FMKFJlZlB0cjxJbWFnZT4sIHJlc2l6ZUNvcm5lckltYWdlLCAoSW1hZ2U6OmxvYWRQbGF0
Zm9ybVJlc291cmNlKCJ0ZXh0QXJlYVJlc2l6ZUNvcm5lciIpKSk7Ci0gICAgSW50UG9pbnQgaW1h
Z2VQb2ludChhYnNSZWN0LnJpZ2h0KCkgLSByZXNpemVDb3JuZXJJbWFnZS0+d2lkdGgoKSwgYWJz
UmVjdC5ib3R0b20oKSAtIHJlc2l6ZUNvcm5lckltYWdlLT5oZWlnaHQoKSk7CisgICAgSW50UG9p
bnQgaW1hZ2VQb2ludChhYnNSZWN0Lm1heFgoKSAtIHJlc2l6ZUNvcm5lckltYWdlLT53aWR0aCgp
LCBhYnNSZWN0Lm1heFkoKSAtIHJlc2l6ZUNvcm5lckltYWdlLT5oZWlnaHQoKSk7CiAgICAgY29u
dGV4dC0+ZHJhd0ltYWdlKHJlc2l6ZUNvcm5lckltYWdlLmdldCgpLCBib3gtPnN0eWxlKCktPmNv
bG9yU3BhY2UoKSwgaW1hZ2VQb2ludCk7CiAKICAgICAvLyBEcmF3IGEgZnJhbWUgYXJvdW5kIHRo
ZSByZXNpemVyICgxcHggZ3JleSBsaW5lKSBpZiB0aGVyZSBhcmUgYW55IHNjcm9sbGJhcnMgcHJl
c2VudC4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaW5lQm94TGlzdC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpbmVCb3hM
aXN0LmNwcAkocmV2aXNpb24gNzcyNzgpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTGluZUJveExpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjAsMTEgKzE2MCwxMSBAQCBi
b29sIFJlbmRlckxpbmVCb3hMaXN0OjpyYW5nZUludGVyc2VjdHNSCiAgICAgCiAgICAgaWYgKHJl
bmRlcmVyLT5zdHlsZSgpLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpKSB7CiAgICAgICAgIHBo
eXNpY2FsU3RhcnQgKz0gdHk7Ci0gICAgICAgIGlmIChwaHlzaWNhbFN0YXJ0ID49IHJlY3QuYm90
dG9tKCkgfHwgcGh5c2ljYWxTdGFydCArIHBoeXNpY2FsRXh0ZW50IDw9IHJlY3QueSgpKQorICAg
ICAgICBpZiAocGh5c2ljYWxTdGFydCA+PSByZWN0Lm1heFkoKSB8fCBwaHlzaWNhbFN0YXJ0ICsg
cGh5c2ljYWxFeHRlbnQgPD0gcmVjdC55KCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgfSBlbHNlIHsKICAgICAgICAgcGh5c2ljYWxTdGFydCArPSB0eDsKLSAgICAgICAgaWYgKHBo
eXNpY2FsU3RhcnQgPj0gcmVjdC5yaWdodCgpIHx8IHBoeXNpY2FsU3RhcnQgKyBwaHlzaWNhbEV4
dGVudCA8PSByZWN0LngoKSkKKyAgICAgICAgaWYgKHBoeXNpY2FsU3RhcnQgPj0gcmVjdC5tYXhY
KCkgfHwgcGh5c2ljYWxTdGFydCArIHBoeXNpY2FsRXh0ZW50IDw9IHJlY3QueCgpKQogICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICAKQEAgLTIzOSwxMSArMjM5LDExIEBAIHZv
aWQgUmVuZGVyTGluZUJveExpc3Q6OnBhaW50KFJlbmRlckJveE0KICAgICAgICAgICAgICAgICBi
b3R0b21Gb3JQYWdpbmF0aW9uQ2hlY2sgPSBtYXgoYm90dG9tRm9yUGFnaW5hdGlvbkNoZWNrLCBj
dXJyLT5yb290KCktPmxpbmVCb3R0b20oKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBp
ZiAoYm90dG9tRm9yUGFnaW5hdGlvbkNoZWNrIC0gdG9wRm9yUGFnaW5hdGlvbkNoZWNrIDw9IHYt
PnByaW50UmVjdCgpLmhlaWdodCgpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHR5ICsgYm90dG9t
Rm9yUGFnaW5hdGlvbkNoZWNrID4gdi0+cHJpbnRSZWN0KCkuYm90dG9tKCkpIHsKKyAgICAgICAg
ICAgICAgICBpZiAodHkgKyBib3R0b21Gb3JQYWdpbmF0aW9uQ2hlY2sgPiB2LT5wcmludFJlY3Qo
KS5tYXhZKCkpIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKFJvb3RJbmxpbmVCb3gqIG5leHRS
b290Qm94ID0gY3Vyci0+cm9vdCgpLT5uZXh0Um9vdEJveCgpKQogICAgICAgICAgICAgICAgICAg
ICAgICAgYm90dG9tRm9yUGFnaW5hdGlvbkNoZWNrID0gbWluKGJvdHRvbUZvclBhZ2luYXRpb25D
aGVjaywgbWluKG5leHRSb290Qm94LT50b3BWaXN1YWxPdmVyZmxvdygpLCBuZXh0Um9vdEJveC0+
bGluZVRvcCgpKSk7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmICh0eSAr
IGJvdHRvbUZvclBhZ2luYXRpb25DaGVjayA+IHYtPnByaW50UmVjdCgpLmJvdHRvbSgpKSB7Cisg
ICAgICAgICAgICAgICAgaWYgKHR5ICsgYm90dG9tRm9yUGFnaW5hdGlvbkNoZWNrID4gdi0+cHJp
bnRSZWN0KCkubWF4WSgpKSB7CiAgICAgICAgICAgICAgICAgICAgIGlmICh0eSArIHRvcEZvclBh
Z2luYXRpb25DaGVjayA8IHYtPnRydW5jYXRlZEF0KCkpCiAgICAgICAgICAgICAgICAgICAgICAg
ICB2LT5zZXRCZXN0VHJ1bmNhdGVkQXQodHkgKyB0b3BGb3JQYWdpbmF0aW9uQ2hlY2ssIHJlbmRl
cmVyKTsKICAgICAgICAgICAgICAgICAgICAgLy8gSWYgd2Ugd2VyZSBhYmxlIHRvIHRydW5jYXRl
LCBkb24ndCBwYWludC4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0
SXRlbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxp
c3RJdGVtLmNwcAkocmV2aXNpb24gNzcyNzgpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTGlzdEl0ZW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOTcsMTIgKzI5NywxMiBAQCB2
b2lkIFJlbmRlckxpc3RJdGVtOjpwb3NpdGlvbkxpc3RNYXJrZXIoCiAgICAgICAgICAgICBmb3Ig
KElubGluZUZsb3dCb3gqIGJveCA9IG1fbWFya2VyLT5pbmxpbmVCb3hXcmFwcGVyKCktPnBhcmVu
dCgpOyBib3g7IGJveCA9IGJveC0+cGFyZW50KCkpIHsKICAgICAgICAgICAgICAgICBJbnRSZWN0
IG5ld0xvZ2ljYWxWaXN1YWxPdmVyZmxvd1JlY3QgPSBib3gtPmxvZ2ljYWxWaXN1YWxPdmVyZmxv
d1JlY3QoKTsKICAgICAgICAgICAgICAgICBJbnRSZWN0IG5ld0xvZ2ljYWxMYXlvdXRPdmVyZmxv
d1JlY3QgPSBib3gtPmxvZ2ljYWxMYXlvdXRPdmVyZmxvd1JlY3QoKTsKLSAgICAgICAgICAgICAg
ICBpZiAobWFya2VyTG9naWNhbExlZnQgKyBtX21hcmtlci0+bG9naWNhbFdpZHRoKCkgPiBuZXdM
b2dpY2FsVmlzdWFsT3ZlcmZsb3dSZWN0LnJpZ2h0KCkgJiYgIWhpdFNlbGZQYWludGluZ0xheWVy
KSB7CisgICAgICAgICAgICAgICAgaWYgKG1hcmtlckxvZ2ljYWxMZWZ0ICsgbV9tYXJrZXItPmxv
Z2ljYWxXaWR0aCgpID4gbmV3TG9naWNhbFZpc3VhbE92ZXJmbG93UmVjdC5tYXhYKCkgJiYgIWhp
dFNlbGZQYWludGluZ0xheWVyKSB7CiAgICAgICAgICAgICAgICAgICAgIG5ld0xvZ2ljYWxWaXN1
YWxPdmVyZmxvd1JlY3Quc2V0V2lkdGgobWFya2VyTG9naWNhbExlZnQgKyBtX21hcmtlci0+bG9n
aWNhbFdpZHRoKCkgLSBib3gtPmxvZ2ljYWxMZWZ0VmlzdWFsT3ZlcmZsb3coKSk7CiAgICAgICAg
ICAgICAgICAgICAgIGlmIChib3ggPT0gcm9vdCkKICAgICAgICAgICAgICAgICAgICAgICAgIGFk
anVzdE92ZXJmbG93ID0gdHJ1ZTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
aWYgKG1hcmtlckxvZ2ljYWxMZWZ0ICsgbV9tYXJrZXItPmxvZ2ljYWxXaWR0aCgpID4gbmV3TG9n
aWNhbExheW91dE92ZXJmbG93UmVjdC5yaWdodCgpKSB7CisgICAgICAgICAgICAgICAgaWYgKG1h
cmtlckxvZ2ljYWxMZWZ0ICsgbV9tYXJrZXItPmxvZ2ljYWxXaWR0aCgpID4gbmV3TG9naWNhbExh
eW91dE92ZXJmbG93UmVjdC5tYXhYKCkpIHsKICAgICAgICAgICAgICAgICAgICAgbmV3TG9naWNh
bExheW91dE92ZXJmbG93UmVjdC5zZXRXaWR0aChtYXJrZXJMb2dpY2FsTGVmdCArIG1fbWFya2Vy
LT5sb2dpY2FsV2lkdGgoKSAtIGJveC0+bG9naWNhbExlZnRMYXlvdXRPdmVyZmxvdygpKTsKICAg
ICAgICAgICAgICAgICAgICAgaWYgKGJveCA9PSByb290KQogICAgICAgICAgICAgICAgICAgICAg
ICAgYWRqdXN0T3ZlcmZsb3cgPSB0cnVlOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckxpc3RNYXJrZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJMaXN0TWFya2VyLmNwcAkocmV2aXNpb24gNzcyNzgpCisrKyBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdE1hcmtlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEy
NjAsOSArMTI2MCw5IEBAIHZvaWQgUmVuZGVyTGlzdE1hcmtlcjo6cGFpbnQoUGFpbnRJbmZvJiAK
ICAgICAgICAgbWFya2VyID0gbWFya2VyLnRyYW5zcG9zZWRSZWN0KCk7CiAgICAgICAgIG1hcmtl
ci5tb3ZlKGJveC54KCksIGJveC55KCkgLSBsb2dpY2FsSGVpZ2h0KCkpOwogICAgICAgICBjb250
ZXh0LT5zYXZlKCk7Ci0gICAgICAgIGNvbnRleHQtPnRyYW5zbGF0ZShtYXJrZXIueCgpLCBtYXJr
ZXIuYm90dG9tKCkpOworICAgICAgICBjb250ZXh0LT50cmFuc2xhdGUobWFya2VyLngoKSwgbWFy
a2VyLm1heFkoKSk7CiAgICAgICAgIGNvbnRleHQtPnJvdGF0ZShzdGF0aWNfY2FzdDxmbG9hdD4o
ZGVnMnJhZCg5MC4pKSk7Ci0gICAgICAgIGNvbnRleHQtPnRyYW5zbGF0ZSgtbWFya2VyLngoKSwg
LW1hcmtlci5ib3R0b20oKSk7CisgICAgICAgIGNvbnRleHQtPnRyYW5zbGF0ZSgtbWFya2VyLngo
KSwgLW1hcmtlci5tYXhZKCkpOwogICAgIH0KIAogICAgIEludFBvaW50IHRleHRPcmlnaW4gPSBJ
bnRQb2ludChtYXJrZXIueCgpLCBtYXJrZXIueSgpICsgc3R5bGUoKS0+Zm9udE1ldHJpY3MoKS5h
c2NlbnQoKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNw
cAkocmV2aXNpb24gNzcyNzgpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2Jq
ZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM3OCwxMSArMTM3OCwxMSBAQCBib29sIFJlbmRl
ck9iamVjdDo6cmVwYWludEFmdGVyTGF5b3V0SWZOCiAgICAgZWxzZSBpZiAoZGVsdGFMZWZ0IDwg
MCkKICAgICAgICAgcmVwYWludFVzaW5nQ29udGFpbmVyKHJlcGFpbnRDb250YWluZXIsIEludFJl
Y3QobmV3Qm91bmRzLngoKSwgbmV3Qm91bmRzLnkoKSwgLWRlbHRhTGVmdCwgbmV3Qm91bmRzLmhl
aWdodCgpKSk7CiAKLSAgICBpbnQgZGVsdGFSaWdodCA9IG5ld0JvdW5kcy5yaWdodCgpIC0gb2xk
Qm91bmRzLnJpZ2h0KCk7CisgICAgaW50IGRlbHRhUmlnaHQgPSBuZXdCb3VuZHMubWF4WCgpIC0g
b2xkQm91bmRzLm1heFgoKTsKICAgICBpZiAoZGVsdGFSaWdodCA+IDApCi0gICAgICAgIHJlcGFp
bnRVc2luZ0NvbnRhaW5lcihyZXBhaW50Q29udGFpbmVyLCBJbnRSZWN0KG9sZEJvdW5kcy5yaWdo
dCgpLCBuZXdCb3VuZHMueSgpLCBkZWx0YVJpZ2h0LCBuZXdCb3VuZHMuaGVpZ2h0KCkpKTsKKyAg
ICAgICAgcmVwYWludFVzaW5nQ29udGFpbmVyKHJlcGFpbnRDb250YWluZXIsIEludFJlY3Qob2xk
Qm91bmRzLm1heFgoKSwgbmV3Qm91bmRzLnkoKSwgZGVsdGFSaWdodCwgbmV3Qm91bmRzLmhlaWdo
dCgpKSk7CiAgICAgZWxzZSBpZiAoZGVsdGFSaWdodCA8IDApCi0gICAgICAgIHJlcGFpbnRVc2lu
Z0NvbnRhaW5lcihyZXBhaW50Q29udGFpbmVyLCBJbnRSZWN0KG5ld0JvdW5kcy5yaWdodCgpLCBv
bGRCb3VuZHMueSgpLCAtZGVsdGFSaWdodCwgb2xkQm91bmRzLmhlaWdodCgpKSk7CisgICAgICAg
IHJlcGFpbnRVc2luZ0NvbnRhaW5lcihyZXBhaW50Q29udGFpbmVyLCBJbnRSZWN0KG5ld0JvdW5k
cy5tYXhYKCksIG9sZEJvdW5kcy55KCksIC1kZWx0YVJpZ2h0LCBvbGRCb3VuZHMuaGVpZ2h0KCkp
KTsKIAogICAgIGludCBkZWx0YVRvcCA9IG5ld0JvdW5kcy55KCkgLSBvbGRCb3VuZHMueSgpOwog
ICAgIGlmIChkZWx0YVRvcCA+IDApCkBAIC0xMzkwLDExICsxMzkwLDExIEBAIGJvb2wgUmVuZGVy
T2JqZWN0OjpyZXBhaW50QWZ0ZXJMYXlvdXRJZk4KICAgICBlbHNlIGlmIChkZWx0YVRvcCA8IDAp
CiAgICAgICAgIHJlcGFpbnRVc2luZ0NvbnRhaW5lcihyZXBhaW50Q29udGFpbmVyLCBJbnRSZWN0
KG5ld0JvdW5kcy54KCksIG5ld0JvdW5kcy55KCksIG5ld0JvdW5kcy53aWR0aCgpLCAtZGVsdGFU
b3ApKTsKIAotICAgIGludCBkZWx0YUJvdHRvbSA9IG5ld0JvdW5kcy5ib3R0b20oKSAtIG9sZEJv
dW5kcy5ib3R0b20oKTsKKyAgICBpbnQgZGVsdGFCb3R0b20gPSBuZXdCb3VuZHMubWF4WSgpIC0g
b2xkQm91bmRzLm1heFkoKTsKICAgICBpZiAoZGVsdGFCb3R0b20gPiAwKQotICAgICAgICByZXBh
aW50VXNpbmdDb250YWluZXIocmVwYWludENvbnRhaW5lciwgSW50UmVjdChuZXdCb3VuZHMueCgp
LCBvbGRCb3VuZHMuYm90dG9tKCksIG5ld0JvdW5kcy53aWR0aCgpLCBkZWx0YUJvdHRvbSkpOwor
ICAgICAgICByZXBhaW50VXNpbmdDb250YWluZXIocmVwYWludENvbnRhaW5lciwgSW50UmVjdChu
ZXdCb3VuZHMueCgpLCBvbGRCb3VuZHMubWF4WSgpLCBuZXdCb3VuZHMud2lkdGgoKSwgZGVsdGFC
b3R0b20pKTsKICAgICBlbHNlIGlmIChkZWx0YUJvdHRvbSA8IDApCi0gICAgICAgIHJlcGFpbnRV
c2luZ0NvbnRhaW5lcihyZXBhaW50Q29udGFpbmVyLCBJbnRSZWN0KG9sZEJvdW5kcy54KCksIG5l
d0JvdW5kcy5ib3R0b20oKSwgb2xkQm91bmRzLndpZHRoKCksIC1kZWx0YUJvdHRvbSkpOworICAg
ICAgICByZXBhaW50VXNpbmdDb250YWluZXIocmVwYWludENvbnRhaW5lciwgSW50UmVjdChvbGRC
b3VuZHMueCgpLCBuZXdCb3VuZHMubWF4WSgpLCBvbGRCb3VuZHMud2lkdGgoKSwgLWRlbHRhQm90
dG9tKSk7CiAKICAgICBpZiAobmV3T3V0bGluZUJveCA9PSBvbGRPdXRsaW5lQm94KQogICAgICAg
ICByZXR1cm4gZmFsc2U7CkBAIC0xNDE2LDcgKzE0MTYsNyBAQCBib29sIFJlbmRlck9iamVjdDo6
cmVwYWludEFmdGVyTGF5b3V0SWZOCiAgICAgICAgICAgICBuZXdPdXRsaW5lQm94LnkoKSwKICAg
ICAgICAgICAgIHdpZHRoICsgYm9yZGVyV2lkdGgsCiAgICAgICAgICAgICBtYXgobmV3T3V0bGlu
ZUJveC5oZWlnaHQoKSwgb2xkT3V0bGluZUJveC5oZWlnaHQoKSkpOwotICAgICAgICBpbnQgcmln
aHQgPSBtaW4obmV3Qm91bmRzLnJpZ2h0KCksIG9sZEJvdW5kcy5yaWdodCgpKTsKKyAgICAgICAg
aW50IHJpZ2h0ID0gbWluKG5ld0JvdW5kcy5tYXhYKCksIG9sZEJvdW5kcy5tYXhYKCkpOwogICAg
ICAgICBpZiAocmlnaHRSZWN0LngoKSA8IHJpZ2h0KSB7CiAgICAgICAgICAgICByaWdodFJlY3Qu
c2V0V2lkdGgobWluKHJpZ2h0UmVjdC53aWR0aCgpLCByaWdodCAtIHJpZ2h0UmVjdC54KCkpKTsK
ICAgICAgICAgICAgIHJlcGFpbnRVc2luZ0NvbnRhaW5lcihyZXBhaW50Q29udGFpbmVyLCByaWdo
dFJlY3QpOwpAQCAtMTQzMiwxMCArMTQzMiwxMCBAQCBib29sIFJlbmRlck9iamVjdDo6cmVwYWlu
dEFmdGVyTGF5b3V0SWZOCiAgICAgICAgIGludCBib3hIZWlnaHQgPSBpc0JveCgpID8gdG9SZW5k
ZXJCb3godGhpcyktPmhlaWdodCgpIDogMDsKICAgICAgICAgaW50IGJvcmRlckhlaWdodCA9IG1h
eCgtb3V0bGluZVN0eWxlLT5vdXRsaW5lT2Zmc2V0KCksIG1heChib3JkZXJCb3R0b20sIG1heChz
dHlsZSgpLT5ib3JkZXJCb3R0b21MZWZ0UmFkaXVzKCkuaGVpZ2h0KCkuY2FsY1ZhbHVlKGJveEhl
aWdodCksIHN0eWxlKCktPmJvcmRlckJvdHRvbVJpZ2h0UmFkaXVzKCkuaGVpZ2h0KCkuY2FsY1Zh
bHVlKGJveEhlaWdodCkpKSkgKyBtYXgob3csIHNoYWRvd0JvdHRvbSk7CiAgICAgICAgIEludFJl
Y3QgYm90dG9tUmVjdChuZXdPdXRsaW5lQm94LngoKSwKLSAgICAgICAgICAgIG1pbihuZXdPdXRs
aW5lQm94LmJvdHRvbSgpLCBvbGRPdXRsaW5lQm94LmJvdHRvbSgpKSAtIGJvcmRlckhlaWdodCwK
KyAgICAgICAgICAgIG1pbihuZXdPdXRsaW5lQm94Lm1heFkoKSwgb2xkT3V0bGluZUJveC5tYXhZ
KCkpIC0gYm9yZGVySGVpZ2h0LAogICAgICAgICAgICAgbWF4KG5ld091dGxpbmVCb3gud2lkdGgo
KSwgb2xkT3V0bGluZUJveC53aWR0aCgpKSwKICAgICAgICAgICAgIGhlaWdodCArIGJvcmRlckhl
aWdodCk7Ci0gICAgICAgIGludCBib3R0b20gPSBtaW4obmV3Qm91bmRzLmJvdHRvbSgpLCBvbGRC
b3VuZHMuYm90dG9tKCkpOworICAgICAgICBpbnQgYm90dG9tID0gbWluKG5ld0JvdW5kcy5tYXhZ
KCksIG9sZEJvdW5kcy5tYXhZKCkpOwogICAgICAgICBpZiAoYm90dG9tUmVjdC55KCkgPCBib3R0
b20pIHsKICAgICAgICAgICAgIGJvdHRvbVJlY3Quc2V0SGVpZ2h0KG1pbihib3R0b21SZWN0Lmhl
aWdodCgpLCBib3R0b20gLSBib3R0b21SZWN0LnkoKSkpOwogICAgICAgICAgICAgcmVwYWludFVz
aW5nQ29udGFpbmVyKHJlcGFpbnRDb250YWluZXIsIGJvdHRvbVJlY3QpOwpJbmRleDogU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck92ZXJmbG93LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck92ZXJmbG93LmgJKHJldmlzaW9uIDc3Mjc4KQorKysg
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck92ZXJmbG93LmgJKHdvcmtpbmcgY29weSkK
QEAgLTQyLDEzICs0MiwxMyBAQCBjbGFzcyBSZW5kZXJPdmVyZmxvdyB7CiBwdWJsaWM6CiAgICAg
UmVuZGVyT3ZlcmZsb3coY29uc3QgSW50UmVjdCYgbGF5b3V0UmVjdCwgY29uc3QgSW50UmVjdCYg
dmlzdWFsUmVjdCkgCiAgICAgICAgIDogbV90b3BMYXlvdXRPdmVyZmxvdyhsYXlvdXRSZWN0Lnko
KSkKLSAgICAgICAgLCBtX2JvdHRvbUxheW91dE92ZXJmbG93KGxheW91dFJlY3QuYm90dG9tKCkp
CisgICAgICAgICwgbV9ib3R0b21MYXlvdXRPdmVyZmxvdyhsYXlvdXRSZWN0Lm1heFkoKSkKICAg
ICAgICAgLCBtX2xlZnRMYXlvdXRPdmVyZmxvdyhsYXlvdXRSZWN0LngoKSkKLSAgICAgICAgLCBt
X3JpZ2h0TGF5b3V0T3ZlcmZsb3cobGF5b3V0UmVjdC5yaWdodCgpKQorICAgICAgICAsIG1fcmln
aHRMYXlvdXRPdmVyZmxvdyhsYXlvdXRSZWN0Lm1heFgoKSkKICAgICAgICAgLCBtX3RvcFZpc3Vh
bE92ZXJmbG93KHZpc3VhbFJlY3QueSgpKQotICAgICAgICAsIG1fYm90dG9tVmlzdWFsT3ZlcmZs
b3codmlzdWFsUmVjdC5ib3R0b20oKSkKKyAgICAgICAgLCBtX2JvdHRvbVZpc3VhbE92ZXJmbG93
KHZpc3VhbFJlY3QubWF4WSgpKQogICAgICAgICAsIG1fbGVmdFZpc3VhbE92ZXJmbG93KHZpc3Vh
bFJlY3QueCgpKQotICAgICAgICAsIG1fcmlnaHRWaXN1YWxPdmVyZmxvdyh2aXN1YWxSZWN0LnJp
Z2h0KCkpCisgICAgICAgICwgbV9yaWdodFZpc3VhbE92ZXJmbG93KHZpc3VhbFJlY3QubWF4WCgp
KQogICAgIHsKICAgICB9CiAgICAKQEAgLTEyMiw0MSArMTIyLDQxIEBAIGlubGluZSB2b2lkIFJl
bmRlck92ZXJmbG93Ojptb3ZlKGludCBkeCwKIGlubGluZSB2b2lkIFJlbmRlck92ZXJmbG93Ojph
ZGRMYXlvdXRPdmVyZmxvdyhjb25zdCBJbnRSZWN0JiByZWN0KQogewogICAgIG1fdG9wTGF5b3V0
T3ZlcmZsb3cgPSBzdGQ6Om1pbihyZWN0LnkoKSwgbV90b3BMYXlvdXRPdmVyZmxvdyk7Ci0gICAg
bV9ib3R0b21MYXlvdXRPdmVyZmxvdyA9IHN0ZDo6bWF4KHJlY3QuYm90dG9tKCksIG1fYm90dG9t
TGF5b3V0T3ZlcmZsb3cpOworICAgIG1fYm90dG9tTGF5b3V0T3ZlcmZsb3cgPSBzdGQ6Om1heChy
ZWN0Lm1heFkoKSwgbV9ib3R0b21MYXlvdXRPdmVyZmxvdyk7CiAgICAgbV9sZWZ0TGF5b3V0T3Zl
cmZsb3cgPSBzdGQ6Om1pbihyZWN0LngoKSwgbV9sZWZ0TGF5b3V0T3ZlcmZsb3cpOwotICAgIG1f
cmlnaHRMYXlvdXRPdmVyZmxvdyA9IHN0ZDo6bWF4KHJlY3QucmlnaHQoKSwgbV9yaWdodExheW91
dE92ZXJmbG93KTsKKyAgICBtX3JpZ2h0TGF5b3V0T3ZlcmZsb3cgPSBzdGQ6Om1heChyZWN0Lm1h
eFgoKSwgbV9yaWdodExheW91dE92ZXJmbG93KTsKIH0KIAogaW5saW5lIHZvaWQgUmVuZGVyT3Zl
cmZsb3c6OmFkZFZpc3VhbE92ZXJmbG93KGNvbnN0IEludFJlY3QmIHJlY3QpCiB7CiAgICAgbV90
b3BWaXN1YWxPdmVyZmxvdyA9IHN0ZDo6bWluKHJlY3QueSgpLCBtX3RvcFZpc3VhbE92ZXJmbG93
KTsKLSAgICBtX2JvdHRvbVZpc3VhbE92ZXJmbG93ID0gc3RkOjptYXgocmVjdC5ib3R0b20oKSwg
bV9ib3R0b21WaXN1YWxPdmVyZmxvdyk7CisgICAgbV9ib3R0b21WaXN1YWxPdmVyZmxvdyA9IHN0
ZDo6bWF4KHJlY3QubWF4WSgpLCBtX2JvdHRvbVZpc3VhbE92ZXJmbG93KTsKICAgICBtX2xlZnRW
aXN1YWxPdmVyZmxvdyA9IHN0ZDo6bWluKHJlY3QueCgpLCBtX2xlZnRWaXN1YWxPdmVyZmxvdyk7
Ci0gICAgbV9yaWdodFZpc3VhbE92ZXJmbG93ID0gc3RkOjptYXgocmVjdC5yaWdodCgpLCBtX3Jp
Z2h0VmlzdWFsT3ZlcmZsb3cpOworICAgIG1fcmlnaHRWaXN1YWxPdmVyZmxvdyA9IHN0ZDo6bWF4
KHJlY3QubWF4WCgpLCBtX3JpZ2h0VmlzdWFsT3ZlcmZsb3cpOwogfQogCiBpbmxpbmUgdm9pZCBS
ZW5kZXJPdmVyZmxvdzo6c2V0TGF5b3V0T3ZlcmZsb3coY29uc3QgSW50UmVjdCYgcmVjdCkKIHsK
ICAgICBtX3RvcExheW91dE92ZXJmbG93ID0gcmVjdC55KCk7Ci0gICAgbV9ib3R0b21MYXlvdXRP
dmVyZmxvdyA9IHJlY3QuYm90dG9tKCk7CisgICAgbV9ib3R0b21MYXlvdXRPdmVyZmxvdyA9IHJl
Y3QubWF4WSgpOwogICAgIG1fbGVmdExheW91dE92ZXJmbG93ID0gcmVjdC54KCk7Ci0gICAgbV9y
aWdodExheW91dE92ZXJmbG93ID0gcmVjdC5yaWdodCgpOworICAgIG1fcmlnaHRMYXlvdXRPdmVy
ZmxvdyA9IHJlY3QubWF4WCgpOwogfQogCiBpbmxpbmUgdm9pZCBSZW5kZXJPdmVyZmxvdzo6c2V0
VmlzdWFsT3ZlcmZsb3coY29uc3QgSW50UmVjdCYgcmVjdCkKIHsKICAgICBtX3RvcFZpc3VhbE92
ZXJmbG93ID0gcmVjdC55KCk7Ci0gICAgbV9ib3R0b21WaXN1YWxPdmVyZmxvdyA9IHJlY3QuYm90
dG9tKCk7CisgICAgbV9ib3R0b21WaXN1YWxPdmVyZmxvdyA9IHJlY3QubWF4WSgpOwogICAgIG1f
bGVmdFZpc3VhbE92ZXJmbG93ID0gcmVjdC54KCk7Ci0gICAgbV9yaWdodFZpc3VhbE92ZXJmbG93
ID0gcmVjdC5yaWdodCgpOworICAgIG1fcmlnaHRWaXN1YWxPdmVyZmxvdyA9IHJlY3QubWF4WCgp
OwogfQogCiBpbmxpbmUgdm9pZCBSZW5kZXJPdmVyZmxvdzo6cmVzZXRMYXlvdXRPdmVyZmxvdyhj
b25zdCBJbnRSZWN0JiByZWN0KQogewogICAgIG1fdG9wTGF5b3V0T3ZlcmZsb3cgPSByZWN0Lnko
KTsKLSAgICBtX2JvdHRvbUxheW91dE92ZXJmbG93ID0gcmVjdC5ib3R0b20oKTsKKyAgICBtX2Jv
dHRvbUxheW91dE92ZXJmbG93ID0gcmVjdC5tYXhZKCk7CiAgICAgbV9sZWZ0TGF5b3V0T3ZlcmZs
b3cgPSByZWN0LngoKTsKLSAgICBtX3JpZ2h0TGF5b3V0T3ZlcmZsb3cgPSByZWN0LnJpZ2h0KCk7
CisgICAgbV9yaWdodExheW91dE92ZXJmbG93ID0gcmVjdC5tYXhYKCk7CiB9CiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSZXBs
YWNlZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJl
cGxhY2VkLmNwcAkocmV2aXNpb24gNzcyNzgpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyUmVwbGFjZWQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODIsOSArMTgyLDkgQEAgYm9v
bCBSZW5kZXJSZXBsYWNlZDo6c2hvdWxkUGFpbnQoUGFpbnRJbgogICAgIH0KICAgICAKICAgICBp
bnQgb3MgPSAyICogbWF4aW1hbE91dGxpbmVTaXplKHBhaW50SW5mby5waGFzZSk7Ci0gICAgaWYg
KGN1cnJlbnRUWCArIGxlZnRWaXN1YWxPdmVyZmxvdygpID49IHBhaW50SW5mby5yZWN0LnJpZ2h0
KCkgKyBvcyB8fCBjdXJyZW50VFggKyByaWdodFZpc3VhbE92ZXJmbG93KCkgPD0gcGFpbnRJbmZv
LnJlY3QueCgpIC0gb3MpCisgICAgaWYgKGN1cnJlbnRUWCArIGxlZnRWaXN1YWxPdmVyZmxvdygp
ID49IHBhaW50SW5mby5yZWN0Lm1heFgoKSArIG9zIHx8IGN1cnJlbnRUWCArIHJpZ2h0VmlzdWFs
T3ZlcmZsb3coKSA8PSBwYWludEluZm8ucmVjdC54KCkgLSBvcykKICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIGlmICh0b3AgPj0gcGFpbnRJbmZvLnJlY3QuYm90dG9tKCkgKyBvcyB8fCBib3R0
b20gPD0gcGFpbnRJbmZvLnJlY3QueSgpIC0gb3MpCisgICAgaWYgKHRvcCA+PSBwYWludEluZm8u
cmVjdC5tYXhZKCkgKyBvcyB8fCBib3R0b20gPD0gcGFpbnRJbmZvLnJlY3QueSgpIC0gb3MpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIHJldHVybiB0cnVlOwpJbmRleDogU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclNjcm9sbGJhclRoZW1lLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU2Nyb2xsYmFyVGhlbWUuY3BwCShyZXZpc2lv
biA3NzI3OCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTY3JvbGxiYXJUaGVt
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk4LDEwICs5OCwxMCBAQCBJbnRSZWN0IFJlbmRlclNj
cm9sbGJhclRoZW1lOjpjb25zdHJhaW5UCiAgICAgSW50UmVjdCByZXN1bHQgPSByZWN0OwogICAg
IGlmIChzY3JvbGxiYXItPm9yaWVudGF0aW9uKCkgPT0gSG9yaXpvbnRhbFNjcm9sbGJhcikgewog
ICAgICAgICByZXN1bHQuc2V0WChiYWNrUmVjdC54KCkpOwotICAgICAgICByZXN1bHQuc2V0V2lk
dGgoZm9yd2FyZFJlY3QucmlnaHQoKSAtIGJhY2tSZWN0LngoKSk7CisgICAgICAgIHJlc3VsdC5z
ZXRXaWR0aChmb3J3YXJkUmVjdC5tYXhYKCkgLSBiYWNrUmVjdC54KCkpOwogICAgIH0gZWxzZSB7
CiAgICAgICAgIHJlc3VsdC5zZXRZKGJhY2tSZWN0LnkoKSk7Ci0gICAgICAgIHJlc3VsdC5zZXRI
ZWlnaHQoZm9yd2FyZFJlY3QuYm90dG9tKCkgLSBiYWNrUmVjdC55KCkpOworICAgICAgICByZXN1
bHQuc2V0SGVpZ2h0KGZvcndhcmRSZWN0Lm1heFkoKSAtIGJhY2tSZWN0LnkoKSk7CiAgICAgfQog
ICAgIHJldHVybiByZXN1bHQ7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVGFibGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJUYWJsZS5jcHAJKHJldmlzaW9uIDc3Mjc4KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRhYmxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDU0LDkgKzQ1NCw5IEBAIHZvaWQg
UmVuZGVyVGFibGU6OnBhaW50KFBhaW50SW5mbyYgcGFpbnQKICAgICBQYWludFBoYXNlIHBhaW50
UGhhc2UgPSBwYWludEluZm8ucGhhc2U7CiAKICAgICBpbnQgb3MgPSAyICogbWF4aW1hbE91dGxp
bmVTaXplKHBhaW50UGhhc2UpOwotICAgIGlmICh0eSArIHRvcFZpc3VhbE92ZXJmbG93KCkgPj0g
cGFpbnRJbmZvLnJlY3QuYm90dG9tKCkgKyBvcyB8fCB0eSArIGJvdHRvbVZpc3VhbE92ZXJmbG93
KCkgPD0gcGFpbnRJbmZvLnJlY3QueSgpIC0gb3MpCisgICAgaWYgKHR5ICsgdG9wVmlzdWFsT3Zl
cmZsb3coKSA+PSBwYWludEluZm8ucmVjdC5tYXhZKCkgKyBvcyB8fCB0eSArIGJvdHRvbVZpc3Vh
bE92ZXJmbG93KCkgPD0gcGFpbnRJbmZvLnJlY3QueSgpIC0gb3MpCiAgICAgICAgIHJldHVybjsK
LSAgICBpZiAodHggKyBsZWZ0VmlzdWFsT3ZlcmZsb3coKSA+PSBwYWludEluZm8ucmVjdC5yaWdo
dCgpICsgb3MgfHwgdHggKyByaWdodFZpc3VhbE92ZXJmbG93KCkgPD0gcGFpbnRJbmZvLnJlY3Qu
eCgpIC0gb3MpCisgICAgaWYgKHR4ICsgbGVmdFZpc3VhbE92ZXJmbG93KCkgPj0gcGFpbnRJbmZv
LnJlY3QubWF4WCgpICsgb3MgfHwgdHggKyByaWdodFZpc3VhbE92ZXJmbG93KCkgPD0gcGFpbnRJ
bmZvLnJlY3QueCgpIC0gb3MpCiAgICAgICAgIHJldHVybjsKIAogICAgIGJvb2wgcHVzaGVkQ2xp
cCA9IHB1c2hDb250ZW50c0NsaXAocGFpbnRJbmZvLCB0eCwgdHkpOyAgICAKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZUNlbGwuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZUNlbGwuY3BwCShyZXZpc2lvbiA3NzI3
OCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZUNlbGwuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC04MDMsOCArODAzLDggQEAgdm9pZCBSZW5kZXJUYWJsZUNlbGw6OnBhaW50
KFBhaW50SW5mbyYgcAogICAgICAgICB0eCArPSB4KCk7CiAgICAgICAgIHR5ICs9IHkoKTsKICAg
ICAgICAgaW50IG9zID0gMiAqIG1heGltYWxPdXRsaW5lU2l6ZShwYWludEluZm8ucGhhc2UpOwot
ICAgICAgICBpZiAodHkgLSB0YWJsZSgpLT5vdXRlckJvcmRlclRvcCgpIDwgcGFpbnRJbmZvLnJl
Y3QuYm90dG9tKCkgKyBvcyAmJgotICAgICAgICAgICAgdHkgKyBoZWlnaHQoKSArIHRhYmxlKCkt
Pm91dGVyQm9yZGVyQm90dG9tKCkgPiBwYWludEluZm8ucmVjdC55KCkgLSBvcykKKyAgICAgICAg
aWYgKHR5IC0gdGFibGUoKS0+b3V0ZXJCb3JkZXJUb3AoKSA8IHBhaW50SW5mby5yZWN0Lm1heFko
KSArIG9zCisgICAgICAgICAgICAmJiB0eSArIGhlaWdodCgpICsgdGFibGUoKS0+b3V0ZXJCb3Jk
ZXJCb3R0b20oKSA+IHBhaW50SW5mby5yZWN0LnkoKSAtIG9zKQogICAgICAgICAgICAgcGFpbnRD
b2xsYXBzZWRCb3JkZXIocGFpbnRJbmZvLmNvbnRleHQsIHR4LCB0eSwgd2lkdGgoKSwgaGVpZ2h0
KCkpOwogICAgICAgICByZXR1cm47CiAgICAgfSAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uY3BwCShyZXZpc2lvbiA3NzI3OCkKKysrIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC05NjQsOSArOTY0LDkgQEAgdm9pZCBSZW5kZXJUYWJsZVNlY3Rpb246OnBhaW50T2Jq
ZWN0KFBhaQogICAgIGxvY2FsUmVwYWludFJlY3QubW92ZSgtdHgsIC10eSk7CiAgICAgaWYgKHN0
eWxlKCktPmlzRmxpcHBlZEJsb2Nrc1dyaXRpbmdNb2RlKCkpIHsKICAgICAgICAgaWYgKHN0eWxl
KCktPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpCi0gICAgICAgICAgICBsb2NhbFJlcGFpbnRS
ZWN0LnNldFkoaGVpZ2h0KCkgLSBsb2NhbFJlcGFpbnRSZWN0LmJvdHRvbSgpKTsKKyAgICAgICAg
ICAgIGxvY2FsUmVwYWludFJlY3Quc2V0WShoZWlnaHQoKSAtIGxvY2FsUmVwYWludFJlY3QubWF4
WSgpKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgbG9jYWxSZXBhaW50UmVjdC5zZXRYKHdp
ZHRoKCkgLSBsb2NhbFJlcGFpbnRSZWN0LnJpZ2h0KCkpOworICAgICAgICAgICAgbG9jYWxSZXBh
aW50UmVjdC5zZXRYKHdpZHRoKCkgLSBsb2NhbFJlcGFpbnRSZWN0Lm1heFgoKSk7CiAgICAgfQog
CiAgICAgLy8gSWYgc29tZSBjZWxsIG92ZXJmbG93cywganVzdCBwYWludCBhbGwgb2YgdGhlbS4K
QEAgLTk4MSw3ICs5ODEsNyBAQCB2b2lkIFJlbmRlclRhYmxlU2VjdGlvbjo6cGFpbnRPYmplY3Qo
UGFpCiAgICAgICAgIGlmIChzdGFydHJvdyA9PSBtX3Jvd1Bvcy5zaXplKCkgfHwgKHN0YXJ0cm93
ID4gMCAmJiAobV9yb3dQb3Nbc3RhcnRyb3ddID4gIGJlZm9yZSkpKQogICAgICAgICAgIC0tc3Rh
cnRyb3c7CiAKLSAgICAgICAgaW50IGFmdGVyID0gKHN0eWxlKCktPmlzSG9yaXpvbnRhbFdyaXRp
bmdNb2RlKCkgPyBsb2NhbFJlcGFpbnRSZWN0LmJvdHRvbSgpIDogbG9jYWxSZXBhaW50UmVjdC5y
aWdodCgpKSArIG9zOworICAgICAgICBpbnQgYWZ0ZXIgPSAoc3R5bGUoKS0+aXNIb3Jpem9udGFs
V3JpdGluZ01vZGUoKSA/IGxvY2FsUmVwYWludFJlY3QubWF4WSgpIDogbG9jYWxSZXBhaW50UmVj
dC5tYXhYKCkpICsgb3M7CiAgICAgICAgIGVuZHJvdyA9IHN0ZDo6bG93ZXJfYm91bmQobV9yb3dQ
b3MuYmVnaW4oKSwgbV9yb3dQb3MuZW5kKCksIGFmdGVyKSAtIG1fcm93UG9zLmJlZ2luKCk7CiAg
ICAgICAgIGlmIChlbmRyb3cgPT0gbV9yb3dQb3Muc2l6ZSgpKQogICAgICAgICAgIC0tZW5kcm93
OwpAQCAtMTAwMCw3ICsxMDAwLDcgQEAgdm9pZCBSZW5kZXJUYWJsZVNlY3Rpb246OnBhaW50T2Jq
ZWN0KFBhaQogICAgICAgICBpZiAoKHN0YXJ0Y29sID09IGNvbHVtblBvcy5zaXplKCkpIHx8IChz
dGFydGNvbCA+IDAgJiYgKGNvbHVtblBvc1tzdGFydGNvbF0gPiBzdGFydCkpKQogICAgICAgICAg
ICAgLS1zdGFydGNvbDsKIAotICAgICAgICBpbnQgZW5kID0gKHN0eWxlKCktPmlzSG9yaXpvbnRh
bFdyaXRpbmdNb2RlKCkgPyBsb2NhbFJlcGFpbnRSZWN0LnJpZ2h0KCkgOiBsb2NhbFJlcGFpbnRS
ZWN0LmJvdHRvbSgpKSArIG9zOworICAgICAgICBpbnQgZW5kID0gKHN0eWxlKCktPmlzSG9yaXpv
bnRhbFdyaXRpbmdNb2RlKCkgPyBsb2NhbFJlcGFpbnRSZWN0Lm1heFgoKSA6IGxvY2FsUmVwYWlu
dFJlY3QubWF4WSgpKSArIG9zOwogICAgICAgICBlbmRjb2wgPSBzdGQ6Omxvd2VyX2JvdW5kKGNv
bHVtblBvcy5iZWdpbigpLCBjb2x1bW5Qb3MuZW5kKCksIGVuZCkgLSBjb2x1bW5Qb3MuYmVnaW4o
KTsKICAgICAgICAgaWYgKGVuZGNvbCA9PSBjb2x1bW5Qb3Muc2l6ZSgpKQogICAgICAgICAgICAg
LS1lbmRjb2w7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuY3BwCShy
ZXZpc2lvbiA3NzI3OCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzQ4LDkgKzM0OCw5IEBAIHZvaWQgUmVuZGVyVGV4dDo6YWJz
b2x1dGVRdWFkcyhWZWN0b3I8RmwKICAgICAgICAgSW50UmVjdCBlbGxpcHNpc1JlY3QgPSAob3B0
aW9uID09IENsaXBUb0VsbGlwc2lzKSA/IGVsbGlwc2lzUmVjdEZvckJveChib3gsIDAsIHRleHRM
ZW5ndGgoKSkgOiBJbnRSZWN0KCk7CiAgICAgICAgIGlmICghZWxsaXBzaXNSZWN0LmlzRW1wdHko
KSkgewogICAgICAgICAgICAgaWYgKHN0eWxlKCktPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkp
Ci0gICAgICAgICAgICAgICAgYm91bmRhcmllcy5zZXRXaWR0aChlbGxpcHNpc1JlY3QucmlnaHQo
KSAtIGJvdW5kYXJpZXMueCgpKTsKKyAgICAgICAgICAgICAgICBib3VuZGFyaWVzLnNldFdpZHRo
KGVsbGlwc2lzUmVjdC5tYXhYKCkgLSBib3VuZGFyaWVzLngoKSk7CiAgICAgICAgICAgICBlbHNl
Ci0gICAgICAgICAgICAgICAgYm91bmRhcmllcy5zZXRIZWlnaHQoZWxsaXBzaXNSZWN0LmJvdHRv
bSgpIC0gYm91bmRhcmllcy55KCkpOworICAgICAgICAgICAgICAgIGJvdW5kYXJpZXMuc2V0SGVp
Z2h0KGVsbGlwc2lzUmVjdC5tYXhZKCkgLSBib3VuZGFyaWVzLnkoKSk7CiAgICAgICAgIH0KICAg
ICAgICAgcXVhZHMuYXBwZW5kKGxvY2FsVG9BYnNvbHV0ZVF1YWQoRmxvYXRSZWN0KGJvdW5kYXJp
ZXMpKSk7CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRD
b250cm9sU2luZ2xlTGluZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5jcHAJKHJldmlzaW9uIDc3Mjc4KQorKysg
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTM5Myw3ICszOTMsNyBAQCB2b2lkIFJlbmRlclRleHRDb250cm9s
U2luZ2xlTGluZTo6Zm9yd2FyCiAjZW5kaWYKIAogICAgIEZsb2F0UG9pbnQgbG9jYWxQb2ludCA9
IGlubmVyVGV4dFJlbmRlcmVyLT5hYnNvbHV0ZVRvTG9jYWwoc3RhdGljX2Nhc3Q8TW91c2VFdmVu
dCo+KGV2ZW50KS0+YWJzb2x1dGVMb2NhdGlvbigpLCBmYWxzZSwgdHJ1ZSk7Ci0gICAgaW50IHRl
eHRSaWdodCA9IGlubmVyVGV4dFJlbmRlcmVyLT5ib3JkZXJCb3hSZWN0KCkucmlnaHQoKTsKKyAg
ICBpbnQgdGV4dFJpZ2h0ID0gaW5uZXJUZXh0UmVuZGVyZXItPmJvcmRlckJveFJlY3QoKS5tYXhY
KCk7CiAKICAgICBpZiAobV9yZXN1bHRzQnV0dG9uICYmIGxvY2FsUG9pbnQueCgpIDwgaW5uZXJU
ZXh0UmVuZGVyZXItPmJvcmRlckJveFJlY3QoKS54KCkpCiAgICAgICAgIG1fcmVzdWx0c0J1dHRv
bi0+ZGVmYXVsdEV2ZW50SGFuZGxlcihldmVudCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVGhlbWVNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tCShyZXZpc2lvbiA3NzI3OCkKKysrIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMTA0MSwy
MCArMTA0MSwyMCBAQCB2b2lkIFJlbmRlclRoZW1lTWFjOjpwYWludE1lbnVMaXN0QnV0dG9uCiAg
ICAgRmxvYXRSZWN0IHRvcEdyYWRpZW50KHIueCgpLCByLnkoKSwgci53aWR0aCgpLCByLmhlaWdo
dCgpIC8gMi4wZik7CiAgICAgc3RydWN0IENHRnVuY3Rpb25DYWxsYmFja3MgdG9wQ2FsbGJhY2tz
ID0geyAwLCBUb3BHcmFkaWVudEludGVycG9sYXRlLCBOVUxMIH07CiAgICAgUmV0YWluUHRyPENH
RnVuY3Rpb25SZWY+IHRvcEZ1bmN0aW9uKEFkb3B0Q0YsIENHRnVuY3Rpb25DcmVhdGUoTlVMTCwg
MSwgTlVMTCwgNCwgTlVMTCwgJnRvcENhbGxiYWNrcykpOwotICAgIFJldGFpblB0cjxDR1NoYWRp
bmdSZWY+IHRvcFNoYWRpbmcoQWRvcHRDRiwgQ0dTaGFkaW5nQ3JlYXRlQXhpYWwoY3NwYWNlLCBD
R1BvaW50TWFrZSh0b3BHcmFkaWVudC54KCksIHRvcEdyYWRpZW50LnkoKSksIENHUG9pbnRNYWtl
KHRvcEdyYWRpZW50LngoKSwgdG9wR3JhZGllbnQuYm90dG9tKCkpLCB0b3BGdW5jdGlvbi5nZXQo
KSwgZmFsc2UsIGZhbHNlKSk7CisgICAgUmV0YWluUHRyPENHU2hhZGluZ1JlZj4gdG9wU2hhZGlu
ZyhBZG9wdENGLCBDR1NoYWRpbmdDcmVhdGVBeGlhbChjc3BhY2UsIENHUG9pbnRNYWtlKHRvcEdy
YWRpZW50LngoKSwgdG9wR3JhZGllbnQueSgpKSwgQ0dQb2ludE1ha2UodG9wR3JhZGllbnQueCgp
LCB0b3BHcmFkaWVudC5tYXhZKCkpLCB0b3BGdW5jdGlvbi5nZXQoKSwgZmFsc2UsIGZhbHNlKSk7
CiAKICAgICBGbG9hdFJlY3QgYm90dG9tR3JhZGllbnQoci54KCkgKyByYWRpdXMsIHIueSgpICsg
ci5oZWlnaHQoKSAvIDIuMGYsIHIud2lkdGgoKSAtIDIuMGYgKiByYWRpdXMsIHIuaGVpZ2h0KCkg
LyAyLjBmKTsKICAgICBzdHJ1Y3QgQ0dGdW5jdGlvbkNhbGxiYWNrcyBib3R0b21DYWxsYmFja3Mg
PSB7IDAsIEJvdHRvbUdyYWRpZW50SW50ZXJwb2xhdGUsIE5VTEwgfTsKICAgICBSZXRhaW5QdHI8
Q0dGdW5jdGlvblJlZj4gYm90dG9tRnVuY3Rpb24oQWRvcHRDRiwgQ0dGdW5jdGlvbkNyZWF0ZShO
VUxMLCAxLCBOVUxMLCA0LCBOVUxMLCAmYm90dG9tQ2FsbGJhY2tzKSk7Ci0gICAgUmV0YWluUHRy
PENHU2hhZGluZ1JlZj4gYm90dG9tU2hhZGluZyhBZG9wdENGLCBDR1NoYWRpbmdDcmVhdGVBeGlh
bChjc3BhY2UsIENHUG9pbnRNYWtlKGJvdHRvbUdyYWRpZW50LngoKSwgIGJvdHRvbUdyYWRpZW50
LnkoKSksIENHUG9pbnRNYWtlKGJvdHRvbUdyYWRpZW50LngoKSwgYm90dG9tR3JhZGllbnQuYm90
dG9tKCkpLCBib3R0b21GdW5jdGlvbi5nZXQoKSwgZmFsc2UsIGZhbHNlKSk7CisgICAgUmV0YWlu
UHRyPENHU2hhZGluZ1JlZj4gYm90dG9tU2hhZGluZyhBZG9wdENGLCBDR1NoYWRpbmdDcmVhdGVB
eGlhbChjc3BhY2UsIENHUG9pbnRNYWtlKGJvdHRvbUdyYWRpZW50LngoKSwgIGJvdHRvbUdyYWRp
ZW50LnkoKSksIENHUG9pbnRNYWtlKGJvdHRvbUdyYWRpZW50LngoKSwgYm90dG9tR3JhZGllbnQu
bWF4WSgpKSwgYm90dG9tRnVuY3Rpb24uZ2V0KCksIGZhbHNlLCBmYWxzZSkpOwogCiAgICAgc3Ry
dWN0IENHRnVuY3Rpb25DYWxsYmFja3MgbWFpbkNhbGxiYWNrcyA9IHsgMCwgTWFpbkdyYWRpZW50
SW50ZXJwb2xhdGUsIE5VTEwgfTsKICAgICBSZXRhaW5QdHI8Q0dGdW5jdGlvblJlZj4gbWFpbkZ1
bmN0aW9uKEFkb3B0Q0YsIENHRnVuY3Rpb25DcmVhdGUoTlVMTCwgMSwgTlVMTCwgNCwgTlVMTCwg
Jm1haW5DYWxsYmFja3MpKTsKLSAgICBSZXRhaW5QdHI8Q0dTaGFkaW5nUmVmPiBtYWluU2hhZGlu
ZyhBZG9wdENGLCBDR1NoYWRpbmdDcmVhdGVBeGlhbChjc3BhY2UsIENHUG9pbnRNYWtlKHIueCgp
LCAgci55KCkpLCBDR1BvaW50TWFrZShyLngoKSwgci5ib3R0b20oKSksIG1haW5GdW5jdGlvbi5n
ZXQoKSwgZmFsc2UsIGZhbHNlKSk7CisgICAgUmV0YWluUHRyPENHU2hhZGluZ1JlZj4gbWFpblNo
YWRpbmcoQWRvcHRDRiwgQ0dTaGFkaW5nQ3JlYXRlQXhpYWwoY3NwYWNlLCBDR1BvaW50TWFrZShy
LngoKSwgIHIueSgpKSwgQ0dQb2ludE1ha2Uoci54KCksIHIubWF4WSgpKSwgbWFpbkZ1bmN0aW9u
LmdldCgpLCBmYWxzZSwgZmFsc2UpKTsKIAogICAgIFJldGFpblB0cjxDR1NoYWRpbmdSZWY+IGxl
ZnRTaGFkaW5nKEFkb3B0Q0YsIENHU2hhZGluZ0NyZWF0ZUF4aWFsKGNzcGFjZSwgQ0dQb2ludE1h
a2Uoci54KCksICByLnkoKSksIENHUG9pbnRNYWtlKHIueCgpICsgcmFkaXVzLCByLnkoKSksIG1h
aW5GdW5jdGlvbi5nZXQoKSwgZmFsc2UsIGZhbHNlKSk7CiAKLSAgICBSZXRhaW5QdHI8Q0dTaGFk
aW5nUmVmPiByaWdodFNoYWRpbmcoQWRvcHRDRiwgQ0dTaGFkaW5nQ3JlYXRlQXhpYWwoY3NwYWNl
LCBDR1BvaW50TWFrZShyLnJpZ2h0KCksICByLnkoKSksIENHUG9pbnRNYWtlKHIucmlnaHQoKSAt
IHJhZGl1cywgci55KCkpLCBtYWluRnVuY3Rpb24uZ2V0KCksIGZhbHNlLCBmYWxzZSkpOworICAg
IFJldGFpblB0cjxDR1NoYWRpbmdSZWY+IHJpZ2h0U2hhZGluZyhBZG9wdENGLCBDR1NoYWRpbmdD
cmVhdGVBeGlhbChjc3BhY2UsIENHUG9pbnRNYWtlKHIubWF4WCgpLCAgci55KCkpLCBDR1BvaW50
TWFrZShyLm1heFgoKSAtIHJhZGl1cywgci55KCkpLCBtYWluRnVuY3Rpb24uZ2V0KCksIGZhbHNl
LCBmYWxzZSkpOwogICAgIHBhaW50SW5mby5jb250ZXh0LT5zYXZlKCk7CiAgICAgQ0dDb250ZXh0
Q2xpcFRvUmVjdChjb250ZXh0LCByKTsKICAgICBwYWludEluZm8uY29udGV4dC0+YWRkUm91bmRl
ZFJlY3RDbGlwKGJvcmRlcik7CkBAIC0xMDk5LDcgKzEwOTksNyBAQCBib29sIFJlbmRlclRoZW1l
TWFjOjpwYWludE1lbnVMaXN0QnV0dG9uCiAgICAgZmxvYXQgY2VudGVyWSA9IGJvdW5kcy55KCkg
KyBib3VuZHMuaGVpZ2h0KCkgLyAyLjBmOwogICAgIGZsb2F0IGFycm93SGVpZ2h0ID0gYmFzZUFy
cm93SGVpZ2h0ICogZm9udFNjYWxlOwogICAgIGZsb2F0IGFycm93V2lkdGggPSBiYXNlQXJyb3dX
aWR0aCAqIGZvbnRTY2FsZTsKLSAgICBmbG9hdCBsZWZ0RWRnZSA9IGJvdW5kcy5yaWdodCgpIC0g
YXJyb3dQYWRkaW5nUmlnaHQgKiBvLT5zdHlsZSgpLT5lZmZlY3RpdmVab29tKCkgLSBhcnJvd1dp
ZHRoOworICAgIGZsb2F0IGxlZnRFZGdlID0gYm91bmRzLm1heFgoKSAtIGFycm93UGFkZGluZ1Jp
Z2h0ICogby0+c3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgpIC0gYXJyb3dXaWR0aDsKICAgICBmbG9h
dCBzcGFjZUJldHdlZW5BcnJvd3MgPSBiYXNlU3BhY2VCZXR3ZWVuQXJyb3dzICogZm9udFNjYWxl
OwogCiAgICAgaWYgKGJvdW5kcy53aWR0aCgpIDwgYXJyb3dXaWR0aCArIGFycm93UGFkZGluZ0xl
ZnQgKiBvLT5zdHlsZSgpLT5lZmZlY3RpdmVab29tKCkpCkBAIC0xMTM4LDExICsxMTM4LDExIEBA
IGJvb2wgUmVuZGVyVGhlbWVNYWM6OnBhaW50TWVudUxpc3RCdXR0b24KICAgICBwYWludEluZm8u
Y29udGV4dC0+c2V0U3Ryb2tlU3R5bGUoU29saWRTdHJva2UpOwogICAgIHBhaW50SW5mby5jb250
ZXh0LT5zZXRTdHJva2VDb2xvcihsZWZ0U2VwYXJhdG9yQ29sb3IsIENvbG9yU3BhY2VEZXZpY2VS
R0IpOwogICAgIHBhaW50SW5mby5jb250ZXh0LT5kcmF3TGluZShJbnRQb2ludChsZWZ0RWRnZU9m
U2VwYXJhdG9yLCBib3VuZHMueSgpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
SW50UG9pbnQobGVmdEVkZ2VPZlNlcGFyYXRvciwgYm91bmRzLmJvdHRvbSgpKSk7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEludFBvaW50KGxlZnRFZGdlT2ZTZXBhcmF0b3IsIGJv
dW5kcy5tYXhZKCkpKTsKIAogICAgIHBhaW50SW5mby5jb250ZXh0LT5zZXRTdHJva2VDb2xvcihy
aWdodFNlcGFyYXRvckNvbG9yLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKICAgICBwYWludEluZm8u
Y29udGV4dC0+ZHJhd0xpbmUoSW50UG9pbnQobGVmdEVkZ2VPZlNlcGFyYXRvciArIHNlcGFyYXRv
clNwYWNlLCBib3VuZHMueSgpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW50
UG9pbnQobGVmdEVkZ2VPZlNlcGFyYXRvciArIHNlcGFyYXRvclNwYWNlLCBib3VuZHMuYm90dG9t
KCkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW50UG9pbnQobGVmdEVkZ2VP
ZlNlcGFyYXRvciArIHNlcGFyYXRvclNwYWNlLCBib3VuZHMubWF4WSgpKSk7CiAKICAgICBwYWlu
dEluZm8uY29udGV4dC0+cmVzdG9yZSgpOwogICAgIHJldHVybiBmYWxzZTsKQEAgLTEyOTMsOSAr
MTI5Myw5IEBAIGJvb2wgUmVuZGVyVGhlbWVNYWM6OnBhaW50U2xpZGVyVHJhY2soUmUKICAgICBS
ZXRhaW5QdHI8Q0dGdW5jdGlvblJlZj4gbWFpbkZ1bmN0aW9uKEFkb3B0Q0YsIENHRnVuY3Rpb25D
cmVhdGUoTlVMTCwgMSwgTlVMTCwgNCwgTlVMTCwgJm1haW5DYWxsYmFja3MpKTsKICAgICBSZXRh
aW5QdHI8Q0dTaGFkaW5nUmVmPiBtYWluU2hhZGluZzsKICAgICBpZiAoby0+c3R5bGUoKS0+YXBw
ZWFyYW5jZSgpID09IFNsaWRlclZlcnRpY2FsUGFydCkKLSAgICAgICAgbWFpblNoYWRpbmcuYWRv
cHRDRihDR1NoYWRpbmdDcmVhdGVBeGlhbChjc3BhY2UsIENHUG9pbnRNYWtlKGJvdW5kcy54KCks
ICBib3VuZHMuYm90dG9tKCkpLCBDR1BvaW50TWFrZShib3VuZHMucmlnaHQoKSwgYm91bmRzLmJv
dHRvbSgpKSwgbWFpbkZ1bmN0aW9uLmdldCgpLCBmYWxzZSwgZmFsc2UpKTsKKyAgICAgICAgbWFp
blNoYWRpbmcuYWRvcHRDRihDR1NoYWRpbmdDcmVhdGVBeGlhbChjc3BhY2UsIENHUG9pbnRNYWtl
KGJvdW5kcy54KCksICBib3VuZHMubWF4WSgpKSwgQ0dQb2ludE1ha2UoYm91bmRzLm1heFgoKSwg
Ym91bmRzLm1heFkoKSksIG1haW5GdW5jdGlvbi5nZXQoKSwgZmFsc2UsIGZhbHNlKSk7CiAgICAg
ZWxzZQotICAgICAgICBtYWluU2hhZGluZy5hZG9wdENGKENHU2hhZGluZ0NyZWF0ZUF4aWFsKGNz
cGFjZSwgQ0dQb2ludE1ha2UoYm91bmRzLngoKSwgIGJvdW5kcy55KCkpLCBDR1BvaW50TWFrZShi
b3VuZHMueCgpLCBib3VuZHMuYm90dG9tKCkpLCBtYWluRnVuY3Rpb24uZ2V0KCksIGZhbHNlLCBm
YWxzZSkpOworICAgICAgICBtYWluU2hhZGluZy5hZG9wdENGKENHU2hhZGluZ0NyZWF0ZUF4aWFs
KGNzcGFjZSwgQ0dQb2ludE1ha2UoYm91bmRzLngoKSwgIGJvdW5kcy55KCkpLCBDR1BvaW50TWFr
ZShib3VuZHMueCgpLCBib3VuZHMubWF4WSgpKSwgbWFpbkZ1bmN0aW9uLmdldCgpLCBmYWxzZSwg
ZmFsc2UpKTsKIAogICAgIEludFNpemUgcmFkaXVzKHRyYWNrUmFkaXVzLCB0cmFja1JhZGl1cyk7
CiAgICAgcGFpbnRJbmZvLmNvbnRleHQtPmFkZFJvdW5kZWRSZWN0Q2xpcChSb3VuZGVkSW50UmVj
dChib3VuZHMsIHJhZGl1cywgcmFkaXVzLCByYWRpdXMsIHJhZGl1cykpOwpJbmRleDogU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZXcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3LmNwcAkocmV2aXNpb24gNzcyNzgpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMw
NCw5ICszMDQsOSBAQCB2b2lkIFJlbmRlclZpZXc6OmNvbXB1dGVSZWN0Rm9yUmVwYWludChSCiAg
ICAgICAgIC8vIFdlIGhhdmUgdG8gZmxpcCBieSBoYW5kIHNpbmNlIHRoZSB2aWV3J3MgbG9naWNh
bCBoZWlnaHQgaGFzIG5vdCBiZWVuIGRldGVybWluZWQuICBXZQogICAgICAgICAvLyBjYW4gdXNl
IHRoZSB2aWV3cG9ydCB3aWR0aCBhbmQgaGVpZ2h0LgogICAgICAgICBpZiAoc3R5bGUoKS0+aXNI
b3Jpem9udGFsV3JpdGluZ01vZGUoKSkKLSAgICAgICAgICAgIHJlY3Quc2V0WSh2aWV3SGVpZ2h0
KCkgLSByZWN0LmJvdHRvbSgpKTsKKyAgICAgICAgICAgIHJlY3Quc2V0WSh2aWV3SGVpZ2h0KCkg
LSByZWN0Lm1heFkoKSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHJlY3Quc2V0WCh2aWV3
V2lkdGgoKSAtIHJlY3QucmlnaHQoKSk7CisgICAgICAgICAgICByZWN0LnNldFgodmlld1dpZHRo
KCkgLSByZWN0Lm1heFgoKSk7CiAgICAgfQogCiAgICAgaWYgKGZpeGVkICYmIG1fZnJhbWVWaWV3
KQpAQCAtNjY0LDcgKzY2NCw3IEBAIGludCBSZW5kZXJWaWV3Ojpkb2NCb3R0b20oKSBjb25zdAog
ICAgIGZsaXBGb3JXcml0aW5nTW9kZShvdmVyZmxvd1JlY3QpOwogICAgIGlmIChoYXNUcmFuc2Zv
cm0oKSkKICAgICAgICAgb3ZlcmZsb3dSZWN0ID0gbGF5ZXIoKS0+Y3VycmVudFRyYW5zZm9ybSgp
Lm1hcFJlY3Qob3ZlcmZsb3dSZWN0KTsKLSAgICByZXR1cm4gb3ZlcmZsb3dSZWN0LmJvdHRvbSgp
OworICAgIHJldHVybiBvdmVyZmxvd1JlY3QubWF4WSgpOwogfQogCiBpbnQgUmVuZGVyVmlldzo6
ZG9jTGVmdCgpIGNvbnN0CkBAIC02ODIsNyArNjgyLDcgQEAgaW50IFJlbmRlclZpZXc6OmRvY1Jp
Z2h0KCkgY29uc3QKICAgICBmbGlwRm9yV3JpdGluZ01vZGUob3ZlcmZsb3dSZWN0KTsKICAgICBp
ZiAoaGFzVHJhbnNmb3JtKCkpCiAgICAgICAgIG92ZXJmbG93UmVjdCA9IGxheWVyKCktPmN1cnJl
bnRUcmFuc2Zvcm0oKS5tYXBSZWN0KG92ZXJmbG93UmVjdCk7Ci0gICAgcmV0dXJuIG92ZXJmbG93
UmVjdC5yaWdodCgpOworICAgIHJldHVybiBvdmVyZmxvd1JlY3QubWF4WCgpOwogfQogCiBpbnQg
UmVuZGVyVmlldzo6dmlld0hlaWdodCgpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUm9vdElubGluZUJveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1Jvb3RJbmxpbmVCb3guY3BwCShyZXZpc2lvbiA3NzI3OCkKKysrIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9Sb290SW5saW5lQm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTQ0LDE0
ICs1NDQsMTQgQEAgSW50UmVjdCBSb290SW5saW5lQm94OjpwYWRkZWRMYXlvdXRPdmVyZgogICAg
IAogICAgIGlmIChpc0hvcml6b250YWwoKSkgewogICAgICAgICBpZiAoaXNMZWZ0VG9SaWdodERp
cmVjdGlvbigpKQotICAgICAgICAgICAgbGluZUxheW91dE92ZXJmbG93LnNoaWZ0UmlnaHRFZGdl
VG8obWF4KGxpbmVMYXlvdXRPdmVyZmxvdy5yaWdodCgpLCBsb2dpY2FsUmlnaHQoKSArIGVuZFBh
ZGRpbmcpKTsKKyAgICAgICAgICAgIGxpbmVMYXlvdXRPdmVyZmxvdy5zaGlmdE1heFhFZGdlVG8o
bWF4KGxpbmVMYXlvdXRPdmVyZmxvdy5tYXhYKCksIGxvZ2ljYWxSaWdodCgpICsgZW5kUGFkZGlu
ZykpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBsaW5lTGF5b3V0T3ZlcmZsb3cuc2hpZnRM
ZWZ0RWRnZVRvKG1pbihsaW5lTGF5b3V0T3ZlcmZsb3cueCgpLCBsb2dpY2FsTGVmdCgpIC0gZW5k
UGFkZGluZykpOworICAgICAgICAgICAgbGluZUxheW91dE92ZXJmbG93LnNoaWZ0WEVkZ2VUbyht
aW4obGluZUxheW91dE92ZXJmbG93LngoKSwgbG9naWNhbExlZnQoKSAtIGVuZFBhZGRpbmcpKTsK
ICAgICB9IGVsc2UgewogICAgICAgICBpZiAoaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpKQotICAg
ICAgICAgICAgbGluZUxheW91dE92ZXJmbG93LnNoaWZ0Qm90dG9tRWRnZVRvKG1heChsaW5lTGF5
b3V0T3ZlcmZsb3cuYm90dG9tKCksIGxvZ2ljYWxSaWdodCgpICsgZW5kUGFkZGluZykpOworICAg
ICAgICAgICAgbGluZUxheW91dE92ZXJmbG93LnNoaWZ0TWF4WUVkZ2VUbyhtYXgobGluZUxheW91
dE92ZXJmbG93Lm1heFkoKSwgbG9naWNhbFJpZ2h0KCkgKyBlbmRQYWRkaW5nKSk7CiAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgIGxpbmVMYXlvdXRPdmVyZmxvdy5zaGlmdFRvcEVkZ2VUbyhtaW4o
bGluZUxheW91dE92ZXJmbG93LnkoKSwgbG9naWNhbFJpZ2h0KCkgLSBlbmRQYWRkaW5nKSk7Cisg
ICAgICAgICAgICBsaW5lTGF5b3V0T3ZlcmZsb3cuc2hpZnRZRWRnZVRvKG1pbihsaW5lTGF5b3V0
T3ZlcmZsb3cueSgpLCBsb2dpY2FsUmlnaHQoKSAtIGVuZFBhZGRpbmcpKTsKICAgICB9CiAgICAg
CiAgICAgcmV0dXJuIGxpbmVMYXlvdXRPdmVyZmxvdzsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdmcvUmVuZGVyU1ZHSW5saW5lVGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdJbmxpbmVUZXh0LmNwcAkocmV2aXNpb24g
NzcyNzgpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0lubGluZVRl
eHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDMsMTIgKzEwMywxMiBAQCBJbnRSZWN0IFJlbmRl
clNWR0lubGluZVRleHQ6OmxvY2FsQ2FyZXRSCiAgICAgLy8gVXNlIHRoZSBlZGdlIG9mIHRoZSBz
ZWxlY3Rpb24gcmVjdCB0byBkZXRlcm1pbmUgdGhlIGNhcmV0IHJlY3QuCiAgICAgaWYgKHN0YXRp
Y19jYXN0PHVuc2lnbmVkPihjYXJldE9mZnNldCkgPCB0ZXh0Qm94LT5zdGFydCgpICsgdGV4dEJv
eC0+bGVuKCkpIHsKICAgICAgICAgSW50UmVjdCByZWN0ID0gdGV4dEJveC0+c2VsZWN0aW9uUmVj
dCgwLCAwLCBjYXJldE9mZnNldCwgY2FyZXRPZmZzZXQgKyAxKTsKLSAgICAgICAgaW50IHggPSBi
b3gtPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/IHJlY3QueCgpIDogcmVjdC5yaWdodCgpOwor
ICAgICAgICBpbnQgeCA9IGJveC0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpID8gcmVjdC54KCkg
OiByZWN0Lm1heFgoKTsKICAgICAgICAgcmV0dXJuIEludFJlY3QoeCwgcmVjdC55KCksIGNhcmV0
V2lkdGgsIHJlY3QuaGVpZ2h0KCkpOwogICAgIH0KIAogICAgIEludFJlY3QgcmVjdCA9IHRleHRC
b3gtPnNlbGVjdGlvblJlY3QoMCwgMCwgY2FyZXRPZmZzZXQgLSAxLCBjYXJldE9mZnNldCk7Ci0g
ICAgaW50IHggPSBib3gtPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/IHJlY3QucmlnaHQoKSA6
IHJlY3QueCgpOworICAgIGludCB4ID0gYm94LT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyBy
ZWN0Lm1heFgoKSA6IHJlY3QueCgpOwogICAgIHJldHVybiBJbnRSZWN0KHgsIHJlY3QueSgpLCBj
YXJldFdpZHRoLCByZWN0LmhlaWdodCgpKTsKIH0KIApJbmRleDogU291cmNlL1dlYktpdDIvUGxh
dGZvcm0vUmVnaW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9S
ZWdpb24uY3BwCShyZXZpc2lvbiA3NzI3OCkKKysrIFNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL1Jl
Z2lvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTczLDggKzczLDggQEAgUmVnaW9uOjpTaGFwZTo6
U2hhcGUoY29uc3QgSW50UmVjdCYgcmVjdAogewogICAgIGFwcGVuZFNwYW4ocmVjdC55KCkpOwog
ICAgIGFwcGVuZFNlZ21lbnQocmVjdC54KCkpOwotICAgIGFwcGVuZFNlZ21lbnQocmVjdC5yaWdo
dCgpKTsKLSAgICBhcHBlbmRTcGFuKHJlY3QuYm90dG9tKCkpOworICAgIGFwcGVuZFNlZ21lbnQo
cmVjdC5tYXhYKCkpOworICAgIGFwcGVuZFNwYW4ocmVjdC5tYXhZKCkpOwogfQogCiB2b2lkIFJl
Z2lvbjo6U2hhcGU6OmFwcGVuZFNwYW4oaW50IHkpCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvRmluZEluZGljYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0ZpbmRJbmRpY2F0b3IuY3BwCShyZXZpc2lvbiA3NzI3OCkKKysrIFNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9GaW5kSW5kaWNhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU3LDcg
KzE1Nyw3IEBAIHZvaWQgRmluZEluZGljYXRvcjo6ZHJhdyhHcmFwaGljc0NvbnRleHQKICAgICAg
ICAgZ3JhcGhpY3NDb250ZXh0LnNhdmUoKTsKICAgICAgICAgRmxvYXRSZWN0IGlubmVyUGF0aFJl
Y3QgPSBpbmZsYXRlUmVjdCh0ZXh0UmVjdCwgaG9yaXpvbnRhbFBhZGRpbmdJbnNpZGVMaWdodEJv
cmRlciwgdmVydGljYWxQYWRkaW5nSW5zaWRlTGlnaHRCb3JkZXIpOwogICAgICAgICBncmFwaGlj
c0NvbnRleHQuY2xpcChwYXRoV2l0aFJvdW5kZWRSZWN0KGlubmVyUGF0aFJlY3QsIGNvcm5lclJh
ZGl1cykpOwotICAgICAgICBSZWZQdHI8R3JhZGllbnQ+IGdyYWRpZW50ID0gR3JhZGllbnQ6OmNy
ZWF0ZShGbG9hdFBvaW50KGlubmVyUGF0aFJlY3QueCgpLCBpbm5lclBhdGhSZWN0LnkoKSksIEZs
b2F0UG9pbnQoaW5uZXJQYXRoUmVjdC54KCksIGlubmVyUGF0aFJlY3QuYm90dG9tKCkpKTsKKyAg
ICAgICAgUmVmUHRyPEdyYWRpZW50PiBncmFkaWVudCA9IEdyYWRpZW50OjpjcmVhdGUoRmxvYXRQ
b2ludChpbm5lclBhdGhSZWN0LngoKSwgaW5uZXJQYXRoUmVjdC55KCkpLCBGbG9hdFBvaW50KGlu
bmVyUGF0aFJlY3QueCgpLCBpbm5lclBhdGhSZWN0Lm1heFkoKSkpOwogICAgICAgICBncmFkaWVu
dC0+YWRkQ29sb3JTdG9wKDAsIGdyYWRpZW50TGlnaHRDb2xvcigpKTsKICAgICAgICAgZ3JhZGll
bnQtPmFkZENvbG9yU3RvcCgxLCBncmFkaWVudERhcmtDb2xvcigpKTsKICAgICAgICAgZ3JhcGhp
Y3NDb250ZXh0LnNldEZpbGxHcmFkaWVudChncmFkaWVudCk7CkluZGV4OiBTb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvVGlsZWREcmF3aW5nQXJlYVByb3h5LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvVGlsZWREcmF3aW5nQXJlYVByb3h5LmNwcAkocmV2aXNpb24g
NzcyNzgpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvVGlsZWREcmF3aW5nQXJlYVByb3h5
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQwLDE1ICsyNDAsMTUgQEAgdm9pZCBUaWxlZERyYXdp
bmdBcmVhUHJveHk6OmludmFsaWRhdGUoYwogewogICAgIEludFJlY3QgZGlydHlSZWN0KG1hcEZy
b21Db250ZW50cyhjb250ZW50c0RpcnR5UmVjdCkpOwogCi0gICAgVGlsZWREcmF3aW5nQXJlYVRp
bGU6OkNvb3JkaW5hdGUgdG9wTGVmdCA9IHRpbGVDb29yZGluYXRlRm9yUG9pbnQoZGlydHlSZWN0
LnRvcExlZnQoKSk7Ci0gICAgVGlsZWREcmF3aW5nQXJlYVRpbGU6OkNvb3JkaW5hdGUgYm90dG9t
UmlnaHQgPSB0aWxlQ29vcmRpbmF0ZUZvclBvaW50KGRpcnR5UmVjdC5ib3R0b21SaWdodCgpKTsK
KyAgICBUaWxlZERyYXdpbmdBcmVhVGlsZTo6Q29vcmRpbmF0ZSB0b3BMZWZ0ID0gdGlsZUNvb3Jk
aW5hdGVGb3JQb2ludChkaXJ0eVJlY3QubG9jYXRpb24oKSk7CisgICAgVGlsZWREcmF3aW5nQXJl
YVRpbGU6OkNvb3JkaW5hdGUgYm90dG9tUmlnaHQgPSB0aWxlQ29vcmRpbmF0ZUZvclBvaW50KElu
dFBvaW50KGRpcnR5UmVjdC5tYXhYKCksIGRpcnR5UmVjdC5tYXhZKCkpKTsKIAogICAgIEludFJl
Y3QgY292ZXJSZWN0ID0gY2FsY3VsYXRlQ292ZXJSZWN0KG1fcHJldmlvdXNWaXNpYmxlUmVjdCk7
CiAKICAgICBWZWN0b3I8VGlsZWREcmF3aW5nQXJlYVRpbGU6OkNvb3JkaW5hdGU+IHRpbGVzVG9S
ZW1vdmU7CiAKLSAgICBmb3IgKHVuc2lnbmVkIHlDb29yZGluYXRlID0gdG9wTGVmdC55KCk7IHlD
b29yZGluYXRlIDw9IGJvdHRvbVJpZ2h0LnkoKTsgKyt5Q29vcmRpbmF0ZSkgewotICAgICAgICBm
b3IgKHVuc2lnbmVkIHhDb29yZGluYXRlID0gdG9wTGVmdC54KCk7IHhDb29yZGluYXRlIDw9IGJv
dHRvbVJpZ2h0LngoKTsgKyt4Q29vcmRpbmF0ZSkgeworICAgIGZvciAodW5zaWduZWQgeUNvb3Jk
aW5hdGUgPSB0b3BMZWZ0LnkoKTsgeUNvb3JkaW5hdGUgPCBib3R0b21SaWdodC55KCk7ICsreUNv
b3JkaW5hdGUpIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCB4Q29vcmRpbmF0ZSA9IHRvcExlZnQu
eCgpOyB4Q29vcmRpbmF0ZSA8IGJvdHRvbVJpZ2h0LngoKTsgKyt4Q29vcmRpbmF0ZSkgewogICAg
ICAgICAgICAgUmVmUHRyPFRpbGVkRHJhd2luZ0FyZWFUaWxlPiBjdXJyZW50VGlsZSA9IHRpbGVB
dChUaWxlZERyYXdpbmdBcmVhVGlsZTo6Q29vcmRpbmF0ZSh4Q29vcmRpbmF0ZSwgeUNvb3JkaW5h
dGUpKTsKICAgICAgICAgICAgIGlmICghY3VycmVudFRpbGUpCiAgICAgICAgICAgICAgICAgY29u
dGludWU7CkBAIC0zMzgsMTEgKzMzOCwxMSBAQCBib29sIFRpbGVkRHJhd2luZ0FyZWFQcm94eTo6
cGFpbnQoY29uc3QgCiAKICAgICBJbnRSZWN0IGRpcnR5UmVjdCA9IG1hcEZyb21Db250ZW50cyhy
ZWN0KTsKIAotICAgIFRpbGVkRHJhd2luZ0FyZWFUaWxlOjpDb29yZGluYXRlIHRvcExlZnQgPSB0
aWxlQ29vcmRpbmF0ZUZvclBvaW50KGRpcnR5UmVjdC50b3BMZWZ0KCkpOwotICAgIFRpbGVkRHJh
d2luZ0FyZWFUaWxlOjpDb29yZGluYXRlIGJvdHRvbVJpZ2h0ID0gdGlsZUNvb3JkaW5hdGVGb3JQ
b2ludChkaXJ0eVJlY3QuYm90dG9tUmlnaHQoKSk7CisgICAgVGlsZWREcmF3aW5nQXJlYVRpbGU6
OkNvb3JkaW5hdGUgdG9wTGVmdCA9IHRpbGVDb29yZGluYXRlRm9yUG9pbnQoZGlydHlSZWN0Lmxv
Y2F0aW9uKCkpOworICAgIFRpbGVkRHJhd2luZ0FyZWFUaWxlOjpDb29yZGluYXRlIGJvdHRvbVJp
Z2h0ID0gdGlsZUNvb3JkaW5hdGVGb3JQb2ludChJbnRQb2ludChkaXJ0eVJlY3QubWF4WCgpLCBk
aXJ0eVJlY3QubWF4WSgpKSk7CiAKLSAgICBmb3IgKHVuc2lnbmVkIHlDb29yZGluYXRlID0gdG9w
TGVmdC55KCk7IHlDb29yZGluYXRlIDw9IGJvdHRvbVJpZ2h0LnkoKTsgKyt5Q29vcmRpbmF0ZSkg
ewotICAgICAgICBmb3IgKHVuc2lnbmVkIHhDb29yZGluYXRlID0gdG9wTGVmdC54KCk7IHhDb29y
ZGluYXRlIDw9IGJvdHRvbVJpZ2h0LngoKTsgKyt4Q29vcmRpbmF0ZSkgeworICAgIGZvciAodW5z
aWduZWQgeUNvb3JkaW5hdGUgPSB0b3BMZWZ0LnkoKTsgeUNvb3JkaW5hdGUgPCBib3R0b21SaWdo
dC55KCk7ICsreUNvb3JkaW5hdGUpIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCB4Q29vcmRpbmF0
ZSA9IHRvcExlZnQueCgpOyB4Q29vcmRpbmF0ZSA8IGJvdHRvbVJpZ2h0LngoKTsgKyt4Q29vcmRp
bmF0ZSkgewogICAgICAgICAgICAgVGlsZWREcmF3aW5nQXJlYVRpbGU6OkNvb3JkaW5hdGUgY3Vy
cmVudENvb3JkaW5hdGUoeENvb3JkaW5hdGUsIHlDb29yZGluYXRlKTsKICAgICAgICAgICAgIFJl
ZlB0cjxUaWxlZERyYXdpbmdBcmVhVGlsZT4gY3VycmVudFRpbGUgPSB0aWxlQXQoY3VycmVudENv
b3JkaW5hdGUpOwogICAgICAgICAgICAgaWYgKGN1cnJlbnRUaWxlICYmIGN1cnJlbnRUaWxlLT5p
c1JlYWR5VG9QYWludCgpKQpAQCAtNDM2LDEwICs0MzYsMTAgQEAgdm9pZCBUaWxlZERyYXdpbmdB
cmVhUHJveHk6OmNyZWF0ZVRpbGVzKAogICAgIFZlY3RvcjxUaWxlZERyYXdpbmdBcmVhVGlsZTo6
Q29vcmRpbmF0ZT4gdGlsZXNUb0NyZWF0ZTsKICAgICB1bnNpZ25lZCByZXF1aXJlZFRpbGVDb3Vu
dCA9IDA7CiAgICAgYm9vbCBoYXNWaXNpYmxlQ2hlY2tlcnMgPSBmYWxzZTsKLSAgICBUaWxlZERy
YXdpbmdBcmVhVGlsZTo6Q29vcmRpbmF0ZSB0b3BMZWZ0ID0gdGlsZUNvb3JkaW5hdGVGb3JQb2lu
dChjb3ZlclJlY3QudG9wTGVmdCgpKTsKLSAgICBUaWxlZERyYXdpbmdBcmVhVGlsZTo6Q29vcmRp
bmF0ZSBib3R0b21SaWdodCA9IHRpbGVDb29yZGluYXRlRm9yUG9pbnQoY292ZXJSZWN0LmJvdHRv
bVJpZ2h0KCkpOwotICAgIGZvciAodW5zaWduZWQgeUNvb3JkaW5hdGUgPSB0b3BMZWZ0LnkoKTsg
eUNvb3JkaW5hdGUgPD0gYm90dG9tUmlnaHQueSgpOyArK3lDb29yZGluYXRlKSB7Ci0gICAgICAg
IGZvciAodW5zaWduZWQgeENvb3JkaW5hdGUgPSB0b3BMZWZ0LngoKTsgeENvb3JkaW5hdGUgPD0g
Ym90dG9tUmlnaHQueCgpOyArK3hDb29yZGluYXRlKSB7CisgICAgVGlsZWREcmF3aW5nQXJlYVRp
bGU6OkNvb3JkaW5hdGUgdG9wTGVmdCA9IHRpbGVDb29yZGluYXRlRm9yUG9pbnQoZGlydHlSZWN0
LmxvY2F0aW9uKCkpOworICAgIFRpbGVkRHJhd2luZ0FyZWFUaWxlOjpDb29yZGluYXRlIGJvdHRv
bVJpZ2h0ID0gdGlsZUNvb3JkaW5hdGVGb3JQb2ludChJbnRQb2ludChkaXJ0eVJlY3QubWF4WCgp
LCBkaXJ0eVJlY3QubWF4WSgpKSk7CisgICAgZm9yICh1bnNpZ25lZCB5Q29vcmRpbmF0ZSA9IHRv
cExlZnQueSgpOyB5Q29vcmRpbmF0ZSA8IGJvdHRvbVJpZ2h0LnkoKTsgKyt5Q29vcmRpbmF0ZSkg
eworICAgICAgICBmb3IgKHVuc2lnbmVkIHhDb29yZGluYXRlID0gdG9wTGVmdC54KCk7IHhDb29y
ZGluYXRlIDwgYm90dG9tUmlnaHQueCgpOyArK3hDb29yZGluYXRlKSB7CiAgICAgICAgICAgICBU
aWxlZERyYXdpbmdBcmVhVGlsZTo6Q29vcmRpbmF0ZSBjdXJyZW50Q29vcmRpbmF0ZSh4Q29vcmRp
bmF0ZSwgeUNvb3JkaW5hdGUpOwogICAgICAgICAgICAgLy8gRGlzdGFuY2UgaXMgMCBmb3IgYWxs
IGN1cnJlbnRseSB2aXNpYmxlIHRpbGVzLgogICAgICAgICAgICAgZG91YmxlIGRpc3RhbmNlID0g
dGlsZURpc3RhbmNlKHZpc2libGVSZWN0LCBjdXJyZW50Q29vcmRpbmF0ZSk7CkluZGV4OiBTb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9XS1ByaW50aW5nVmlldy5tbQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9XS1ByaW50aW5nVmlldy5tbQko
cmV2aXNpb24gNzcyNzgpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9XS1By
aW50aW5nVmlldy5tbQkod29ya2luZyBjb3B5KQpAQCAtMjMzLDggKzIzMyw4IEBAIHN0YXRpYyB2
b2lkIHBhZ2VEaWRDb21wdXRlUGFnZVJlY3RzKGNvbnMKIAogICAgICAgICBjb25zdCBJbnRSZWN0
JiBsYXN0UHJpbnRpbmdQYWdlUmVjdCA9IHZpZXctPl9wcmludGluZ1BhZ2VSZWN0c1t2aWV3LT5f
cHJpbnRpbmdQYWdlUmVjdHMuc2l6ZSgpIC0gMV07CiAgICAgICAgIE5TUmVjdCBuZXdGcmFtZVNp
emUgPSBOU01ha2VSZWN0KDAsIDAsIAotICAgICAgICAgICAgY2VpbChsYXN0UHJpbnRpbmdQYWdl
UmVjdC5yaWdodCgpICogdmlldy0+X3RvdGFsU2NhbGVGYWN0b3JGb3JQcmludGluZyksIAotICAg
ICAgICAgICAgY2VpbChsYXN0UHJpbnRpbmdQYWdlUmVjdC5ib3R0b20oKSAqIHZpZXctPl90b3Rh
bFNjYWxlRmFjdG9yRm9yUHJpbnRpbmcpKTsKKyAgICAgICAgICAgIGNlaWwobGFzdFByaW50aW5n
UGFnZVJlY3QubWF4WCgpICogdmlldy0+X3RvdGFsU2NhbGVGYWN0b3JGb3JQcmludGluZyksIAor
ICAgICAgICAgICAgY2VpbChsYXN0UHJpbnRpbmdQYWdlUmVjdC5tYXhZKCkgKiB2aWV3LT5fdG90
YWxTY2FsZUZhY3RvckZvclByaW50aW5nKSk7CiAgICAgICAgIExPRyhWaWV3LCAiV0tQcmludGlu
Z1ZpZXcgc2V0dGluZyBmcmFtZSBzaXplIHRvIHg6JWcgeTolZyB3aWR0aDolZyBoZWlnaHQ6JWci
LCBuZXdGcmFtZVNpemUub3JpZ2luLngsIG5ld0ZyYW1lU2l6ZS5vcmlnaW4ueSwgbmV3RnJhbWVT
aXplLnNpemUud2lkdGgsIG5ld0ZyYW1lU2l6ZS5zaXplLmhlaWdodCk7CiAgICAgICAgIFt2aWV3
IHNldEZyYW1lOm5ld0ZyYW1lU2l6ZV07CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9tYWMvQ2h1bmtlZFVwZGF0ZURyYXdpbmdBcmVhUHJveHlNYWMubW0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9DaHVua2VkVXBkYXRlRHJhd2luZ0FyZWFQcm94
eU1hYy5tbQkocmV2aXNpb24gNzcyNzgpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFj
L0NodW5rZWRVcGRhdGVEcmF3aW5nQXJlYVByb3h5TWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC05
Nyw3ICs5Nyw3IEBAIHZvaWQgQ2h1bmtlZFVwZGF0ZURyYXdpbmdBcmVhUHJveHk6OmRyYXcKIAog
ICAgIC8vIEZsaXAgdGhlIGRlc3RpbmF0aW9uLgogICAgIENHQ29udGV4dFNjYWxlQ1RNKG1fYml0
bWFwQ29udGV4dC5nZXQoKSwgMSwgLTEpOwotICAgIENHQ29udGV4dFRyYW5zbGF0ZUNUTShtX2Jp
dG1hcENvbnRleHQuZ2V0KCksIDAsIC0odXBkYXRlQ2h1bmtSZWN0LnkoKSArIHVwZGF0ZUNodW5r
UmVjdC5ib3R0b20oKSkpOworICAgIENHQ29udGV4dFRyYW5zbGF0ZUNUTShtX2JpdG1hcENvbnRl
eHQuZ2V0KCksIDAsIC0odXBkYXRlQ2h1bmtSZWN0LnkoKSArIHVwZGF0ZUNodW5rUmVjdC5tYXhZ
KCkpKTsKIAogICAgIENHQ29udGV4dERyYXdJbWFnZShtX2JpdG1hcENvbnRleHQuZ2V0KCksIHVw
ZGF0ZUNodW5rUmVjdCwgaW1hZ2UuZ2V0KCkpOwogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvTmV0c2NhcGVQbHVnaW4uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9OZXRzY2FwZVBsdWdp
bi5jcHAJKHJldmlzaW9uIDc3Mjc4KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVn
aW5zL05ldHNjYXBlL05ldHNjYXBlUGx1Z2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUyLDgg
KzM1Miw4IEBAIHZvaWQgTmV0c2NhcGVQbHVnaW46OmNhbGxTZXRXaW5kb3coKQogICAgIG1fbnBX
aW5kb3cuaGVpZ2h0ID0gbV9mcmFtZVJlY3QuaGVpZ2h0KCk7CiAgICAgbV9ucFdpbmRvdy5jbGlw
UmVjdC50b3AgPSBtX2NsaXBSZWN0LnkoKTsKICAgICBtX25wV2luZG93LmNsaXBSZWN0LmxlZnQg
PSBtX2NsaXBSZWN0LngoKTsKLSAgICBtX25wV2luZG93LmNsaXBSZWN0LmJvdHRvbSA9IG1fY2xp
cFJlY3QuYm90dG9tKCk7Ci0gICAgbV9ucFdpbmRvdy5jbGlwUmVjdC5yaWdodCA9IG1fY2xpcFJl
Y3QucmlnaHQoKTsKKyAgICBtX25wV2luZG93LmNsaXBSZWN0LmJvdHRvbSA9IG1fY2xpcFJlY3Qu
bWF4WSgpOworICAgIG1fbnBXaW5kb3cuY2xpcFJlY3QucmlnaHQgPSBtX2NsaXBSZWN0Lm1heFgo
KTsKIAogICAgIE5QUF9TZXRXaW5kb3coJm1fbnBXaW5kb3cpOwogfQpJbmRleDogU291cmNlL1dl
YktpdC9tYWMvV2ViVmlldy9XZWJIVE1MVmlldy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0L21hYy9XZWJWaWV3L1dlYkhUTUxWaWV3Lm1tCShyZXZpc2lvbiA3NzI3OCkKKysrIFNvdXJj
ZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViSFRNTFZpZXcubW0JKHdvcmtpbmcgY29weSkKQEAgLTMx
Miw3ICszMTIsNyBAQCBzdGF0aWMgdm9pZCBzZXROZWVkc0Rpc3BsYXlJblJlY3QoTlNWaWV3CiAg
ICAgTlNSZWN0IGludmFsaWRSZWN0SW5XZWJGcmFtZVZpZXdDb29yZGluYXRlcyA9IFtlbmNsb3Np
bmdXZWJGcmFtZVZpZXcgY29udmVydFJlY3Q6aW52YWxpZFJlY3QgZnJvbVZpZXc6c2VsZl07CiAg
ICAgSW50UmVjdCBpbnZhbGlkUmVjdEluRnJhbWVWaWV3Q29vcmRpbmF0ZXMoaW52YWxpZFJlY3RJ
bldlYkZyYW1lVmlld0Nvb3JkaW5hdGVzKTsKICAgICBpZiAoIVtlbmNsb3NpbmdXZWJGcmFtZVZp
ZXcgaXNGbGlwcGVkXSkKLSAgICAgICAgaW52YWxpZFJlY3RJbkZyYW1lVmlld0Nvb3JkaW5hdGVz
LnNldFkoZnJhbWVWaWV3LT5mcmFtZVJlY3QoKS5zaXplKCkuaGVpZ2h0KCkgLSBpbnZhbGlkUmVj
dEluRnJhbWVWaWV3Q29vcmRpbmF0ZXMuYm90dG9tKCkpOworICAgICAgICBpbnZhbGlkUmVjdElu
RnJhbWVWaWV3Q29vcmRpbmF0ZXMuc2V0WShmcmFtZVZpZXctPmZyYW1lUmVjdCgpLnNpemUoKS5o
ZWlnaHQoKSAtIGludmFsaWRSZWN0SW5GcmFtZVZpZXdDb29yZGluYXRlcy5tYXhZKCkpOwogCiAg
ICAgZnJhbWVWaWV3LT5pbnZhbGlkYXRlUmVjdChpbnZhbGlkUmVjdEluRnJhbWVWaWV3Q29vcmRp
bmF0ZXMpOwogfQo=
</data>
<flag name="review"
          id="72312"
          type_id="1"
          status="+"
          setter="oliver"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>80819</attachid>
            <date>2011-02-01 13:41:25 -0800</date>
            <delta_ts>2011-02-01 14:05:24 -0800</delta_ts>
            <desc>Step 2: Remove the physical accessors.</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>1643</size>
            <attacher name="Dave Hyatt">hyatt</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UmVjdC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UmVjdC5oCShy
ZXZpc2lvbiA3NzI4NikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0
UmVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDIsMTEgKzEwMiw2IEBAIHB1YmxpYzoKIAogICAg
IGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZS5pc0VtcHR5KCk7IH0KIAotICAg
IGZsb2F0IGxlZnQoKSBjb25zdCB7IHJldHVybiB4KCk7IH0KLSAgICBmbG9hdCByaWdodCgpIGNv
bnN0IHsgcmV0dXJuIHgoKSArIHdpZHRoKCk7IH0KLSAgICBmbG9hdCB0b3AoKSBjb25zdCB7IHJl
dHVybiB5KCk7IH0KLSAgICBmbG9hdCBib3R0b20oKSBjb25zdCB7IHJldHVybiB5KCkgKyBoZWln
aHQoKTsgfQotCiAgICAgRmxvYXRQb2ludCBjZW50ZXIoKSBjb25zdCB7IHJldHVybiBGbG9hdFBv
aW50KHgoKSArIHdpZHRoKCkgLyAyLCB5KCkgKyBoZWlnaHQoKSAvIDIpOyB9CiAKICAgICB2b2lk
IG1vdmUoY29uc3QgRmxvYXRTaXplJiBkZWx0YSkgeyBtX2xvY2F0aW9uICs9IGRlbHRhOyB9IApA
QCAtMTI0LDcgKzExOSw2IEBAIHB1YmxpYzoKICAgICAgICAgeyByZXR1cm4gcHggPj0geCgpICYm
IHB4IDw9IG1heFgoKSAmJiBweSA+PSB5KCkgJiYgcHkgPD0gbWF4WSgpOyB9CiAgICAgYm9vbCBj
b250YWlucyhjb25zdCBGbG9hdFBvaW50JiBwb2ludCkgY29uc3QgeyByZXR1cm4gY29udGFpbnMo
cG9pbnQueCgpLCBwb2ludC55KCkpOyB9CiAKLQogICAgIHZvaWQgaW5mbGF0ZVgoZmxvYXQgZHgp
IHsKICAgICAgICAgbV9sb2NhdGlvbi5zZXRYKG1fbG9jYXRpb24ueCgpIC0gZHgpOwogICAgICAg
ICBtX3NpemUuc2V0V2lkdGgobV9zaXplLndpZHRoKCkgKyBkeCArIGR4KTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ludFJlY3QuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbnRSZWN0LmgJKHJldmlzaW9uIDc3Mjg2KQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW50UmVjdC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xMDMsOSArMTAzLDYgQEAgcHVibGljOgogCiAgICAgYm9vbCBpc0VtcHR5KCkgY29u
c3QgeyByZXR1cm4gbV9zaXplLmlzRW1wdHkoKTsgfQogCi0gICAgaW50IHJpZ2h0KCkgY29uc3Qg
eyByZXR1cm4geCgpICsgd2lkdGgoKTsgfQotICAgIGludCBib3R0b20oKSBjb25zdCB7IHJldHVy
biB5KCkgKyBoZWlnaHQoKTsgfQotCiAgICAgLy8gTk9URTogVGhlIHJlc3VsdCBpcyByb3VuZGVk
IHRvIGludGVnZXIgdmFsdWVzLCBhbmQgdGh1cyBtYXkgYmUgbm90IHRoZSBleGFjdAogICAgIC8v
IGNlbnRlciBwb2ludC4KICAgICBJbnRQb2ludCBjZW50ZXIoKSBjb25zdCB7IHJldHVybiBJbnRQ
b2ludCh4KCkgKyB3aWR0aCgpIC8gMiwgeSgpICsgaGVpZ2h0KCkgLyAyKTsgfQo=
</data>
<flag name="review"
          id="72319"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>80823</attachid>
            <date>2011-02-01 14:05:24 -0800</date>
            <delta_ts>2011-02-01 14:36:21 -0800</delta_ts>
            <desc>Step 2: (Reviewed by Darin, just using bots to check for errors) Remove accessors.</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>7442</size>
            <attacher name="Dave Hyatt">hyatt</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UmVjdC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UmVjdC5oCShy
ZXZpc2lvbiA3NzI4NikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0
UmVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDIsMTEgKzEwMiw2IEBAIHB1YmxpYzoKIAogICAg
IGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZS5pc0VtcHR5KCk7IH0KIAotICAg
IGZsb2F0IGxlZnQoKSBjb25zdCB7IHJldHVybiB4KCk7IH0KLSAgICBmbG9hdCByaWdodCgpIGNv
bnN0IHsgcmV0dXJuIHgoKSArIHdpZHRoKCk7IH0KLSAgICBmbG9hdCB0b3AoKSBjb25zdCB7IHJl
dHVybiB5KCk7IH0KLSAgICBmbG9hdCBib3R0b20oKSBjb25zdCB7IHJldHVybiB5KCkgKyBoZWln
aHQoKTsgfQotCiAgICAgRmxvYXRQb2ludCBjZW50ZXIoKSBjb25zdCB7IHJldHVybiBGbG9hdFBv
aW50KHgoKSArIHdpZHRoKCkgLyAyLCB5KCkgKyBoZWlnaHQoKSAvIDIpOyB9CiAKICAgICB2b2lk
IG1vdmUoY29uc3QgRmxvYXRTaXplJiBkZWx0YSkgeyBtX2xvY2F0aW9uICs9IGRlbHRhOyB9IApA
QCAtMTI0LDcgKzExOSw2IEBAIHB1YmxpYzoKICAgICAgICAgeyByZXR1cm4gcHggPj0geCgpICYm
IHB4IDw9IG1heFgoKSAmJiBweSA+PSB5KCkgJiYgcHkgPD0gbWF4WSgpOyB9CiAgICAgYm9vbCBj
b250YWlucyhjb25zdCBGbG9hdFBvaW50JiBwb2ludCkgY29uc3QgeyByZXR1cm4gY29udGFpbnMo
cG9pbnQueCgpLCBwb2ludC55KCkpOyB9CiAKLQogICAgIHZvaWQgaW5mbGF0ZVgoZmxvYXQgZHgp
IHsKICAgICAgICAgbV9sb2NhdGlvbi5zZXRYKG1fbG9jYXRpb24ueCgpIC0gZHgpOwogICAgICAg
ICBtX3NpemUuc2V0V2lkdGgobV9zaXplLndpZHRoKCkgKyBkeCArIGR4KTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ludFJlY3QuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbnRSZWN0LmgJKHJldmlzaW9uIDc3Mjg2KQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW50UmVjdC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xMDMsOSArMTAzLDYgQEAgcHVibGljOgogCiAgICAgYm9vbCBpc0VtcHR5KCkgY29u
c3QgeyByZXR1cm4gbV9zaXplLmlzRW1wdHkoKTsgfQogCi0gICAgaW50IHJpZ2h0KCkgY29uc3Qg
eyByZXR1cm4geCgpICsgd2lkdGgoKTsgfQotICAgIGludCBib3R0b20oKSBjb25zdCB7IHJldHVy
biB5KCkgKyBoZWlnaHQoKTsgfQotCiAgICAgLy8gTk9URTogVGhlIHJlc3VsdCBpcyByb3VuZGVk
IHRvIGludGVnZXIgdmFsdWVzLCBhbmQgdGh1cyBtYXkgYmUgbm90IHRoZSBleGFjdAogICAgIC8v
IGNlbnRlciBwb2ludC4KICAgICBJbnRQb2ludCBjZW50ZXIoKSBjb25zdCB7IHJldHVybiBJbnRQ
b2ludCh4KCkgKyB3aWR0aCgpIC8gMiwgeSgpICsgaGVpZ2h0KCkgLyAyKTsgfQpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyby5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1h
Z2VCdWZmZXJDYWlyby5jcHAJKHJldmlzaW9uIDc3Mjg2KQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyby5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTE3Myw3ICsxNzMsNyBAQCBQYXNzUmVmUHRyPEJ5dGVBcnJheT4gZ2V0SW1hZ2VEYXRhKGNv
bnN0CiAgICAgICAgIGRlc3R4ID0gLW9yaWdpbng7CiAgICAgICAgIG9yaWdpbnggPSAwOwogICAg
IH0KLSAgICBpbnQgZW5keCA9IHJlY3QucmlnaHQoKTsKKyAgICBpbnQgZW5keCA9IHJlY3QubWF4
WCgpOwogICAgIGlmIChlbmR4ID4gc2l6ZS53aWR0aCgpKQogICAgICAgICBlbmR4ID0gc2l6ZS53
aWR0aCgpOwogICAgIGludCBudW1Db2x1bW5zID0gZW5keCAtIG9yaWdpbng7CkBAIC0xODQsNyAr
MTg0LDcgQEAgUGFzc1JlZlB0cjxCeXRlQXJyYXk+IGdldEltYWdlRGF0YShjb25zdAogICAgICAg
ICBkZXN0eSA9IC1vcmlnaW55OwogICAgICAgICBvcmlnaW55ID0gMDsKICAgICB9Ci0gICAgaW50
IGVuZHkgPSByZWN0LmJvdHRvbSgpOworICAgIGludCBlbmR5ID0gcmVjdC5tYXhZKCk7CiAgICAg
aWYgKGVuZHkgPiBzaXplLmhlaWdodCgpKQogICAgICAgICBlbmR5ID0gc2l6ZS5oZWlnaHQoKTsK
ICAgICBpbnQgbnVtUm93cyA9IGVuZHkgLSBvcmlnaW55OwpAQCAtMjM5LDkgKzIzOSw5IEBAIHZv
aWQgcHV0SW1hZ2VEYXRhKEJ5dGVBcnJheSomIHNvdXJjZSwgY28KICAgICBBU1NFUlQoZGVzdHgg
Pj0gMCk7CiAgICAgQVNTRVJUKGRlc3R4IDwgc2l6ZS53aWR0aCgpKTsKICAgICBBU1NFUlQob3Jp
Z2lueCA+PSAwKTsKLSAgICBBU1NFUlQob3JpZ2lueCA8PSBzb3VyY2VSZWN0LnJpZ2h0KCkpOwor
ICAgIEFTU0VSVChvcmlnaW54IDw9IHNvdXJjZVJlY3QubWF4WCgpKTsKIAotICAgIGludCBlbmR4
ID0gZGVzdFBvaW50LngoKSArIHNvdXJjZVJlY3QucmlnaHQoKTsKKyAgICBpbnQgZW5keCA9IGRl
c3RQb2ludC54KCkgKyBzb3VyY2VSZWN0Lm1heFgoKTsKICAgICBBU1NFUlQoZW5keCA8PSBzaXpl
LndpZHRoKCkpOwogCiAgICAgaW50IG51bUNvbHVtbnMgPSBlbmR4IC0gZGVzdHg7CkBAIC0yNTEs
OSArMjUxLDkgQEAgdm9pZCBwdXRJbWFnZURhdGEoQnl0ZUFycmF5KiYgc291cmNlLCBjbwogICAg
IEFTU0VSVChkZXN0eSA+PSAwKTsKICAgICBBU1NFUlQoZGVzdHkgPCBzaXplLmhlaWdodCgpKTsK
ICAgICBBU1NFUlQob3JpZ2lueSA+PSAwKTsKLSAgICBBU1NFUlQob3JpZ2lueSA8PSBzb3VyY2VS
ZWN0LmJvdHRvbSgpKTsKKyAgICBBU1NFUlQob3JpZ2lueSA8PSBzb3VyY2VSZWN0Lm1heFkoKSk7
CiAKLSAgICBpbnQgZW5keSA9IGRlc3RQb2ludC55KCkgKyBzb3VyY2VSZWN0LmJvdHRvbSgpOwor
ICAgIGludCBlbmR5ID0gZGVzdFBvaW50LnkoKSArIHNvdXJjZVJlY3QubWF4WSgpOwogICAgIEFT
U0VSVChlbmR5IDw9IHNpemUuaGVpZ2h0KCkpOwogICAgIGludCBudW1Sb3dzID0gZW5keSAtIGRl
c3R5OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9JbWFnZUJ1
ZmZlclF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9xdC9JbWFnZUJ1ZmZlclF0LmNwcAkocmV2aXNpb24gNzcyODYpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9JbWFnZUJ1ZmZlclF0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTg4LDcgKzE4OCw3IEBAIFBhc3NSZWZQdHI8Qnl0ZUFycmF5PiBnZXRJbWFnZURhdGEoY29u
c3QKICAgICBSZWZQdHI8Qnl0ZUFycmF5PiByZXN1bHQgPSBCeXRlQXJyYXk6OmNyZWF0ZShyZWN0
LndpZHRoKCkgKiByZWN0LmhlaWdodCgpICogNCk7CiAgICAgdW5zaWduZWQgY2hhciogZGF0YSA9
IHJlc3VsdC0+ZGF0YSgpOwogCi0gICAgaWYgKHJlY3QueCgpIDwgMCB8fCByZWN0LnkoKSA8IDAg
fHwgcmVjdC5yaWdodCgpID4gc2l6ZS53aWR0aCgpIHx8IHJlY3QuYm90dG9tKCkgPiBzaXplLmhl
aWdodCgpKQorICAgIGlmIChyZWN0LngoKSA8IDAgfHwgcmVjdC55KCkgPCAwIHx8IHJlY3QubWF4
WCgpID4gc2l6ZS53aWR0aCgpIHx8IHJlY3QubWF4WSgpID4gc2l6ZS5oZWlnaHQoKSkKICAgICAg
ICAgbWVtc2V0KGRhdGEsIDAsIHJlc3VsdC0+bGVuZ3RoKCkpOwogCiAgICAgaW50IG9yaWdpbngg
PSByZWN0LngoKTsKQEAgLTE5Nyw3ICsxOTcsNyBAQCBQYXNzUmVmUHRyPEJ5dGVBcnJheT4gZ2V0
SW1hZ2VEYXRhKGNvbnN0CiAgICAgICAgIGRlc3R4ID0gLW9yaWdpbng7CiAgICAgICAgIG9yaWdp
bnggPSAwOwogICAgIH0KLSAgICBpbnQgZW5keCA9IHJlY3QucmlnaHQoKTsKKyAgICBpbnQgZW5k
eCA9IHJlY3QubWF4WCgpOwogICAgIGlmIChlbmR4ID4gc2l6ZS53aWR0aCgpKQogICAgICAgICBl
bmR4ID0gc2l6ZS53aWR0aCgpOwogICAgIGludCBudW1Db2x1bW5zID0gZW5keCAtIG9yaWdpbng7
CkBAIC0yMDgsNyArMjA4LDcgQEAgUGFzc1JlZlB0cjxCeXRlQXJyYXk+IGdldEltYWdlRGF0YShj
b25zdAogICAgICAgICBkZXN0eSA9IC1vcmlnaW55OwogICAgICAgICBvcmlnaW55ID0gMDsKICAg
ICB9Ci0gICAgaW50IGVuZHkgPSByZWN0LmJvdHRvbSgpOworICAgIGludCBlbmR5ID0gcmVjdC5t
YXhZKCk7CiAgICAgaWYgKGVuZHkgPiBzaXplLmhlaWdodCgpKQogICAgICAgICBlbmR5ID0gc2l6
ZS5oZWlnaHQoKTsKICAgICBpbnQgbnVtUm93cyA9IGVuZHkgLSBvcmlnaW55OwpAQCAtMzAyLDkg
KzMwMiw5IEBAIHZvaWQgcHV0SW1hZ2VEYXRhKEJ5dGVBcnJheSomIHNvdXJjZSwgY28KICAgICBB
U1NFUlQoZGVzdHggPj0gMCk7CiAgICAgQVNTRVJUKGRlc3R4IDwgc2l6ZS53aWR0aCgpKTsKICAg
ICBBU1NFUlQob3JpZ2lueCA+PSAwKTsKLSAgICBBU1NFUlQob3JpZ2lueCA8PSBzb3VyY2VSZWN0
LnJpZ2h0KCkpOworICAgIEFTU0VSVChvcmlnaW54IDw9IHNvdXJjZVJlY3QubWF4WCgpKTsKIAot
ICAgIGludCBlbmR4ID0gZGVzdFBvaW50LngoKSArIHNvdXJjZVJlY3QucmlnaHQoKTsKKyAgICBp
bnQgZW5keCA9IGRlc3RQb2ludC54KCkgKyBzb3VyY2VSZWN0Lm1heFgoKTsKICAgICBBU1NFUlQo
ZW5keCA8PSBzaXplLndpZHRoKCkpOwogCiAgICAgaW50IG51bUNvbHVtbnMgPSBlbmR4IC0gZGVz
dHg7CkBAIC0zMTQsOSArMzE0LDkgQEAgdm9pZCBwdXRJbWFnZURhdGEoQnl0ZUFycmF5KiYgc291
cmNlLCBjbwogICAgIEFTU0VSVChkZXN0eSA+PSAwKTsKICAgICBBU1NFUlQoZGVzdHkgPCBzaXpl
LmhlaWdodCgpKTsKICAgICBBU1NFUlQob3JpZ2lueSA+PSAwKTsKLSAgICBBU1NFUlQob3JpZ2lu
eSA8PSBzb3VyY2VSZWN0LmJvdHRvbSgpKTsKKyAgICBBU1NFUlQob3JpZ2lueSA8PSBzb3VyY2VS
ZWN0Lm1heFkoKSk7CiAKLSAgICBpbnQgZW5keSA9IGRlc3RQb2ludC55KCkgKyBzb3VyY2VSZWN0
LmJvdHRvbSgpOworICAgIGludCBlbmR5ID0gZGVzdFBvaW50LnkoKSArIHNvdXJjZVJlY3QubWF4
WSgpOwogICAgIEFTU0VSVChlbmR5IDw9IHNpemUuaGVpZ2h0KCkpOwogICAgIGludCBudW1Sb3dz
ID0gZW5keSAtIGRlc3R5OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9za2lhL0ltYWdlQnVmZmVyU2tpYS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9JbWFnZUJ1ZmZlclNraWEuY3BwCShyZXZpc2lvbiA3NzI4
NikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VCdWZmZXJT
a2lhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTc3LDggKzE3Nyw4IEBAIFBhc3NSZWZQdHI8Qnl0
ZUFycmF5PiBnZXRJbWFnZURhdGEoY29uc3QKIAogICAgIGlmIChyZWN0LngoKSA8IDAKICAgICAg
ICAgfHwgcmVjdC55KCkgPCAwCi0gICAgICAgIHx8IHJlY3QucmlnaHQoKSA+IHNpemUud2lkdGgo
KQotICAgICAgICB8fCByZWN0LmJvdHRvbSgpID4gc2l6ZS5oZWlnaHQoKSkKKyAgICAgICAgfHwg
cmVjdC5tYXhYKCkgPiBzaXplLndpZHRoKCkKKyAgICAgICAgfHwgcmVjdC5tYXhZKCkgPiBzaXpl
LmhlaWdodCgpKQogICAgICAgICBtZW1zZXQoZGF0YSwgMCwgcmVzdWx0LT5sZW5ndGgoKSk7CiAK
ICAgICBpbnQgb3JpZ2luWCA9IHJlY3QueCgpOwpAQCAtMTg3LDcgKzE4Nyw3IEBAIFBhc3NSZWZQ
dHI8Qnl0ZUFycmF5PiBnZXRJbWFnZURhdGEoY29uc3QKICAgICAgICAgZGVzdFggPSAtb3JpZ2lu
WDsKICAgICAgICAgb3JpZ2luWCA9IDA7CiAgICAgfQotICAgIGludCBlbmRYID0gcmVjdC5yaWdo
dCgpOworICAgIGludCBlbmRYID0gcmVjdC5tYXhYKCk7CiAgICAgaWYgKGVuZFggPiBzaXplLndp
ZHRoKCkpCiAgICAgICAgIGVuZFggPSBzaXplLndpZHRoKCk7CiAgICAgaW50IG51bUNvbHVtbnMg
PSBlbmRYIC0gb3JpZ2luWDsKQEAgLTIwMSw3ICsyMDEsNyBAQCBQYXNzUmVmUHRyPEJ5dGVBcnJh
eT4gZ2V0SW1hZ2VEYXRhKGNvbnN0CiAgICAgICAgIGRlc3RZID0gLW9yaWdpblk7CiAgICAgICAg
IG9yaWdpblkgPSAwOwogICAgIH0KLSAgICBpbnQgZW5kWSA9IHJlY3QuYm90dG9tKCk7CisgICAg
aW50IGVuZFkgPSByZWN0Lm1heFkoKTsKICAgICBpZiAoZW5kWSA+IHNpemUuaGVpZ2h0KCkpCiAg
ICAgICAgIGVuZFkgPSBzaXplLmhlaWdodCgpOwogICAgIGludCBudW1Sb3dzID0gZW5kWSAtIG9y
aWdpblk7CkBAIC0yNjUsOSArMjY1LDkgQEAgdm9pZCBwdXRJbWFnZURhdGEoQnl0ZUFycmF5KiYg
c291cmNlLCBjbwogICAgIEFTU0VSVChkZXN0WCA+PSAwKTsKICAgICBBU1NFUlQoZGVzdFggPCBz
aXplLndpZHRoKCkpOwogICAgIEFTU0VSVChvcmlnaW5YID49IDApOwotICAgIEFTU0VSVChvcmln
aW5YIDwgc291cmNlUmVjdC5yaWdodCgpKTsKKyAgICBBU1NFUlQob3JpZ2luWCA8IHNvdXJjZVJl
Y3QubWF4WCgpKTsKIAotICAgIGludCBlbmRYID0gZGVzdFBvaW50LngoKSArIHNvdXJjZVJlY3Qu
cmlnaHQoKTsKKyAgICBpbnQgZW5kWCA9IGRlc3RQb2ludC54KCkgKyBzb3VyY2VSZWN0Lm1heFgo
KTsKICAgICBBU1NFUlQoZW5kWCA8PSBzaXplLndpZHRoKCkpOwogCiAgICAgaW50IG51bUNvbHVt
bnMgPSBlbmRYIC0gZGVzdFg7CkBAIC0yNzcsOSArMjc3LDkgQEAgdm9pZCBwdXRJbWFnZURhdGEo
Qnl0ZUFycmF5KiYgc291cmNlLCBjbwogICAgIEFTU0VSVChkZXN0WSA+PSAwKTsKICAgICBBU1NF
UlQoZGVzdFkgPCBzaXplLmhlaWdodCgpKTsKICAgICBBU1NFUlQob3JpZ2luWSA+PSAwKTsKLSAg
ICBBU1NFUlQob3JpZ2luWSA8IHNvdXJjZVJlY3QuYm90dG9tKCkpOworICAgIEFTU0VSVChvcmln
aW5ZIDwgc291cmNlUmVjdC5tYXhZKCkpOwogCi0gICAgaW50IGVuZFkgPSBkZXN0UG9pbnQueSgp
ICsgc291cmNlUmVjdC5ib3R0b20oKTsKKyAgICBpbnQgZW5kWSA9IGRlc3RQb2ludC55KCkgKyBz
b3VyY2VSZWN0Lm1heFkoKTsKICAgICBBU1NFUlQoZW5kWSA8PSBzaXplLmhlaWdodCgpKTsKICAg
ICBpbnQgbnVtUm93cyA9IGVuZFkgLSBkZXN0WTsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>80830</attachid>
            <date>2011-02-01 14:36:21 -0800</date>
            <delta_ts>2011-02-01 15:20:41 -0800</delta_ts>
            <desc>Step 2: (Reviewed by Darin, just using bots to check for errors) Remove accessors.</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>11829</size>
            <attacher name="Dave Hyatt">hyatt</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1BvcHVwTWVudUNocm9taXVt
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9Qb3B1
cE1lbnVDaHJvbWl1bS5jcHAJKHJldmlzaW9uIDc3Mjg2KQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vY2hyb21pdW0vUG9wdXBNZW51Q2hyb21pdW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
NTAsNyArMzUwLDcgQEAgSW50UmVjdCBQb3B1cENvbnRhaW5lcjo6bGF5b3V0QW5kQ2FsY3VsYQog
ICAgICAgICAvLyBpbnN0ZWFkLgogICAgICAgICBGbG9hdFJlY3Qgc2NyZWVuID0gc2NyZWVuQXZh
aWxhYmxlUmVjdChtX2ZyYW1lVmlldy5nZXQoKSk7CiAgICAgICAgIHdpZGdldFJlY3QgPSBjaHJv
bWVDbGllbnQtPndpbmRvd1RvU2NyZWVuKEludFJlY3QocG9wdXBJbml0aWFsQ29vcmRpbmF0ZSwg
dGFyZ2V0U2l6ZSkpOwotICAgICAgICBpZiAod2lkZ2V0UmVjdC5ib3R0b20oKSA+IHN0YXRpY19j
YXN0PGludD4oc2NyZWVuLmJvdHRvbSgpKSkgeworICAgICAgICBpZiAod2lkZ2V0UmVjdC5tYXhZ
KCkgPiBzdGF0aWNfY2FzdDxpbnQ+KHNjcmVlbi5tYXhZKCkpKSB7CiAgICAgICAgICAgICBpZiAo
d2lkZ2V0UmVjdC55KCkgLSB3aWRnZXRSZWN0LmhlaWdodCgpIC0gdGFyZ2V0Q29udHJvbEhlaWdo
dCA+IDApIHsKICAgICAgICAgICAgICAgICAvLyBUaGVyZSBpcyBlbm91Z2ggcm9vbSB0byBvcGVu
IHVwd2FyZHMuCiAgICAgICAgICAgICAgICAgd2lkZ2V0UmVjdC5tb3ZlKDAsIC0od2lkZ2V0UmVj
dC5oZWlnaHQoKSArIHRhcmdldENvbnRyb2xIZWlnaHQpKTsKQEAgLTM1OCw3ICszNTgsNyBAQCBJ
bnRSZWN0IFBvcHVwQ29udGFpbmVyOjpsYXlvdXRBbmRDYWxjdWxhCiAgICAgICAgICAgICAgICAg
Ly8gRmlndXJlIHdoZXRoZXIgdXB3YXJkcyBvciBkb3dud2FyZHMgaGFzIG1vcmUgcm9vbSBhbmQg
c2V0IHRoZQogICAgICAgICAgICAgICAgIC8vIG1heGltdW0gbnVtYmVyIG9mIGl0ZW1zLgogICAg
ICAgICAgICAgICAgIGludCBzcGFjZUFib3ZlID0gd2lkZ2V0UmVjdC55KCkgLSB0YXJnZXRDb250
cm9sSGVpZ2h0OwotICAgICAgICAgICAgICAgIGludCBzcGFjZUJlbG93ID0gc2NyZWVuLmJvdHRv
bSgpIC0gd2lkZ2V0UmVjdC55KCk7CisgICAgICAgICAgICAgICAgaW50IHNwYWNlQmVsb3cgPSBz
Y3JlZW4ubWF4WSgpIC0gd2lkZ2V0UmVjdC55KCk7CiAgICAgICAgICAgICAgICAgaWYgKHNwYWNl
QWJvdmUgPiBzcGFjZUJlbG93KQogICAgICAgICAgICAgICAgICAgICBtX2xpc3RCb3gtPnNldE1h
eEhlaWdodChzcGFjZUFib3ZlKTsKICAgICAgICAgICAgICAgICBlbHNlCkBAIC0xMTUzLDkgKzEx
NTMsOSBAQCB2b2lkIFBvcHVwTGlzdEJveDo6c2Nyb2xsVG9SZXZlYWxSb3coaW50CiAgICAgaWYg
KHJvd1JlY3QueSgpIDwgc2Nyb2xsWSgpKSB7CiAgICAgICAgIC8vIFJvdyBpcyBhYm92ZSBjdXJy
ZW50IHNjcm9sbCBwb3NpdGlvbiwgc2Nyb2xsIHVwLgogICAgICAgICBTY3JvbGxWaWV3OjpzZXRT
Y3JvbGxQb3NpdGlvbihJbnRQb2ludCgwLCByb3dSZWN0LnkoKSkpOwotICAgIH0gZWxzZSBpZiAo
cm93UmVjdC5ib3R0b20oKSA+IHNjcm9sbFkoKSArIHZpc2libGVIZWlnaHQoKSkgeworICAgIH0g
ZWxzZSBpZiAocm93UmVjdC5tYXhZKCkgPiBzY3JvbGxZKCkgKyB2aXNpYmxlSGVpZ2h0KCkpIHsK
ICAgICAgICAgLy8gUm93IGlzIGJlbG93IGN1cnJlbnQgc2Nyb2xsIHBvc2l0aW9uLCBzY3JvbGwg
ZG93bi4KLSAgICAgICAgU2Nyb2xsVmlldzo6c2V0U2Nyb2xsUG9zaXRpb24oSW50UG9pbnQoMCwg
cm93UmVjdC5ib3R0b20oKSAtIHZpc2libGVIZWlnaHQoKSkpOworICAgICAgICBTY3JvbGxWaWV3
OjpzZXRTY3JvbGxQb3NpdGlvbihJbnRQb2ludCgwLCByb3dSZWN0Lm1heFkoKSAtIHZpc2libGVI
ZWlnaHQoKSkpOwogICAgIH0KIH0KIApAQCAtMTM2Miw3ICsxMzYyLDcgQEAgdm9pZCBQb3B1cExp
c3RCb3g6OmxheW91dCgpCiAgICAgfQogCiAgICAgcmVzaXplKHdpbmRvd1dpZHRoLCB3aW5kb3dI
ZWlnaHQpOwotICAgIHNldENvbnRlbnRzU2l6ZShJbnRTaXplKGNvbnRlbnRXaWR0aCwgZ2V0Um93
Qm91bmRzKG51bUl0ZW1zKCkgLSAxKS5ib3R0b20oKSkpOworICAgIHNldENvbnRlbnRzU2l6ZShJ
bnRTaXplKGNvbnRlbnRXaWR0aCwgZ2V0Um93Qm91bmRzKG51bUl0ZW1zKCkgLSAxKS5tYXhZKCkp
KTsKIAogICAgIGlmIChob3N0V2luZG93KCkpCiAgICAgICAgIHNjcm9sbFRvUmV2ZWFsU2VsZWN0
aW9uKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3Qu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJl
Y3QuaAkocmV2aXNpb24gNzcyODYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9GbG9hdFJlY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMTAyLDExICsxMDIsNiBAQCBwdWJsaWM6
CiAKICAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiBtX3NpemUuaXNFbXB0eSgpOyB9
CiAKLSAgICBmbG9hdCBsZWZ0KCkgY29uc3QgeyByZXR1cm4geCgpOyB9Ci0gICAgZmxvYXQgcmln
aHQoKSBjb25zdCB7IHJldHVybiB4KCkgKyB3aWR0aCgpOyB9Ci0gICAgZmxvYXQgdG9wKCkgY29u
c3QgeyByZXR1cm4geSgpOyB9Ci0gICAgZmxvYXQgYm90dG9tKCkgY29uc3QgeyByZXR1cm4geSgp
ICsgaGVpZ2h0KCk7IH0KLQogICAgIEZsb2F0UG9pbnQgY2VudGVyKCkgY29uc3QgeyByZXR1cm4g
RmxvYXRQb2ludCh4KCkgKyB3aWR0aCgpIC8gMiwgeSgpICsgaGVpZ2h0KCkgLyAyKTsgfQogCiAg
ICAgdm9pZCBtb3ZlKGNvbnN0IEZsb2F0U2l6ZSYgZGVsdGEpIHsgbV9sb2NhdGlvbiArPSBkZWx0
YTsgfSAKQEAgLTEyNCw3ICsxMTksNiBAQCBwdWJsaWM6CiAgICAgICAgIHsgcmV0dXJuIHB4ID49
IHgoKSAmJiBweCA8PSBtYXhYKCkgJiYgcHkgPj0geSgpICYmIHB5IDw9IG1heFkoKTsgfQogICAg
IGJvb2wgY29udGFpbnMoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpIGNvbnN0IHsgcmV0dXJuIGNv
bnRhaW5zKHBvaW50LngoKSwgcG9pbnQueSgpKTsgfQogCi0KICAgICB2b2lkIGluZmxhdGVYKGZs
b2F0IGR4KSB7CiAgICAgICAgIG1fbG9jYXRpb24uc2V0WChtX2xvY2F0aW9uLngoKSAtIGR4KTsK
ICAgICAgICAgbV9zaXplLnNldFdpZHRoKG1fc2l6ZS53aWR0aCgpICsgZHggKyBkeCk7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbnRSZWN0LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW50UmVjdC5oCShyZXZpc2lvbiA3
NzI4NikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ludFJlY3QuaAkod29y
a2luZyBjb3B5KQpAQCAtMTAzLDkgKzEwMyw2IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgaXNFbXB0
eSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZS5pc0VtcHR5KCk7IH0KIAotICAgIGludCByaWdodCgp
IGNvbnN0IHsgcmV0dXJuIHgoKSArIHdpZHRoKCk7IH0KLSAgICBpbnQgYm90dG9tKCkgY29uc3Qg
eyByZXR1cm4geSgpICsgaGVpZ2h0KCk7IH0KLQogICAgIC8vIE5PVEU6IFRoZSByZXN1bHQgaXMg
cm91bmRlZCB0byBpbnRlZ2VyIHZhbHVlcywgYW5kIHRodXMgbWF5IGJlIG5vdCB0aGUgZXhhY3QK
ICAgICAvLyBjZW50ZXIgcG9pbnQuCiAgICAgSW50UG9pbnQgY2VudGVyKCkgY29uc3QgeyByZXR1
cm4gSW50UG9pbnQoeCgpICsgd2lkdGgoKSAvIDIsIHkoKSArIGhlaWdodCgpIC8gMik7IH0KSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fp
cm8uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nh
aXJvL0ltYWdlQnVmZmVyQ2Fpcm8uY3BwCShyZXZpc2lvbiA3NzI4NikKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm8uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xNzMsNyArMTczLDcgQEAgUGFzc1JlZlB0cjxCeXRlQXJyYXk+IGdldEltYWdl
RGF0YShjb25zdAogICAgICAgICBkZXN0eCA9IC1vcmlnaW54OwogICAgICAgICBvcmlnaW54ID0g
MDsKICAgICB9Ci0gICAgaW50IGVuZHggPSByZWN0LnJpZ2h0KCk7CisgICAgaW50IGVuZHggPSBy
ZWN0Lm1heFgoKTsKICAgICBpZiAoZW5keCA+IHNpemUud2lkdGgoKSkKICAgICAgICAgZW5keCA9
IHNpemUud2lkdGgoKTsKICAgICBpbnQgbnVtQ29sdW1ucyA9IGVuZHggLSBvcmlnaW54OwpAQCAt
MTg0LDcgKzE4NCw3IEBAIFBhc3NSZWZQdHI8Qnl0ZUFycmF5PiBnZXRJbWFnZURhdGEoY29uc3QK
ICAgICAgICAgZGVzdHkgPSAtb3JpZ2lueTsKICAgICAgICAgb3JpZ2lueSA9IDA7CiAgICAgfQot
ICAgIGludCBlbmR5ID0gcmVjdC5ib3R0b20oKTsKKyAgICBpbnQgZW5keSA9IHJlY3QubWF4WSgp
OwogICAgIGlmIChlbmR5ID4gc2l6ZS5oZWlnaHQoKSkKICAgICAgICAgZW5keSA9IHNpemUuaGVp
Z2h0KCk7CiAgICAgaW50IG51bVJvd3MgPSBlbmR5IC0gb3JpZ2lueTsKQEAgLTIzOSw5ICsyMzks
OSBAQCB2b2lkIHB1dEltYWdlRGF0YShCeXRlQXJyYXkqJiBzb3VyY2UsIGNvCiAgICAgQVNTRVJU
KGRlc3R4ID49IDApOwogICAgIEFTU0VSVChkZXN0eCA8IHNpemUud2lkdGgoKSk7CiAgICAgQVNT
RVJUKG9yaWdpbnggPj0gMCk7Ci0gICAgQVNTRVJUKG9yaWdpbnggPD0gc291cmNlUmVjdC5yaWdo
dCgpKTsKKyAgICBBU1NFUlQob3JpZ2lueCA8PSBzb3VyY2VSZWN0Lm1heFgoKSk7CiAKLSAgICBp
bnQgZW5keCA9IGRlc3RQb2ludC54KCkgKyBzb3VyY2VSZWN0LnJpZ2h0KCk7CisgICAgaW50IGVu
ZHggPSBkZXN0UG9pbnQueCgpICsgc291cmNlUmVjdC5tYXhYKCk7CiAgICAgQVNTRVJUKGVuZHgg
PD0gc2l6ZS53aWR0aCgpKTsKIAogICAgIGludCBudW1Db2x1bW5zID0gZW5keCAtIGRlc3R4OwpA
QCAtMjUxLDkgKzI1MSw5IEBAIHZvaWQgcHV0SW1hZ2VEYXRhKEJ5dGVBcnJheSomIHNvdXJjZSwg
Y28KICAgICBBU1NFUlQoZGVzdHkgPj0gMCk7CiAgICAgQVNTRVJUKGRlc3R5IDwgc2l6ZS5oZWln
aHQoKSk7CiAgICAgQVNTRVJUKG9yaWdpbnkgPj0gMCk7Ci0gICAgQVNTRVJUKG9yaWdpbnkgPD0g
c291cmNlUmVjdC5ib3R0b20oKSk7CisgICAgQVNTRVJUKG9yaWdpbnkgPD0gc291cmNlUmVjdC5t
YXhZKCkpOwogCi0gICAgaW50IGVuZHkgPSBkZXN0UG9pbnQueSgpICsgc291cmNlUmVjdC5ib3R0
b20oKTsKKyAgICBpbnQgZW5keSA9IGRlc3RQb2ludC55KCkgKyBzb3VyY2VSZWN0Lm1heFkoKTsK
ICAgICBBU1NFUlQoZW5keSA8PSBzaXplLmhlaWdodCgpKTsKICAgICBpbnQgbnVtUm93cyA9IGVu
ZHkgLSBkZXN0eTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQv
SW1hZ2VCdWZmZXJRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvcXQvSW1hZ2VCdWZmZXJRdC5jcHAJKHJldmlzaW9uIDc3Mjg2KQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvSW1hZ2VCdWZmZXJRdC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTE4OCw3ICsxODgsNyBAQCBQYXNzUmVmUHRyPEJ5dGVBcnJheT4gZ2V0SW1hZ2VE
YXRhKGNvbnN0CiAgICAgUmVmUHRyPEJ5dGVBcnJheT4gcmVzdWx0ID0gQnl0ZUFycmF5OjpjcmVh
dGUocmVjdC53aWR0aCgpICogcmVjdC5oZWlnaHQoKSAqIDQpOwogICAgIHVuc2lnbmVkIGNoYXIq
IGRhdGEgPSByZXN1bHQtPmRhdGEoKTsKIAotICAgIGlmIChyZWN0LngoKSA8IDAgfHwgcmVjdC55
KCkgPCAwIHx8IHJlY3QucmlnaHQoKSA+IHNpemUud2lkdGgoKSB8fCByZWN0LmJvdHRvbSgpID4g
c2l6ZS5oZWlnaHQoKSkKKyAgICBpZiAocmVjdC54KCkgPCAwIHx8IHJlY3QueSgpIDwgMCB8fCBy
ZWN0Lm1heFgoKSA+IHNpemUud2lkdGgoKSB8fCByZWN0Lm1heFkoKSA+IHNpemUuaGVpZ2h0KCkp
CiAgICAgICAgIG1lbXNldChkYXRhLCAwLCByZXN1bHQtPmxlbmd0aCgpKTsKIAogICAgIGludCBv
cmlnaW54ID0gcmVjdC54KCk7CkBAIC0xOTcsNyArMTk3LDcgQEAgUGFzc1JlZlB0cjxCeXRlQXJy
YXk+IGdldEltYWdlRGF0YShjb25zdAogICAgICAgICBkZXN0eCA9IC1vcmlnaW54OwogICAgICAg
ICBvcmlnaW54ID0gMDsKICAgICB9Ci0gICAgaW50IGVuZHggPSByZWN0LnJpZ2h0KCk7CisgICAg
aW50IGVuZHggPSByZWN0Lm1heFgoKTsKICAgICBpZiAoZW5keCA+IHNpemUud2lkdGgoKSkKICAg
ICAgICAgZW5keCA9IHNpemUud2lkdGgoKTsKICAgICBpbnQgbnVtQ29sdW1ucyA9IGVuZHggLSBv
cmlnaW54OwpAQCAtMjA4LDcgKzIwOCw3IEBAIFBhc3NSZWZQdHI8Qnl0ZUFycmF5PiBnZXRJbWFn
ZURhdGEoY29uc3QKICAgICAgICAgZGVzdHkgPSAtb3JpZ2lueTsKICAgICAgICAgb3JpZ2lueSA9
IDA7CiAgICAgfQotICAgIGludCBlbmR5ID0gcmVjdC5ib3R0b20oKTsKKyAgICBpbnQgZW5keSA9
IHJlY3QubWF4WSgpOwogICAgIGlmIChlbmR5ID4gc2l6ZS5oZWlnaHQoKSkKICAgICAgICAgZW5k
eSA9IHNpemUuaGVpZ2h0KCk7CiAgICAgaW50IG51bVJvd3MgPSBlbmR5IC0gb3JpZ2lueTsKQEAg
LTMwMiw5ICszMDIsOSBAQCB2b2lkIHB1dEltYWdlRGF0YShCeXRlQXJyYXkqJiBzb3VyY2UsIGNv
CiAgICAgQVNTRVJUKGRlc3R4ID49IDApOwogICAgIEFTU0VSVChkZXN0eCA8IHNpemUud2lkdGgo
KSk7CiAgICAgQVNTRVJUKG9yaWdpbnggPj0gMCk7Ci0gICAgQVNTRVJUKG9yaWdpbnggPD0gc291
cmNlUmVjdC5yaWdodCgpKTsKKyAgICBBU1NFUlQob3JpZ2lueCA8PSBzb3VyY2VSZWN0Lm1heFgo
KSk7CiAKLSAgICBpbnQgZW5keCA9IGRlc3RQb2ludC54KCkgKyBzb3VyY2VSZWN0LnJpZ2h0KCk7
CisgICAgaW50IGVuZHggPSBkZXN0UG9pbnQueCgpICsgc291cmNlUmVjdC5tYXhYKCk7CiAgICAg
QVNTRVJUKGVuZHggPD0gc2l6ZS53aWR0aCgpKTsKIAogICAgIGludCBudW1Db2x1bW5zID0gZW5k
eCAtIGRlc3R4OwpAQCAtMzE0LDkgKzMxNCw5IEBAIHZvaWQgcHV0SW1hZ2VEYXRhKEJ5dGVBcnJh
eSomIHNvdXJjZSwgY28KICAgICBBU1NFUlQoZGVzdHkgPj0gMCk7CiAgICAgQVNTRVJUKGRlc3R5
IDwgc2l6ZS5oZWlnaHQoKSk7CiAgICAgQVNTRVJUKG9yaWdpbnkgPj0gMCk7Ci0gICAgQVNTRVJU
KG9yaWdpbnkgPD0gc291cmNlUmVjdC5ib3R0b20oKSk7CisgICAgQVNTRVJUKG9yaWdpbnkgPD0g
c291cmNlUmVjdC5tYXhZKCkpOwogCi0gICAgaW50IGVuZHkgPSBkZXN0UG9pbnQueSgpICsgc291
cmNlUmVjdC5ib3R0b20oKTsKKyAgICBpbnQgZW5keSA9IGRlc3RQb2ludC55KCkgKyBzb3VyY2VS
ZWN0Lm1heFkoKTsKICAgICBBU1NFUlQoZW5keSA8PSBzaXplLmhlaWdodCgpKTsKICAgICBpbnQg
bnVtUm93cyA9IGVuZHkgLSBkZXN0eTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvc2tpYS9JbWFnZUJ1ZmZlclNraWEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VCdWZmZXJTa2lhLmNwcAkocmV2aXNp
b24gNzcyODYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0ltYWdl
QnVmZmVyU2tpYS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3Nyw4ICsxNzcsOCBAQCBQYXNzUmVm
UHRyPEJ5dGVBcnJheT4gZ2V0SW1hZ2VEYXRhKGNvbnN0CiAKICAgICBpZiAocmVjdC54KCkgPCAw
CiAgICAgICAgIHx8IHJlY3QueSgpIDwgMAotICAgICAgICB8fCByZWN0LnJpZ2h0KCkgPiBzaXpl
LndpZHRoKCkKLSAgICAgICAgfHwgcmVjdC5ib3R0b20oKSA+IHNpemUuaGVpZ2h0KCkpCisgICAg
ICAgIHx8IHJlY3QubWF4WCgpID4gc2l6ZS53aWR0aCgpCisgICAgICAgIHx8IHJlY3QubWF4WSgp
ID4gc2l6ZS5oZWlnaHQoKSkKICAgICAgICAgbWVtc2V0KGRhdGEsIDAsIHJlc3VsdC0+bGVuZ3Ro
KCkpOwogCiAgICAgaW50IG9yaWdpblggPSByZWN0LngoKTsKQEAgLTE4Nyw3ICsxODcsNyBAQCBQ
YXNzUmVmUHRyPEJ5dGVBcnJheT4gZ2V0SW1hZ2VEYXRhKGNvbnN0CiAgICAgICAgIGRlc3RYID0g
LW9yaWdpblg7CiAgICAgICAgIG9yaWdpblggPSAwOwogICAgIH0KLSAgICBpbnQgZW5kWCA9IHJl
Y3QucmlnaHQoKTsKKyAgICBpbnQgZW5kWCA9IHJlY3QubWF4WCgpOwogICAgIGlmIChlbmRYID4g
c2l6ZS53aWR0aCgpKQogICAgICAgICBlbmRYID0gc2l6ZS53aWR0aCgpOwogICAgIGludCBudW1D
b2x1bW5zID0gZW5kWCAtIG9yaWdpblg7CkBAIC0yMDEsNyArMjAxLDcgQEAgUGFzc1JlZlB0cjxC
eXRlQXJyYXk+IGdldEltYWdlRGF0YShjb25zdAogICAgICAgICBkZXN0WSA9IC1vcmlnaW5ZOwog
ICAgICAgICBvcmlnaW5ZID0gMDsKICAgICB9Ci0gICAgaW50IGVuZFkgPSByZWN0LmJvdHRvbSgp
OworICAgIGludCBlbmRZID0gcmVjdC5tYXhZKCk7CiAgICAgaWYgKGVuZFkgPiBzaXplLmhlaWdo
dCgpKQogICAgICAgICBlbmRZID0gc2l6ZS5oZWlnaHQoKTsKICAgICBpbnQgbnVtUm93cyA9IGVu
ZFkgLSBvcmlnaW5ZOwpAQCAtMjY1LDkgKzI2NSw5IEBAIHZvaWQgcHV0SW1hZ2VEYXRhKEJ5dGVB
cnJheSomIHNvdXJjZSwgY28KICAgICBBU1NFUlQoZGVzdFggPj0gMCk7CiAgICAgQVNTRVJUKGRl
c3RYIDwgc2l6ZS53aWR0aCgpKTsKICAgICBBU1NFUlQob3JpZ2luWCA+PSAwKTsKLSAgICBBU1NF
UlQob3JpZ2luWCA8IHNvdXJjZVJlY3QucmlnaHQoKSk7CisgICAgQVNTRVJUKG9yaWdpblggPCBz
b3VyY2VSZWN0Lm1heFgoKSk7CiAKLSAgICBpbnQgZW5kWCA9IGRlc3RQb2ludC54KCkgKyBzb3Vy
Y2VSZWN0LnJpZ2h0KCk7CisgICAgaW50IGVuZFggPSBkZXN0UG9pbnQueCgpICsgc291cmNlUmVj
dC5tYXhYKCk7CiAgICAgQVNTRVJUKGVuZFggPD0gc2l6ZS53aWR0aCgpKTsKIAogICAgIGludCBu
dW1Db2x1bW5zID0gZW5kWCAtIGRlc3RYOwpAQCAtMjc3LDkgKzI3Nyw5IEBAIHZvaWQgcHV0SW1h
Z2VEYXRhKEJ5dGVBcnJheSomIHNvdXJjZSwgY28KICAgICBBU1NFUlQoZGVzdFkgPj0gMCk7CiAg
ICAgQVNTRVJUKGRlc3RZIDwgc2l6ZS5oZWlnaHQoKSk7CiAgICAgQVNTRVJUKG9yaWdpblkgPj0g
MCk7Ci0gICAgQVNTRVJUKG9yaWdpblkgPCBzb3VyY2VSZWN0LmJvdHRvbSgpKTsKKyAgICBBU1NF
UlQob3JpZ2luWSA8IHNvdXJjZVJlY3QubWF4WSgpKTsKIAotICAgIGludCBlbmRZID0gZGVzdFBv
aW50LnkoKSArIHNvdXJjZVJlY3QuYm90dG9tKCk7CisgICAgaW50IGVuZFkgPSBkZXN0UG9pbnQu
eSgpICsgc291cmNlUmVjdC5tYXhZKCk7CiAgICAgQVNTRVJUKGVuZFkgPD0gc2l6ZS5oZWlnaHQo
KSk7CiAgICAgaW50IG51bVJvd3MgPSBlbmRZIC0gZGVzdFk7CiAKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZURlY29kZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJ
bWFnZURlY29kZXIuY3BwCShyZXZpc2lvbiA3NzI4NikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZURlY29kZXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zMjcsMTYgKzMyNywxNiBAQCBib29sIEdJRkltYWdlRGVjb2Rlcjo6aW5pdEZyYW1lQnVm
ZmVyKHVuCiAgICAgSW50UmVjdCBmcmFtZVJlY3QoZnJhbWVSZWFkZXItPnhfb2Zmc2V0LCBmcmFt
ZVJlYWRlci0+eV9vZmZzZXQsIGZyYW1lUmVhZGVyLT53aWR0aCwgZnJhbWVSZWFkZXItPmhlaWdo
dCk7CiAKICAgICAvLyBNYWtlIHN1cmUgdGhlIGZyYW1lUmVjdCBkb2Vzbid0IGV4dGVuZCBvdXRz
aWRlIHRoZSBidWZmZXIuCi0gICAgaWYgKGZyYW1lUmVjdC5yaWdodCgpID4gc2l6ZSgpLndpZHRo
KCkpCisgICAgaWYgKGZyYW1lUmVjdC5tYXhYKCkgPiBzaXplKCkud2lkdGgoKSkKICAgICAgICAg
ZnJhbWVSZWN0LnNldFdpZHRoKHNpemUoKS53aWR0aCgpIC0gZnJhbWVSZWFkZXItPnhfb2Zmc2V0
KTsKLSAgICBpZiAoZnJhbWVSZWN0LmJvdHRvbSgpID4gc2l6ZSgpLmhlaWdodCgpKQorICAgIGlm
IChmcmFtZVJlY3QubWF4WSgpID4gc2l6ZSgpLmhlaWdodCgpKQogICAgICAgICBmcmFtZVJlY3Qu
c2V0SGVpZ2h0KHNpemUoKS5oZWlnaHQoKSAtIGZyYW1lUmVhZGVyLT55X29mZnNldCk7CiAKICAg
ICBJbWFnZUZyYW1lKiBjb25zdCBidWZmZXIgPSAmbV9mcmFtZUJ1ZmZlckNhY2hlW2ZyYW1lSW5k
ZXhdOwogICAgIGludCBsZWZ0ID0gdXBwZXJCb3VuZFNjYWxlZFgoZnJhbWVSZWN0LngoKSk7Ci0g
ICAgaW50IHJpZ2h0ID0gbG93ZXJCb3VuZFNjYWxlZFgoZnJhbWVSZWN0LnJpZ2h0KCksIGxlZnQp
OworICAgIGludCByaWdodCA9IGxvd2VyQm91bmRTY2FsZWRYKGZyYW1lUmVjdC5tYXhYKCksIGxl
ZnQpOwogICAgIGludCB0b3AgPSB1cHBlckJvdW5kU2NhbGVkWShmcmFtZVJlY3QueSgpKTsKLSAg
ICBpbnQgYm90dG9tID0gbG93ZXJCb3VuZFNjYWxlZFkoZnJhbWVSZWN0LmJvdHRvbSgpLCB0b3Ap
OworICAgIGludCBib3R0b20gPSBsb3dlckJvdW5kU2NhbGVkWShmcmFtZVJlY3QubWF4WSgpLCB0
b3ApOwogICAgIGJ1ZmZlci0+c2V0UmVjdChJbnRSZWN0KGxlZnQsIHRvcCwgcmlnaHQgLSBsZWZ0
LCBib3R0b20gLSB0b3ApKTsKICAgICAKICAgICBpZiAoIWZyYW1lSW5kZXgpIHsKQEAgLTM3OCw4
ICszNzgsOCBAQCBib29sIEdJRkltYWdlRGVjb2Rlcjo6aW5pdEZyYW1lQnVmZmVyKHVuCiAgICAg
ICAgICAgICAgIC8vIENvcHkgdGhlIHdob2xlIHByZXZpb3VzIGJ1ZmZlciwgdGhlbiBjbGVhciBq
dXN0IGl0cyBmcmFtZS4KICAgICAgICAgICAgICAgaWYgKCFidWZmZXItPmNvcHlCaXRtYXBEYXRh
KCpwcmV2QnVmZmVyKSkKICAgICAgICAgICAgICAgICAgIHJldHVybiBzZXRGYWlsZWQoKTsKLSAg
ICAgICAgICAgICAgZm9yIChpbnQgeSA9IHByZXZSZWN0LnkoKTsgeSA8IHByZXZSZWN0LmJvdHRv
bSgpOyArK3kpIHsKLSAgICAgICAgICAgICAgICAgIGZvciAoaW50IHggPSBwcmV2UmVjdC54KCk7
IHggPCBwcmV2UmVjdC5yaWdodCgpOyArK3gpCisgICAgICAgICAgICAgIGZvciAoaW50IHkgPSBw
cmV2UmVjdC55KCk7IHkgPCBwcmV2UmVjdC5tYXhZKCk7ICsreSkgeworICAgICAgICAgICAgICAg
ICAgZm9yIChpbnQgeCA9IHByZXZSZWN0LngoKTsgeCA8IHByZXZSZWN0Lm1heFgoKTsgKyt4KQog
ICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlci0+c2V0UkdCQSh4LCB5LCAwLCAwLCAwLCAwKTsK
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICBpZiAoKHByZXZSZWN0LndpZHRoKCkgPiAw
KSAmJiAocHJldlJlY3QuaGVpZ2h0KCkgPiAwKSkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>80837</attachid>
            <date>2011-02-01 15:20:41 -0800</date>
            <delta_ts>2011-02-01 18:00:36 -0800</delta_ts>
            <desc>Step 2: (Reviewed by Darin, just using bots to check for errors) Remove accessors.</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>17174</size>
            <attacher name="Dave Hyatt">hyatt</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1BvcHVwTWVudUNocm9taXVt
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9Qb3B1
cE1lbnVDaHJvbWl1bS5jcHAJKHJldmlzaW9uIDc3Mjg2KQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vY2hyb21pdW0vUG9wdXBNZW51Q2hyb21pdW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
NTAsNyArMzUwLDcgQEAgSW50UmVjdCBQb3B1cENvbnRhaW5lcjo6bGF5b3V0QW5kQ2FsY3VsYQog
ICAgICAgICAvLyBpbnN0ZWFkLgogICAgICAgICBGbG9hdFJlY3Qgc2NyZWVuID0gc2NyZWVuQXZh
aWxhYmxlUmVjdChtX2ZyYW1lVmlldy5nZXQoKSk7CiAgICAgICAgIHdpZGdldFJlY3QgPSBjaHJv
bWVDbGllbnQtPndpbmRvd1RvU2NyZWVuKEludFJlY3QocG9wdXBJbml0aWFsQ29vcmRpbmF0ZSwg
dGFyZ2V0U2l6ZSkpOwotICAgICAgICBpZiAod2lkZ2V0UmVjdC5ib3R0b20oKSA+IHN0YXRpY19j
YXN0PGludD4oc2NyZWVuLmJvdHRvbSgpKSkgeworICAgICAgICBpZiAod2lkZ2V0UmVjdC5tYXhZ
KCkgPiBzdGF0aWNfY2FzdDxpbnQ+KHNjcmVlbi5tYXhZKCkpKSB7CiAgICAgICAgICAgICBpZiAo
d2lkZ2V0UmVjdC55KCkgLSB3aWRnZXRSZWN0LmhlaWdodCgpIC0gdGFyZ2V0Q29udHJvbEhlaWdo
dCA+IDApIHsKICAgICAgICAgICAgICAgICAvLyBUaGVyZSBpcyBlbm91Z2ggcm9vbSB0byBvcGVu
IHVwd2FyZHMuCiAgICAgICAgICAgICAgICAgd2lkZ2V0UmVjdC5tb3ZlKDAsIC0od2lkZ2V0UmVj
dC5oZWlnaHQoKSArIHRhcmdldENvbnRyb2xIZWlnaHQpKTsKQEAgLTM1OCw3ICszNTgsNyBAQCBJ
bnRSZWN0IFBvcHVwQ29udGFpbmVyOjpsYXlvdXRBbmRDYWxjdWxhCiAgICAgICAgICAgICAgICAg
Ly8gRmlndXJlIHdoZXRoZXIgdXB3YXJkcyBvciBkb3dud2FyZHMgaGFzIG1vcmUgcm9vbSBhbmQg
c2V0IHRoZQogICAgICAgICAgICAgICAgIC8vIG1heGltdW0gbnVtYmVyIG9mIGl0ZW1zLgogICAg
ICAgICAgICAgICAgIGludCBzcGFjZUFib3ZlID0gd2lkZ2V0UmVjdC55KCkgLSB0YXJnZXRDb250
cm9sSGVpZ2h0OwotICAgICAgICAgICAgICAgIGludCBzcGFjZUJlbG93ID0gc2NyZWVuLmJvdHRv
bSgpIC0gd2lkZ2V0UmVjdC55KCk7CisgICAgICAgICAgICAgICAgaW50IHNwYWNlQmVsb3cgPSBz
Y3JlZW4ubWF4WSgpIC0gd2lkZ2V0UmVjdC55KCk7CiAgICAgICAgICAgICAgICAgaWYgKHNwYWNl
QWJvdmUgPiBzcGFjZUJlbG93KQogICAgICAgICAgICAgICAgICAgICBtX2xpc3RCb3gtPnNldE1h
eEhlaWdodChzcGFjZUFib3ZlKTsKICAgICAgICAgICAgICAgICBlbHNlCkBAIC0xMTUzLDkgKzEx
NTMsOSBAQCB2b2lkIFBvcHVwTGlzdEJveDo6c2Nyb2xsVG9SZXZlYWxSb3coaW50CiAgICAgaWYg
KHJvd1JlY3QueSgpIDwgc2Nyb2xsWSgpKSB7CiAgICAgICAgIC8vIFJvdyBpcyBhYm92ZSBjdXJy
ZW50IHNjcm9sbCBwb3NpdGlvbiwgc2Nyb2xsIHVwLgogICAgICAgICBTY3JvbGxWaWV3OjpzZXRT
Y3JvbGxQb3NpdGlvbihJbnRQb2ludCgwLCByb3dSZWN0LnkoKSkpOwotICAgIH0gZWxzZSBpZiAo
cm93UmVjdC5ib3R0b20oKSA+IHNjcm9sbFkoKSArIHZpc2libGVIZWlnaHQoKSkgeworICAgIH0g
ZWxzZSBpZiAocm93UmVjdC5tYXhZKCkgPiBzY3JvbGxZKCkgKyB2aXNpYmxlSGVpZ2h0KCkpIHsK
ICAgICAgICAgLy8gUm93IGlzIGJlbG93IGN1cnJlbnQgc2Nyb2xsIHBvc2l0aW9uLCBzY3JvbGwg
ZG93bi4KLSAgICAgICAgU2Nyb2xsVmlldzo6c2V0U2Nyb2xsUG9zaXRpb24oSW50UG9pbnQoMCwg
cm93UmVjdC5ib3R0b20oKSAtIHZpc2libGVIZWlnaHQoKSkpOworICAgICAgICBTY3JvbGxWaWV3
OjpzZXRTY3JvbGxQb3NpdGlvbihJbnRQb2ludCgwLCByb3dSZWN0Lm1heFkoKSAtIHZpc2libGVI
ZWlnaHQoKSkpOwogICAgIH0KIH0KIApAQCAtMTM2Miw3ICsxMzYyLDcgQEAgdm9pZCBQb3B1cExp
c3RCb3g6OmxheW91dCgpCiAgICAgfQogCiAgICAgcmVzaXplKHdpbmRvd1dpZHRoLCB3aW5kb3dI
ZWlnaHQpOwotICAgIHNldENvbnRlbnRzU2l6ZShJbnRTaXplKGNvbnRlbnRXaWR0aCwgZ2V0Um93
Qm91bmRzKG51bUl0ZW1zKCkgLSAxKS5ib3R0b20oKSkpOworICAgIHNldENvbnRlbnRzU2l6ZShJ
bnRTaXplKGNvbnRlbnRXaWR0aCwgZ2V0Um93Qm91bmRzKG51bUl0ZW1zKCkgLSAxKS5tYXhZKCkp
KTsKIAogICAgIGlmIChob3N0V2luZG93KCkpCiAgICAgICAgIHNjcm9sbFRvUmV2ZWFsU2VsZWN0
aW9uKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3Qu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJl
Y3QuaAkocmV2aXNpb24gNzcyODYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9GbG9hdFJlY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMTAyLDExICsxMDIsNiBAQCBwdWJsaWM6
CiAKICAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiBtX3NpemUuaXNFbXB0eSgpOyB9
CiAKLSAgICBmbG9hdCBsZWZ0KCkgY29uc3QgeyByZXR1cm4geCgpOyB9Ci0gICAgZmxvYXQgcmln
aHQoKSBjb25zdCB7IHJldHVybiB4KCkgKyB3aWR0aCgpOyB9Ci0gICAgZmxvYXQgdG9wKCkgY29u
c3QgeyByZXR1cm4geSgpOyB9Ci0gICAgZmxvYXQgYm90dG9tKCkgY29uc3QgeyByZXR1cm4geSgp
ICsgaGVpZ2h0KCk7IH0KLQogICAgIEZsb2F0UG9pbnQgY2VudGVyKCkgY29uc3QgeyByZXR1cm4g
RmxvYXRQb2ludCh4KCkgKyB3aWR0aCgpIC8gMiwgeSgpICsgaGVpZ2h0KCkgLyAyKTsgfQogCiAg
ICAgdm9pZCBtb3ZlKGNvbnN0IEZsb2F0U2l6ZSYgZGVsdGEpIHsgbV9sb2NhdGlvbiArPSBkZWx0
YTsgfSAKQEAgLTEyNCw3ICsxMTksNiBAQCBwdWJsaWM6CiAgICAgICAgIHsgcmV0dXJuIHB4ID49
IHgoKSAmJiBweCA8PSBtYXhYKCkgJiYgcHkgPj0geSgpICYmIHB5IDw9IG1heFkoKTsgfQogICAg
IGJvb2wgY29udGFpbnMoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpIGNvbnN0IHsgcmV0dXJuIGNv
bnRhaW5zKHBvaW50LngoKSwgcG9pbnQueSgpKTsgfQogCi0KICAgICB2b2lkIGluZmxhdGVYKGZs
b2F0IGR4KSB7CiAgICAgICAgIG1fbG9jYXRpb24uc2V0WChtX2xvY2F0aW9uLngoKSAtIGR4KTsK
ICAgICAgICAgbV9zaXplLnNldFdpZHRoKG1fc2l6ZS53aWR0aCgpICsgZHggKyBkeCk7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbnRSZWN0LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW50UmVjdC5oCShyZXZpc2lvbiA3
NzI4NikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ludFJlY3QuaAkod29y
a2luZyBjb3B5KQpAQCAtMTAzLDkgKzEwMyw2IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgaXNFbXB0
eSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZS5pc0VtcHR5KCk7IH0KIAotICAgIGludCByaWdodCgp
IGNvbnN0IHsgcmV0dXJuIHgoKSArIHdpZHRoKCk7IH0KLSAgICBpbnQgYm90dG9tKCkgY29uc3Qg
eyByZXR1cm4geSgpICsgaGVpZ2h0KCk7IH0KLQogICAgIC8vIE5PVEU6IFRoZSByZXN1bHQgaXMg
cm91bmRlZCB0byBpbnRlZ2VyIHZhbHVlcywgYW5kIHRodXMgbWF5IGJlIG5vdCB0aGUgZXhhY3QK
ICAgICAvLyBjZW50ZXIgcG9pbnQuCiAgICAgSW50UG9pbnQgY2VudGVyKCkgY29uc3QgeyByZXR1
cm4gSW50UG9pbnQoeCgpICsgd2lkdGgoKSAvIDIsIHkoKSArIGhlaWdodCgpIC8gMik7IH0KSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fp
cm8uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nh
aXJvL0ltYWdlQnVmZmVyQ2Fpcm8uY3BwCShyZXZpc2lvbiA3NzI4NikKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm8uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xNzMsNyArMTczLDcgQEAgUGFzc1JlZlB0cjxCeXRlQXJyYXk+IGdldEltYWdl
RGF0YShjb25zdAogICAgICAgICBkZXN0eCA9IC1vcmlnaW54OwogICAgICAgICBvcmlnaW54ID0g
MDsKICAgICB9Ci0gICAgaW50IGVuZHggPSByZWN0LnJpZ2h0KCk7CisgICAgaW50IGVuZHggPSBy
ZWN0Lm1heFgoKTsKICAgICBpZiAoZW5keCA+IHNpemUud2lkdGgoKSkKICAgICAgICAgZW5keCA9
IHNpemUud2lkdGgoKTsKICAgICBpbnQgbnVtQ29sdW1ucyA9IGVuZHggLSBvcmlnaW54OwpAQCAt
MTg0LDcgKzE4NCw3IEBAIFBhc3NSZWZQdHI8Qnl0ZUFycmF5PiBnZXRJbWFnZURhdGEoY29uc3QK
ICAgICAgICAgZGVzdHkgPSAtb3JpZ2lueTsKICAgICAgICAgb3JpZ2lueSA9IDA7CiAgICAgfQot
ICAgIGludCBlbmR5ID0gcmVjdC5ib3R0b20oKTsKKyAgICBpbnQgZW5keSA9IHJlY3QubWF4WSgp
OwogICAgIGlmIChlbmR5ID4gc2l6ZS5oZWlnaHQoKSkKICAgICAgICAgZW5keSA9IHNpemUuaGVp
Z2h0KCk7CiAgICAgaW50IG51bVJvd3MgPSBlbmR5IC0gb3JpZ2lueTsKQEAgLTIzOSw5ICsyMzks
OSBAQCB2b2lkIHB1dEltYWdlRGF0YShCeXRlQXJyYXkqJiBzb3VyY2UsIGNvCiAgICAgQVNTRVJU
KGRlc3R4ID49IDApOwogICAgIEFTU0VSVChkZXN0eCA8IHNpemUud2lkdGgoKSk7CiAgICAgQVNT
RVJUKG9yaWdpbnggPj0gMCk7Ci0gICAgQVNTRVJUKG9yaWdpbnggPD0gc291cmNlUmVjdC5yaWdo
dCgpKTsKKyAgICBBU1NFUlQob3JpZ2lueCA8PSBzb3VyY2VSZWN0Lm1heFgoKSk7CiAKLSAgICBp
bnQgZW5keCA9IGRlc3RQb2ludC54KCkgKyBzb3VyY2VSZWN0LnJpZ2h0KCk7CisgICAgaW50IGVu
ZHggPSBkZXN0UG9pbnQueCgpICsgc291cmNlUmVjdC5tYXhYKCk7CiAgICAgQVNTRVJUKGVuZHgg
PD0gc2l6ZS53aWR0aCgpKTsKIAogICAgIGludCBudW1Db2x1bW5zID0gZW5keCAtIGRlc3R4OwpA
QCAtMjUxLDkgKzI1MSw5IEBAIHZvaWQgcHV0SW1hZ2VEYXRhKEJ5dGVBcnJheSomIHNvdXJjZSwg
Y28KICAgICBBU1NFUlQoZGVzdHkgPj0gMCk7CiAgICAgQVNTRVJUKGRlc3R5IDwgc2l6ZS5oZWln
aHQoKSk7CiAgICAgQVNTRVJUKG9yaWdpbnkgPj0gMCk7Ci0gICAgQVNTRVJUKG9yaWdpbnkgPD0g
c291cmNlUmVjdC5ib3R0b20oKSk7CisgICAgQVNTRVJUKG9yaWdpbnkgPD0gc291cmNlUmVjdC5t
YXhZKCkpOwogCi0gICAgaW50IGVuZHkgPSBkZXN0UG9pbnQueSgpICsgc291cmNlUmVjdC5ib3R0
b20oKTsKKyAgICBpbnQgZW5keSA9IGRlc3RQb2ludC55KCkgKyBzb3VyY2VSZWN0Lm1heFkoKTsK
ICAgICBBU1NFUlQoZW5keSA8PSBzaXplLmhlaWdodCgpKTsKICAgICBpbnQgbnVtUm93cyA9IGVu
ZHkgLSBkZXN0eTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vR0xFUzJDYW52YXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0dMRVMyQ2FudmFzLmNwcAkocmV2aXNpb24gNzcyODYpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HTEVTMkNhbnZhcy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTMyMiw4ICszMjIsOCBAQCB2b2lkIEdMRVMyQ2FudmFzOjpk
cmF3VGV4dHVyZWRSZWN0KFRleHR1CiAgICAgbV9jb250ZXh0LT51c2VRdWFkVmVydGljZXMoKTsK
ICAgICBtX2NvbnRleHQtPnNldEFjdGl2ZVRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRV
UkUwKTsKIAotICAgIGZvciAoaW50IHkgPSB0aWxlSWR4UmVjdC55KCk7IHkgPD0gdGlsZUlkeFJl
Y3QuYm90dG9tKCk7IHkrKykgewotICAgICAgICBmb3IgKGludCB4ID0gdGlsZUlkeFJlY3QueCgp
OyB4IDw9IHRpbGVJZHhSZWN0LnJpZ2h0KCk7IHgrKykKKyAgICBmb3IgKGludCB5ID0gdGlsZUlk
eFJlY3QueSgpOyB5IDw9IHRpbGVJZHhSZWN0Lm1heFkoKTsgeSsrKSB7CisgICAgICAgIGZvciAo
aW50IHggPSB0aWxlSWR4UmVjdC54KCk7IHggPD0gdGlsZUlkeFJlY3QubWF4WCgpOyB4KyspCiAg
ICAgICAgICAgICBkcmF3VGV4dHVyZWRSZWN0VGlsZSh0ZXh0dXJlLCB0aWxlcy50aWxlSW5kZXgo
eCwgeSksIHNyY1JlY3QsIGRzdFJlY3QsIHRyYW5zZm9ybSwgYWxwaGEpOwogICAgIH0KIH0KSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ltYWdlQnVmZmVyUXQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ltYWdl
QnVmZmVyUXQuY3BwCShyZXZpc2lvbiA3NzI4NikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3F0L0ltYWdlQnVmZmVyUXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODgsNyAr
MTg4LDcgQEAgUGFzc1JlZlB0cjxCeXRlQXJyYXk+IGdldEltYWdlRGF0YShjb25zdAogICAgIFJl
ZlB0cjxCeXRlQXJyYXk+IHJlc3VsdCA9IEJ5dGVBcnJheTo6Y3JlYXRlKHJlY3Qud2lkdGgoKSAq
IHJlY3QuaGVpZ2h0KCkgKiA0KTsKICAgICB1bnNpZ25lZCBjaGFyKiBkYXRhID0gcmVzdWx0LT5k
YXRhKCk7CiAKLSAgICBpZiAocmVjdC54KCkgPCAwIHx8IHJlY3QueSgpIDwgMCB8fCByZWN0LnJp
Z2h0KCkgPiBzaXplLndpZHRoKCkgfHwgcmVjdC5ib3R0b20oKSA+IHNpemUuaGVpZ2h0KCkpCisg
ICAgaWYgKHJlY3QueCgpIDwgMCB8fCByZWN0LnkoKSA8IDAgfHwgcmVjdC5tYXhYKCkgPiBzaXpl
LndpZHRoKCkgfHwgcmVjdC5tYXhZKCkgPiBzaXplLmhlaWdodCgpKQogICAgICAgICBtZW1zZXQo
ZGF0YSwgMCwgcmVzdWx0LT5sZW5ndGgoKSk7CiAKICAgICBpbnQgb3JpZ2lueCA9IHJlY3QueCgp
OwpAQCAtMTk3LDcgKzE5Nyw3IEBAIFBhc3NSZWZQdHI8Qnl0ZUFycmF5PiBnZXRJbWFnZURhdGEo
Y29uc3QKICAgICAgICAgZGVzdHggPSAtb3JpZ2lueDsKICAgICAgICAgb3JpZ2lueCA9IDA7CiAg
ICAgfQotICAgIGludCBlbmR4ID0gcmVjdC5yaWdodCgpOworICAgIGludCBlbmR4ID0gcmVjdC5t
YXhYKCk7CiAgICAgaWYgKGVuZHggPiBzaXplLndpZHRoKCkpCiAgICAgICAgIGVuZHggPSBzaXpl
LndpZHRoKCk7CiAgICAgaW50IG51bUNvbHVtbnMgPSBlbmR4IC0gb3JpZ2lueDsKQEAgLTIwOCw3
ICsyMDgsNyBAQCBQYXNzUmVmUHRyPEJ5dGVBcnJheT4gZ2V0SW1hZ2VEYXRhKGNvbnN0CiAgICAg
ICAgIGRlc3R5ID0gLW9yaWdpbnk7CiAgICAgICAgIG9yaWdpbnkgPSAwOwogICAgIH0KLSAgICBp
bnQgZW5keSA9IHJlY3QuYm90dG9tKCk7CisgICAgaW50IGVuZHkgPSByZWN0Lm1heFkoKTsKICAg
ICBpZiAoZW5keSA+IHNpemUuaGVpZ2h0KCkpCiAgICAgICAgIGVuZHkgPSBzaXplLmhlaWdodCgp
OwogICAgIGludCBudW1Sb3dzID0gZW5keSAtIG9yaWdpbnk7CkBAIC0zMDIsOSArMzAyLDkgQEAg
dm9pZCBwdXRJbWFnZURhdGEoQnl0ZUFycmF5KiYgc291cmNlLCBjbwogICAgIEFTU0VSVChkZXN0
eCA+PSAwKTsKICAgICBBU1NFUlQoZGVzdHggPCBzaXplLndpZHRoKCkpOwogICAgIEFTU0VSVChv
cmlnaW54ID49IDApOwotICAgIEFTU0VSVChvcmlnaW54IDw9IHNvdXJjZVJlY3QucmlnaHQoKSk7
CisgICAgQVNTRVJUKG9yaWdpbnggPD0gc291cmNlUmVjdC5tYXhYKCkpOwogCi0gICAgaW50IGVu
ZHggPSBkZXN0UG9pbnQueCgpICsgc291cmNlUmVjdC5yaWdodCgpOworICAgIGludCBlbmR4ID0g
ZGVzdFBvaW50LngoKSArIHNvdXJjZVJlY3QubWF4WCgpOwogICAgIEFTU0VSVChlbmR4IDw9IHNp
emUud2lkdGgoKSk7CiAKICAgICBpbnQgbnVtQ29sdW1ucyA9IGVuZHggLSBkZXN0eDsKQEAgLTMx
NCw5ICszMTQsOSBAQCB2b2lkIHB1dEltYWdlRGF0YShCeXRlQXJyYXkqJiBzb3VyY2UsIGNvCiAg
ICAgQVNTRVJUKGRlc3R5ID49IDApOwogICAgIEFTU0VSVChkZXN0eSA8IHNpemUuaGVpZ2h0KCkp
OwogICAgIEFTU0VSVChvcmlnaW55ID49IDApOwotICAgIEFTU0VSVChvcmlnaW55IDw9IHNvdXJj
ZVJlY3QuYm90dG9tKCkpOworICAgIEFTU0VSVChvcmlnaW55IDw9IHNvdXJjZVJlY3QubWF4WSgp
KTsKIAotICAgIGludCBlbmR5ID0gZGVzdFBvaW50LnkoKSArIHNvdXJjZVJlY3QuYm90dG9tKCk7
CisgICAgaW50IGVuZHkgPSBkZXN0UG9pbnQueSgpICsgc291cmNlUmVjdC5tYXhZKCk7CiAgICAg
QVNTRVJUKGVuZHkgPD0gc2l6ZS5oZWlnaHQoKSk7CiAgICAgaW50IG51bVJvd3MgPSBlbmR5IC0g
ZGVzdHk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvSW1h
Z2VCdWZmZXJTa2lhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9za2lhL0ltYWdlQnVmZmVyU2tpYS5jcHAJKHJldmlzaW9uIDc3Mjg2KQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9JbWFnZUJ1ZmZlclNraWEuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xNzcsOCArMTc3LDggQEAgUGFzc1JlZlB0cjxCeXRlQXJyYXk+IGdl
dEltYWdlRGF0YShjb25zdAogCiAgICAgaWYgKHJlY3QueCgpIDwgMAogICAgICAgICB8fCByZWN0
LnkoKSA8IDAKLSAgICAgICAgfHwgcmVjdC5yaWdodCgpID4gc2l6ZS53aWR0aCgpCi0gICAgICAg
IHx8IHJlY3QuYm90dG9tKCkgPiBzaXplLmhlaWdodCgpKQorICAgICAgICB8fCByZWN0Lm1heFgo
KSA+IHNpemUud2lkdGgoKQorICAgICAgICB8fCByZWN0Lm1heFkoKSA+IHNpemUuaGVpZ2h0KCkp
CiAgICAgICAgIG1lbXNldChkYXRhLCAwLCByZXN1bHQtPmxlbmd0aCgpKTsKIAogICAgIGludCBv
cmlnaW5YID0gcmVjdC54KCk7CkBAIC0xODcsNyArMTg3LDcgQEAgUGFzc1JlZlB0cjxCeXRlQXJy
YXk+IGdldEltYWdlRGF0YShjb25zdAogICAgICAgICBkZXN0WCA9IC1vcmlnaW5YOwogICAgICAg
ICBvcmlnaW5YID0gMDsKICAgICB9Ci0gICAgaW50IGVuZFggPSByZWN0LnJpZ2h0KCk7CisgICAg
aW50IGVuZFggPSByZWN0Lm1heFgoKTsKICAgICBpZiAoZW5kWCA+IHNpemUud2lkdGgoKSkKICAg
ICAgICAgZW5kWCA9IHNpemUud2lkdGgoKTsKICAgICBpbnQgbnVtQ29sdW1ucyA9IGVuZFggLSBv
cmlnaW5YOwpAQCAtMjAxLDcgKzIwMSw3IEBAIFBhc3NSZWZQdHI8Qnl0ZUFycmF5PiBnZXRJbWFn
ZURhdGEoY29uc3QKICAgICAgICAgZGVzdFkgPSAtb3JpZ2luWTsKICAgICAgICAgb3JpZ2luWSA9
IDA7CiAgICAgfQotICAgIGludCBlbmRZID0gcmVjdC5ib3R0b20oKTsKKyAgICBpbnQgZW5kWSA9
IHJlY3QubWF4WSgpOwogICAgIGlmIChlbmRZID4gc2l6ZS5oZWlnaHQoKSkKICAgICAgICAgZW5k
WSA9IHNpemUuaGVpZ2h0KCk7CiAgICAgaW50IG51bVJvd3MgPSBlbmRZIC0gb3JpZ2luWTsKQEAg
LTI2NSw5ICsyNjUsOSBAQCB2b2lkIHB1dEltYWdlRGF0YShCeXRlQXJyYXkqJiBzb3VyY2UsIGNv
CiAgICAgQVNTRVJUKGRlc3RYID49IDApOwogICAgIEFTU0VSVChkZXN0WCA8IHNpemUud2lkdGgo
KSk7CiAgICAgQVNTRVJUKG9yaWdpblggPj0gMCk7Ci0gICAgQVNTRVJUKG9yaWdpblggPCBzb3Vy
Y2VSZWN0LnJpZ2h0KCkpOworICAgIEFTU0VSVChvcmlnaW5YIDwgc291cmNlUmVjdC5tYXhYKCkp
OwogCi0gICAgaW50IGVuZFggPSBkZXN0UG9pbnQueCgpICsgc291cmNlUmVjdC5yaWdodCgpOwor
ICAgIGludCBlbmRYID0gZGVzdFBvaW50LngoKSArIHNvdXJjZVJlY3QubWF4WCgpOwogICAgIEFT
U0VSVChlbmRYIDw9IHNpemUud2lkdGgoKSk7CiAKICAgICBpbnQgbnVtQ29sdW1ucyA9IGVuZFgg
LSBkZXN0WDsKQEAgLTI3Nyw5ICsyNzcsOSBAQCB2b2lkIHB1dEltYWdlRGF0YShCeXRlQXJyYXkq
JiBzb3VyY2UsIGNvCiAgICAgQVNTRVJUKGRlc3RZID49IDApOwogICAgIEFTU0VSVChkZXN0WSA8
IHNpemUuaGVpZ2h0KCkpOwogICAgIEFTU0VSVChvcmlnaW5ZID49IDApOwotICAgIEFTU0VSVChv
cmlnaW5ZIDwgc291cmNlUmVjdC5ib3R0b20oKSk7CisgICAgQVNTRVJUKG9yaWdpblkgPCBzb3Vy
Y2VSZWN0Lm1heFkoKSk7CiAKLSAgICBpbnQgZW5kWSA9IGRlc3RQb2ludC55KCkgKyBzb3VyY2VS
ZWN0LmJvdHRvbSgpOworICAgIGludCBlbmRZID0gZGVzdFBvaW50LnkoKSArIHNvdXJjZVJlY3Qu
bWF4WSgpOwogICAgIEFTU0VSVChlbmRZIDw9IHNpemUuaGVpZ2h0KCkpOwogICAgIGludCBudW1S
b3dzID0gZW5kWSAtIGRlc3RZOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy93aW5jZS9HcmFwaGljc0NvbnRleHRXaW5DRS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvR3JhcGhpY3NDb250ZXh0V2luQ0UuY3Bw
CShyZXZpc2lvbiA3NzMxMSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dp
bmNlL0dyYXBoaWNzQ29udGV4dFdpbkNFLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjEsNyArNjEs
NyBAQCBzdGF0aWMgaW5saW5lIGludCBzdGFibGVSb3VuZChkb3VibGUgZCkKIC8vIFVubGlrZSBl
bmNsb3NpbmdJbnRSZWN0KCksIHRoaXMgZnVuY3Rpb24gZG9lcyBzdHJpY3Qgcm91bmRpbmcuCiBz
dGF0aWMgaW5saW5lIEludFJlY3Qgcm91bmRSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcikKIHsKLSAg
ICByZXR1cm4gSW50UmVjdChzdGFibGVSb3VuZChyLngoKSksIHN0YWJsZVJvdW5kKHIueSgpKSwg
c3RhYmxlUm91bmQoci5yaWdodCgpKSAtIHN0YWJsZVJvdW5kKHIueCgpKSwgc3RhYmxlUm91bmQo
ci5ib3R0b20oKSkgLSBzdGFibGVSb3VuZChyLnkoKSkpOworICAgIHJldHVybiBJbnRSZWN0KHN0
YWJsZVJvdW5kKHIueCgpKSwgc3RhYmxlUm91bmQoci55KCkpLCBzdGFibGVSb3VuZChyLm1heFgo
KSkgLSBzdGFibGVSb3VuZChyLngoKSksIHN0YWJsZVJvdW5kKHIubWF4WSgpKSAtIHN0YWJsZVJv
dW5kKHIueSgpKSk7CiB9CiAKIC8vIFJvdGF0aW9uIHRyYW5zZm9ybWF0aW9uCkBAIC0xMjgsOCAr
MTI4LDggQEAgdGVtcGxhdGU8Y2xhc3MgVHJhbnNmb3JtLCBjbGFzcyBSZWN0LCBjbAogewogICAg
IFZhbHVlIHhbNF0sIHlbNF07CiAgICAgVmFsdWUgbCwgdCwgciwgYjsKLSAgICByID0gcmVjdC5y
aWdodCgpIC0gMTsKLSAgICBiID0gcmVjdC5ib3R0b20oKSAtIDE7CisgICAgciA9IHJlY3QubWF4
WCgpIC0gMTsKKyAgICBiID0gcmVjdC5tYXhZKCkgLSAxOwogICAgIHRyYW5zZm9ybS5tYXAocmVj
dC54KCksIHJlY3QueSgpLCB4LCB5KTsKICAgICB0cmFuc2Zvcm0ubWFwKHJlY3QueCgpLCBiLCB4
ICsgMSwgeSArIDEpOwogICAgIHRyYW5zZm9ybS5tYXAociwgYiwgeCArIDIsIHkgKyAyKTsKQEAg
LTUwMyw5ICs1MDMsOSBAQCBUcmFuc3BhcmVudExheWVyREM6OlRyYW5zcGFyZW50TGF5ZXJEQyhH
CiAgICAgICAgICAgICBtX3JvdGF0aW9uLm1fcG9zdFNoaWZ0WSAtPSBtX29yaWdSZWN0LnkoKTsK
IAogICAgICAgICAgICAgRmxvYXRQb2ludCB0b3BMZWZ0ID0gbV9kYXRhLT5tX3RyYW5zZm9ybS5t
YXBQb2ludChGbG9hdFBvaW50KHJlY3RCZWZvcmVUcmFuc2Zvcm0tPmxvY2F0aW9uKCkpKTsKLSAg
ICAgICAgICAgIEZsb2F0UG9pbnQgdG9wUmlnaHQocmVjdEJlZm9yZVRyYW5zZm9ybS0+cmlnaHQo
KSAtIDEsIHJlY3RCZWZvcmVUcmFuc2Zvcm0tPnkoKSk7CisgICAgICAgICAgICBGbG9hdFBvaW50
IHRvcFJpZ2h0KHJlY3RCZWZvcmVUcmFuc2Zvcm0tPm1heFgoKSAtIDEsIHJlY3RCZWZvcmVUcmFu
c2Zvcm0tPnkoKSk7CiAgICAgICAgICAgICB0b3BSaWdodCA9IG1fZGF0YS0+bV90cmFuc2Zvcm0u
bWFwUG9pbnQodG9wUmlnaHQpOwotICAgICAgICAgICAgRmxvYXRQb2ludCBib3R0b21MZWZ0KHJl
Y3RCZWZvcmVUcmFuc2Zvcm0tPngoKSwgcmVjdEJlZm9yZVRyYW5zZm9ybS0+Ym90dG9tKCkgLSAx
KTsKKyAgICAgICAgICAgIEZsb2F0UG9pbnQgYm90dG9tTGVmdChyZWN0QmVmb3JlVHJhbnNmb3Jt
LT54KCksIHJlY3RCZWZvcmVUcmFuc2Zvcm0tPm1heFkoKSAtIDEpOwogICAgICAgICAgICAgYm90
dG9tTGVmdCA9IG1fZGF0YS0+bV90cmFuc2Zvcm0ubWFwUG9pbnQoYm90dG9tTGVmdCk7CiAgICAg
ICAgICAgICBGbG9hdFNpemUgc2lkZVRvcCA9IHRvcFJpZ2h0IC0gdG9wTGVmdDsKICAgICAgICAg
ICAgIEZsb2F0U2l6ZSBzaWRlTGVmdCA9IGJvdHRvbUxlZnQgLSB0b3BMZWZ0OwpAQCAtNjU1LDcg
KzY1NSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3UmVjdChjb25zdCBJbnQKICAgICAg
ICAgaWYgKHRyUmVjdC5oZWlnaHQoKSA8PSAwKQogICAgICAgICAgICAgdHJSZWN0LnNldEhlaWdo
dCgxKTsKIAotICAgICAgICBSZWN0YW5nbGUoZGMsIHRyUmVjdC54KCksIHRyUmVjdC55KCksIHRy
UmVjdC5yaWdodCgpLCB0clJlY3QuYm90dG9tKCkpOworICAgICAgICBSZWN0YW5nbGUoZGMsIHRy
UmVjdC54KCksIHRyUmVjdC55KCksIHRyUmVjdC5tYXhYKCksIHRyUmVjdC5tYXhZKCkpOwogICAg
IH0KIAogICAgIFNlbGVjdE9iamVjdChkYywgb2xkUGVuKTsKQEAgLTcyNSw3ICs3MjUsNyBAQCB2
b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0VsbGlwc2UoY29uc3QgCiAgICAgICAgIG9sZFBlbiA9
IFNlbGVjdE9iamVjdChkYywgR2V0U3RvY2tPYmplY3QoTlVMTF9QRU4pKTsKIAogICAgIGlmIChi
cnVzaCB8fCBwZW4pCi0gICAgICAgIEVsbGlwc2UoZGMsIHRyUmVjdC54KCksIHRyUmVjdC55KCks
IHRyUmVjdC5yaWdodCgpLCB0clJlY3QuYm90dG9tKCkpOworICAgICAgICBFbGxpcHNlKGRjLCB0
clJlY3QueCgpLCB0clJlY3QueSgpLCB0clJlY3QubWF4WCgpLCB0clJlY3QubWF4WSgpKTsKIAog
ICAgIFNlbGVjdE9iamVjdChkYywgb2xkUGVuKTsKICAgICBTZWxlY3RPYmplY3QoZGMsIG9sZEJy
dXNoKTsKQEAgLTgzOCw3ICs4MzgsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlQXJj
KGNvbnN0IEluCiAgICAgfQogCiAgICAgSEdESU9CSiBvbGRCcnVzaCA9IFNlbGVjdE9iamVjdChk
YywgR2V0U3RvY2tPYmplY3QoTlVMTF9CUlVTSCkpOwotICAgIEVsbGlwc2UoZGMsIHRyUmVjdC54
KCksIHRyUmVjdC55KCksIHRyUmVjdC5yaWdodCgpLCB0clJlY3QuYm90dG9tKCkpOworICAgIEVs
bGlwc2UoZGMsIHRyUmVjdC54KCksIHRyUmVjdC55KCksIHRyUmVjdC5tYXhYKCksIHRyUmVjdC5t
YXhZKCkpOwogICAgIFNlbGVjdE9iamVjdChkYywgb2xkQnJ1c2gpOwogCiAgICAgaWYgKG5ld0Ns
aXApCkBAIC05NTksOSArOTU5LDkgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXAoY29uc3Qg
RmxvYXRSZQogCiAgICAgT3duUHRyPEhSR04+IGNsaXBSZ24oQ3JlYXRlUmVjdFJnbigwLCAwLCAw
LCAwKSk7CiAgICAgaWYgKEdldENsaXBSZ24obV9kYXRhLT5tX2RjLCBjbGlwUmduLmdldCgpKSA+
IDApCi0gICAgICAgIEludGVyc2VjdENsaXBSZWN0KG1fZGF0YS0+bV9kYywgdHJSZWN0LngoKSwg
dHJSZWN0LnkoKSwgdHJSZWN0LnJpZ2h0KCksIHRyUmVjdC5ib3R0b20oKSk7CisgICAgICAgIElu
dGVyc2VjdENsaXBSZWN0KG1fZGF0YS0+bV9kYywgdHJSZWN0LngoKSwgdHJSZWN0LnkoKSwgdHJS
ZWN0Lm1heFgoKSwgdHJSZWN0Lm1heFkoKSk7CiAgICAgZWxzZSB7Ci0gICAgICAgIGNsaXBSZ24u
c2V0KENyZWF0ZVJlY3RSZ24odHJSZWN0LngoKSwgdHJSZWN0LnkoKSwgdHJSZWN0LnJpZ2h0KCks
IHRyUmVjdC5ib3R0b20oKSkpOworICAgICAgICBjbGlwUmduLnNldChDcmVhdGVSZWN0UmduKHRy
UmVjdC54KCksIHRyUmVjdC55KCksIHRyUmVjdC5tYXhYKCksIHRyUmVjdC5tYXhZKCkpKTsKICAg
ICAgICAgU2VsZWN0Q2xpcFJnbihtX2RhdGEtPm1fZGMsIGNsaXBSZ24uZ2V0KCkpOwogICAgIH0K
IH0KQEAgLTk3Niw3ICs5NzYsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcE91dChjb25z
dCBJbnRSCiAKICAgICBJbnRSZWN0IHRyUmVjdCA9IG1fZGF0YS0+bWFwUmVjdChyZWN0KTsKIAot
ICAgIEV4Y2x1ZGVDbGlwUmVjdChtX2RhdGEtPm1fZGMsIHRyUmVjdC54KCksIHRyUmVjdC55KCks
IHRyUmVjdC5yaWdodCgpLCB0clJlY3QuYm90dG9tKCkpOworICAgIEV4Y2x1ZGVDbGlwUmVjdCht
X2RhdGEtPm1fZGMsIHRyUmVjdC54KCksIHRyUmVjdC55KCksIHRyUmVjdC5tYXhYKCksIHRyUmVj
dC5tYXhZKCkpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ZvY3VzUmluZyhjb25z
dCBQYXRoJiBwYXRoLCBpbnQgd2lkdGgsIGludCBvZmZzZXQsIGNvbnN0IENvbG9yJiBjb2xvcikK
QEAgLTEwOTIsOCArMTA5Miw4IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzdHJva2VSZWN0KGNv
bnN0IEYKICAgICBPd25QdHI8SFBFTj4gcGVuID0gY3JlYXRlUGVuKHN0cm9rZUNvbG9yKCksIHN0
cm9rZVRoaWNrbmVzcygpLCBzdHJva2VTdHlsZSgpKTsKICAgICBIR0RJT0JKIG9sZFBlbiA9IFNl
bGVjdE9iamVjdChkYywgcGVuLmdldCgpKTsKIAotICAgIGludCByaWdodCA9IHRyUmVjdC5yaWdo
dCgpIC0gMTsKLSAgICBpbnQgYm90dG9tID0gdHJSZWN0LmJvdHRvbSgpIC0gMTsKKyAgICBpbnQg
cmlnaHQgPSB0clJlY3QubWF4WCgpIC0gMTsKKyAgICBpbnQgYm90dG9tID0gdHJSZWN0Lm1heFko
KSAtIDE7CiAgICAgY29uc3QgUE9JTlQgaW50UG9pbnRzWzVdID0KICAgICB7CiAgICAgICAgIHsg
dHJSZWN0LngoKSwgdHJSZWN0LnkoKSB9LApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
aW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlRGVjb2Rlci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlRGVjb2Rlci5j
cHAJKHJldmlzaW9uIDc3Mjg2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVj
b2RlcnMvZ2lmL0dJRkltYWdlRGVjb2Rlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyNywxNiAr
MzI3LDE2IEBAIGJvb2wgR0lGSW1hZ2VEZWNvZGVyOjppbml0RnJhbWVCdWZmZXIodW4KICAgICBJ
bnRSZWN0IGZyYW1lUmVjdChmcmFtZVJlYWRlci0+eF9vZmZzZXQsIGZyYW1lUmVhZGVyLT55X29m
ZnNldCwgZnJhbWVSZWFkZXItPndpZHRoLCBmcmFtZVJlYWRlci0+aGVpZ2h0KTsKIAogICAgIC8v
IE1ha2Ugc3VyZSB0aGUgZnJhbWVSZWN0IGRvZXNuJ3QgZXh0ZW5kIG91dHNpZGUgdGhlIGJ1ZmZl
ci4KLSAgICBpZiAoZnJhbWVSZWN0LnJpZ2h0KCkgPiBzaXplKCkud2lkdGgoKSkKKyAgICBpZiAo
ZnJhbWVSZWN0Lm1heFgoKSA+IHNpemUoKS53aWR0aCgpKQogICAgICAgICBmcmFtZVJlY3Quc2V0
V2lkdGgoc2l6ZSgpLndpZHRoKCkgLSBmcmFtZVJlYWRlci0+eF9vZmZzZXQpOwotICAgIGlmIChm
cmFtZVJlY3QuYm90dG9tKCkgPiBzaXplKCkuaGVpZ2h0KCkpCisgICAgaWYgKGZyYW1lUmVjdC5t
YXhZKCkgPiBzaXplKCkuaGVpZ2h0KCkpCiAgICAgICAgIGZyYW1lUmVjdC5zZXRIZWlnaHQoc2l6
ZSgpLmhlaWdodCgpIC0gZnJhbWVSZWFkZXItPnlfb2Zmc2V0KTsKIAogICAgIEltYWdlRnJhbWUq
IGNvbnN0IGJ1ZmZlciA9ICZtX2ZyYW1lQnVmZmVyQ2FjaGVbZnJhbWVJbmRleF07CiAgICAgaW50
IGxlZnQgPSB1cHBlckJvdW5kU2NhbGVkWChmcmFtZVJlY3QueCgpKTsKLSAgICBpbnQgcmlnaHQg
PSBsb3dlckJvdW5kU2NhbGVkWChmcmFtZVJlY3QucmlnaHQoKSwgbGVmdCk7CisgICAgaW50IHJp
Z2h0ID0gbG93ZXJCb3VuZFNjYWxlZFgoZnJhbWVSZWN0Lm1heFgoKSwgbGVmdCk7CiAgICAgaW50
IHRvcCA9IHVwcGVyQm91bmRTY2FsZWRZKGZyYW1lUmVjdC55KCkpOwotICAgIGludCBib3R0b20g
PSBsb3dlckJvdW5kU2NhbGVkWShmcmFtZVJlY3QuYm90dG9tKCksIHRvcCk7CisgICAgaW50IGJv
dHRvbSA9IGxvd2VyQm91bmRTY2FsZWRZKGZyYW1lUmVjdC5tYXhZKCksIHRvcCk7CiAgICAgYnVm
ZmVyLT5zZXRSZWN0KEludFJlY3QobGVmdCwgdG9wLCByaWdodCAtIGxlZnQsIGJvdHRvbSAtIHRv
cCkpOwogICAgIAogICAgIGlmICghZnJhbWVJbmRleCkgewpAQCAtMzc4LDggKzM3OCw4IEBAIGJv
b2wgR0lGSW1hZ2VEZWNvZGVyOjppbml0RnJhbWVCdWZmZXIodW4KICAgICAgICAgICAgICAgLy8g
Q29weSB0aGUgd2hvbGUgcHJldmlvdXMgYnVmZmVyLCB0aGVuIGNsZWFyIGp1c3QgaXRzIGZyYW1l
LgogICAgICAgICAgICAgICBpZiAoIWJ1ZmZlci0+Y29weUJpdG1hcERhdGEoKnByZXZCdWZmZXIp
KQogICAgICAgICAgICAgICAgICAgcmV0dXJuIHNldEZhaWxlZCgpOwotICAgICAgICAgICAgICBm
b3IgKGludCB5ID0gcHJldlJlY3QueSgpOyB5IDwgcHJldlJlY3QuYm90dG9tKCk7ICsreSkgewot
ICAgICAgICAgICAgICAgICAgZm9yIChpbnQgeCA9IHByZXZSZWN0LngoKTsgeCA8IHByZXZSZWN0
LnJpZ2h0KCk7ICsreCkKKyAgICAgICAgICAgICAgZm9yIChpbnQgeSA9IHByZXZSZWN0LnkoKTsg
eSA8IHByZXZSZWN0Lm1heFkoKTsgKyt5KSB7CisgICAgICAgICAgICAgICAgICBmb3IgKGludCB4
ID0gcHJldlJlY3QueCgpOyB4IDwgcHJldlJlY3QubWF4WCgpOyArK3gpCiAgICAgICAgICAgICAg
ICAgICAgICAgYnVmZmVyLT5zZXRSR0JBKHgsIHksIDAsIDAsIDAsIDApOwogICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgIGlmICgocHJldlJlY3Qud2lkdGgoKSA+IDApICYmIChwcmV2UmVj
dC5oZWlnaHQoKSA+IDApKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>80864</attachid>
            <date>2011-02-01 18:00:36 -0800</date>
            <delta_ts>2011-02-01 20:21:52 -0800</delta_ts>
            <desc>Step 2: (Reviewed by Darin, just using bots to check for errors) Remove accessors.</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>35100</size>
            <attacher name="Dave Hyatt">hyatt</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1BvcHVwTWVudUNocm9taXVt
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9Qb3B1
cE1lbnVDaHJvbWl1bS5jcHAJKHJldmlzaW9uIDc3MzIyKQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vY2hyb21pdW0vUG9wdXBNZW51Q2hyb21pdW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
NTAsNyArMzUwLDcgQEAgSW50UmVjdCBQb3B1cENvbnRhaW5lcjo6bGF5b3V0QW5kQ2FsY3VsYQog
ICAgICAgICAvLyBpbnN0ZWFkLgogICAgICAgICBGbG9hdFJlY3Qgc2NyZWVuID0gc2NyZWVuQXZh
aWxhYmxlUmVjdChtX2ZyYW1lVmlldy5nZXQoKSk7CiAgICAgICAgIHdpZGdldFJlY3QgPSBjaHJv
bWVDbGllbnQtPndpbmRvd1RvU2NyZWVuKEludFJlY3QocG9wdXBJbml0aWFsQ29vcmRpbmF0ZSwg
dGFyZ2V0U2l6ZSkpOwotICAgICAgICBpZiAod2lkZ2V0UmVjdC5ib3R0b20oKSA+IHN0YXRpY19j
YXN0PGludD4oc2NyZWVuLmJvdHRvbSgpKSkgeworICAgICAgICBpZiAod2lkZ2V0UmVjdC5tYXhZ
KCkgPiBzdGF0aWNfY2FzdDxpbnQ+KHNjcmVlbi5tYXhZKCkpKSB7CiAgICAgICAgICAgICBpZiAo
d2lkZ2V0UmVjdC55KCkgLSB3aWRnZXRSZWN0LmhlaWdodCgpIC0gdGFyZ2V0Q29udHJvbEhlaWdo
dCA+IDApIHsKICAgICAgICAgICAgICAgICAvLyBUaGVyZSBpcyBlbm91Z2ggcm9vbSB0byBvcGVu
IHVwd2FyZHMuCiAgICAgICAgICAgICAgICAgd2lkZ2V0UmVjdC5tb3ZlKDAsIC0od2lkZ2V0UmVj
dC5oZWlnaHQoKSArIHRhcmdldENvbnRyb2xIZWlnaHQpKTsKQEAgLTM1OCw3ICszNTgsNyBAQCBJ
bnRSZWN0IFBvcHVwQ29udGFpbmVyOjpsYXlvdXRBbmRDYWxjdWxhCiAgICAgICAgICAgICAgICAg
Ly8gRmlndXJlIHdoZXRoZXIgdXB3YXJkcyBvciBkb3dud2FyZHMgaGFzIG1vcmUgcm9vbSBhbmQg
c2V0IHRoZQogICAgICAgICAgICAgICAgIC8vIG1heGltdW0gbnVtYmVyIG9mIGl0ZW1zLgogICAg
ICAgICAgICAgICAgIGludCBzcGFjZUFib3ZlID0gd2lkZ2V0UmVjdC55KCkgLSB0YXJnZXRDb250
cm9sSGVpZ2h0OwotICAgICAgICAgICAgICAgIGludCBzcGFjZUJlbG93ID0gc2NyZWVuLmJvdHRv
bSgpIC0gd2lkZ2V0UmVjdC55KCk7CisgICAgICAgICAgICAgICAgaW50IHNwYWNlQmVsb3cgPSBz
Y3JlZW4ubWF4WSgpIC0gd2lkZ2V0UmVjdC55KCk7CiAgICAgICAgICAgICAgICAgaWYgKHNwYWNl
QWJvdmUgPiBzcGFjZUJlbG93KQogICAgICAgICAgICAgICAgICAgICBtX2xpc3RCb3gtPnNldE1h
eEhlaWdodChzcGFjZUFib3ZlKTsKICAgICAgICAgICAgICAgICBlbHNlCkBAIC0xMTUzLDkgKzEx
NTMsOSBAQCB2b2lkIFBvcHVwTGlzdEJveDo6c2Nyb2xsVG9SZXZlYWxSb3coaW50CiAgICAgaWYg
KHJvd1JlY3QueSgpIDwgc2Nyb2xsWSgpKSB7CiAgICAgICAgIC8vIFJvdyBpcyBhYm92ZSBjdXJy
ZW50IHNjcm9sbCBwb3NpdGlvbiwgc2Nyb2xsIHVwLgogICAgICAgICBTY3JvbGxWaWV3OjpzZXRT
Y3JvbGxQb3NpdGlvbihJbnRQb2ludCgwLCByb3dSZWN0LnkoKSkpOwotICAgIH0gZWxzZSBpZiAo
cm93UmVjdC5ib3R0b20oKSA+IHNjcm9sbFkoKSArIHZpc2libGVIZWlnaHQoKSkgeworICAgIH0g
ZWxzZSBpZiAocm93UmVjdC5tYXhZKCkgPiBzY3JvbGxZKCkgKyB2aXNpYmxlSGVpZ2h0KCkpIHsK
ICAgICAgICAgLy8gUm93IGlzIGJlbG93IGN1cnJlbnQgc2Nyb2xsIHBvc2l0aW9uLCBzY3JvbGwg
ZG93bi4KLSAgICAgICAgU2Nyb2xsVmlldzo6c2V0U2Nyb2xsUG9zaXRpb24oSW50UG9pbnQoMCwg
cm93UmVjdC5ib3R0b20oKSAtIHZpc2libGVIZWlnaHQoKSkpOworICAgICAgICBTY3JvbGxWaWV3
OjpzZXRTY3JvbGxQb3NpdGlvbihJbnRQb2ludCgwLCByb3dSZWN0Lm1heFkoKSAtIHZpc2libGVI
ZWlnaHQoKSkpOwogICAgIH0KIH0KIApAQCAtMTM2Miw3ICsxMzYyLDcgQEAgdm9pZCBQb3B1cExp
c3RCb3g6OmxheW91dCgpCiAgICAgfQogCiAgICAgcmVzaXplKHdpbmRvd1dpZHRoLCB3aW5kb3dI
ZWlnaHQpOwotICAgIHNldENvbnRlbnRzU2l6ZShJbnRTaXplKGNvbnRlbnRXaWR0aCwgZ2V0Um93
Qm91bmRzKG51bUl0ZW1zKCkgLSAxKS5ib3R0b20oKSkpOworICAgIHNldENvbnRlbnRzU2l6ZShJ
bnRTaXplKGNvbnRlbnRXaWR0aCwgZ2V0Um93Qm91bmRzKG51bUl0ZW1zKCkgLSAxKS5tYXhZKCkp
KTsKIAogICAgIGlmIChob3N0V2luZG93KCkpCiAgICAgICAgIHNjcm9sbFRvUmV2ZWFsU2VsZWN0
aW9uKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3Qu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJl
Y3QuaAkocmV2aXNpb24gNzczMjIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9GbG9hdFJlY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMTAyLDExICsxMDIsNiBAQCBwdWJsaWM6
CiAKICAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiBtX3NpemUuaXNFbXB0eSgpOyB9
CiAKLSAgICBmbG9hdCBsZWZ0KCkgY29uc3QgeyByZXR1cm4geCgpOyB9Ci0gICAgZmxvYXQgcmln
aHQoKSBjb25zdCB7IHJldHVybiB4KCkgKyB3aWR0aCgpOyB9Ci0gICAgZmxvYXQgdG9wKCkgY29u
c3QgeyByZXR1cm4geSgpOyB9Ci0gICAgZmxvYXQgYm90dG9tKCkgY29uc3QgeyByZXR1cm4geSgp
ICsgaGVpZ2h0KCk7IH0KLQogICAgIEZsb2F0UG9pbnQgY2VudGVyKCkgY29uc3QgeyByZXR1cm4g
RmxvYXRQb2ludCh4KCkgKyB3aWR0aCgpIC8gMiwgeSgpICsgaGVpZ2h0KCkgLyAyKTsgfQogCiAg
ICAgdm9pZCBtb3ZlKGNvbnN0IEZsb2F0U2l6ZSYgZGVsdGEpIHsgbV9sb2NhdGlvbiArPSBkZWx0
YTsgfSAKQEAgLTEyNCw3ICsxMTksNiBAQCBwdWJsaWM6CiAgICAgICAgIHsgcmV0dXJuIHB4ID49
IHgoKSAmJiBweCA8PSBtYXhYKCkgJiYgcHkgPj0geSgpICYmIHB5IDw9IG1heFkoKTsgfQogICAg
IGJvb2wgY29udGFpbnMoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpIGNvbnN0IHsgcmV0dXJuIGNv
bnRhaW5zKHBvaW50LngoKSwgcG9pbnQueSgpKTsgfQogCi0KICAgICB2b2lkIGluZmxhdGVYKGZs
b2F0IGR4KSB7CiAgICAgICAgIG1fbG9jYXRpb24uc2V0WChtX2xvY2F0aW9uLngoKSAtIGR4KTsK
ICAgICAgICAgbV9zaXplLnNldFdpZHRoKG1fc2l6ZS53aWR0aCgpICsgZHggKyBkeCk7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbnRSZWN0LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW50UmVjdC5oCShyZXZpc2lvbiA3
NzMyMikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ludFJlY3QuaAkod29y
a2luZyBjb3B5KQpAQCAtMTAzLDkgKzEwMyw2IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgaXNFbXB0
eSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZS5pc0VtcHR5KCk7IH0KIAotICAgIGludCByaWdodCgp
IGNvbnN0IHsgcmV0dXJuIHgoKSArIHdpZHRoKCk7IH0KLSAgICBpbnQgYm90dG9tKCkgY29uc3Qg
eyByZXR1cm4geSgpICsgaGVpZ2h0KCk7IH0KLQogICAgIC8vIE5PVEU6IFRoZSByZXN1bHQgaXMg
cm91bmRlZCB0byBpbnRlZ2VyIHZhbHVlcywgYW5kIHRodXMgbWF5IGJlIG5vdCB0aGUgZXhhY3QK
ICAgICAvLyBjZW50ZXIgcG9pbnQuCiAgICAgSW50UG9pbnQgY2VudGVyKCkgY29uc3QgeyByZXR1
cm4gSW50UG9pbnQoeCgpICsgd2lkdGgoKSAvIDIsIHkoKSArIGhlaWdodCgpIC8gMik7IH0KSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fp
cm8uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nh
aXJvL0ltYWdlQnVmZmVyQ2Fpcm8uY3BwCShyZXZpc2lvbiA3NzMyMikKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm8uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xNzMsNyArMTczLDcgQEAgUGFzc1JlZlB0cjxCeXRlQXJyYXk+IGdldEltYWdl
RGF0YShjb25zdAogICAgICAgICBkZXN0eCA9IC1vcmlnaW54OwogICAgICAgICBvcmlnaW54ID0g
MDsKICAgICB9Ci0gICAgaW50IGVuZHggPSByZWN0LnJpZ2h0KCk7CisgICAgaW50IGVuZHggPSBy
ZWN0Lm1heFgoKTsKICAgICBpZiAoZW5keCA+IHNpemUud2lkdGgoKSkKICAgICAgICAgZW5keCA9
IHNpemUud2lkdGgoKTsKICAgICBpbnQgbnVtQ29sdW1ucyA9IGVuZHggLSBvcmlnaW54OwpAQCAt
MTg0LDcgKzE4NCw3IEBAIFBhc3NSZWZQdHI8Qnl0ZUFycmF5PiBnZXRJbWFnZURhdGEoY29uc3QK
ICAgICAgICAgZGVzdHkgPSAtb3JpZ2lueTsKICAgICAgICAgb3JpZ2lueSA9IDA7CiAgICAgfQot
ICAgIGludCBlbmR5ID0gcmVjdC5ib3R0b20oKTsKKyAgICBpbnQgZW5keSA9IHJlY3QubWF4WSgp
OwogICAgIGlmIChlbmR5ID4gc2l6ZS5oZWlnaHQoKSkKICAgICAgICAgZW5keSA9IHNpemUuaGVp
Z2h0KCk7CiAgICAgaW50IG51bVJvd3MgPSBlbmR5IC0gb3JpZ2lueTsKQEAgLTIzOSw5ICsyMzks
OSBAQCB2b2lkIHB1dEltYWdlRGF0YShCeXRlQXJyYXkqJiBzb3VyY2UsIGNvCiAgICAgQVNTRVJU
KGRlc3R4ID49IDApOwogICAgIEFTU0VSVChkZXN0eCA8IHNpemUud2lkdGgoKSk7CiAgICAgQVNT
RVJUKG9yaWdpbnggPj0gMCk7Ci0gICAgQVNTRVJUKG9yaWdpbnggPD0gc291cmNlUmVjdC5yaWdo
dCgpKTsKKyAgICBBU1NFUlQob3JpZ2lueCA8PSBzb3VyY2VSZWN0Lm1heFgoKSk7CiAKLSAgICBp
bnQgZW5keCA9IGRlc3RQb2ludC54KCkgKyBzb3VyY2VSZWN0LnJpZ2h0KCk7CisgICAgaW50IGVu
ZHggPSBkZXN0UG9pbnQueCgpICsgc291cmNlUmVjdC5tYXhYKCk7CiAgICAgQVNTRVJUKGVuZHgg
PD0gc2l6ZS53aWR0aCgpKTsKIAogICAgIGludCBudW1Db2x1bW5zID0gZW5keCAtIGRlc3R4OwpA
QCAtMjUxLDkgKzI1MSw5IEBAIHZvaWQgcHV0SW1hZ2VEYXRhKEJ5dGVBcnJheSomIHNvdXJjZSwg
Y28KICAgICBBU1NFUlQoZGVzdHkgPj0gMCk7CiAgICAgQVNTRVJUKGRlc3R5IDwgc2l6ZS5oZWln
aHQoKSk7CiAgICAgQVNTRVJUKG9yaWdpbnkgPj0gMCk7Ci0gICAgQVNTRVJUKG9yaWdpbnkgPD0g
c291cmNlUmVjdC5ib3R0b20oKSk7CisgICAgQVNTRVJUKG9yaWdpbnkgPD0gc291cmNlUmVjdC5t
YXhZKCkpOwogCi0gICAgaW50IGVuZHkgPSBkZXN0UG9pbnQueSgpICsgc291cmNlUmVjdC5ib3R0
b20oKTsKKyAgICBpbnQgZW5keSA9IGRlc3RQb2ludC55KCkgKyBzb3VyY2VSZWN0Lm1heFkoKTsK
ICAgICBBU1NFUlQoZW5keSA8PSBzaXplLmhlaWdodCgpKTsKICAgICBpbnQgbnVtUm93cyA9IGVu
ZHkgLSBkZXN0eTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vR0xFUzJDYW52YXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0dMRVMyQ2FudmFzLmNwcAkocmV2aXNpb24gNzczMjIpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HTEVTMkNhbnZhcy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTMyMiw4ICszMjIsOCBAQCB2b2lkIEdMRVMyQ2FudmFzOjpk
cmF3VGV4dHVyZWRSZWN0KFRleHR1CiAgICAgbV9jb250ZXh0LT51c2VRdWFkVmVydGljZXMoKTsK
ICAgICBtX2NvbnRleHQtPnNldEFjdGl2ZVRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRV
UkUwKTsKIAotICAgIGZvciAoaW50IHkgPSB0aWxlSWR4UmVjdC55KCk7IHkgPD0gdGlsZUlkeFJl
Y3QuYm90dG9tKCk7IHkrKykgewotICAgICAgICBmb3IgKGludCB4ID0gdGlsZUlkeFJlY3QueCgp
OyB4IDw9IHRpbGVJZHhSZWN0LnJpZ2h0KCk7IHgrKykKKyAgICBmb3IgKGludCB5ID0gdGlsZUlk
eFJlY3QueSgpOyB5IDw9IHRpbGVJZHhSZWN0Lm1heFkoKTsgeSsrKSB7CisgICAgICAgIGZvciAo
aW50IHggPSB0aWxlSWR4UmVjdC54KCk7IHggPD0gdGlsZUlkeFJlY3QubWF4WCgpOyB4KyspCiAg
ICAgICAgICAgICBkcmF3VGV4dHVyZWRSZWN0VGlsZSh0ZXh0dXJlLCB0aWxlcy50aWxlSW5kZXgo
eCwgeSksIHNyY1JlY3QsIGRzdFJlY3QsIHRyYW5zZm9ybSwgYWxwaGEpOwogICAgIH0KIH0KSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVy
ZXJDaHJvbWl1bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcAkocmV2aXNpb24gNzczMjIp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRl
cmVyQ2hyb21pdW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDMsMTMgKzE0MywxMyBAQCB2b2lk
IExheWVyUmVuZGVyZXJDaHJvbWl1bTo6dXNlU2hhZGVyKHVuCiAKIEludFJlY3QgTGF5ZXJSZW5k
ZXJlckNocm9taXVtOjp2ZXJ0aWNhbFNjcm9sbGJhclJlY3QoY29uc3QgSW50UmVjdCYgdmlzaWJs
ZVJlY3QsIGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KQogewotICAgIEludFJlY3QgdmVydGlj
YWxTY3JvbGxiYXIoSW50UG9pbnQoY29udGVudFJlY3QucmlnaHQoKSwgY29udGVudFJlY3QueSgp
KSwgSW50U2l6ZSh2aXNpYmxlUmVjdC53aWR0aCgpIC0gY29udGVudFJlY3Qud2lkdGgoKSwgdmlz
aWJsZVJlY3QuaGVpZ2h0KCkpKTsKKyAgICBJbnRSZWN0IHZlcnRpY2FsU2Nyb2xsYmFyKEludFBv
aW50KGNvbnRlbnRSZWN0Lm1heFgoKSwgY29udGVudFJlY3QueSgpKSwgSW50U2l6ZSh2aXNpYmxl
UmVjdC53aWR0aCgpIC0gY29udGVudFJlY3Qud2lkdGgoKSwgdmlzaWJsZVJlY3QuaGVpZ2h0KCkp
KTsKICAgICByZXR1cm4gdmVydGljYWxTY3JvbGxiYXI7CiB9CiAKIEludFJlY3QgTGF5ZXJSZW5k
ZXJlckNocm9taXVtOjpob3Jpem9udGFsU2Nyb2xsYmFyUmVjdChjb25zdCBJbnRSZWN0JiB2aXNp
YmxlUmVjdCwgY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QpCiB7Ci0gICAgSW50UmVjdCBob3Jp
em9udGFsU2Nyb2xsYmFyKEludFBvaW50KGNvbnRlbnRSZWN0LngoKSwgY29udGVudFJlY3QuYm90
dG9tKCkpLCBJbnRTaXplKHZpc2libGVSZWN0LndpZHRoKCksIHZpc2libGVSZWN0LmhlaWdodCgp
IC0gY29udGVudFJlY3QuaGVpZ2h0KCkpKTsKKyAgICBJbnRSZWN0IGhvcml6b250YWxTY3JvbGxi
YXIoSW50UG9pbnQoY29udGVudFJlY3QueCgpLCBjb250ZW50UmVjdC5tYXhZKCkpLCBJbnRTaXpl
KHZpc2libGVSZWN0LndpZHRoKCksIHZpc2libGVSZWN0LmhlaWdodCgpIC0gY29udGVudFJlY3Qu
aGVpZ2h0KCkpKTsKICAgICByZXR1cm4gaG9yaXpvbnRhbFNjcm9sbGJhcjsKIH0KIApAQCAtNzI0
LDcgKzcyNCw3IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpzZXRTY2lzc29yVG8KICAg
ICAvLyBCdXQsIGlmIHJlbmRlcmluZyB0byBvZmZzY3JlZW4gdGV4dHVyZSwgd2UgcmV2ZXJzZSBv
dXIgc2Vuc2Ugb2YgJ3Vwc2lkZSBkb3duJy4KICAgICBpbnQgc2Npc3Nvclk7CiAgICAgaWYgKG1f
Y3VycmVudFJlbmRlclN1cmZhY2UgPT0gbV9kZWZhdWx0UmVuZGVyU3VyZmFjZSAmJiAhbV9jb21w
b3NpdGVPZmZzY3JlZW4pCi0gICAgICAgIHNjaXNzb3JZID0gbV9jdXJyZW50UmVuZGVyU3VyZmFj
ZS0+bV9jb250ZW50UmVjdC5oZWlnaHQoKSAtIChzY2lzc29yUmVjdC5ib3R0b20oKSAtIG1fY3Vy
cmVudFJlbmRlclN1cmZhY2UtPm1fY29udGVudFJlY3QueSgpKTsKKyAgICAgICAgc2Npc3Nvclkg
PSBtX2N1cnJlbnRSZW5kZXJTdXJmYWNlLT5tX2NvbnRlbnRSZWN0LmhlaWdodCgpIC0gKHNjaXNz
b3JSZWN0Lm1heFkoKSAtIG1fY3VycmVudFJlbmRlclN1cmZhY2UtPm1fY29udGVudFJlY3QueSgp
KTsKICAgICBlbHNlCiAgICAgICAgIHNjaXNzb3JZID0gc2Npc3NvclJlY3QueSgpIC0gbV9jdXJy
ZW50UmVuZGVyU3VyZmFjZS0+bV9jb250ZW50UmVjdC55KCk7CiAgICAgR0xDKG1fY29udGV4dC5n
ZXQoKSwgbV9jb250ZXh0LT5zY2lzc29yKHNjaXNzb3JYLCBzY2lzc29yWSwgc2Npc3NvclJlY3Qu
d2lkdGgoKSwgc2Npc3NvclJlY3QuaGVpZ2h0KCkpKTsKQEAgLTc1MCw5ICs3NTAsOSBAQCBib29s
IExheWVyUmVuZGVyZXJDaHJvbWl1bTo6Y2hlY2tUZXh0dXJlCiB2b2lkIExheWVyUmVuZGVyZXJD
aHJvbWl1bTo6c2V0RHJhd1ZpZXdwb3J0UmVjdChjb25zdCBJbnRSZWN0JiBkcmF3UmVjdCwgYm9v
bCBmbGlwWSkKIHsKICAgICBpZiAoZmxpcFkpCi0gICAgICAgIG1fcHJvamVjdGlvbk1hdHJpeCA9
IG9ydGhvTWF0cml4KGRyYXdSZWN0LngoKSwgZHJhd1JlY3QucmlnaHQoKSwgZHJhd1JlY3QuYm90
dG9tKCksIGRyYXdSZWN0LnkoKSk7CisgICAgICAgIG1fcHJvamVjdGlvbk1hdHJpeCA9IG9ydGhv
TWF0cml4KGRyYXdSZWN0LngoKSwgZHJhd1JlY3QubWF4WCgpLCBkcmF3UmVjdC5tYXhZKCksIGRy
YXdSZWN0LnkoKSk7CiAgICAgZWxzZQotICAgICAgICBtX3Byb2plY3Rpb25NYXRyaXggPSBvcnRo
b01hdHJpeChkcmF3UmVjdC54KCksIGRyYXdSZWN0LnJpZ2h0KCksIGRyYXdSZWN0LnkoKSwgZHJh
d1JlY3QuYm90dG9tKCkpOworICAgICAgICBtX3Byb2plY3Rpb25NYXRyaXggPSBvcnRob01hdHJp
eChkcmF3UmVjdC54KCksIGRyYXdSZWN0Lm1heFgoKSwgZHJhd1JlY3QueSgpLCBkcmF3UmVjdC5t
YXhZKCkpOwogICAgIEdMQyhtX2NvbnRleHQuZ2V0KCksIG1fY29udGV4dC0+dmlld3BvcnQoMCwg
MCwgZHJhd1JlY3Qud2lkdGgoKSwgZHJhd1JlY3QuaGVpZ2h0KCkpKTsKIH0KIApJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJUaWxlckNocm9taXVt
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9MYXllclRpbGVyQ2hyb21pdW0uY3BwCShyZXZpc2lvbiA3NzMyMikKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGlsZXJDaHJvbWl1bS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTE0NSw4ICsxNDUsOCBAQCB2b2lkIExheWVyVGlsZXJDaHJvbWl1
bTo6Y29udGVudFJlY3RUb1RpCiAKICAgICBsZWZ0ID0gbGF5ZXJSZWN0LngoKSAvIG1fdGlsZVNp
emUud2lkdGgoKTsKICAgICB0b3AgPSBsYXllclJlY3QueSgpIC8gbV90aWxlU2l6ZS5oZWlnaHQo
KTsKLSAgICByaWdodCA9IChsYXllclJlY3QucmlnaHQoKSAtIDEpIC8gbV90aWxlU2l6ZS53aWR0
aCgpOwotICAgIGJvdHRvbSA9IChsYXllclJlY3QuYm90dG9tKCkgLSAxKSAvIG1fdGlsZVNpemUu
aGVpZ2h0KCk7CisgICAgcmlnaHQgPSAobGF5ZXJSZWN0Lm1heFgoKSAtIDEpIC8gbV90aWxlU2l6
ZS53aWR0aCgpOworICAgIGJvdHRvbSA9IChsYXllclJlY3QubWF4WSgpIC0gMSkgLyBtX3RpbGVT
aXplLmhlaWdodCgpOwogfQogCiBJbnRSZWN0IExheWVyVGlsZXJDaHJvbWl1bTo6Y29udGVudFJl
Y3RUb0xheWVyUmVjdChjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCkgY29uc3QKQEAgLTQyNyw3
ICs0MjcsNyBAQCB2b2lkIExheWVyVGlsZXJDaHJvbWl1bTo6Z3Jvd0xheWVyVG9Db250CiB7CiAg
ICAgLy8gR3JvdyB0aGUgdGlsZSBhcnJheSB0byBjb250YWluIHRoaXMgY29udGVudCByZWN0Lgog
ICAgIEludFJlY3QgbGF5ZXJSZWN0ID0gY29udGVudFJlY3RUb0xheWVyUmVjdChjb250ZW50UmVj
dCk7Ci0gICAgSW50U2l6ZSBsYXllclNpemUgPSBJbnRTaXplKGxheWVyUmVjdC5yaWdodCgpLCBs
YXllclJlY3QuYm90dG9tKCkpOworICAgIEludFNpemUgbGF5ZXJTaXplID0gSW50U2l6ZShsYXll
clJlY3QubWF4WCgpLCBsYXllclJlY3QubWF4WSgpKTsKIAogICAgIEludFNpemUgbmV3U2l6ZSA9
IGxheWVyU2l6ZS5leHBhbmRlZFRvKG1fbGF5ZXJTaXplKTsKICAgICByZXNpemVMYXllcihuZXdT
aXplKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ltYWdlQnVm
ZmVyUXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3F0L0ltYWdlQnVmZmVyUXQuY3BwCShyZXZpc2lvbiA3NzMyMikKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ltYWdlQnVmZmVyUXQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xODgsNyArMTg4LDcgQEAgUGFzc1JlZlB0cjxCeXRlQXJyYXk+IGdldEltYWdlRGF0YShjb25z
dAogICAgIFJlZlB0cjxCeXRlQXJyYXk+IHJlc3VsdCA9IEJ5dGVBcnJheTo6Y3JlYXRlKHJlY3Qu
d2lkdGgoKSAqIHJlY3QuaGVpZ2h0KCkgKiA0KTsKICAgICB1bnNpZ25lZCBjaGFyKiBkYXRhID0g
cmVzdWx0LT5kYXRhKCk7CiAKLSAgICBpZiAocmVjdC54KCkgPCAwIHx8IHJlY3QueSgpIDwgMCB8
fCByZWN0LnJpZ2h0KCkgPiBzaXplLndpZHRoKCkgfHwgcmVjdC5ib3R0b20oKSA+IHNpemUuaGVp
Z2h0KCkpCisgICAgaWYgKHJlY3QueCgpIDwgMCB8fCByZWN0LnkoKSA8IDAgfHwgcmVjdC5tYXhY
KCkgPiBzaXplLndpZHRoKCkgfHwgcmVjdC5tYXhZKCkgPiBzaXplLmhlaWdodCgpKQogICAgICAg
ICBtZW1zZXQoZGF0YSwgMCwgcmVzdWx0LT5sZW5ndGgoKSk7CiAKICAgICBpbnQgb3JpZ2lueCA9
IHJlY3QueCgpOwpAQCAtMTk3LDcgKzE5Nyw3IEBAIFBhc3NSZWZQdHI8Qnl0ZUFycmF5PiBnZXRJ
bWFnZURhdGEoY29uc3QKICAgICAgICAgZGVzdHggPSAtb3JpZ2lueDsKICAgICAgICAgb3JpZ2lu
eCA9IDA7CiAgICAgfQotICAgIGludCBlbmR4ID0gcmVjdC5yaWdodCgpOworICAgIGludCBlbmR4
ID0gcmVjdC5tYXhYKCk7CiAgICAgaWYgKGVuZHggPiBzaXplLndpZHRoKCkpCiAgICAgICAgIGVu
ZHggPSBzaXplLndpZHRoKCk7CiAgICAgaW50IG51bUNvbHVtbnMgPSBlbmR4IC0gb3JpZ2lueDsK
QEAgLTIwOCw3ICsyMDgsNyBAQCBQYXNzUmVmUHRyPEJ5dGVBcnJheT4gZ2V0SW1hZ2VEYXRhKGNv
bnN0CiAgICAgICAgIGRlc3R5ID0gLW9yaWdpbnk7CiAgICAgICAgIG9yaWdpbnkgPSAwOwogICAg
IH0KLSAgICBpbnQgZW5keSA9IHJlY3QuYm90dG9tKCk7CisgICAgaW50IGVuZHkgPSByZWN0Lm1h
eFkoKTsKICAgICBpZiAoZW5keSA+IHNpemUuaGVpZ2h0KCkpCiAgICAgICAgIGVuZHkgPSBzaXpl
LmhlaWdodCgpOwogICAgIGludCBudW1Sb3dzID0gZW5keSAtIG9yaWdpbnk7CkBAIC0zMDIsOSAr
MzAyLDkgQEAgdm9pZCBwdXRJbWFnZURhdGEoQnl0ZUFycmF5KiYgc291cmNlLCBjbwogICAgIEFT
U0VSVChkZXN0eCA+PSAwKTsKICAgICBBU1NFUlQoZGVzdHggPCBzaXplLndpZHRoKCkpOwogICAg
IEFTU0VSVChvcmlnaW54ID49IDApOwotICAgIEFTU0VSVChvcmlnaW54IDw9IHNvdXJjZVJlY3Qu
cmlnaHQoKSk7CisgICAgQVNTRVJUKG9yaWdpbnggPD0gc291cmNlUmVjdC5tYXhYKCkpOwogCi0g
ICAgaW50IGVuZHggPSBkZXN0UG9pbnQueCgpICsgc291cmNlUmVjdC5yaWdodCgpOworICAgIGlu
dCBlbmR4ID0gZGVzdFBvaW50LngoKSArIHNvdXJjZVJlY3QubWF4WCgpOwogICAgIEFTU0VSVChl
bmR4IDw9IHNpemUud2lkdGgoKSk7CiAKICAgICBpbnQgbnVtQ29sdW1ucyA9IGVuZHggLSBkZXN0
eDsKQEAgLTMxNCw5ICszMTQsOSBAQCB2b2lkIHB1dEltYWdlRGF0YShCeXRlQXJyYXkqJiBzb3Vy
Y2UsIGNvCiAgICAgQVNTRVJUKGRlc3R5ID49IDApOwogICAgIEFTU0VSVChkZXN0eSA8IHNpemUu
aGVpZ2h0KCkpOwogICAgIEFTU0VSVChvcmlnaW55ID49IDApOwotICAgIEFTU0VSVChvcmlnaW55
IDw9IHNvdXJjZVJlY3QuYm90dG9tKCkpOworICAgIEFTU0VSVChvcmlnaW55IDw9IHNvdXJjZVJl
Y3QubWF4WSgpKTsKIAotICAgIGludCBlbmR5ID0gZGVzdFBvaW50LnkoKSArIHNvdXJjZVJlY3Qu
Ym90dG9tKCk7CisgICAgaW50IGVuZHkgPSBkZXN0UG9pbnQueSgpICsgc291cmNlUmVjdC5tYXhZ
KCk7CiAgICAgQVNTRVJUKGVuZHkgPD0gc2l6ZS5oZWlnaHQoKSk7CiAgICAgaW50IG51bVJvd3Mg
PSBlbmR5IC0gZGVzdHk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3NraWEvSW1hZ2VCdWZmZXJTa2lhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9za2lhL0ltYWdlQnVmZmVyU2tpYS5jcHAJKHJldmlzaW9uIDc3MzIy
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9JbWFnZUJ1ZmZlclNr
aWEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzcsOCArMTc3LDggQEAgUGFzc1JlZlB0cjxCeXRl
QXJyYXk+IGdldEltYWdlRGF0YShjb25zdAogCiAgICAgaWYgKHJlY3QueCgpIDwgMAogICAgICAg
ICB8fCByZWN0LnkoKSA8IDAKLSAgICAgICAgfHwgcmVjdC5yaWdodCgpID4gc2l6ZS53aWR0aCgp
Ci0gICAgICAgIHx8IHJlY3QuYm90dG9tKCkgPiBzaXplLmhlaWdodCgpKQorICAgICAgICB8fCBy
ZWN0Lm1heFgoKSA+IHNpemUud2lkdGgoKQorICAgICAgICB8fCByZWN0Lm1heFkoKSA+IHNpemUu
aGVpZ2h0KCkpCiAgICAgICAgIG1lbXNldChkYXRhLCAwLCByZXN1bHQtPmxlbmd0aCgpKTsKIAog
ICAgIGludCBvcmlnaW5YID0gcmVjdC54KCk7CkBAIC0xODcsNyArMTg3LDcgQEAgUGFzc1JlZlB0
cjxCeXRlQXJyYXk+IGdldEltYWdlRGF0YShjb25zdAogICAgICAgICBkZXN0WCA9IC1vcmlnaW5Y
OwogICAgICAgICBvcmlnaW5YID0gMDsKICAgICB9Ci0gICAgaW50IGVuZFggPSByZWN0LnJpZ2h0
KCk7CisgICAgaW50IGVuZFggPSByZWN0Lm1heFgoKTsKICAgICBpZiAoZW5kWCA+IHNpemUud2lk
dGgoKSkKICAgICAgICAgZW5kWCA9IHNpemUud2lkdGgoKTsKICAgICBpbnQgbnVtQ29sdW1ucyA9
IGVuZFggLSBvcmlnaW5YOwpAQCAtMjAxLDcgKzIwMSw3IEBAIFBhc3NSZWZQdHI8Qnl0ZUFycmF5
PiBnZXRJbWFnZURhdGEoY29uc3QKICAgICAgICAgZGVzdFkgPSAtb3JpZ2luWTsKICAgICAgICAg
b3JpZ2luWSA9IDA7CiAgICAgfQotICAgIGludCBlbmRZID0gcmVjdC5ib3R0b20oKTsKKyAgICBp
bnQgZW5kWSA9IHJlY3QubWF4WSgpOwogICAgIGlmIChlbmRZID4gc2l6ZS5oZWlnaHQoKSkKICAg
ICAgICAgZW5kWSA9IHNpemUuaGVpZ2h0KCk7CiAgICAgaW50IG51bVJvd3MgPSBlbmRZIC0gb3Jp
Z2luWTsKQEAgLTI2NSw5ICsyNjUsOSBAQCB2b2lkIHB1dEltYWdlRGF0YShCeXRlQXJyYXkqJiBz
b3VyY2UsIGNvCiAgICAgQVNTRVJUKGRlc3RYID49IDApOwogICAgIEFTU0VSVChkZXN0WCA8IHNp
emUud2lkdGgoKSk7CiAgICAgQVNTRVJUKG9yaWdpblggPj0gMCk7Ci0gICAgQVNTRVJUKG9yaWdp
blggPCBzb3VyY2VSZWN0LnJpZ2h0KCkpOworICAgIEFTU0VSVChvcmlnaW5YIDwgc291cmNlUmVj
dC5tYXhYKCkpOwogCi0gICAgaW50IGVuZFggPSBkZXN0UG9pbnQueCgpICsgc291cmNlUmVjdC5y
aWdodCgpOworICAgIGludCBlbmRYID0gZGVzdFBvaW50LngoKSArIHNvdXJjZVJlY3QubWF4WCgp
OwogICAgIEFTU0VSVChlbmRYIDw9IHNpemUud2lkdGgoKSk7CiAKICAgICBpbnQgbnVtQ29sdW1u
cyA9IGVuZFggLSBkZXN0WDsKQEAgLTI3Nyw5ICsyNzcsOSBAQCB2b2lkIHB1dEltYWdlRGF0YShC
eXRlQXJyYXkqJiBzb3VyY2UsIGNvCiAgICAgQVNTRVJUKGRlc3RZID49IDApOwogICAgIEFTU0VS
VChkZXN0WSA8IHNpemUuaGVpZ2h0KCkpOwogICAgIEFTU0VSVChvcmlnaW5ZID49IDApOwotICAg
IEFTU0VSVChvcmlnaW5ZIDwgc291cmNlUmVjdC5ib3R0b20oKSk7CisgICAgQVNTRVJUKG9yaWdp
blkgPCBzb3VyY2VSZWN0Lm1heFkoKSk7CiAKLSAgICBpbnQgZW5kWSA9IGRlc3RQb2ludC55KCkg
KyBzb3VyY2VSZWN0LmJvdHRvbSgpOworICAgIGludCBlbmRZID0gZGVzdFBvaW50LnkoKSArIHNv
dXJjZVJlY3QubWF4WSgpOwogICAgIEFTU0VSVChlbmRZIDw9IHNpemUuaGVpZ2h0KCkpOwogICAg
IGludCBudW1Sb3dzID0gZW5kWSAtIGRlc3RZOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0V2luLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0V2luLmNw
cAkocmV2aXNpb24gNzczMjIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93
aW4vR3JhcGhpY3NDb250ZXh0V2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU0LDcgKzE1NCw3
IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjpjbGkKIHsKICAgICBpZiAo
IW1faGRjKQogICAgICAgICByZXR1cm47Ci0gICAgSW50ZXJzZWN0Q2xpcFJlY3QobV9oZGMsIGNs
aXBSZWN0LngoKSwgY2xpcFJlY3QueSgpLCBjbGlwUmVjdC5yaWdodCgpLCBjbGlwUmVjdC5ib3R0
b20oKSk7CisgICAgSW50ZXJzZWN0Q2xpcFJlY3QobV9oZGMsIGNsaXBSZWN0LngoKSwgY2xpcFJl
Y3QueSgpLCBjbGlwUmVjdC5tYXhYKCksIGNsaXBSZWN0Lm1heFkoKSk7CiB9CiAKIHZvaWQgR3Jh
cGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjpjbGlwKGNvbnN0IFBhdGgmKQpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ludFJlY3RXaW4uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbnRSZWN0V2luLmNw
cAkocmV2aXNpb24gNzczMjIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93
aW4vSW50UmVjdFdpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4LDcgKzM4LDcgQEAgSW50UmVj
dDo6SW50UmVjdChjb25zdCBSRUNUJiByKQogCiBJbnRSZWN0OjpvcGVyYXRvciBSRUNUKCkgY29u
c3QKIHsKLSAgICBSRUNUIHJlY3QgPSB7IHgoKSwgeSgpLCByaWdodCgpLCBib3R0b20oKSB9Owor
ICAgIFJFQ1QgcmVjdCA9IHsgeCgpLCB5KCksIG1heFgoKSwgbWF4WSgpIH07CiAgICAgcmV0dXJu
IHJlY3Q7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9V
bmlzY3JpYmVDb250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy93aW4vVW5pc2NyaWJlQ29udHJvbGxlci5jcHAJKHJldmlzaW9uIDc3MzIy
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1VuaXNjcmliZUNvbnRy
b2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOTQsOSArMzk0LDkgQEAgYm9vbCBVbmlzY3Jp
YmVDb250cm9sbGVyOjpzaGFwZUFuZFBsYWNlSQogICAgICAgICBGbG9hdFJlY3QgZ2x5cGhCb3Vu
ZHMgPSBmb250RGF0YS0+Ym91bmRzRm9yR2x5cGgoZ2x5cGgpOwogICAgICAgICBnbHlwaEJvdW5k
cy5tb3ZlKG1fZ2x5cGhPcmlnaW4ueCgpLCBtX2dseXBoT3JpZ2luLnkoKSk7CiAgICAgICAgIG1f
bWluR2x5cGhCb3VuZGluZ0JveFggPSBtaW4obV9taW5HbHlwaEJvdW5kaW5nQm94WCwgZ2x5cGhC
b3VuZHMueCgpKTsKLSAgICAgICAgbV9tYXhHbHlwaEJvdW5kaW5nQm94WCA9IG1heChtX21heEds
eXBoQm91bmRpbmdCb3hYLCBnbHlwaEJvdW5kcy5yaWdodCgpKTsKKyAgICAgICAgbV9tYXhHbHlw
aEJvdW5kaW5nQm94WCA9IG1heChtX21heEdseXBoQm91bmRpbmdCb3hYLCBnbHlwaEJvdW5kcy5t
YXhYKCkpOwogICAgICAgICBtX21pbkdseXBoQm91bmRpbmdCb3hZID0gbWluKG1fbWluR2x5cGhC
b3VuZGluZ0JveFksIGdseXBoQm91bmRzLnkoKSk7Ci0gICAgICAgIG1fbWF4R2x5cGhCb3VuZGlu
Z0JveFkgPSBtYXgobV9tYXhHbHlwaEJvdW5kaW5nQm94WSwgZ2x5cGhCb3VuZHMuYm90dG9tKCkp
OworICAgICAgICBtX21heEdseXBoQm91bmRpbmdCb3hZID0gbWF4KG1fbWF4R2x5cGhCb3VuZGlu
Z0JveFksIGdseXBoQm91bmRzLm1heFkoKSk7CiAgICAgICAgIG1fZ2x5cGhPcmlnaW4ubW92ZShh
ZHZhbmNlICsgb2Zmc2V0WCwgLW9mZnNldFkpOwogCiAgICAgICAgIC8vIE11dGF0ZSB0aGUgZ2x5
cGggYXJyYXkgdG8gY29udGFpbiBvdXIgYWx0ZXJlZCBhZHZhbmNlcy4KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL0dyYXBoaWNzQ29udGV4dFdpbkNFLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9HcmFw
aGljc0NvbnRleHRXaW5DRS5jcHAJKHJldmlzaW9uIDc3MzIyKQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvR3JhcGhpY3NDb250ZXh0V2luQ0UuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC02MSw3ICs2MSw3IEBAIHN0YXRpYyBpbmxpbmUgaW50IHN0YWJsZVJvdW5kKGRv
dWJsZSBkKQogLy8gVW5saWtlIGVuY2xvc2luZ0ludFJlY3QoKSwgdGhpcyBmdW5jdGlvbiBkb2Vz
IHN0cmljdCByb3VuZGluZy4KIHN0YXRpYyBpbmxpbmUgSW50UmVjdCByb3VuZFJlY3QoY29uc3Qg
RmxvYXRSZWN0JiByKQogewotICAgIHJldHVybiBJbnRSZWN0KHN0YWJsZVJvdW5kKHIueCgpKSwg
c3RhYmxlUm91bmQoci55KCkpLCBzdGFibGVSb3VuZChyLnJpZ2h0KCkpIC0gc3RhYmxlUm91bmQo
ci54KCkpLCBzdGFibGVSb3VuZChyLmJvdHRvbSgpKSAtIHN0YWJsZVJvdW5kKHIueSgpKSk7Cisg
ICAgcmV0dXJuIEludFJlY3Qoc3RhYmxlUm91bmQoci54KCkpLCBzdGFibGVSb3VuZChyLnkoKSks
IHN0YWJsZVJvdW5kKHIubWF4WCgpKSAtIHN0YWJsZVJvdW5kKHIueCgpKSwgc3RhYmxlUm91bmQo
ci5tYXhZKCkpIC0gc3RhYmxlUm91bmQoci55KCkpKTsKIH0KIAogLy8gUm90YXRpb24gdHJhbnNm
b3JtYXRpb24KQEAgLTEyOCw4ICsxMjgsOCBAQCB0ZW1wbGF0ZTxjbGFzcyBUcmFuc2Zvcm0sIGNs
YXNzIFJlY3QsIGNsCiB7CiAgICAgVmFsdWUgeFs0XSwgeVs0XTsKICAgICBWYWx1ZSBsLCB0LCBy
LCBiOwotICAgIHIgPSByZWN0LnJpZ2h0KCkgLSAxOwotICAgIGIgPSByZWN0LmJvdHRvbSgpIC0g
MTsKKyAgICByID0gcmVjdC5tYXhYKCkgLSAxOworICAgIGIgPSByZWN0Lm1heFkoKSAtIDE7CiAg
ICAgdHJhbnNmb3JtLm1hcChyZWN0LngoKSwgcmVjdC55KCksIHgsIHkpOwogICAgIHRyYW5zZm9y
bS5tYXAocmVjdC54KCksIGIsIHggKyAxLCB5ICsgMSk7CiAgICAgdHJhbnNmb3JtLm1hcChyLCBi
LCB4ICsgMiwgeSArIDIpOwpAQCAtNTAzLDkgKzUwMyw5IEBAIFRyYW5zcGFyZW50TGF5ZXJEQzo6
VHJhbnNwYXJlbnRMYXllckRDKEcKICAgICAgICAgICAgIG1fcm90YXRpb24ubV9wb3N0U2hpZnRZ
IC09IG1fb3JpZ1JlY3QueSgpOwogCiAgICAgICAgICAgICBGbG9hdFBvaW50IHRvcExlZnQgPSBt
X2RhdGEtPm1fdHJhbnNmb3JtLm1hcFBvaW50KEZsb2F0UG9pbnQocmVjdEJlZm9yZVRyYW5zZm9y
bS0+bG9jYXRpb24oKSkpOwotICAgICAgICAgICAgRmxvYXRQb2ludCB0b3BSaWdodChyZWN0QmVm
b3JlVHJhbnNmb3JtLT5yaWdodCgpIC0gMSwgcmVjdEJlZm9yZVRyYW5zZm9ybS0+eSgpKTsKKyAg
ICAgICAgICAgIEZsb2F0UG9pbnQgdG9wUmlnaHQocmVjdEJlZm9yZVRyYW5zZm9ybS0+bWF4WCgp
IC0gMSwgcmVjdEJlZm9yZVRyYW5zZm9ybS0+eSgpKTsKICAgICAgICAgICAgIHRvcFJpZ2h0ID0g
bV9kYXRhLT5tX3RyYW5zZm9ybS5tYXBQb2ludCh0b3BSaWdodCk7Ci0gICAgICAgICAgICBGbG9h
dFBvaW50IGJvdHRvbUxlZnQocmVjdEJlZm9yZVRyYW5zZm9ybS0+eCgpLCByZWN0QmVmb3JlVHJh
bnNmb3JtLT5ib3R0b20oKSAtIDEpOworICAgICAgICAgICAgRmxvYXRQb2ludCBib3R0b21MZWZ0
KHJlY3RCZWZvcmVUcmFuc2Zvcm0tPngoKSwgcmVjdEJlZm9yZVRyYW5zZm9ybS0+bWF4WSgpIC0g
MSk7CiAgICAgICAgICAgICBib3R0b21MZWZ0ID0gbV9kYXRhLT5tX3RyYW5zZm9ybS5tYXBQb2lu
dChib3R0b21MZWZ0KTsKICAgICAgICAgICAgIEZsb2F0U2l6ZSBzaWRlVG9wID0gdG9wUmlnaHQg
LSB0b3BMZWZ0OwogICAgICAgICAgICAgRmxvYXRTaXplIHNpZGVMZWZ0ID0gYm90dG9tTGVmdCAt
IHRvcExlZnQ7CkBAIC02NTUsNyArNjU1LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdS
ZWN0KGNvbnN0IEludAogICAgICAgICBpZiAodHJSZWN0LmhlaWdodCgpIDw9IDApCiAgICAgICAg
ICAgICB0clJlY3Quc2V0SGVpZ2h0KDEpOwogCi0gICAgICAgIFJlY3RhbmdsZShkYywgdHJSZWN0
LngoKSwgdHJSZWN0LnkoKSwgdHJSZWN0LnJpZ2h0KCksIHRyUmVjdC5ib3R0b20oKSk7CisgICAg
ICAgIFJlY3RhbmdsZShkYywgdHJSZWN0LngoKSwgdHJSZWN0LnkoKSwgdHJSZWN0Lm1heFgoKSwg
dHJSZWN0Lm1heFkoKSk7CiAgICAgfQogCiAgICAgU2VsZWN0T2JqZWN0KGRjLCBvbGRQZW4pOwpA
QCAtNzI1LDcgKzcyNSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3RWxsaXBzZShjb25z
dCAKICAgICAgICAgb2xkUGVuID0gU2VsZWN0T2JqZWN0KGRjLCBHZXRTdG9ja09iamVjdChOVUxM
X1BFTikpOwogCiAgICAgaWYgKGJydXNoIHx8IHBlbikKLSAgICAgICAgRWxsaXBzZShkYywgdHJS
ZWN0LngoKSwgdHJSZWN0LnkoKSwgdHJSZWN0LnJpZ2h0KCksIHRyUmVjdC5ib3R0b20oKSk7Cisg
ICAgICAgIEVsbGlwc2UoZGMsIHRyUmVjdC54KCksIHRyUmVjdC55KCksIHRyUmVjdC5tYXhYKCks
IHRyUmVjdC5tYXhZKCkpOwogCiAgICAgU2VsZWN0T2JqZWN0KGRjLCBvbGRQZW4pOwogICAgIFNl
bGVjdE9iamVjdChkYywgb2xkQnJ1c2gpOwpAQCAtODM4LDcgKzgzOCw3IEBAIHZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpzdHJva2VBcmMoY29uc3QgSW4KICAgICB9CiAKICAgICBIR0RJT0JKIG9sZEJy
dXNoID0gU2VsZWN0T2JqZWN0KGRjLCBHZXRTdG9ja09iamVjdChOVUxMX0JSVVNIKSk7Ci0gICAg
RWxsaXBzZShkYywgdHJSZWN0LngoKSwgdHJSZWN0LnkoKSwgdHJSZWN0LnJpZ2h0KCksIHRyUmVj
dC5ib3R0b20oKSk7CisgICAgRWxsaXBzZShkYywgdHJSZWN0LngoKSwgdHJSZWN0LnkoKSwgdHJS
ZWN0Lm1heFgoKSwgdHJSZWN0Lm1heFkoKSk7CiAgICAgU2VsZWN0T2JqZWN0KGRjLCBvbGRCcnVz
aCk7CiAKICAgICBpZiAobmV3Q2xpcCkKQEAgLTk1OSw5ICs5NTksOSBAQCB2b2lkIEdyYXBoaWNz
Q29udGV4dDo6Y2xpcChjb25zdCBGbG9hdFJlCiAKICAgICBPd25QdHI8SFJHTj4gY2xpcFJnbihD
cmVhdGVSZWN0UmduKDAsIDAsIDAsIDApKTsKICAgICBpZiAoR2V0Q2xpcFJnbihtX2RhdGEtPm1f
ZGMsIGNsaXBSZ24uZ2V0KCkpID4gMCkKLSAgICAgICAgSW50ZXJzZWN0Q2xpcFJlY3QobV9kYXRh
LT5tX2RjLCB0clJlY3QueCgpLCB0clJlY3QueSgpLCB0clJlY3QucmlnaHQoKSwgdHJSZWN0LmJv
dHRvbSgpKTsKKyAgICAgICAgSW50ZXJzZWN0Q2xpcFJlY3QobV9kYXRhLT5tX2RjLCB0clJlY3Qu
eCgpLCB0clJlY3QueSgpLCB0clJlY3QubWF4WCgpLCB0clJlY3QubWF4WSgpKTsKICAgICBlbHNl
IHsKLSAgICAgICAgY2xpcFJnbi5zZXQoQ3JlYXRlUmVjdFJnbih0clJlY3QueCgpLCB0clJlY3Qu
eSgpLCB0clJlY3QucmlnaHQoKSwgdHJSZWN0LmJvdHRvbSgpKSk7CisgICAgICAgIGNsaXBSZ24u
c2V0KENyZWF0ZVJlY3RSZ24odHJSZWN0LngoKSwgdHJSZWN0LnkoKSwgdHJSZWN0Lm1heFgoKSwg
dHJSZWN0Lm1heFkoKSkpOwogICAgICAgICBTZWxlY3RDbGlwUmduKG1fZGF0YS0+bV9kYywgY2xp
cFJnbi5nZXQoKSk7CiAgICAgfQogfQpAQCAtOTc2LDcgKzk3Niw3IEBAIHZvaWQgR3JhcGhpY3ND
b250ZXh0OjpjbGlwT3V0KGNvbnN0IEludFIKIAogICAgIEludFJlY3QgdHJSZWN0ID0gbV9kYXRh
LT5tYXBSZWN0KHJlY3QpOwogCi0gICAgRXhjbHVkZUNsaXBSZWN0KG1fZGF0YS0+bV9kYywgdHJS
ZWN0LngoKSwgdHJSZWN0LnkoKSwgdHJSZWN0LnJpZ2h0KCksIHRyUmVjdC5ib3R0b20oKSk7Cisg
ICAgRXhjbHVkZUNsaXBSZWN0KG1fZGF0YS0+bV9kYywgdHJSZWN0LngoKSwgdHJSZWN0LnkoKSwg
dHJSZWN0Lm1heFgoKSwgdHJSZWN0Lm1heFkoKSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0
OjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFBhdGgmIHBhdGgsIGludCB3aWR0aCwgaW50IG9mZnNldCwg
Y29uc3QgQ29sb3ImIGNvbG9yKQpAQCAtMTA5Miw4ICsxMDkyLDggQEAgdm9pZCBHcmFwaGljc0Nv
bnRleHQ6OnN0cm9rZVJlY3QoY29uc3QgRgogICAgIE93blB0cjxIUEVOPiBwZW4gPSBjcmVhdGVQ
ZW4oc3Ryb2tlQ29sb3IoKSwgc3Ryb2tlVGhpY2tuZXNzKCksIHN0cm9rZVN0eWxlKCkpOwogICAg
IEhHRElPQkogb2xkUGVuID0gU2VsZWN0T2JqZWN0KGRjLCBwZW4uZ2V0KCkpOwogCi0gICAgaW50
IHJpZ2h0ID0gdHJSZWN0LnJpZ2h0KCkgLSAxOwotICAgIGludCBib3R0b20gPSB0clJlY3QuYm90
dG9tKCkgLSAxOworICAgIGludCByaWdodCA9IHRyUmVjdC5tYXhYKCkgLSAxOworICAgIGludCBi
b3R0b20gPSB0clJlY3QubWF4WSgpIC0gMTsKICAgICBjb25zdCBQT0lOVCBpbnRQb2ludHNbNV0g
PQogICAgIHsKICAgICAgICAgeyB0clJlY3QueCgpLCB0clJlY3QueSgpIH0sCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VEZWNvZGVyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9n
aWYvR0lGSW1hZ2VEZWNvZGVyLmNwcAkocmV2aXNpb24gNzczMjIpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VEZWNvZGVyLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzI3LDE2ICszMjcsMTYgQEAgYm9vbCBHSUZJbWFnZURlY29kZXI6OmluaXRG
cmFtZUJ1ZmZlcih1bgogICAgIEludFJlY3QgZnJhbWVSZWN0KGZyYW1lUmVhZGVyLT54X29mZnNl
dCwgZnJhbWVSZWFkZXItPnlfb2Zmc2V0LCBmcmFtZVJlYWRlci0+d2lkdGgsIGZyYW1lUmVhZGVy
LT5oZWlnaHQpOwogCiAgICAgLy8gTWFrZSBzdXJlIHRoZSBmcmFtZVJlY3QgZG9lc24ndCBleHRl
bmQgb3V0c2lkZSB0aGUgYnVmZmVyLgotICAgIGlmIChmcmFtZVJlY3QucmlnaHQoKSA+IHNpemUo
KS53aWR0aCgpKQorICAgIGlmIChmcmFtZVJlY3QubWF4WCgpID4gc2l6ZSgpLndpZHRoKCkpCiAg
ICAgICAgIGZyYW1lUmVjdC5zZXRXaWR0aChzaXplKCkud2lkdGgoKSAtIGZyYW1lUmVhZGVyLT54
X29mZnNldCk7Ci0gICAgaWYgKGZyYW1lUmVjdC5ib3R0b20oKSA+IHNpemUoKS5oZWlnaHQoKSkK
KyAgICBpZiAoZnJhbWVSZWN0Lm1heFkoKSA+IHNpemUoKS5oZWlnaHQoKSkKICAgICAgICAgZnJh
bWVSZWN0LnNldEhlaWdodChzaXplKCkuaGVpZ2h0KCkgLSBmcmFtZVJlYWRlci0+eV9vZmZzZXQp
OwogCiAgICAgSW1hZ2VGcmFtZSogY29uc3QgYnVmZmVyID0gJm1fZnJhbWVCdWZmZXJDYWNoZVtm
cmFtZUluZGV4XTsKICAgICBpbnQgbGVmdCA9IHVwcGVyQm91bmRTY2FsZWRYKGZyYW1lUmVjdC54
KCkpOwotICAgIGludCByaWdodCA9IGxvd2VyQm91bmRTY2FsZWRYKGZyYW1lUmVjdC5yaWdodCgp
LCBsZWZ0KTsKKyAgICBpbnQgcmlnaHQgPSBsb3dlckJvdW5kU2NhbGVkWChmcmFtZVJlY3QubWF4
WCgpLCBsZWZ0KTsKICAgICBpbnQgdG9wID0gdXBwZXJCb3VuZFNjYWxlZFkoZnJhbWVSZWN0Lnko
KSk7Ci0gICAgaW50IGJvdHRvbSA9IGxvd2VyQm91bmRTY2FsZWRZKGZyYW1lUmVjdC5ib3R0b20o
KSwgdG9wKTsKKyAgICBpbnQgYm90dG9tID0gbG93ZXJCb3VuZFNjYWxlZFkoZnJhbWVSZWN0Lm1h
eFkoKSwgdG9wKTsKICAgICBidWZmZXItPnNldFJlY3QoSW50UmVjdChsZWZ0LCB0b3AsIHJpZ2h0
IC0gbGVmdCwgYm90dG9tIC0gdG9wKSk7CiAgICAgCiAgICAgaWYgKCFmcmFtZUluZGV4KSB7CkBA
IC0zNzgsOCArMzc4LDggQEAgYm9vbCBHSUZJbWFnZURlY29kZXI6OmluaXRGcmFtZUJ1ZmZlcih1
bgogICAgICAgICAgICAgICAvLyBDb3B5IHRoZSB3aG9sZSBwcmV2aW91cyBidWZmZXIsIHRoZW4g
Y2xlYXIganVzdCBpdHMgZnJhbWUuCiAgICAgICAgICAgICAgIGlmICghYnVmZmVyLT5jb3B5Qml0
bWFwRGF0YSgqcHJldkJ1ZmZlcikpCiAgICAgICAgICAgICAgICAgICByZXR1cm4gc2V0RmFpbGVk
KCk7Ci0gICAgICAgICAgICAgIGZvciAoaW50IHkgPSBwcmV2UmVjdC55KCk7IHkgPCBwcmV2UmVj
dC5ib3R0b20oKTsgKyt5KSB7Ci0gICAgICAgICAgICAgICAgICBmb3IgKGludCB4ID0gcHJldlJl
Y3QueCgpOyB4IDwgcHJldlJlY3QucmlnaHQoKTsgKyt4KQorICAgICAgICAgICAgICBmb3IgKGlu
dCB5ID0gcHJldlJlY3QueSgpOyB5IDwgcHJldlJlY3QubWF4WSgpOyArK3kpIHsKKyAgICAgICAg
ICAgICAgICAgIGZvciAoaW50IHggPSBwcmV2UmVjdC54KCk7IHggPCBwcmV2UmVjdC5tYXhYKCk7
ICsreCkKICAgICAgICAgICAgICAgICAgICAgICBidWZmZXItPnNldFJHQkEoeCwgeSwgMCwgMCwg
MCwgMCk7CiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgaWYgKChwcmV2UmVjdC53aWR0
aCgpID4gMCkgJiYgKHByZXZSZWN0LmhlaWdodCgpID4gMCkpCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS93aW4vUG9wdXBNZW51V2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS93aW4vUG9wdXBNZW51V2luLmNwcAkocmV2aXNpb24gNzczMjIpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vUG9wdXBNZW51V2luLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzQ3LDEzICszNDcsMTMgQEAgdm9pZCBQb3B1cE1lbnVXaW46OmNhbGN1bGF0ZVBvc2l0
aW9uQW5kUwogICAgIC8vIEFsd2F5cyBsZWZ0LWFsaWduIGl0ZW1zIGluIHRoZSBwb3B1cC4gIFRo
aXMgbWF0Y2hlcyBwb3B1cCBtZW51cyBvbiB0aGUgbWFjLgogICAgIGludCBwb3B1cFggPSByU2Ny
ZWVuQ29vcmRzLngoKSArIGNsaWVudCgpLT5jbGllbnRJbnNldExlZnQoKTsKIAotICAgIEludFJl
Y3QgcG9wdXBSZWN0KHBvcHVwWCwgclNjcmVlbkNvb3Jkcy5ib3R0b20oKSwgcG9wdXBXaWR0aCwg
cG9wdXBIZWlnaHQpOworICAgIEludFJlY3QgcG9wdXBSZWN0KHBvcHVwWCwgclNjcmVlbkNvb3Jk
cy5tYXhZKCksIHBvcHVwV2lkdGgsIHBvcHVwSGVpZ2h0KTsKIAogICAgIC8vIFRoZSBwb3B1cCBu
ZWVkcyB0byBzdGF5IHdpdGhpbiB0aGUgYm91bmRzIG9mIHRoZSBzY3JlZW4gYW5kIG5vdCBvdmVy
bGFwIGFueSB0b29sYmFycwogICAgIEZsb2F0UmVjdCBzY3JlZW4gPSBzY3JlZW5BdmFpbGFibGVS
ZWN0KHYpOwogCiAgICAgLy8gQ2hlY2sgdGhhdCB3ZSBkb24ndCBnbyBvZmYgdGhlIHNjcmVlbiB2
ZXJ0aWNhbGx5Ci0gICAgaWYgKHBvcHVwUmVjdC5ib3R0b20oKSA+IHNjcmVlbi5oZWlnaHQoKSkg
eworICAgIGlmIChwb3B1cFJlY3QubWF4WSgpID4gc2NyZWVuLmhlaWdodCgpKSB7CiAgICAgICAg
IC8vIFRoZSBwb3B1cCB3aWxsIGdvIG9mZiB0aGUgc2NyZWVuLCBzbyB0cnkgcGxhY2luZyBpdCBh
Ym92ZSB0aGUgY2xpZW50CiAgICAgICAgIGlmIChyU2NyZWVuQ29vcmRzLnkoKSAtIHBvcHVwUmVj
dC5oZWlnaHQoKSA8IDApIHsKICAgICAgICAgICAgIC8vIFRoZSBwb3B1cCB3b24ndCBmaXQgYWJv
dmUsIGVpdGhlciwgc28gcGxhY2UgaXQgd2hlcmVldmVyJ3MgYmlnZ2VyIGFuZCByZXNpemUgaXQg
dG8gZml0CkBAIC02MDIsNyArNjAyLDcgQEAgdm9pZCBQb3B1cE1lbnVXaW46OnBhaW50KGNvbnN0
IEludFJlY3QmIAogICAgIEludFJlY3QgbGlzdFJlY3QgPSBkYW1hZ2VSZWN0OwogICAgIGxpc3RS
ZWN0Lm1vdmUoSW50U2l6ZSgwLCBtX3Njcm9sbE9mZnNldCAqIG1faXRlbUhlaWdodCkpOwogCi0g
ICAgZm9yIChpbnQgeSA9IGxpc3RSZWN0LnkoKTsgeSA8IGxpc3RSZWN0LmJvdHRvbSgpOyB5ICs9
IG1faXRlbUhlaWdodCkgeworICAgIGZvciAoaW50IHkgPSBsaXN0UmVjdC55KCk7IHkgPCBsaXN0
UmVjdC5tYXhZKCk7IHkgKz0gbV9pdGVtSGVpZ2h0KSB7CiAgICAgICAgIGludCBpbmRleCA9IHkg
LyBtX2l0ZW1IZWlnaHQ7CiAKICAgICAgICAgQ29sb3Igb3B0aW9uQmFja2dyb3VuZENvbG9yLCBv
cHRpb25UZXh0Q29sb3I7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL3dpbi9QbHVnaW5W
aWV3V2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL3dpbi9QbHVn
aW5WaWV3V2luLmNwcAkocmV2aXNpb24gNzczMjIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbHVnaW5z
L3dpbi9QbHVnaW5WaWV3V2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQ4LDcgKzQ0OCw3IEBA
IHZvaWQgUGx1Z2luVmlldzo6dXBkYXRlUGx1Z2luV2lkZ2V0KCkKICAgICAgICAgICAgIHJnbiA9
IDo6Q3JlYXRlUmVjdFJnbigwLCAwLCAwLCAwKTsKICAgICAgICAgICAgIDo6U2V0V2luZG93Umdu
KHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCksIHJnbiwgRkFMU0UpOwogICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgcmduID0gOjpDcmVhdGVSZWN0UmduKG1fY2xpcFJlY3QueCgpLCBtX2NsaXBS
ZWN0LnkoKSwgbV9jbGlwUmVjdC5yaWdodCgpLCBtX2NsaXBSZWN0LmJvdHRvbSgpKTsKKyAgICAg
ICAgICAgIHJnbiA9IDo6Q3JlYXRlUmVjdFJnbihtX2NsaXBSZWN0LngoKSwgbV9jbGlwUmVjdC55
KCksIG1fY2xpcFJlY3QubWF4WCgpLCBtX2NsaXBSZWN0Lm1heFkoKSk7CiAgICAgICAgICAgICA6
OlNldFdpbmRvd1JnbihwbGF0Zm9ybVBsdWdpbldpZGdldCgpLCByZ24sIFRSVUUpOwogICAgICAg
ICB9CiAKQEAgLTQ1Niw3ICs0NTYsNyBAQCB2b2lkIFBsdWdpblZpZXc6OnVwZGF0ZVBsdWdpbldp
ZGdldCgpCiAgICAgICAgICAgICA6Ok1vdmVXaW5kb3cocGxhdGZvcm1QbHVnaW5XaWRnZXQoKSwg
bV93aW5kb3dSZWN0LngoKSwgbV93aW5kb3dSZWN0LnkoKSwgbV93aW5kb3dSZWN0LndpZHRoKCks
IG1fd2luZG93UmVjdC5oZWlnaHQoKSwgVFJVRSk7CiAKICAgICAgICAgaWYgKGNsaXBUb1plcm9S
ZWN0KSB7Ci0gICAgICAgICAgICByZ24gPSA6OkNyZWF0ZVJlY3RSZ24obV9jbGlwUmVjdC54KCks
IG1fY2xpcFJlY3QueSgpLCBtX2NsaXBSZWN0LnJpZ2h0KCksIG1fY2xpcFJlY3QuYm90dG9tKCkp
OworICAgICAgICAgICAgcmduID0gOjpDcmVhdGVSZWN0UmduKG1fY2xpcFJlY3QueCgpLCBtX2Ns
aXBSZWN0LnkoKSwgbV9jbGlwUmVjdC5tYXhYKCksIG1fY2xpcFJlY3QubWF4WSgpKTsKICAgICAg
ICAgICAgIDo6U2V0V2luZG93UmduKHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCksIHJnbiwgVFJVRSk7
CiAgICAgICAgIH0KIApAQCAtODk2LDcgKzg5Niw3IEBAIGJvb2wgUGx1Z2luVmlldzo6cGxhdGZv
cm1HZXRWYWx1ZShOUE5WYXIKIHZvaWQgUGx1Z2luVmlldzo6aW52YWxpZGF0ZVJlY3QoY29uc3Qg
SW50UmVjdCYgcmVjdCkKIHsKICAgICBpZiAobV9pc1dpbmRvd2VkKSB7Ci0gICAgICAgIFJFQ1Qg
aW52YWxpZFJlY3QgPSB7IHJlY3QueCgpLCByZWN0LnkoKSwgcmVjdC5yaWdodCgpLCByZWN0LmJv
dHRvbSgpIH07CisgICAgICAgIFJFQ1QgaW52YWxpZFJlY3QgPSB7IHJlY3QueCgpLCByZWN0Lnko
KSwgcmVjdC5tYXhYKCksIHJlY3QubWF4WSgpIH07CiAgICAgICAgIDo6SW52YWxpZGF0ZVJlY3Qo
cGxhdGZvcm1QbHVnaW5XaWRnZXQoKSwgJmludmFsaWRSZWN0LCBmYWxzZSk7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CkBAIC05MTQsNyArOTE0LDcgQEAgdm9pZCBQbHVnaW5WaWV3OjppbnZhbGlk
YXRlUmVjdChOUFJlY3QqIAogICAgIEludFJlY3QgcihyZWN0LT5sZWZ0LCByZWN0LT50b3AsIHJl
Y3QtPnJpZ2h0IC0gcmVjdC0+bGVmdCwgcmVjdC0+Ym90dG9tIC0gcmVjdC0+dG9wKTsKIAogICAg
IGlmIChtX2lzV2luZG93ZWQpIHsKLSAgICAgICAgUkVDVCBpbnZhbGlkUmVjdCA9IHsgci54KCks
IHIueSgpLCByLnJpZ2h0KCksIHIuYm90dG9tKCkgfTsKKyAgICAgICAgUkVDVCBpbnZhbGlkUmVj
dCA9IHsgci54KCksIHIueSgpLCByLm1heFgoKSwgci5tYXhZKCkgfTsKICAgICAgICAgSW52YWxp
ZGF0ZVJlY3QocGxhdGZvcm1QbHVnaW5XaWRnZXQoKSwgJmludmFsaWRSZWN0LCBGQUxTRSk7CiAg
ICAgfSBlbHNlIHsKICAgICAgICAgaWYgKG1fcGx1Z2luLT5xdWlya3MoKS5jb250YWlucyhQbHVn
aW5RdWlya1Rocm90dGxlSW52YWxpZGF0ZSkpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUaGVtZVNhZmFyaS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclRoZW1lU2FmYXJpLmNwcAkocmV2aXNpb24gNzczMjIpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVTYWZhcmkuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC03NjAsMjAgKzc2MCwyMCBAQCB2b2lkIFJlbmRlclRoZW1lU2FmYXJpOjpwYWludE1lbnVM
aXN0QnV0CiAgICAgRmxvYXRSZWN0IHRvcEdyYWRpZW50KHIueCgpLCByLnkoKSwgci53aWR0aCgp
LCByLmhlaWdodCgpIC8gMi4wZik7CiAgICAgc3RydWN0IENHRnVuY3Rpb25DYWxsYmFja3MgdG9w
Q2FsbGJhY2tzID0geyAwLCBUb3BHcmFkaWVudEludGVycG9sYXRlLCBOVUxMIH07CiAgICAgUmV0
YWluUHRyPENHRnVuY3Rpb25SZWY+IHRvcEZ1bmN0aW9uKEFkb3B0Q0YsIENHRnVuY3Rpb25DcmVh
dGUoTlVMTCwgMSwgTlVMTCwgNCwgTlVMTCwgJnRvcENhbGxiYWNrcykpOwotICAgIFJldGFpblB0
cjxDR1NoYWRpbmdSZWY+IHRvcFNoYWRpbmcoQWRvcHRDRiwgQ0dTaGFkaW5nQ3JlYXRlQXhpYWwo
Y3NwYWNlLCBDR1BvaW50TWFrZSh0b3BHcmFkaWVudC54KCksIHRvcEdyYWRpZW50LnkoKSksIENH
UG9pbnRNYWtlKHRvcEdyYWRpZW50LngoKSwgdG9wR3JhZGllbnQuYm90dG9tKCkpLCB0b3BGdW5j
dGlvbi5nZXQoKSwgZmFsc2UsIGZhbHNlKSk7CisgICAgUmV0YWluUHRyPENHU2hhZGluZ1JlZj4g
dG9wU2hhZGluZyhBZG9wdENGLCBDR1NoYWRpbmdDcmVhdGVBeGlhbChjc3BhY2UsIENHUG9pbnRN
YWtlKHRvcEdyYWRpZW50LngoKSwgdG9wR3JhZGllbnQueSgpKSwgQ0dQb2ludE1ha2UodG9wR3Jh
ZGllbnQueCgpLCB0b3BHcmFkaWVudC5tYXhZKCkpLCB0b3BGdW5jdGlvbi5nZXQoKSwgZmFsc2Us
IGZhbHNlKSk7CiAKICAgICBGbG9hdFJlY3QgYm90dG9tR3JhZGllbnQoci54KCkgKyByYWRpdXMs
IHIueSgpICsgci5oZWlnaHQoKSAvIDIuMGYsIHIud2lkdGgoKSAtIDIuMGYgKiByYWRpdXMsIHIu
aGVpZ2h0KCkgLyAyLjBmKTsKICAgICBzdHJ1Y3QgQ0dGdW5jdGlvbkNhbGxiYWNrcyBib3R0b21D
YWxsYmFja3MgPSB7IDAsIEJvdHRvbUdyYWRpZW50SW50ZXJwb2xhdGUsIE5VTEwgfTsKICAgICBS
ZXRhaW5QdHI8Q0dGdW5jdGlvblJlZj4gYm90dG9tRnVuY3Rpb24oQWRvcHRDRiwgQ0dGdW5jdGlv
bkNyZWF0ZShOVUxMLCAxLCBOVUxMLCA0LCBOVUxMLCAmYm90dG9tQ2FsbGJhY2tzKSk7Ci0gICAg
UmV0YWluUHRyPENHU2hhZGluZ1JlZj4gYm90dG9tU2hhZGluZyhBZG9wdENGLCBDR1NoYWRpbmdD
cmVhdGVBeGlhbChjc3BhY2UsIENHUG9pbnRNYWtlKGJvdHRvbUdyYWRpZW50LngoKSwgIGJvdHRv
bUdyYWRpZW50LnkoKSksIENHUG9pbnRNYWtlKGJvdHRvbUdyYWRpZW50LngoKSwgYm90dG9tR3Jh
ZGllbnQuYm90dG9tKCkpLCBib3R0b21GdW5jdGlvbi5nZXQoKSwgZmFsc2UsIGZhbHNlKSk7Cisg
ICAgUmV0YWluUHRyPENHU2hhZGluZ1JlZj4gYm90dG9tU2hhZGluZyhBZG9wdENGLCBDR1NoYWRp
bmdDcmVhdGVBeGlhbChjc3BhY2UsIENHUG9pbnRNYWtlKGJvdHRvbUdyYWRpZW50LngoKSwgIGJv
dHRvbUdyYWRpZW50LnkoKSksIENHUG9pbnRNYWtlKGJvdHRvbUdyYWRpZW50LngoKSwgYm90dG9t
R3JhZGllbnQubWF4WSgpKSwgYm90dG9tRnVuY3Rpb24uZ2V0KCksIGZhbHNlLCBmYWxzZSkpOwog
CiAgICAgc3RydWN0IENHRnVuY3Rpb25DYWxsYmFja3MgbWFpbkNhbGxiYWNrcyA9IHsgMCwgTWFp
bkdyYWRpZW50SW50ZXJwb2xhdGUsIE5VTEwgfTsKICAgICBSZXRhaW5QdHI8Q0dGdW5jdGlvblJl
Zj4gbWFpbkZ1bmN0aW9uKEFkb3B0Q0YsIENHRnVuY3Rpb25DcmVhdGUoTlVMTCwgMSwgTlVMTCwg
NCwgTlVMTCwgJm1haW5DYWxsYmFja3MpKTsKLSAgICBSZXRhaW5QdHI8Q0dTaGFkaW5nUmVmPiBt
YWluU2hhZGluZyhBZG9wdENGLCBDR1NoYWRpbmdDcmVhdGVBeGlhbChjc3BhY2UsIENHUG9pbnRN
YWtlKHIueCgpLCAgci55KCkpLCBDR1BvaW50TWFrZShyLngoKSwgci5ib3R0b20oKSksIG1haW5G
dW5jdGlvbi5nZXQoKSwgZmFsc2UsIGZhbHNlKSk7CisgICAgUmV0YWluUHRyPENHU2hhZGluZ1Jl
Zj4gbWFpblNoYWRpbmcoQWRvcHRDRiwgQ0dTaGFkaW5nQ3JlYXRlQXhpYWwoY3NwYWNlLCBDR1Bv
aW50TWFrZShyLngoKSwgIHIueSgpKSwgQ0dQb2ludE1ha2Uoci54KCksIHIubWF4WSgpKSwgbWFp
bkZ1bmN0aW9uLmdldCgpLCBmYWxzZSwgZmFsc2UpKTsKIAogICAgIFJldGFpblB0cjxDR1NoYWRp
bmdSZWY+IGxlZnRTaGFkaW5nKEFkb3B0Q0YsIENHU2hhZGluZ0NyZWF0ZUF4aWFsKGNzcGFjZSwg
Q0dQb2ludE1ha2Uoci54KCksICByLnkoKSksIENHUG9pbnRNYWtlKHIueCgpICsgcmFkaXVzLCBy
LnkoKSksIG1haW5GdW5jdGlvbi5nZXQoKSwgZmFsc2UsIGZhbHNlKSk7CiAKLSAgICBSZXRhaW5Q
dHI8Q0dTaGFkaW5nUmVmPiByaWdodFNoYWRpbmcoQWRvcHRDRiwgQ0dTaGFkaW5nQ3JlYXRlQXhp
YWwoY3NwYWNlLCBDR1BvaW50TWFrZShyLnJpZ2h0KCksICByLnkoKSksIENHUG9pbnRNYWtlKHIu
cmlnaHQoKSAtIHJhZGl1cywgci55KCkpLCBtYWluRnVuY3Rpb24uZ2V0KCksIGZhbHNlLCBmYWxz
ZSkpOworICAgIFJldGFpblB0cjxDR1NoYWRpbmdSZWY+IHJpZ2h0U2hhZGluZyhBZG9wdENGLCBD
R1NoYWRpbmdDcmVhdGVBeGlhbChjc3BhY2UsIENHUG9pbnRNYWtlKHIubWF4WCgpLCAgci55KCkp
LCBDR1BvaW50TWFrZShyLm1heFgoKSAtIHJhZGl1cywgci55KCkpLCBtYWluRnVuY3Rpb24uZ2V0
KCksIGZhbHNlLCBmYWxzZSkpOwogICAgIHBhaW50SW5mby5jb250ZXh0LT5zYXZlKCk7CiAgICAg
Q0dDb250ZXh0Q2xpcFRvUmVjdChjb250ZXh0LCBib3VuZC5yZWN0KCkpOwogICAgIHBhaW50SW5m
by5jb250ZXh0LT5hZGRSb3VuZGVkUmVjdENsaXAoYm91bmQpOwpAQCAtODE4LDcgKzgxOCw3IEBA
IGJvb2wgUmVuZGVyVGhlbWVTYWZhcmk6OnBhaW50TWVudUxpc3RCdXQKICAgICBmbG9hdCBjZW50
ZXJZID0gYm91bmRzLnkoKSArIGJvdW5kcy5oZWlnaHQoKSAvIDIuMGY7CiAgICAgZmxvYXQgYXJy
b3dIZWlnaHQgPSBiYXNlQXJyb3dIZWlnaHQgKiBmb250U2NhbGU7CiAgICAgZmxvYXQgYXJyb3dX
aWR0aCA9IGJhc2VBcnJvd1dpZHRoICogZm9udFNjYWxlOwotICAgIGZsb2F0IGxlZnRFZGdlID0g
Ym91bmRzLnJpZ2h0KCkgLSBhcnJvd1BhZGRpbmdSaWdodCAtIGFycm93V2lkdGg7CisgICAgZmxv
YXQgbGVmdEVkZ2UgPSBib3VuZHMubWF4WCgpIC0gYXJyb3dQYWRkaW5nUmlnaHQgLSBhcnJvd1dp
ZHRoOwogCiAgICAgaWYgKGJvdW5kcy53aWR0aCgpIDwgYXJyb3dXaWR0aCArIGFycm93UGFkZGlu
Z0xlZnQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTg0OCwxMSArODQ4LDExIEBAIGJvb2wg
UmVuZGVyVGhlbWVTYWZhcmk6OnBhaW50TWVudUxpc3RCdXQKICAgICBwYWludEluZm8uY29udGV4
dC0+c2V0U3Ryb2tlU3R5bGUoU29saWRTdHJva2UpOwogICAgIHBhaW50SW5mby5jb250ZXh0LT5z
ZXRTdHJva2VDb2xvcihsZWZ0U2VwYXJhdG9yQ29sb3IsIENvbG9yU3BhY2VEZXZpY2VSR0IpOwog
ICAgIHBhaW50SW5mby5jb250ZXh0LT5kcmF3TGluZShJbnRQb2ludChsZWZ0RWRnZU9mU2VwYXJh
dG9yLCBib3VuZHMueSgpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW50UG9p
bnQobGVmdEVkZ2VPZlNlcGFyYXRvciwgYm91bmRzLmJvdHRvbSgpKSk7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEludFBvaW50KGxlZnRFZGdlT2ZTZXBhcmF0b3IsIGJvdW5kcy5t
YXhZKCkpKTsKIAogICAgIHBhaW50SW5mby5jb250ZXh0LT5zZXRTdHJva2VDb2xvcihyaWdodFNl
cGFyYXRvckNvbG9yLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKICAgICBwYWludEluZm8uY29udGV4
dC0+ZHJhd0xpbmUoSW50UG9pbnQobGVmdEVkZ2VPZlNlcGFyYXRvciArIHNlcGFyYXRvclNwYWNl
LCBib3VuZHMueSgpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW50UG9pbnQo
bGVmdEVkZ2VPZlNlcGFyYXRvciArIHNlcGFyYXRvclNwYWNlLCBib3VuZHMuYm90dG9tKCkpKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW50UG9pbnQobGVmdEVkZ2VPZlNlcGFy
YXRvciArIHNlcGFyYXRvclNwYWNlLCBib3VuZHMubWF4WSgpKSk7CiAKICAgICBwYWludEluZm8u
Y29udGV4dC0+cmVzdG9yZSgpOwogICAgIHJldHVybiBmYWxzZTsKQEAgLTk3Niw5ICs5NzYsOSBA
QCBib29sIFJlbmRlclRoZW1lU2FmYXJpOjpwYWludFNsaWRlclRyYWNrCiAgICAgUmV0YWluUHRy
PENHRnVuY3Rpb25SZWY+IG1haW5GdW5jdGlvbihBZG9wdENGLCBDR0Z1bmN0aW9uQ3JlYXRlKE5V
TEwsIDEsIE5VTEwsIDQsIE5VTEwsICZtYWluQ2FsbGJhY2tzKSk7CiAgICAgUmV0YWluUHRyPENH
U2hhZGluZ1JlZj4gbWFpblNoYWRpbmc7CiAgICAgaWYgKG8tPnN0eWxlKCktPmFwcGVhcmFuY2Uo
KSA9PSBTbGlkZXJWZXJ0aWNhbFBhcnQpCi0gICAgICAgIG1haW5TaGFkaW5nLmFkb3B0Q0YoQ0dT
aGFkaW5nQ3JlYXRlQXhpYWwoY3NwYWNlLCBDR1BvaW50TWFrZShib3VuZHMucmVjdCgpLngoKSwg
IGJvdW5kcy5yZWN0KCkuYm90dG9tKCkpLCBDR1BvaW50TWFrZShib3VuZHMucmVjdCgpLnJpZ2h0
KCksIGJvdW5kcy5yZWN0KCkuYm90dG9tKCkpLCBtYWluRnVuY3Rpb24uZ2V0KCksIGZhbHNlLCBm
YWxzZSkpOworICAgICAgICBtYWluU2hhZGluZy5hZG9wdENGKENHU2hhZGluZ0NyZWF0ZUF4aWFs
KGNzcGFjZSwgQ0dQb2ludE1ha2UoYm91bmRzLnJlY3QoKS54KCksICBib3VuZHMucmVjdCgpLm1h
eFkoKSksIENHUG9pbnRNYWtlKGJvdW5kcy5yZWN0KCkubWF4WCgpLCBib3VuZHMucmVjdCgpLm1h
eFkoKSksIG1haW5GdW5jdGlvbi5nZXQoKSwgZmFsc2UsIGZhbHNlKSk7CiAgICAgZWxzZQotICAg
ICAgICBtYWluU2hhZGluZy5hZG9wdENGKENHU2hhZGluZ0NyZWF0ZUF4aWFsKGNzcGFjZSwgQ0dQ
b2ludE1ha2UoYm91bmRzLnJlY3QoKS54KCksICBib3VuZHMucmVjdCgpLnkoKSksIENHUG9pbnRN
YWtlKGJvdW5kcy5yZWN0KCkueCgpLCBib3VuZHMucmVjdCgpLmJvdHRvbSgpKSwgbWFpbkZ1bmN0
aW9uLmdldCgpLCBmYWxzZSwgZmFsc2UpKTsKKyAgICAgICAgbWFpblNoYWRpbmcuYWRvcHRDRihD
R1NoYWRpbmdDcmVhdGVBeGlhbChjc3BhY2UsIENHUG9pbnRNYWtlKGJvdW5kcy5yZWN0KCkueCgp
LCAgYm91bmRzLnJlY3QoKS55KCkpLCBDR1BvaW50TWFrZShib3VuZHMucmVjdCgpLngoKSwgYm91
bmRzLnJlY3QoKS5tYXhZKCkpLCBtYWluRnVuY3Rpb24uZ2V0KCksIGZhbHNlLCBmYWxzZSkpOwog
CiAgICAgcGFpbnRJbmZvLmNvbnRleHQtPmFkZFJvdW5kZWRSZWN0Q2xpcChib3VuZHMpOwogICAg
IENHQ29udGV4dERyYXdTaGFkaW5nKGNvbnRleHQsIG1haW5TaGFkaW5nLmdldCgpKTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZVdpbi5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lV2luLmNwcAkocmV2aXNpb24g
NzczMjIpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVXaW4uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC02OTQsNyArNjk0LDcgQEAgYm9vbCBSZW5kZXJUaGVtZVdpbjo6cGFp
bnRJbm5lclNwaW5CdXR0bwogICAgIEludFJlY3QgdXBSZWN0KHIpOwogICAgIHVwUmVjdC5zZXRI
ZWlnaHQoci5oZWlnaHQoKSAvIDIpOwogICAgIEludFJlY3QgZG93blJlY3Qocik7Ci0gICAgZG93
blJlY3Quc2V0WSh1cFJlY3QuYm90dG9tKCkpOworICAgIGRvd25SZWN0LnNldFkodXBSZWN0Lm1h
eFkoKSk7CiAgICAgZG93blJlY3Quc2V0SGVpZ2h0KHIuaGVpZ2h0KCkgLSB1cFJlY3QuaGVpZ2h0
KCkpOwogICAgIGRyYXdDb250cm9sKGkuY29udGV4dCwgbywgc3BpbkJ1dHRvblRoZW1lKCksIGdl
dFRoZW1lRGF0YShvLCBTcGluQnV0dG9uVXApLCB1cFJlY3QpOwogICAgIGRyYXdDb250cm9sKGku
Y29udGV4dCwgbywgc3BpbkJ1dHRvblRoZW1lKCksIGdldFRoZW1lRGF0YShvLCBTcGluQnV0dG9u
RG93biksIGRvd25SZWN0KTsKQEAgLTc4OCw3ICs3ODgsNyBAQCBib29sIFJlbmRlclRoZW1lV2lu
OjpwYWludE1lbnVMaXN0QnV0dG9uCiAgICAgSW50UmVjdCBidXR0b25SZWN0KHIpOwogICAgIGJ1
dHRvblJlY3QuaW5mbGF0ZSgtYm9yZGVyVGhpY2tuZXNzKTsKICAgICBpZiAoby0+c3R5bGUoKS0+
ZGlyZWN0aW9uKCkgPT0gTFRSKQotICAgICAgICBidXR0b25SZWN0LnNldFgoYnV0dG9uUmVjdC5y
aWdodCgpIC0gZHJvcERvd25CdXR0b25XaWR0aCk7CisgICAgICAgIGJ1dHRvblJlY3Quc2V0WChi
dXR0b25SZWN0Lm1heFgoKSAtIGRyb3BEb3duQnV0dG9uV2lkdGgpOwogICAgIGJ1dHRvblJlY3Qu
c2V0V2lkdGgoZHJvcERvd25CdXR0b25XaWR0aCk7CiAKICAgICBpZiAoaXNSdW5uaW5nT25WaXN0
YU9yTGF0ZXIoKSkgewpJbmRleDogU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZp
ZXcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2
aWV3LmNwcAkocmV2aXNpb24gNzczMjIpCisrKyBTb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Vi
a2l0d2Vidmlldy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwMiw3ICs0MDIsNyBAQCBzdGF0aWMg
Z2Jvb2xlYW4gd2Via2l0X3dlYl92aWV3X3BvcHVwX21lCiAgICAgICAgIC8vIElmIHRoZXJlJ3Mg
YSBmb2N1c2VkIGVsbWVudCwgdXNlIGl0cyBsb2NhdGlvbi4KICAgICAgICAgaWYgKE5vZGUqIGZv
Y3VzZWROb2RlID0gZ2V0Rm9jdXNlZE5vZGUoZnJhbWUpKSB7CiAgICAgICAgICAgICBJbnRSZWN0
IGZvY3VzZWROb2RlUmVjdCA9IGZvY3VzZWROb2RlLT5nZXRSZWN0KCk7Ci0gICAgICAgICAgICBs
b2NhdGlvbiA9IEludFBvaW50KHJpZ2h0QWxpZ25lZCA/IGZvY3VzZWROb2RlUmVjdC5yaWdodCgp
IDogZm9jdXNlZE5vZGVSZWN0LngoKSwgZm9jdXNlZE5vZGVSZWN0LmJvdHRvbSgpKTsKKyAgICAg
ICAgICAgIGxvY2F0aW9uID0gSW50UG9pbnQocmlnaHRBbGlnbmVkID8gZm9jdXNlZE5vZGVSZWN0
LnJpZ2h0KCkgOiBmb2N1c2VkTm9kZVJlY3QueCgpLCBmb2N1c2VkTm9kZVJlY3QubWF4WSgpKTsK
ICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICBsb2NhdGlvbiA9IEludFBvaW50KHJpZ2h0QWxp
Z25lZCA/IHZpZXctPmNvbnRlbnRzV2lkdGgoKSAtIGNvbnRleHRNZW51TWFyZ2luIDogY29udGV4
dE1lbnVNYXJnaW4sIGNvbnRleHRNZW51TWFyZ2luKTsKICAgICB9IGVsc2UgewpAQCAtNDQwLDcg
KzQ0MCw3IEBAIHN0YXRpYyBnYm9vbGVhbiB3ZWJraXRfd2ViX3ZpZXdfcG9wdXBfbWUKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRDYXJldFJlY3Qud2lkdGgoKSArIGV4dHJh
V2lkdGhUb0VuZE9mTGluZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRD
YXJldFJlY3QuaGVpZ2h0KCkpOwogCi0gICAgICAgIGxvY2F0aW9uID0gSW50UG9pbnQocmlnaHRB
bGlnbmVkID8gZmlyc3RSZWN0LnJpZ2h0KCkgOiBmaXJzdFJlY3QueCgpLCBmaXJzdFJlY3QuYm90
dG9tKCkpOworICAgICAgICBsb2NhdGlvbiA9IEludFBvaW50KHJpZ2h0QWxpZ25lZCA/IGZpcnN0
UmVjdC5tYXhYKCkgOiBmaXJzdFJlY3QueCgpLCBmaXJzdFJlY3QubWF4WSgpKTsKICAgICB9CiAK
ICAgICAvLyBGSVhNRTogVGhlIEludFNpemUoMCwgLTEpIGlzIGEgaGFjayB0byBnZXQgdGhlIGhp
dC10ZXN0aW5nIHRvIHJlc3VsdCBpbiB0aGUgc2VsZWN0ZWQgZWxlbWVudC4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>80878</attachid>
            <date>2011-02-01 20:21:52 -0800</date>
            <delta_ts>2011-02-01 20:40:12 -0800</delta_ts>
            <desc>Step 2: (Reviewed by Darin, just using bots to check for errors) Remove accessors.</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>40717</size>
            <attacher name="Dave Hyatt">hyatt</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1BvcHVwTWVudUNocm9taXVt
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9Qb3B1
cE1lbnVDaHJvbWl1bS5jcHAJKHJldmlzaW9uIDc3MzQ3KQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vY2hyb21pdW0vUG9wdXBNZW51Q2hyb21pdW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
NTAsNyArMzUwLDcgQEAgSW50UmVjdCBQb3B1cENvbnRhaW5lcjo6bGF5b3V0QW5kQ2FsY3VsYQog
ICAgICAgICAvLyBpbnN0ZWFkLgogICAgICAgICBGbG9hdFJlY3Qgc2NyZWVuID0gc2NyZWVuQXZh
aWxhYmxlUmVjdChtX2ZyYW1lVmlldy5nZXQoKSk7CiAgICAgICAgIHdpZGdldFJlY3QgPSBjaHJv
bWVDbGllbnQtPndpbmRvd1RvU2NyZWVuKEludFJlY3QocG9wdXBJbml0aWFsQ29vcmRpbmF0ZSwg
dGFyZ2V0U2l6ZSkpOwotICAgICAgICBpZiAod2lkZ2V0UmVjdC5ib3R0b20oKSA+IHN0YXRpY19j
YXN0PGludD4oc2NyZWVuLmJvdHRvbSgpKSkgeworICAgICAgICBpZiAod2lkZ2V0UmVjdC5tYXhZ
KCkgPiBzdGF0aWNfY2FzdDxpbnQ+KHNjcmVlbi5tYXhZKCkpKSB7CiAgICAgICAgICAgICBpZiAo
d2lkZ2V0UmVjdC55KCkgLSB3aWRnZXRSZWN0LmhlaWdodCgpIC0gdGFyZ2V0Q29udHJvbEhlaWdo
dCA+IDApIHsKICAgICAgICAgICAgICAgICAvLyBUaGVyZSBpcyBlbm91Z2ggcm9vbSB0byBvcGVu
IHVwd2FyZHMuCiAgICAgICAgICAgICAgICAgd2lkZ2V0UmVjdC5tb3ZlKDAsIC0od2lkZ2V0UmVj
dC5oZWlnaHQoKSArIHRhcmdldENvbnRyb2xIZWlnaHQpKTsKQEAgLTM1OCw3ICszNTgsNyBAQCBJ
bnRSZWN0IFBvcHVwQ29udGFpbmVyOjpsYXlvdXRBbmRDYWxjdWxhCiAgICAgICAgICAgICAgICAg
Ly8gRmlndXJlIHdoZXRoZXIgdXB3YXJkcyBvciBkb3dud2FyZHMgaGFzIG1vcmUgcm9vbSBhbmQg
c2V0IHRoZQogICAgICAgICAgICAgICAgIC8vIG1heGltdW0gbnVtYmVyIG9mIGl0ZW1zLgogICAg
ICAgICAgICAgICAgIGludCBzcGFjZUFib3ZlID0gd2lkZ2V0UmVjdC55KCkgLSB0YXJnZXRDb250
cm9sSGVpZ2h0OwotICAgICAgICAgICAgICAgIGludCBzcGFjZUJlbG93ID0gc2NyZWVuLmJvdHRv
bSgpIC0gd2lkZ2V0UmVjdC55KCk7CisgICAgICAgICAgICAgICAgaW50IHNwYWNlQmVsb3cgPSBz
Y3JlZW4ubWF4WSgpIC0gd2lkZ2V0UmVjdC55KCk7CiAgICAgICAgICAgICAgICAgaWYgKHNwYWNl
QWJvdmUgPiBzcGFjZUJlbG93KQogICAgICAgICAgICAgICAgICAgICBtX2xpc3RCb3gtPnNldE1h
eEhlaWdodChzcGFjZUFib3ZlKTsKICAgICAgICAgICAgICAgICBlbHNlCkBAIC0xMTUzLDkgKzEx
NTMsOSBAQCB2b2lkIFBvcHVwTGlzdEJveDo6c2Nyb2xsVG9SZXZlYWxSb3coaW50CiAgICAgaWYg
KHJvd1JlY3QueSgpIDwgc2Nyb2xsWSgpKSB7CiAgICAgICAgIC8vIFJvdyBpcyBhYm92ZSBjdXJy
ZW50IHNjcm9sbCBwb3NpdGlvbiwgc2Nyb2xsIHVwLgogICAgICAgICBTY3JvbGxWaWV3OjpzZXRT
Y3JvbGxQb3NpdGlvbihJbnRQb2ludCgwLCByb3dSZWN0LnkoKSkpOwotICAgIH0gZWxzZSBpZiAo
cm93UmVjdC5ib3R0b20oKSA+IHNjcm9sbFkoKSArIHZpc2libGVIZWlnaHQoKSkgeworICAgIH0g
ZWxzZSBpZiAocm93UmVjdC5tYXhZKCkgPiBzY3JvbGxZKCkgKyB2aXNpYmxlSGVpZ2h0KCkpIHsK
ICAgICAgICAgLy8gUm93IGlzIGJlbG93IGN1cnJlbnQgc2Nyb2xsIHBvc2l0aW9uLCBzY3JvbGwg
ZG93bi4KLSAgICAgICAgU2Nyb2xsVmlldzo6c2V0U2Nyb2xsUG9zaXRpb24oSW50UG9pbnQoMCwg
cm93UmVjdC5ib3R0b20oKSAtIHZpc2libGVIZWlnaHQoKSkpOworICAgICAgICBTY3JvbGxWaWV3
OjpzZXRTY3JvbGxQb3NpdGlvbihJbnRQb2ludCgwLCByb3dSZWN0Lm1heFkoKSAtIHZpc2libGVI
ZWlnaHQoKSkpOwogICAgIH0KIH0KIApAQCAtMTM2Miw3ICsxMzYyLDcgQEAgdm9pZCBQb3B1cExp
c3RCb3g6OmxheW91dCgpCiAgICAgfQogCiAgICAgcmVzaXplKHdpbmRvd1dpZHRoLCB3aW5kb3dI
ZWlnaHQpOwotICAgIHNldENvbnRlbnRzU2l6ZShJbnRTaXplKGNvbnRlbnRXaWR0aCwgZ2V0Um93
Qm91bmRzKG51bUl0ZW1zKCkgLSAxKS5ib3R0b20oKSkpOworICAgIHNldENvbnRlbnRzU2l6ZShJ
bnRTaXplKGNvbnRlbnRXaWR0aCwgZ2V0Um93Qm91bmRzKG51bUl0ZW1zKCkgLSAxKS5tYXhZKCkp
KTsKIAogICAgIGlmIChob3N0V2luZG93KCkpCiAgICAgICAgIHNjcm9sbFRvUmV2ZWFsU2VsZWN0
aW9uKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3Qu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJl
Y3QuaAkocmV2aXNpb24gNzczNDcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9GbG9hdFJlY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMTAyLDExICsxMDIsNiBAQCBwdWJsaWM6
CiAKICAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiBtX3NpemUuaXNFbXB0eSgpOyB9
CiAKLSAgICBmbG9hdCBsZWZ0KCkgY29uc3QgeyByZXR1cm4geCgpOyB9Ci0gICAgZmxvYXQgcmln
aHQoKSBjb25zdCB7IHJldHVybiB4KCkgKyB3aWR0aCgpOyB9Ci0gICAgZmxvYXQgdG9wKCkgY29u
c3QgeyByZXR1cm4geSgpOyB9Ci0gICAgZmxvYXQgYm90dG9tKCkgY29uc3QgeyByZXR1cm4geSgp
ICsgaGVpZ2h0KCk7IH0KLQogICAgIEZsb2F0UG9pbnQgY2VudGVyKCkgY29uc3QgeyByZXR1cm4g
RmxvYXRQb2ludCh4KCkgKyB3aWR0aCgpIC8gMiwgeSgpICsgaGVpZ2h0KCkgLyAyKTsgfQogCiAg
ICAgdm9pZCBtb3ZlKGNvbnN0IEZsb2F0U2l6ZSYgZGVsdGEpIHsgbV9sb2NhdGlvbiArPSBkZWx0
YTsgfSAKQEAgLTEyNCw3ICsxMTksNiBAQCBwdWJsaWM6CiAgICAgICAgIHsgcmV0dXJuIHB4ID49
IHgoKSAmJiBweCA8PSBtYXhYKCkgJiYgcHkgPj0geSgpICYmIHB5IDw9IG1heFkoKTsgfQogICAg
IGJvb2wgY29udGFpbnMoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpIGNvbnN0IHsgcmV0dXJuIGNv
bnRhaW5zKHBvaW50LngoKSwgcG9pbnQueSgpKTsgfQogCi0KICAgICB2b2lkIGluZmxhdGVYKGZs
b2F0IGR4KSB7CiAgICAgICAgIG1fbG9jYXRpb24uc2V0WChtX2xvY2F0aW9uLngoKSAtIGR4KTsK
ICAgICAgICAgbV9zaXplLnNldFdpZHRoKG1fc2l6ZS53aWR0aCgpICsgZHggKyBkeCk7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbnRSZWN0LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW50UmVjdC5oCShyZXZpc2lvbiA3
NzM0NykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ludFJlY3QuaAkod29y
a2luZyBjb3B5KQpAQCAtMTAzLDkgKzEwMyw2IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgaXNFbXB0
eSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZS5pc0VtcHR5KCk7IH0KIAotICAgIGludCByaWdodCgp
IGNvbnN0IHsgcmV0dXJuIHgoKSArIHdpZHRoKCk7IH0KLSAgICBpbnQgYm90dG9tKCkgY29uc3Qg
eyByZXR1cm4geSgpICsgaGVpZ2h0KCk7IH0KLQogICAgIC8vIE5PVEU6IFRoZSByZXN1bHQgaXMg
cm91bmRlZCB0byBpbnRlZ2VyIHZhbHVlcywgYW5kIHRodXMgbWF5IGJlIG5vdCB0aGUgZXhhY3QK
ICAgICAvLyBjZW50ZXIgcG9pbnQuCiAgICAgSW50UG9pbnQgY2VudGVyKCkgY29uc3QgeyByZXR1
cm4gSW50UG9pbnQoeCgpICsgd2lkdGgoKSAvIDIsIHkoKSArIGhlaWdodCgpIC8gMik7IH0KSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fp
cm8uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nh
aXJvL0ltYWdlQnVmZmVyQ2Fpcm8uY3BwCShyZXZpc2lvbiA3NzM0NykKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm8uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xNzMsNyArMTczLDcgQEAgUGFzc1JlZlB0cjxCeXRlQXJyYXk+IGdldEltYWdl
RGF0YShjb25zdAogICAgICAgICBkZXN0eCA9IC1vcmlnaW54OwogICAgICAgICBvcmlnaW54ID0g
MDsKICAgICB9Ci0gICAgaW50IGVuZHggPSByZWN0LnJpZ2h0KCk7CisgICAgaW50IGVuZHggPSBy
ZWN0Lm1heFgoKTsKICAgICBpZiAoZW5keCA+IHNpemUud2lkdGgoKSkKICAgICAgICAgZW5keCA9
IHNpemUud2lkdGgoKTsKICAgICBpbnQgbnVtQ29sdW1ucyA9IGVuZHggLSBvcmlnaW54OwpAQCAt
MTg0LDcgKzE4NCw3IEBAIFBhc3NSZWZQdHI8Qnl0ZUFycmF5PiBnZXRJbWFnZURhdGEoY29uc3QK
ICAgICAgICAgZGVzdHkgPSAtb3JpZ2lueTsKICAgICAgICAgb3JpZ2lueSA9IDA7CiAgICAgfQot
ICAgIGludCBlbmR5ID0gcmVjdC5ib3R0b20oKTsKKyAgICBpbnQgZW5keSA9IHJlY3QubWF4WSgp
OwogICAgIGlmIChlbmR5ID4gc2l6ZS5oZWlnaHQoKSkKICAgICAgICAgZW5keSA9IHNpemUuaGVp
Z2h0KCk7CiAgICAgaW50IG51bVJvd3MgPSBlbmR5IC0gb3JpZ2lueTsKQEAgLTIzOSw5ICsyMzks
OSBAQCB2b2lkIHB1dEltYWdlRGF0YShCeXRlQXJyYXkqJiBzb3VyY2UsIGNvCiAgICAgQVNTRVJU
KGRlc3R4ID49IDApOwogICAgIEFTU0VSVChkZXN0eCA8IHNpemUud2lkdGgoKSk7CiAgICAgQVNT
RVJUKG9yaWdpbnggPj0gMCk7Ci0gICAgQVNTRVJUKG9yaWdpbnggPD0gc291cmNlUmVjdC5yaWdo
dCgpKTsKKyAgICBBU1NFUlQob3JpZ2lueCA8PSBzb3VyY2VSZWN0Lm1heFgoKSk7CiAKLSAgICBp
bnQgZW5keCA9IGRlc3RQb2ludC54KCkgKyBzb3VyY2VSZWN0LnJpZ2h0KCk7CisgICAgaW50IGVu
ZHggPSBkZXN0UG9pbnQueCgpICsgc291cmNlUmVjdC5tYXhYKCk7CiAgICAgQVNTRVJUKGVuZHgg
PD0gc2l6ZS53aWR0aCgpKTsKIAogICAgIGludCBudW1Db2x1bW5zID0gZW5keCAtIGRlc3R4OwpA
QCAtMjUxLDkgKzI1MSw5IEBAIHZvaWQgcHV0SW1hZ2VEYXRhKEJ5dGVBcnJheSomIHNvdXJjZSwg
Y28KICAgICBBU1NFUlQoZGVzdHkgPj0gMCk7CiAgICAgQVNTRVJUKGRlc3R5IDwgc2l6ZS5oZWln
aHQoKSk7CiAgICAgQVNTRVJUKG9yaWdpbnkgPj0gMCk7Ci0gICAgQVNTRVJUKG9yaWdpbnkgPD0g
c291cmNlUmVjdC5ib3R0b20oKSk7CisgICAgQVNTRVJUKG9yaWdpbnkgPD0gc291cmNlUmVjdC5t
YXhZKCkpOwogCi0gICAgaW50IGVuZHkgPSBkZXN0UG9pbnQueSgpICsgc291cmNlUmVjdC5ib3R0
b20oKTsKKyAgICBpbnQgZW5keSA9IGRlc3RQb2ludC55KCkgKyBzb3VyY2VSZWN0Lm1heFkoKTsK
ICAgICBBU1NFUlQoZW5keSA8PSBzaXplLmhlaWdodCgpKTsKICAgICBpbnQgbnVtUm93cyA9IGVu
ZHkgLSBkZXN0eTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vR0xFUzJDYW52YXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0dMRVMyQ2FudmFzLmNwcAkocmV2aXNpb24gNzczNDcpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HTEVTMkNhbnZhcy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTMyMiw4ICszMjIsOCBAQCB2b2lkIEdMRVMyQ2FudmFzOjpk
cmF3VGV4dHVyZWRSZWN0KFRleHR1CiAgICAgbV9jb250ZXh0LT51c2VRdWFkVmVydGljZXMoKTsK
ICAgICBtX2NvbnRleHQtPnNldEFjdGl2ZVRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRV
UkUwKTsKIAotICAgIGZvciAoaW50IHkgPSB0aWxlSWR4UmVjdC55KCk7IHkgPD0gdGlsZUlkeFJl
Y3QuYm90dG9tKCk7IHkrKykgewotICAgICAgICBmb3IgKGludCB4ID0gdGlsZUlkeFJlY3QueCgp
OyB4IDw9IHRpbGVJZHhSZWN0LnJpZ2h0KCk7IHgrKykKKyAgICBmb3IgKGludCB5ID0gdGlsZUlk
eFJlY3QueSgpOyB5IDw9IHRpbGVJZHhSZWN0Lm1heFkoKTsgeSsrKSB7CisgICAgICAgIGZvciAo
aW50IHggPSB0aWxlSWR4UmVjdC54KCk7IHggPD0gdGlsZUlkeFJlY3QubWF4WCgpOyB4KyspCiAg
ICAgICAgICAgICBkcmF3VGV4dHVyZWRSZWN0VGlsZSh0ZXh0dXJlLCB0aWxlcy50aWxlSW5kZXgo
eCwgeSksIHNyY1JlY3QsIGRzdFJlY3QsIHRyYW5zZm9ybSwgYWxwaGEpOwogICAgIH0KIH0KSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVy
ZXJDaHJvbWl1bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcAkocmV2aXNpb24gNzczNDcp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRl
cmVyQ2hyb21pdW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDMsMTMgKzE0MywxMyBAQCB2b2lk
IExheWVyUmVuZGVyZXJDaHJvbWl1bTo6dXNlU2hhZGVyKHVuCiAKIEludFJlY3QgTGF5ZXJSZW5k
ZXJlckNocm9taXVtOjp2ZXJ0aWNhbFNjcm9sbGJhclJlY3QoY29uc3QgSW50UmVjdCYgdmlzaWJs
ZVJlY3QsIGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KQogewotICAgIEludFJlY3QgdmVydGlj
YWxTY3JvbGxiYXIoSW50UG9pbnQoY29udGVudFJlY3QucmlnaHQoKSwgY29udGVudFJlY3QueSgp
KSwgSW50U2l6ZSh2aXNpYmxlUmVjdC53aWR0aCgpIC0gY29udGVudFJlY3Qud2lkdGgoKSwgdmlz
aWJsZVJlY3QuaGVpZ2h0KCkpKTsKKyAgICBJbnRSZWN0IHZlcnRpY2FsU2Nyb2xsYmFyKEludFBv
aW50KGNvbnRlbnRSZWN0Lm1heFgoKSwgY29udGVudFJlY3QueSgpKSwgSW50U2l6ZSh2aXNpYmxl
UmVjdC53aWR0aCgpIC0gY29udGVudFJlY3Qud2lkdGgoKSwgdmlzaWJsZVJlY3QuaGVpZ2h0KCkp
KTsKICAgICByZXR1cm4gdmVydGljYWxTY3JvbGxiYXI7CiB9CiAKIEludFJlY3QgTGF5ZXJSZW5k
ZXJlckNocm9taXVtOjpob3Jpem9udGFsU2Nyb2xsYmFyUmVjdChjb25zdCBJbnRSZWN0JiB2aXNp
YmxlUmVjdCwgY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QpCiB7Ci0gICAgSW50UmVjdCBob3Jp
em9udGFsU2Nyb2xsYmFyKEludFBvaW50KGNvbnRlbnRSZWN0LngoKSwgY29udGVudFJlY3QuYm90
dG9tKCkpLCBJbnRTaXplKHZpc2libGVSZWN0LndpZHRoKCksIHZpc2libGVSZWN0LmhlaWdodCgp
IC0gY29udGVudFJlY3QuaGVpZ2h0KCkpKTsKKyAgICBJbnRSZWN0IGhvcml6b250YWxTY3JvbGxi
YXIoSW50UG9pbnQoY29udGVudFJlY3QueCgpLCBjb250ZW50UmVjdC5tYXhZKCkpLCBJbnRTaXpl
KHZpc2libGVSZWN0LndpZHRoKCksIHZpc2libGVSZWN0LmhlaWdodCgpIC0gY29udGVudFJlY3Qu
aGVpZ2h0KCkpKTsKICAgICByZXR1cm4gaG9yaXpvbnRhbFNjcm9sbGJhcjsKIH0KIApAQCAtNzI0
LDcgKzcyNCw3IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpzZXRTY2lzc29yVG8KICAg
ICAvLyBCdXQsIGlmIHJlbmRlcmluZyB0byBvZmZzY3JlZW4gdGV4dHVyZSwgd2UgcmV2ZXJzZSBv
dXIgc2Vuc2Ugb2YgJ3Vwc2lkZSBkb3duJy4KICAgICBpbnQgc2Npc3Nvclk7CiAgICAgaWYgKG1f
Y3VycmVudFJlbmRlclN1cmZhY2UgPT0gbV9kZWZhdWx0UmVuZGVyU3VyZmFjZSAmJiAhbV9jb21w
b3NpdGVPZmZzY3JlZW4pCi0gICAgICAgIHNjaXNzb3JZID0gbV9jdXJyZW50UmVuZGVyU3VyZmFj
ZS0+bV9jb250ZW50UmVjdC5oZWlnaHQoKSAtIChzY2lzc29yUmVjdC5ib3R0b20oKSAtIG1fY3Vy
cmVudFJlbmRlclN1cmZhY2UtPm1fY29udGVudFJlY3QueSgpKTsKKyAgICAgICAgc2Npc3Nvclkg
PSBtX2N1cnJlbnRSZW5kZXJTdXJmYWNlLT5tX2NvbnRlbnRSZWN0LmhlaWdodCgpIC0gKHNjaXNz
b3JSZWN0Lm1heFkoKSAtIG1fY3VycmVudFJlbmRlclN1cmZhY2UtPm1fY29udGVudFJlY3QueSgp
KTsKICAgICBlbHNlCiAgICAgICAgIHNjaXNzb3JZID0gc2Npc3NvclJlY3QueSgpIC0gbV9jdXJy
ZW50UmVuZGVyU3VyZmFjZS0+bV9jb250ZW50UmVjdC55KCk7CiAgICAgR0xDKG1fY29udGV4dC5n
ZXQoKSwgbV9jb250ZXh0LT5zY2lzc29yKHNjaXNzb3JYLCBzY2lzc29yWSwgc2Npc3NvclJlY3Qu
d2lkdGgoKSwgc2Npc3NvclJlY3QuaGVpZ2h0KCkpKTsKQEAgLTc1MCw5ICs3NTAsOSBAQCBib29s
IExheWVyUmVuZGVyZXJDaHJvbWl1bTo6Y2hlY2tUZXh0dXJlCiB2b2lkIExheWVyUmVuZGVyZXJD
aHJvbWl1bTo6c2V0RHJhd1ZpZXdwb3J0UmVjdChjb25zdCBJbnRSZWN0JiBkcmF3UmVjdCwgYm9v
bCBmbGlwWSkKIHsKICAgICBpZiAoZmxpcFkpCi0gICAgICAgIG1fcHJvamVjdGlvbk1hdHJpeCA9
IG9ydGhvTWF0cml4KGRyYXdSZWN0LngoKSwgZHJhd1JlY3QucmlnaHQoKSwgZHJhd1JlY3QuYm90
dG9tKCksIGRyYXdSZWN0LnkoKSk7CisgICAgICAgIG1fcHJvamVjdGlvbk1hdHJpeCA9IG9ydGhv
TWF0cml4KGRyYXdSZWN0LngoKSwgZHJhd1JlY3QubWF4WCgpLCBkcmF3UmVjdC5tYXhZKCksIGRy
YXdSZWN0LnkoKSk7CiAgICAgZWxzZQotICAgICAgICBtX3Byb2plY3Rpb25NYXRyaXggPSBvcnRo
b01hdHJpeChkcmF3UmVjdC54KCksIGRyYXdSZWN0LnJpZ2h0KCksIGRyYXdSZWN0LnkoKSwgZHJh
d1JlY3QuYm90dG9tKCkpOworICAgICAgICBtX3Byb2plY3Rpb25NYXRyaXggPSBvcnRob01hdHJp
eChkcmF3UmVjdC54KCksIGRyYXdSZWN0Lm1heFgoKSwgZHJhd1JlY3QueSgpLCBkcmF3UmVjdC5t
YXhZKCkpOwogICAgIEdMQyhtX2NvbnRleHQuZ2V0KCksIG1fY29udGV4dC0+dmlld3BvcnQoMCwg
MCwgZHJhd1JlY3Qud2lkdGgoKSwgZHJhd1JlY3QuaGVpZ2h0KCkpKTsKIH0KIApJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJUaWxlckNocm9taXVt
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9MYXllclRpbGVyQ2hyb21pdW0uY3BwCShyZXZpc2lvbiA3NzM0NykKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGlsZXJDaHJvbWl1bS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTE0NSw4ICsxNDUsOCBAQCB2b2lkIExheWVyVGlsZXJDaHJvbWl1
bTo6Y29udGVudFJlY3RUb1RpCiAKICAgICBsZWZ0ID0gbGF5ZXJSZWN0LngoKSAvIG1fdGlsZVNp
emUud2lkdGgoKTsKICAgICB0b3AgPSBsYXllclJlY3QueSgpIC8gbV90aWxlU2l6ZS5oZWlnaHQo
KTsKLSAgICByaWdodCA9IChsYXllclJlY3QucmlnaHQoKSAtIDEpIC8gbV90aWxlU2l6ZS53aWR0
aCgpOwotICAgIGJvdHRvbSA9IChsYXllclJlY3QuYm90dG9tKCkgLSAxKSAvIG1fdGlsZVNpemUu
aGVpZ2h0KCk7CisgICAgcmlnaHQgPSAobGF5ZXJSZWN0Lm1heFgoKSAtIDEpIC8gbV90aWxlU2l6
ZS53aWR0aCgpOworICAgIGJvdHRvbSA9IChsYXllclJlY3QubWF4WSgpIC0gMSkgLyBtX3RpbGVT
aXplLmhlaWdodCgpOwogfQogCiBJbnRSZWN0IExheWVyVGlsZXJDaHJvbWl1bTo6Y29udGVudFJl
Y3RUb0xheWVyUmVjdChjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCkgY29uc3QKQEAgLTQyNyw3
ICs0MjcsNyBAQCB2b2lkIExheWVyVGlsZXJDaHJvbWl1bTo6Z3Jvd0xheWVyVG9Db250CiB7CiAg
ICAgLy8gR3JvdyB0aGUgdGlsZSBhcnJheSB0byBjb250YWluIHRoaXMgY29udGVudCByZWN0Lgog
ICAgIEludFJlY3QgbGF5ZXJSZWN0ID0gY29udGVudFJlY3RUb0xheWVyUmVjdChjb250ZW50UmVj
dCk7Ci0gICAgSW50U2l6ZSBsYXllclNpemUgPSBJbnRTaXplKGxheWVyUmVjdC5yaWdodCgpLCBs
YXllclJlY3QuYm90dG9tKCkpOworICAgIEludFNpemUgbGF5ZXJTaXplID0gSW50U2l6ZShsYXll
clJlY3QubWF4WCgpLCBsYXllclJlY3QubWF4WSgpKTsKIAogICAgIEludFNpemUgbmV3U2l6ZSA9
IGxheWVyU2l6ZS5leHBhbmRlZFRvKG1fbGF5ZXJTaXplKTsKICAgICByZXNpemVMYXllcihuZXdT
aXplKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9UaWxpbmdE
YXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9n
cHUvVGlsaW5nRGF0YS5jcHAJKHJldmlzaW9uIDc3MzQ3KQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZ3B1L1RpbGluZ0RhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04OSw5
ICs4OSw5IEBAIEludFJlY3QgVGlsaW5nRGF0YTo6dGlsZUJvdW5kc1dpdGhCb3JkZXIKIAogICAg
IGlmIChtX2JvcmRlclRleGVscykgewogICAgICAgICBpbnQgeDEgPSBib3VuZHMueCgpOwotICAg
ICAgICBpbnQgeDIgPSBib3VuZHMucmlnaHQoKTsKKyAgICAgICAgaW50IHgyID0gYm91bmRzLm1h
eFgoKTsKICAgICAgICAgaW50IHkxID0gYm91bmRzLnkoKTsKLSAgICAgICAgaW50IHkyID0gYm91
bmRzLmJvdHRvbSgpOworICAgICAgICBpbnQgeTIgPSBib3VuZHMubWF4WSgpOwogCiAgICAgICAg
IGlmICh0aWxlWEluZGV4KHRpbGUpID4gMCkKICAgICAgICAgICAgIHgxLS07CkBAIC0xODIsOCAr
MTgyLDggQEAgSW50UmVjdCBUaWxpbmdEYXRhOjpvdmVybGFwcGVkVGlsZUluZGljZQogewogICAg
IGludCB4ID0gdGlsZVhJbmRleEZyb21TcmNDb29yZChzcmNSZWN0LngoKSk7CiAgICAgaW50IHkg
PSB0aWxlWUluZGV4RnJvbVNyY0Nvb3JkKHNyY1JlY3QueSgpKTsKLSAgICBpbnQgciA9IHRpbGVY
SW5kZXhGcm9tU3JjQ29vcmQoc3JjUmVjdC5yaWdodCgpKTsKLSAgICBpbnQgYiA9IHRpbGVZSW5k
ZXhGcm9tU3JjQ29vcmQoc3JjUmVjdC5ib3R0b20oKSk7CisgICAgaW50IHIgPSB0aWxlWEluZGV4
RnJvbVNyY0Nvb3JkKHNyY1JlY3QubWF4WCgpKTsKKyAgICBpbnQgYiA9IHRpbGVZSW5kZXhGcm9t
U3JjQ29vcmQoc3JjUmVjdC5tYXhZKCkpOwogICAgIHJldHVybiBJbnRSZWN0KHgsIHksIHIgLSB4
LCBiIC0geSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0
L0ltYWdlQnVmZmVyUXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3F0L0ltYWdlQnVmZmVyUXQuY3BwCShyZXZpc2lvbiA3NzM0NykKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ltYWdlQnVmZmVyUXQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xODgsNyArMTg4LDcgQEAgUGFzc1JlZlB0cjxCeXRlQXJyYXk+IGdldEltYWdl
RGF0YShjb25zdAogICAgIFJlZlB0cjxCeXRlQXJyYXk+IHJlc3VsdCA9IEJ5dGVBcnJheTo6Y3Jl
YXRlKHJlY3Qud2lkdGgoKSAqIHJlY3QuaGVpZ2h0KCkgKiA0KTsKICAgICB1bnNpZ25lZCBjaGFy
KiBkYXRhID0gcmVzdWx0LT5kYXRhKCk7CiAKLSAgICBpZiAocmVjdC54KCkgPCAwIHx8IHJlY3Qu
eSgpIDwgMCB8fCByZWN0LnJpZ2h0KCkgPiBzaXplLndpZHRoKCkgfHwgcmVjdC5ib3R0b20oKSA+
IHNpemUuaGVpZ2h0KCkpCisgICAgaWYgKHJlY3QueCgpIDwgMCB8fCByZWN0LnkoKSA8IDAgfHwg
cmVjdC5tYXhYKCkgPiBzaXplLndpZHRoKCkgfHwgcmVjdC5tYXhZKCkgPiBzaXplLmhlaWdodCgp
KQogICAgICAgICBtZW1zZXQoZGF0YSwgMCwgcmVzdWx0LT5sZW5ndGgoKSk7CiAKICAgICBpbnQg
b3JpZ2lueCA9IHJlY3QueCgpOwpAQCAtMTk3LDcgKzE5Nyw3IEBAIFBhc3NSZWZQdHI8Qnl0ZUFy
cmF5PiBnZXRJbWFnZURhdGEoY29uc3QKICAgICAgICAgZGVzdHggPSAtb3JpZ2lueDsKICAgICAg
ICAgb3JpZ2lueCA9IDA7CiAgICAgfQotICAgIGludCBlbmR4ID0gcmVjdC5yaWdodCgpOworICAg
IGludCBlbmR4ID0gcmVjdC5tYXhYKCk7CiAgICAgaWYgKGVuZHggPiBzaXplLndpZHRoKCkpCiAg
ICAgICAgIGVuZHggPSBzaXplLndpZHRoKCk7CiAgICAgaW50IG51bUNvbHVtbnMgPSBlbmR4IC0g
b3JpZ2lueDsKQEAgLTIwOCw3ICsyMDgsNyBAQCBQYXNzUmVmUHRyPEJ5dGVBcnJheT4gZ2V0SW1h
Z2VEYXRhKGNvbnN0CiAgICAgICAgIGRlc3R5ID0gLW9yaWdpbnk7CiAgICAgICAgIG9yaWdpbnkg
PSAwOwogICAgIH0KLSAgICBpbnQgZW5keSA9IHJlY3QuYm90dG9tKCk7CisgICAgaW50IGVuZHkg
PSByZWN0Lm1heFkoKTsKICAgICBpZiAoZW5keSA+IHNpemUuaGVpZ2h0KCkpCiAgICAgICAgIGVu
ZHkgPSBzaXplLmhlaWdodCgpOwogICAgIGludCBudW1Sb3dzID0gZW5keSAtIG9yaWdpbnk7CkBA
IC0zMDIsOSArMzAyLDkgQEAgdm9pZCBwdXRJbWFnZURhdGEoQnl0ZUFycmF5KiYgc291cmNlLCBj
bwogICAgIEFTU0VSVChkZXN0eCA+PSAwKTsKICAgICBBU1NFUlQoZGVzdHggPCBzaXplLndpZHRo
KCkpOwogICAgIEFTU0VSVChvcmlnaW54ID49IDApOwotICAgIEFTU0VSVChvcmlnaW54IDw9IHNv
dXJjZVJlY3QucmlnaHQoKSk7CisgICAgQVNTRVJUKG9yaWdpbnggPD0gc291cmNlUmVjdC5tYXhY
KCkpOwogCi0gICAgaW50IGVuZHggPSBkZXN0UG9pbnQueCgpICsgc291cmNlUmVjdC5yaWdodCgp
OworICAgIGludCBlbmR4ID0gZGVzdFBvaW50LngoKSArIHNvdXJjZVJlY3QubWF4WCgpOwogICAg
IEFTU0VSVChlbmR4IDw9IHNpemUud2lkdGgoKSk7CiAKICAgICBpbnQgbnVtQ29sdW1ucyA9IGVu
ZHggLSBkZXN0eDsKQEAgLTMxNCw5ICszMTQsOSBAQCB2b2lkIHB1dEltYWdlRGF0YShCeXRlQXJy
YXkqJiBzb3VyY2UsIGNvCiAgICAgQVNTRVJUKGRlc3R5ID49IDApOwogICAgIEFTU0VSVChkZXN0
eSA8IHNpemUuaGVpZ2h0KCkpOwogICAgIEFTU0VSVChvcmlnaW55ID49IDApOwotICAgIEFTU0VS
VChvcmlnaW55IDw9IHNvdXJjZVJlY3QuYm90dG9tKCkpOworICAgIEFTU0VSVChvcmlnaW55IDw9
IHNvdXJjZVJlY3QubWF4WSgpKTsKIAotICAgIGludCBlbmR5ID0gZGVzdFBvaW50LnkoKSArIHNv
dXJjZVJlY3QuYm90dG9tKCk7CisgICAgaW50IGVuZHkgPSBkZXN0UG9pbnQueSgpICsgc291cmNl
UmVjdC5tYXhZKCk7CiAgICAgQVNTRVJUKGVuZHkgPD0gc2l6ZS5oZWlnaHQoKSk7CiAgICAgaW50
IG51bVJvd3MgPSBlbmR5IC0gZGVzdHk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3NraWEvSW1hZ2VCdWZmZXJTa2lhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0ltYWdlQnVmZmVyU2tpYS5jcHAJKHJldmlz
aW9uIDc3MzQ3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9JbWFn
ZUJ1ZmZlclNraWEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzcsOCArMTc3LDggQEAgUGFzc1Jl
ZlB0cjxCeXRlQXJyYXk+IGdldEltYWdlRGF0YShjb25zdAogCiAgICAgaWYgKHJlY3QueCgpIDwg
MAogICAgICAgICB8fCByZWN0LnkoKSA8IDAKLSAgICAgICAgfHwgcmVjdC5yaWdodCgpID4gc2l6
ZS53aWR0aCgpCi0gICAgICAgIHx8IHJlY3QuYm90dG9tKCkgPiBzaXplLmhlaWdodCgpKQorICAg
ICAgICB8fCByZWN0Lm1heFgoKSA+IHNpemUud2lkdGgoKQorICAgICAgICB8fCByZWN0Lm1heFko
KSA+IHNpemUuaGVpZ2h0KCkpCiAgICAgICAgIG1lbXNldChkYXRhLCAwLCByZXN1bHQtPmxlbmd0
aCgpKTsKIAogICAgIGludCBvcmlnaW5YID0gcmVjdC54KCk7CkBAIC0xODcsNyArMTg3LDcgQEAg
UGFzc1JlZlB0cjxCeXRlQXJyYXk+IGdldEltYWdlRGF0YShjb25zdAogICAgICAgICBkZXN0WCA9
IC1vcmlnaW5YOwogICAgICAgICBvcmlnaW5YID0gMDsKICAgICB9Ci0gICAgaW50IGVuZFggPSBy
ZWN0LnJpZ2h0KCk7CisgICAgaW50IGVuZFggPSByZWN0Lm1heFgoKTsKICAgICBpZiAoZW5kWCA+
IHNpemUud2lkdGgoKSkKICAgICAgICAgZW5kWCA9IHNpemUud2lkdGgoKTsKICAgICBpbnQgbnVt
Q29sdW1ucyA9IGVuZFggLSBvcmlnaW5YOwpAQCAtMjAxLDcgKzIwMSw3IEBAIFBhc3NSZWZQdHI8
Qnl0ZUFycmF5PiBnZXRJbWFnZURhdGEoY29uc3QKICAgICAgICAgZGVzdFkgPSAtb3JpZ2luWTsK
ICAgICAgICAgb3JpZ2luWSA9IDA7CiAgICAgfQotICAgIGludCBlbmRZID0gcmVjdC5ib3R0b20o
KTsKKyAgICBpbnQgZW5kWSA9IHJlY3QubWF4WSgpOwogICAgIGlmIChlbmRZID4gc2l6ZS5oZWln
aHQoKSkKICAgICAgICAgZW5kWSA9IHNpemUuaGVpZ2h0KCk7CiAgICAgaW50IG51bVJvd3MgPSBl
bmRZIC0gb3JpZ2luWTsKQEAgLTI2NSw5ICsyNjUsOSBAQCB2b2lkIHB1dEltYWdlRGF0YShCeXRl
QXJyYXkqJiBzb3VyY2UsIGNvCiAgICAgQVNTRVJUKGRlc3RYID49IDApOwogICAgIEFTU0VSVChk
ZXN0WCA8IHNpemUud2lkdGgoKSk7CiAgICAgQVNTRVJUKG9yaWdpblggPj0gMCk7Ci0gICAgQVNT
RVJUKG9yaWdpblggPCBzb3VyY2VSZWN0LnJpZ2h0KCkpOworICAgIEFTU0VSVChvcmlnaW5YIDwg
c291cmNlUmVjdC5tYXhYKCkpOwogCi0gICAgaW50IGVuZFggPSBkZXN0UG9pbnQueCgpICsgc291
cmNlUmVjdC5yaWdodCgpOworICAgIGludCBlbmRYID0gZGVzdFBvaW50LngoKSArIHNvdXJjZVJl
Y3QubWF4WCgpOwogICAgIEFTU0VSVChlbmRYIDw9IHNpemUud2lkdGgoKSk7CiAKICAgICBpbnQg
bnVtQ29sdW1ucyA9IGVuZFggLSBkZXN0WDsKQEAgLTI3Nyw5ICsyNzcsOSBAQCB2b2lkIHB1dElt
YWdlRGF0YShCeXRlQXJyYXkqJiBzb3VyY2UsIGNvCiAgICAgQVNTRVJUKGRlc3RZID49IDApOwog
ICAgIEFTU0VSVChkZXN0WSA8IHNpemUuaGVpZ2h0KCkpOwogICAgIEFTU0VSVChvcmlnaW5ZID49
IDApOwotICAgIEFTU0VSVChvcmlnaW5ZIDwgc291cmNlUmVjdC5ib3R0b20oKSk7CisgICAgQVNT
RVJUKG9yaWdpblkgPCBzb3VyY2VSZWN0Lm1heFkoKSk7CiAKLSAgICBpbnQgZW5kWSA9IGRlc3RQ
b2ludC55KCkgKyBzb3VyY2VSZWN0LmJvdHRvbSgpOworICAgIGludCBlbmRZID0gZGVzdFBvaW50
LnkoKSArIHNvdXJjZVJlY3QubWF4WSgpOwogICAgIEFTU0VSVChlbmRZIDw9IHNpemUuaGVpZ2h0
KCkpOwogICAgIGludCBudW1Sb3dzID0gZW5kWSAtIGRlc3RZOwogCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0V2luLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250
ZXh0V2luLmNwcAkocmV2aXNpb24gNzczNDcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0V2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU0
LDcgKzE1NCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjpjbGkKIHsK
ICAgICBpZiAoIW1faGRjKQogICAgICAgICByZXR1cm47Ci0gICAgSW50ZXJzZWN0Q2xpcFJlY3Qo
bV9oZGMsIGNsaXBSZWN0LngoKSwgY2xpcFJlY3QueSgpLCBjbGlwUmVjdC5yaWdodCgpLCBjbGlw
UmVjdC5ib3R0b20oKSk7CisgICAgSW50ZXJzZWN0Q2xpcFJlY3QobV9oZGMsIGNsaXBSZWN0Lngo
KSwgY2xpcFJlY3QueSgpLCBjbGlwUmVjdC5tYXhYKCksIGNsaXBSZWN0Lm1heFkoKSk7CiB9CiAK
IHZvaWQgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjpjbGlwKGNvbnN0IFBhdGgmKQpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ludFJlY3RXaW4uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbnRS
ZWN0V2luLmNwcAkocmV2aXNpb24gNzczNDcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy93aW4vSW50UmVjdFdpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4LDcgKzM4LDcg
QEAgSW50UmVjdDo6SW50UmVjdChjb25zdCBSRUNUJiByKQogCiBJbnRSZWN0OjpvcGVyYXRvciBS
RUNUKCkgY29uc3QKIHsKLSAgICBSRUNUIHJlY3QgPSB7IHgoKSwgeSgpLCByaWdodCgpLCBib3R0
b20oKSB9OworICAgIFJFQ1QgcmVjdCA9IHsgeCgpLCB5KCksIG1heFgoKSwgbWF4WSgpIH07CiAg
ICAgcmV0dXJuIHJlY3Q7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3dpbi9VbmlzY3JpYmVDb250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vVW5pc2NyaWJlQ29udHJvbGxlci5jcHAJKHJldmlz
aW9uIDc3MzQ3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1VuaXNj
cmliZUNvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOTQsOSArMzk0LDkgQEAgYm9v
bCBVbmlzY3JpYmVDb250cm9sbGVyOjpzaGFwZUFuZFBsYWNlSQogICAgICAgICBGbG9hdFJlY3Qg
Z2x5cGhCb3VuZHMgPSBmb250RGF0YS0+Ym91bmRzRm9yR2x5cGgoZ2x5cGgpOwogICAgICAgICBn
bHlwaEJvdW5kcy5tb3ZlKG1fZ2x5cGhPcmlnaW4ueCgpLCBtX2dseXBoT3JpZ2luLnkoKSk7CiAg
ICAgICAgIG1fbWluR2x5cGhCb3VuZGluZ0JveFggPSBtaW4obV9taW5HbHlwaEJvdW5kaW5nQm94
WCwgZ2x5cGhCb3VuZHMueCgpKTsKLSAgICAgICAgbV9tYXhHbHlwaEJvdW5kaW5nQm94WCA9IG1h
eChtX21heEdseXBoQm91bmRpbmdCb3hYLCBnbHlwaEJvdW5kcy5yaWdodCgpKTsKKyAgICAgICAg
bV9tYXhHbHlwaEJvdW5kaW5nQm94WCA9IG1heChtX21heEdseXBoQm91bmRpbmdCb3hYLCBnbHlw
aEJvdW5kcy5tYXhYKCkpOwogICAgICAgICBtX21pbkdseXBoQm91bmRpbmdCb3hZID0gbWluKG1f
bWluR2x5cGhCb3VuZGluZ0JveFksIGdseXBoQm91bmRzLnkoKSk7Ci0gICAgICAgIG1fbWF4R2x5
cGhCb3VuZGluZ0JveFkgPSBtYXgobV9tYXhHbHlwaEJvdW5kaW5nQm94WSwgZ2x5cGhCb3VuZHMu
Ym90dG9tKCkpOworICAgICAgICBtX21heEdseXBoQm91bmRpbmdCb3hZID0gbWF4KG1fbWF4R2x5
cGhCb3VuZGluZ0JveFksIGdseXBoQm91bmRzLm1heFkoKSk7CiAgICAgICAgIG1fZ2x5cGhPcmln
aW4ubW92ZShhZHZhbmNlICsgb2Zmc2V0WCwgLW9mZnNldFkpOwogCiAgICAgICAgIC8vIE11dGF0
ZSB0aGUgZ2x5cGggYXJyYXkgdG8gY29udGFpbiBvdXIgYWx0ZXJlZCBhZHZhbmNlcy4KSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL0dyYXBoaWNzQ29udGV4dFdp
bkNFLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93
aW5jZS9HcmFwaGljc0NvbnRleHRXaW5DRS5jcHAJKHJldmlzaW9uIDc3MzQ3KQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvR3JhcGhpY3NDb250ZXh0V2luQ0UuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC02MSw3ICs2MSw3IEBAIHN0YXRpYyBpbmxpbmUgaW50IHN0YWJs
ZVJvdW5kKGRvdWJsZSBkKQogLy8gVW5saWtlIGVuY2xvc2luZ0ludFJlY3QoKSwgdGhpcyBmdW5j
dGlvbiBkb2VzIHN0cmljdCByb3VuZGluZy4KIHN0YXRpYyBpbmxpbmUgSW50UmVjdCByb3VuZFJl
Y3QoY29uc3QgRmxvYXRSZWN0JiByKQogewotICAgIHJldHVybiBJbnRSZWN0KHN0YWJsZVJvdW5k
KHIueCgpKSwgc3RhYmxlUm91bmQoci55KCkpLCBzdGFibGVSb3VuZChyLnJpZ2h0KCkpIC0gc3Rh
YmxlUm91bmQoci54KCkpLCBzdGFibGVSb3VuZChyLmJvdHRvbSgpKSAtIHN0YWJsZVJvdW5kKHIu
eSgpKSk7CisgICAgcmV0dXJuIEludFJlY3Qoc3RhYmxlUm91bmQoci54KCkpLCBzdGFibGVSb3Vu
ZChyLnkoKSksIHN0YWJsZVJvdW5kKHIubWF4WCgpKSAtIHN0YWJsZVJvdW5kKHIueCgpKSwgc3Rh
YmxlUm91bmQoci5tYXhZKCkpIC0gc3RhYmxlUm91bmQoci55KCkpKTsKIH0KIAogLy8gUm90YXRp
b24gdHJhbnNmb3JtYXRpb24KQEAgLTEyOCw4ICsxMjgsOCBAQCB0ZW1wbGF0ZTxjbGFzcyBUcmFu
c2Zvcm0sIGNsYXNzIFJlY3QsIGNsCiB7CiAgICAgVmFsdWUgeFs0XSwgeVs0XTsKICAgICBWYWx1
ZSBsLCB0LCByLCBiOwotICAgIHIgPSByZWN0LnJpZ2h0KCkgLSAxOwotICAgIGIgPSByZWN0LmJv
dHRvbSgpIC0gMTsKKyAgICByID0gcmVjdC5tYXhYKCkgLSAxOworICAgIGIgPSByZWN0Lm1heFko
KSAtIDE7CiAgICAgdHJhbnNmb3JtLm1hcChyZWN0LngoKSwgcmVjdC55KCksIHgsIHkpOwogICAg
IHRyYW5zZm9ybS5tYXAocmVjdC54KCksIGIsIHggKyAxLCB5ICsgMSk7CiAgICAgdHJhbnNmb3Jt
Lm1hcChyLCBiLCB4ICsgMiwgeSArIDIpOwpAQCAtNTAzLDkgKzUwMyw5IEBAIFRyYW5zcGFyZW50
TGF5ZXJEQzo6VHJhbnNwYXJlbnRMYXllckRDKEcKICAgICAgICAgICAgIG1fcm90YXRpb24ubV9w
b3N0U2hpZnRZIC09IG1fb3JpZ1JlY3QueSgpOwogCiAgICAgICAgICAgICBGbG9hdFBvaW50IHRv
cExlZnQgPSBtX2RhdGEtPm1fdHJhbnNmb3JtLm1hcFBvaW50KEZsb2F0UG9pbnQocmVjdEJlZm9y
ZVRyYW5zZm9ybS0+bG9jYXRpb24oKSkpOwotICAgICAgICAgICAgRmxvYXRQb2ludCB0b3BSaWdo
dChyZWN0QmVmb3JlVHJhbnNmb3JtLT5yaWdodCgpIC0gMSwgcmVjdEJlZm9yZVRyYW5zZm9ybS0+
eSgpKTsKKyAgICAgICAgICAgIEZsb2F0UG9pbnQgdG9wUmlnaHQocmVjdEJlZm9yZVRyYW5zZm9y
bS0+bWF4WCgpIC0gMSwgcmVjdEJlZm9yZVRyYW5zZm9ybS0+eSgpKTsKICAgICAgICAgICAgIHRv
cFJpZ2h0ID0gbV9kYXRhLT5tX3RyYW5zZm9ybS5tYXBQb2ludCh0b3BSaWdodCk7Ci0gICAgICAg
ICAgICBGbG9hdFBvaW50IGJvdHRvbUxlZnQocmVjdEJlZm9yZVRyYW5zZm9ybS0+eCgpLCByZWN0
QmVmb3JlVHJhbnNmb3JtLT5ib3R0b20oKSAtIDEpOworICAgICAgICAgICAgRmxvYXRQb2ludCBi
b3R0b21MZWZ0KHJlY3RCZWZvcmVUcmFuc2Zvcm0tPngoKSwgcmVjdEJlZm9yZVRyYW5zZm9ybS0+
bWF4WSgpIC0gMSk7CiAgICAgICAgICAgICBib3R0b21MZWZ0ID0gbV9kYXRhLT5tX3RyYW5zZm9y
bS5tYXBQb2ludChib3R0b21MZWZ0KTsKICAgICAgICAgICAgIEZsb2F0U2l6ZSBzaWRlVG9wID0g
dG9wUmlnaHQgLSB0b3BMZWZ0OwogICAgICAgICAgICAgRmxvYXRTaXplIHNpZGVMZWZ0ID0gYm90
dG9tTGVmdCAtIHRvcExlZnQ7CkBAIC02NTUsNyArNjU1LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OmRyYXdSZWN0KGNvbnN0IEludAogICAgICAgICBpZiAodHJSZWN0LmhlaWdodCgpIDw9IDAp
CiAgICAgICAgICAgICB0clJlY3Quc2V0SGVpZ2h0KDEpOwogCi0gICAgICAgIFJlY3RhbmdsZShk
YywgdHJSZWN0LngoKSwgdHJSZWN0LnkoKSwgdHJSZWN0LnJpZ2h0KCksIHRyUmVjdC5ib3R0b20o
KSk7CisgICAgICAgIFJlY3RhbmdsZShkYywgdHJSZWN0LngoKSwgdHJSZWN0LnkoKSwgdHJSZWN0
Lm1heFgoKSwgdHJSZWN0Lm1heFkoKSk7CiAgICAgfQogCiAgICAgU2VsZWN0T2JqZWN0KGRjLCBv
bGRQZW4pOwpAQCAtNzI1LDcgKzcyNSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3RWxs
aXBzZShjb25zdCAKICAgICAgICAgb2xkUGVuID0gU2VsZWN0T2JqZWN0KGRjLCBHZXRTdG9ja09i
amVjdChOVUxMX1BFTikpOwogCiAgICAgaWYgKGJydXNoIHx8IHBlbikKLSAgICAgICAgRWxsaXBz
ZShkYywgdHJSZWN0LngoKSwgdHJSZWN0LnkoKSwgdHJSZWN0LnJpZ2h0KCksIHRyUmVjdC5ib3R0
b20oKSk7CisgICAgICAgIEVsbGlwc2UoZGMsIHRyUmVjdC54KCksIHRyUmVjdC55KCksIHRyUmVj
dC5tYXhYKCksIHRyUmVjdC5tYXhZKCkpOwogCiAgICAgU2VsZWN0T2JqZWN0KGRjLCBvbGRQZW4p
OwogICAgIFNlbGVjdE9iamVjdChkYywgb2xkQnJ1c2gpOwpAQCAtODM4LDcgKzgzOCw3IEBAIHZv
aWQgR3JhcGhpY3NDb250ZXh0OjpzdHJva2VBcmMoY29uc3QgSW4KICAgICB9CiAKICAgICBIR0RJ
T0JKIG9sZEJydXNoID0gU2VsZWN0T2JqZWN0KGRjLCBHZXRTdG9ja09iamVjdChOVUxMX0JSVVNI
KSk7Ci0gICAgRWxsaXBzZShkYywgdHJSZWN0LngoKSwgdHJSZWN0LnkoKSwgdHJSZWN0LnJpZ2h0
KCksIHRyUmVjdC5ib3R0b20oKSk7CisgICAgRWxsaXBzZShkYywgdHJSZWN0LngoKSwgdHJSZWN0
LnkoKSwgdHJSZWN0Lm1heFgoKSwgdHJSZWN0Lm1heFkoKSk7CiAgICAgU2VsZWN0T2JqZWN0KGRj
LCBvbGRCcnVzaCk7CiAKICAgICBpZiAobmV3Q2xpcCkKQEAgLTk1OSw5ICs5NTksOSBAQCB2b2lk
IEdyYXBoaWNzQ29udGV4dDo6Y2xpcChjb25zdCBGbG9hdFJlCiAKICAgICBPd25QdHI8SFJHTj4g
Y2xpcFJnbihDcmVhdGVSZWN0UmduKDAsIDAsIDAsIDApKTsKICAgICBpZiAoR2V0Q2xpcFJnbiht
X2RhdGEtPm1fZGMsIGNsaXBSZ24uZ2V0KCkpID4gMCkKLSAgICAgICAgSW50ZXJzZWN0Q2xpcFJl
Y3QobV9kYXRhLT5tX2RjLCB0clJlY3QueCgpLCB0clJlY3QueSgpLCB0clJlY3QucmlnaHQoKSwg
dHJSZWN0LmJvdHRvbSgpKTsKKyAgICAgICAgSW50ZXJzZWN0Q2xpcFJlY3QobV9kYXRhLT5tX2Rj
LCB0clJlY3QueCgpLCB0clJlY3QueSgpLCB0clJlY3QubWF4WCgpLCB0clJlY3QubWF4WSgpKTsK
ICAgICBlbHNlIHsKLSAgICAgICAgY2xpcFJnbi5zZXQoQ3JlYXRlUmVjdFJnbih0clJlY3QueCgp
LCB0clJlY3QueSgpLCB0clJlY3QucmlnaHQoKSwgdHJSZWN0LmJvdHRvbSgpKSk7CisgICAgICAg
IGNsaXBSZ24uc2V0KENyZWF0ZVJlY3RSZ24odHJSZWN0LngoKSwgdHJSZWN0LnkoKSwgdHJSZWN0
Lm1heFgoKSwgdHJSZWN0Lm1heFkoKSkpOwogICAgICAgICBTZWxlY3RDbGlwUmduKG1fZGF0YS0+
bV9kYywgY2xpcFJnbi5nZXQoKSk7CiAgICAgfQogfQpAQCAtOTc2LDcgKzk3Niw3IEBAIHZvaWQg
R3JhcGhpY3NDb250ZXh0OjpjbGlwT3V0KGNvbnN0IEludFIKIAogICAgIEludFJlY3QgdHJSZWN0
ID0gbV9kYXRhLT5tYXBSZWN0KHJlY3QpOwogCi0gICAgRXhjbHVkZUNsaXBSZWN0KG1fZGF0YS0+
bV9kYywgdHJSZWN0LngoKSwgdHJSZWN0LnkoKSwgdHJSZWN0LnJpZ2h0KCksIHRyUmVjdC5ib3R0
b20oKSk7CisgICAgRXhjbHVkZUNsaXBSZWN0KG1fZGF0YS0+bV9kYywgdHJSZWN0LngoKSwgdHJS
ZWN0LnkoKSwgdHJSZWN0Lm1heFgoKSwgdHJSZWN0Lm1heFkoKSk7CiB9CiAKIHZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFBhdGgmIHBhdGgsIGludCB3aWR0aCwgaW50
IG9mZnNldCwgY29uc3QgQ29sb3ImIGNvbG9yKQpAQCAtMTA5Miw4ICsxMDkyLDggQEAgdm9pZCBH
cmFwaGljc0NvbnRleHQ6OnN0cm9rZVJlY3QoY29uc3QgRgogICAgIE93blB0cjxIUEVOPiBwZW4g
PSBjcmVhdGVQZW4oc3Ryb2tlQ29sb3IoKSwgc3Ryb2tlVGhpY2tuZXNzKCksIHN0cm9rZVN0eWxl
KCkpOwogICAgIEhHRElPQkogb2xkUGVuID0gU2VsZWN0T2JqZWN0KGRjLCBwZW4uZ2V0KCkpOwog
Ci0gICAgaW50IHJpZ2h0ID0gdHJSZWN0LnJpZ2h0KCkgLSAxOwotICAgIGludCBib3R0b20gPSB0
clJlY3QuYm90dG9tKCkgLSAxOworICAgIGludCByaWdodCA9IHRyUmVjdC5tYXhYKCkgLSAxOwor
ICAgIGludCBib3R0b20gPSB0clJlY3QubWF4WSgpIC0gMTsKICAgICBjb25zdCBQT0lOVCBpbnRQ
b2ludHNbNV0gPQogICAgIHsKICAgICAgICAgeyB0clJlY3QueCgpLCB0clJlY3QueSgpIH0sCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VE
ZWNvZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1k
ZWNvZGVycy9naWYvR0lGSW1hZ2VEZWNvZGVyLmNwcAkocmV2aXNpb24gNzczNDcpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VEZWNvZGVyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzI3LDE2ICszMjcsMTYgQEAgYm9vbCBHSUZJbWFnZURlY29k
ZXI6OmluaXRGcmFtZUJ1ZmZlcih1bgogICAgIEludFJlY3QgZnJhbWVSZWN0KGZyYW1lUmVhZGVy
LT54X29mZnNldCwgZnJhbWVSZWFkZXItPnlfb2Zmc2V0LCBmcmFtZVJlYWRlci0+d2lkdGgsIGZy
YW1lUmVhZGVyLT5oZWlnaHQpOwogCiAgICAgLy8gTWFrZSBzdXJlIHRoZSBmcmFtZVJlY3QgZG9l
c24ndCBleHRlbmQgb3V0c2lkZSB0aGUgYnVmZmVyLgotICAgIGlmIChmcmFtZVJlY3QucmlnaHQo
KSA+IHNpemUoKS53aWR0aCgpKQorICAgIGlmIChmcmFtZVJlY3QubWF4WCgpID4gc2l6ZSgpLndp
ZHRoKCkpCiAgICAgICAgIGZyYW1lUmVjdC5zZXRXaWR0aChzaXplKCkud2lkdGgoKSAtIGZyYW1l
UmVhZGVyLT54X29mZnNldCk7Ci0gICAgaWYgKGZyYW1lUmVjdC5ib3R0b20oKSA+IHNpemUoKS5o
ZWlnaHQoKSkKKyAgICBpZiAoZnJhbWVSZWN0Lm1heFkoKSA+IHNpemUoKS5oZWlnaHQoKSkKICAg
ICAgICAgZnJhbWVSZWN0LnNldEhlaWdodChzaXplKCkuaGVpZ2h0KCkgLSBmcmFtZVJlYWRlci0+
eV9vZmZzZXQpOwogCiAgICAgSW1hZ2VGcmFtZSogY29uc3QgYnVmZmVyID0gJm1fZnJhbWVCdWZm
ZXJDYWNoZVtmcmFtZUluZGV4XTsKICAgICBpbnQgbGVmdCA9IHVwcGVyQm91bmRTY2FsZWRYKGZy
YW1lUmVjdC54KCkpOwotICAgIGludCByaWdodCA9IGxvd2VyQm91bmRTY2FsZWRYKGZyYW1lUmVj
dC5yaWdodCgpLCBsZWZ0KTsKKyAgICBpbnQgcmlnaHQgPSBsb3dlckJvdW5kU2NhbGVkWChmcmFt
ZVJlY3QubWF4WCgpLCBsZWZ0KTsKICAgICBpbnQgdG9wID0gdXBwZXJCb3VuZFNjYWxlZFkoZnJh
bWVSZWN0LnkoKSk7Ci0gICAgaW50IGJvdHRvbSA9IGxvd2VyQm91bmRTY2FsZWRZKGZyYW1lUmVj
dC5ib3R0b20oKSwgdG9wKTsKKyAgICBpbnQgYm90dG9tID0gbG93ZXJCb3VuZFNjYWxlZFkoZnJh
bWVSZWN0Lm1heFkoKSwgdG9wKTsKICAgICBidWZmZXItPnNldFJlY3QoSW50UmVjdChsZWZ0LCB0
b3AsIHJpZ2h0IC0gbGVmdCwgYm90dG9tIC0gdG9wKSk7CiAgICAgCiAgICAgaWYgKCFmcmFtZUlu
ZGV4KSB7CkBAIC0zNzgsOCArMzc4LDggQEAgYm9vbCBHSUZJbWFnZURlY29kZXI6OmluaXRGcmFt
ZUJ1ZmZlcih1bgogICAgICAgICAgICAgICAvLyBDb3B5IHRoZSB3aG9sZSBwcmV2aW91cyBidWZm
ZXIsIHRoZW4gY2xlYXIganVzdCBpdHMgZnJhbWUuCiAgICAgICAgICAgICAgIGlmICghYnVmZmVy
LT5jb3B5Qml0bWFwRGF0YSgqcHJldkJ1ZmZlcikpCiAgICAgICAgICAgICAgICAgICByZXR1cm4g
c2V0RmFpbGVkKCk7Ci0gICAgICAgICAgICAgIGZvciAoaW50IHkgPSBwcmV2UmVjdC55KCk7IHkg
PCBwcmV2UmVjdC5ib3R0b20oKTsgKyt5KSB7Ci0gICAgICAgICAgICAgICAgICBmb3IgKGludCB4
ID0gcHJldlJlY3QueCgpOyB4IDwgcHJldlJlY3QucmlnaHQoKTsgKyt4KQorICAgICAgICAgICAg
ICBmb3IgKGludCB5ID0gcHJldlJlY3QueSgpOyB5IDwgcHJldlJlY3QubWF4WSgpOyArK3kpIHsK
KyAgICAgICAgICAgICAgICAgIGZvciAoaW50IHggPSBwcmV2UmVjdC54KCk7IHggPCBwcmV2UmVj
dC5tYXhYKCk7ICsreCkKICAgICAgICAgICAgICAgICAgICAgICBidWZmZXItPnNldFJHQkEoeCwg
eSwgMCwgMCwgMCwgMCk7CiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgaWYgKChwcmV2
UmVjdC53aWR0aCgpID4gMCkgJiYgKHByZXZSZWN0LmhlaWdodCgpID4gMCkpCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vUG9wdXBNZW51V2luLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vUG9wdXBNZW51V2luLmNwcAkocmV2aXNpb24gNzcz
NDcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vUG9wdXBNZW51V2luLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzQ3LDEzICszNDcsMTMgQEAgdm9pZCBQb3B1cE1lbnVXaW46OmNhbGN1
bGF0ZVBvc2l0aW9uQW5kUwogICAgIC8vIEFsd2F5cyBsZWZ0LWFsaWduIGl0ZW1zIGluIHRoZSBw
b3B1cC4gIFRoaXMgbWF0Y2hlcyBwb3B1cCBtZW51cyBvbiB0aGUgbWFjLgogICAgIGludCBwb3B1
cFggPSByU2NyZWVuQ29vcmRzLngoKSArIGNsaWVudCgpLT5jbGllbnRJbnNldExlZnQoKTsKIAot
ICAgIEludFJlY3QgcG9wdXBSZWN0KHBvcHVwWCwgclNjcmVlbkNvb3Jkcy5ib3R0b20oKSwgcG9w
dXBXaWR0aCwgcG9wdXBIZWlnaHQpOworICAgIEludFJlY3QgcG9wdXBSZWN0KHBvcHVwWCwgclNj
cmVlbkNvb3Jkcy5tYXhZKCksIHBvcHVwV2lkdGgsIHBvcHVwSGVpZ2h0KTsKIAogICAgIC8vIFRo
ZSBwb3B1cCBuZWVkcyB0byBzdGF5IHdpdGhpbiB0aGUgYm91bmRzIG9mIHRoZSBzY3JlZW4gYW5k
IG5vdCBvdmVybGFwIGFueSB0b29sYmFycwogICAgIEZsb2F0UmVjdCBzY3JlZW4gPSBzY3JlZW5B
dmFpbGFibGVSZWN0KHYpOwogCiAgICAgLy8gQ2hlY2sgdGhhdCB3ZSBkb24ndCBnbyBvZmYgdGhl
IHNjcmVlbiB2ZXJ0aWNhbGx5Ci0gICAgaWYgKHBvcHVwUmVjdC5ib3R0b20oKSA+IHNjcmVlbi5o
ZWlnaHQoKSkgeworICAgIGlmIChwb3B1cFJlY3QubWF4WSgpID4gc2NyZWVuLmhlaWdodCgpKSB7
CiAgICAgICAgIC8vIFRoZSBwb3B1cCB3aWxsIGdvIG9mZiB0aGUgc2NyZWVuLCBzbyB0cnkgcGxh
Y2luZyBpdCBhYm92ZSB0aGUgY2xpZW50CiAgICAgICAgIGlmIChyU2NyZWVuQ29vcmRzLnkoKSAt
IHBvcHVwUmVjdC5oZWlnaHQoKSA8IDApIHsKICAgICAgICAgICAgIC8vIFRoZSBwb3B1cCB3b24n
dCBmaXQgYWJvdmUsIGVpdGhlciwgc28gcGxhY2UgaXQgd2hlcmVldmVyJ3MgYmlnZ2VyIGFuZCBy
ZXNpemUgaXQgdG8gZml0CkBAIC02MDIsNyArNjAyLDcgQEAgdm9pZCBQb3B1cE1lbnVXaW46OnBh
aW50KGNvbnN0IEludFJlY3QmIAogICAgIEludFJlY3QgbGlzdFJlY3QgPSBkYW1hZ2VSZWN0Owog
ICAgIGxpc3RSZWN0Lm1vdmUoSW50U2l6ZSgwLCBtX3Njcm9sbE9mZnNldCAqIG1faXRlbUhlaWdo
dCkpOwogCi0gICAgZm9yIChpbnQgeSA9IGxpc3RSZWN0LnkoKTsgeSA8IGxpc3RSZWN0LmJvdHRv
bSgpOyB5ICs9IG1faXRlbUhlaWdodCkgeworICAgIGZvciAoaW50IHkgPSBsaXN0UmVjdC55KCk7
IHkgPCBsaXN0UmVjdC5tYXhZKCk7IHkgKz0gbV9pdGVtSGVpZ2h0KSB7CiAgICAgICAgIGludCBp
bmRleCA9IHkgLyBtX2l0ZW1IZWlnaHQ7CiAKICAgICAgICAgQ29sb3Igb3B0aW9uQmFja2dyb3Vu
ZENvbG9yLCBvcHRpb25UZXh0Q29sb3I7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL3dp
bi9QbHVnaW5WaWV3V2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbHVnaW5z
L3dpbi9QbHVnaW5WaWV3V2luLmNwcAkocmV2aXNpb24gNzczNDcpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbHVnaW5zL3dpbi9QbHVnaW5WaWV3V2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQ4LDcg
KzQ0OCw3IEBAIHZvaWQgUGx1Z2luVmlldzo6dXBkYXRlUGx1Z2luV2lkZ2V0KCkKICAgICAgICAg
ICAgIHJnbiA9IDo6Q3JlYXRlUmVjdFJnbigwLCAwLCAwLCAwKTsKICAgICAgICAgICAgIDo6U2V0
V2luZG93UmduKHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCksIHJnbiwgRkFMU0UpOwogICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgcmduID0gOjpDcmVhdGVSZWN0UmduKG1fY2xpcFJlY3QueCgp
LCBtX2NsaXBSZWN0LnkoKSwgbV9jbGlwUmVjdC5yaWdodCgpLCBtX2NsaXBSZWN0LmJvdHRvbSgp
KTsKKyAgICAgICAgICAgIHJnbiA9IDo6Q3JlYXRlUmVjdFJnbihtX2NsaXBSZWN0LngoKSwgbV9j
bGlwUmVjdC55KCksIG1fY2xpcFJlY3QubWF4WCgpLCBtX2NsaXBSZWN0Lm1heFkoKSk7CiAgICAg
ICAgICAgICA6OlNldFdpbmRvd1JnbihwbGF0Zm9ybVBsdWdpbldpZGdldCgpLCByZ24sIFRSVUUp
OwogICAgICAgICB9CiAKQEAgLTQ1Niw3ICs0NTYsNyBAQCB2b2lkIFBsdWdpblZpZXc6OnVwZGF0
ZVBsdWdpbldpZGdldCgpCiAgICAgICAgICAgICA6Ok1vdmVXaW5kb3cocGxhdGZvcm1QbHVnaW5X
aWRnZXQoKSwgbV93aW5kb3dSZWN0LngoKSwgbV93aW5kb3dSZWN0LnkoKSwgbV93aW5kb3dSZWN0
LndpZHRoKCksIG1fd2luZG93UmVjdC5oZWlnaHQoKSwgVFJVRSk7CiAKICAgICAgICAgaWYgKGNs
aXBUb1plcm9SZWN0KSB7Ci0gICAgICAgICAgICByZ24gPSA6OkNyZWF0ZVJlY3RSZ24obV9jbGlw
UmVjdC54KCksIG1fY2xpcFJlY3QueSgpLCBtX2NsaXBSZWN0LnJpZ2h0KCksIG1fY2xpcFJlY3Qu
Ym90dG9tKCkpOworICAgICAgICAgICAgcmduID0gOjpDcmVhdGVSZWN0UmduKG1fY2xpcFJlY3Qu
eCgpLCBtX2NsaXBSZWN0LnkoKSwgbV9jbGlwUmVjdC5tYXhYKCksIG1fY2xpcFJlY3QubWF4WSgp
KTsKICAgICAgICAgICAgIDo6U2V0V2luZG93UmduKHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCksIHJn
biwgVFJVRSk7CiAgICAgICAgIH0KIApAQCAtODk2LDcgKzg5Niw3IEBAIGJvb2wgUGx1Z2luVmll
dzo6cGxhdGZvcm1HZXRWYWx1ZShOUE5WYXIKIHZvaWQgUGx1Z2luVmlldzo6aW52YWxpZGF0ZVJl
Y3QoY29uc3QgSW50UmVjdCYgcmVjdCkKIHsKICAgICBpZiAobV9pc1dpbmRvd2VkKSB7Ci0gICAg
ICAgIFJFQ1QgaW52YWxpZFJlY3QgPSB7IHJlY3QueCgpLCByZWN0LnkoKSwgcmVjdC5yaWdodCgp
LCByZWN0LmJvdHRvbSgpIH07CisgICAgICAgIFJFQ1QgaW52YWxpZFJlY3QgPSB7IHJlY3QueCgp
LCByZWN0LnkoKSwgcmVjdC5tYXhYKCksIHJlY3QubWF4WSgpIH07CiAgICAgICAgIDo6SW52YWxp
ZGF0ZVJlY3QocGxhdGZvcm1QbHVnaW5XaWRnZXQoKSwgJmludmFsaWRSZWN0LCBmYWxzZSk7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CkBAIC05MTQsNyArOTE0LDcgQEAgdm9pZCBQbHVnaW5WaWV3
OjppbnZhbGlkYXRlUmVjdChOUFJlY3QqIAogICAgIEludFJlY3QgcihyZWN0LT5sZWZ0LCByZWN0
LT50b3AsIHJlY3QtPnJpZ2h0IC0gcmVjdC0+bGVmdCwgcmVjdC0+Ym90dG9tIC0gcmVjdC0+dG9w
KTsKIAogICAgIGlmIChtX2lzV2luZG93ZWQpIHsKLSAgICAgICAgUkVDVCBpbnZhbGlkUmVjdCA9
IHsgci54KCksIHIueSgpLCByLnJpZ2h0KCksIHIuYm90dG9tKCkgfTsKKyAgICAgICAgUkVDVCBp
bnZhbGlkUmVjdCA9IHsgci54KCksIHIueSgpLCByLm1heFgoKSwgci5tYXhZKCkgfTsKICAgICAg
ICAgSW52YWxpZGF0ZVJlY3QocGxhdGZvcm1QbHVnaW5XaWRnZXQoKSwgJmludmFsaWRSZWN0LCBG
QUxTRSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgaWYgKG1fcGx1Z2luLT5xdWlya3MoKS5jb250
YWlucyhQbHVnaW5RdWlya1Rocm90dGxlSW52YWxpZGF0ZSkpIHsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZVNhZmFyaS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lU2FmYXJpLmNwcAkocmV2aXNpb24gNzczNDcp
CisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVTYWZhcmkuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC03NjAsMjAgKzc2MCwyMCBAQCB2b2lkIFJlbmRlclRoZW1lU2FmYXJpOjpw
YWludE1lbnVMaXN0QnV0CiAgICAgRmxvYXRSZWN0IHRvcEdyYWRpZW50KHIueCgpLCByLnkoKSwg
ci53aWR0aCgpLCByLmhlaWdodCgpIC8gMi4wZik7CiAgICAgc3RydWN0IENHRnVuY3Rpb25DYWxs
YmFja3MgdG9wQ2FsbGJhY2tzID0geyAwLCBUb3BHcmFkaWVudEludGVycG9sYXRlLCBOVUxMIH07
CiAgICAgUmV0YWluUHRyPENHRnVuY3Rpb25SZWY+IHRvcEZ1bmN0aW9uKEFkb3B0Q0YsIENHRnVu
Y3Rpb25DcmVhdGUoTlVMTCwgMSwgTlVMTCwgNCwgTlVMTCwgJnRvcENhbGxiYWNrcykpOwotICAg
IFJldGFpblB0cjxDR1NoYWRpbmdSZWY+IHRvcFNoYWRpbmcoQWRvcHRDRiwgQ0dTaGFkaW5nQ3Jl
YXRlQXhpYWwoY3NwYWNlLCBDR1BvaW50TWFrZSh0b3BHcmFkaWVudC54KCksIHRvcEdyYWRpZW50
LnkoKSksIENHUG9pbnRNYWtlKHRvcEdyYWRpZW50LngoKSwgdG9wR3JhZGllbnQuYm90dG9tKCkp
LCB0b3BGdW5jdGlvbi5nZXQoKSwgZmFsc2UsIGZhbHNlKSk7CisgICAgUmV0YWluUHRyPENHU2hh
ZGluZ1JlZj4gdG9wU2hhZGluZyhBZG9wdENGLCBDR1NoYWRpbmdDcmVhdGVBeGlhbChjc3BhY2Us
IENHUG9pbnRNYWtlKHRvcEdyYWRpZW50LngoKSwgdG9wR3JhZGllbnQueSgpKSwgQ0dQb2ludE1h
a2UodG9wR3JhZGllbnQueCgpLCB0b3BHcmFkaWVudC5tYXhZKCkpLCB0b3BGdW5jdGlvbi5nZXQo
KSwgZmFsc2UsIGZhbHNlKSk7CiAKICAgICBGbG9hdFJlY3QgYm90dG9tR3JhZGllbnQoci54KCkg
KyByYWRpdXMsIHIueSgpICsgci5oZWlnaHQoKSAvIDIuMGYsIHIud2lkdGgoKSAtIDIuMGYgKiBy
YWRpdXMsIHIuaGVpZ2h0KCkgLyAyLjBmKTsKICAgICBzdHJ1Y3QgQ0dGdW5jdGlvbkNhbGxiYWNr
cyBib3R0b21DYWxsYmFja3MgPSB7IDAsIEJvdHRvbUdyYWRpZW50SW50ZXJwb2xhdGUsIE5VTEwg
fTsKICAgICBSZXRhaW5QdHI8Q0dGdW5jdGlvblJlZj4gYm90dG9tRnVuY3Rpb24oQWRvcHRDRiwg
Q0dGdW5jdGlvbkNyZWF0ZShOVUxMLCAxLCBOVUxMLCA0LCBOVUxMLCAmYm90dG9tQ2FsbGJhY2tz
KSk7Ci0gICAgUmV0YWluUHRyPENHU2hhZGluZ1JlZj4gYm90dG9tU2hhZGluZyhBZG9wdENGLCBD
R1NoYWRpbmdDcmVhdGVBeGlhbChjc3BhY2UsIENHUG9pbnRNYWtlKGJvdHRvbUdyYWRpZW50Lngo
KSwgIGJvdHRvbUdyYWRpZW50LnkoKSksIENHUG9pbnRNYWtlKGJvdHRvbUdyYWRpZW50LngoKSwg
Ym90dG9tR3JhZGllbnQuYm90dG9tKCkpLCBib3R0b21GdW5jdGlvbi5nZXQoKSwgZmFsc2UsIGZh
bHNlKSk7CisgICAgUmV0YWluUHRyPENHU2hhZGluZ1JlZj4gYm90dG9tU2hhZGluZyhBZG9wdENG
LCBDR1NoYWRpbmdDcmVhdGVBeGlhbChjc3BhY2UsIENHUG9pbnRNYWtlKGJvdHRvbUdyYWRpZW50
LngoKSwgIGJvdHRvbUdyYWRpZW50LnkoKSksIENHUG9pbnRNYWtlKGJvdHRvbUdyYWRpZW50Lngo
KSwgYm90dG9tR3JhZGllbnQubWF4WSgpKSwgYm90dG9tRnVuY3Rpb24uZ2V0KCksIGZhbHNlLCBm
YWxzZSkpOwogCiAgICAgc3RydWN0IENHRnVuY3Rpb25DYWxsYmFja3MgbWFpbkNhbGxiYWNrcyA9
IHsgMCwgTWFpbkdyYWRpZW50SW50ZXJwb2xhdGUsIE5VTEwgfTsKICAgICBSZXRhaW5QdHI8Q0dG
dW5jdGlvblJlZj4gbWFpbkZ1bmN0aW9uKEFkb3B0Q0YsIENHRnVuY3Rpb25DcmVhdGUoTlVMTCwg
MSwgTlVMTCwgNCwgTlVMTCwgJm1haW5DYWxsYmFja3MpKTsKLSAgICBSZXRhaW5QdHI8Q0dTaGFk
aW5nUmVmPiBtYWluU2hhZGluZyhBZG9wdENGLCBDR1NoYWRpbmdDcmVhdGVBeGlhbChjc3BhY2Us
IENHUG9pbnRNYWtlKHIueCgpLCAgci55KCkpLCBDR1BvaW50TWFrZShyLngoKSwgci5ib3R0b20o
KSksIG1haW5GdW5jdGlvbi5nZXQoKSwgZmFsc2UsIGZhbHNlKSk7CisgICAgUmV0YWluUHRyPENH
U2hhZGluZ1JlZj4gbWFpblNoYWRpbmcoQWRvcHRDRiwgQ0dTaGFkaW5nQ3JlYXRlQXhpYWwoY3Nw
YWNlLCBDR1BvaW50TWFrZShyLngoKSwgIHIueSgpKSwgQ0dQb2ludE1ha2Uoci54KCksIHIubWF4
WSgpKSwgbWFpbkZ1bmN0aW9uLmdldCgpLCBmYWxzZSwgZmFsc2UpKTsKIAogICAgIFJldGFpblB0
cjxDR1NoYWRpbmdSZWY+IGxlZnRTaGFkaW5nKEFkb3B0Q0YsIENHU2hhZGluZ0NyZWF0ZUF4aWFs
KGNzcGFjZSwgQ0dQb2ludE1ha2Uoci54KCksICByLnkoKSksIENHUG9pbnRNYWtlKHIueCgpICsg
cmFkaXVzLCByLnkoKSksIG1haW5GdW5jdGlvbi5nZXQoKSwgZmFsc2UsIGZhbHNlKSk7CiAKLSAg
ICBSZXRhaW5QdHI8Q0dTaGFkaW5nUmVmPiByaWdodFNoYWRpbmcoQWRvcHRDRiwgQ0dTaGFkaW5n
Q3JlYXRlQXhpYWwoY3NwYWNlLCBDR1BvaW50TWFrZShyLnJpZ2h0KCksICByLnkoKSksIENHUG9p
bnRNYWtlKHIucmlnaHQoKSAtIHJhZGl1cywgci55KCkpLCBtYWluRnVuY3Rpb24uZ2V0KCksIGZh
bHNlLCBmYWxzZSkpOworICAgIFJldGFpblB0cjxDR1NoYWRpbmdSZWY+IHJpZ2h0U2hhZGluZyhB
ZG9wdENGLCBDR1NoYWRpbmdDcmVhdGVBeGlhbChjc3BhY2UsIENHUG9pbnRNYWtlKHIubWF4WCgp
LCAgci55KCkpLCBDR1BvaW50TWFrZShyLm1heFgoKSAtIHJhZGl1cywgci55KCkpLCBtYWluRnVu
Y3Rpb24uZ2V0KCksIGZhbHNlLCBmYWxzZSkpOwogICAgIHBhaW50SW5mby5jb250ZXh0LT5zYXZl
KCk7CiAgICAgQ0dDb250ZXh0Q2xpcFRvUmVjdChjb250ZXh0LCBib3VuZC5yZWN0KCkpOwogICAg
IHBhaW50SW5mby5jb250ZXh0LT5hZGRSb3VuZGVkUmVjdENsaXAoYm91bmQpOwpAQCAtODE4LDcg
KzgxOCw3IEBAIGJvb2wgUmVuZGVyVGhlbWVTYWZhcmk6OnBhaW50TWVudUxpc3RCdXQKICAgICBm
bG9hdCBjZW50ZXJZID0gYm91bmRzLnkoKSArIGJvdW5kcy5oZWlnaHQoKSAvIDIuMGY7CiAgICAg
ZmxvYXQgYXJyb3dIZWlnaHQgPSBiYXNlQXJyb3dIZWlnaHQgKiBmb250U2NhbGU7CiAgICAgZmxv
YXQgYXJyb3dXaWR0aCA9IGJhc2VBcnJvd1dpZHRoICogZm9udFNjYWxlOwotICAgIGZsb2F0IGxl
ZnRFZGdlID0gYm91bmRzLnJpZ2h0KCkgLSBhcnJvd1BhZGRpbmdSaWdodCAtIGFycm93V2lkdGg7
CisgICAgZmxvYXQgbGVmdEVkZ2UgPSBib3VuZHMubWF4WCgpIC0gYXJyb3dQYWRkaW5nUmlnaHQg
LSBhcnJvd1dpZHRoOwogCiAgICAgaWYgKGJvdW5kcy53aWR0aCgpIDwgYXJyb3dXaWR0aCArIGFy
cm93UGFkZGluZ0xlZnQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTg0OCwxMSArODQ4LDEx
IEBAIGJvb2wgUmVuZGVyVGhlbWVTYWZhcmk6OnBhaW50TWVudUxpc3RCdXQKICAgICBwYWludElu
Zm8uY29udGV4dC0+c2V0U3Ryb2tlU3R5bGUoU29saWRTdHJva2UpOwogICAgIHBhaW50SW5mby5j
b250ZXh0LT5zZXRTdHJva2VDb2xvcihsZWZ0U2VwYXJhdG9yQ29sb3IsIENvbG9yU3BhY2VEZXZp
Y2VSR0IpOwogICAgIHBhaW50SW5mby5jb250ZXh0LT5kcmF3TGluZShJbnRQb2ludChsZWZ0RWRn
ZU9mU2VwYXJhdG9yLCBib3VuZHMueSgpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgSW50UG9pbnQobGVmdEVkZ2VPZlNlcGFyYXRvciwgYm91bmRzLmJvdHRvbSgpKSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEludFBvaW50KGxlZnRFZGdlT2ZTZXBhcmF0b3Is
IGJvdW5kcy5tYXhZKCkpKTsKIAogICAgIHBhaW50SW5mby5jb250ZXh0LT5zZXRTdHJva2VDb2xv
cihyaWdodFNlcGFyYXRvckNvbG9yLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKICAgICBwYWludElu
Zm8uY29udGV4dC0+ZHJhd0xpbmUoSW50UG9pbnQobGVmdEVkZ2VPZlNlcGFyYXRvciArIHNlcGFy
YXRvclNwYWNlLCBib3VuZHMueSgpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
SW50UG9pbnQobGVmdEVkZ2VPZlNlcGFyYXRvciArIHNlcGFyYXRvclNwYWNlLCBib3VuZHMuYm90
dG9tKCkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW50UG9pbnQobGVmdEVk
Z2VPZlNlcGFyYXRvciArIHNlcGFyYXRvclNwYWNlLCBib3VuZHMubWF4WSgpKSk7CiAKICAgICBw
YWludEluZm8uY29udGV4dC0+cmVzdG9yZSgpOwogICAgIHJldHVybiBmYWxzZTsKQEAgLTk3Niw5
ICs5NzYsOSBAQCBib29sIFJlbmRlclRoZW1lU2FmYXJpOjpwYWludFNsaWRlclRyYWNrCiAgICAg
UmV0YWluUHRyPENHRnVuY3Rpb25SZWY+IG1haW5GdW5jdGlvbihBZG9wdENGLCBDR0Z1bmN0aW9u
Q3JlYXRlKE5VTEwsIDEsIE5VTEwsIDQsIE5VTEwsICZtYWluQ2FsbGJhY2tzKSk7CiAgICAgUmV0
YWluUHRyPENHU2hhZGluZ1JlZj4gbWFpblNoYWRpbmc7CiAgICAgaWYgKG8tPnN0eWxlKCktPmFw
cGVhcmFuY2UoKSA9PSBTbGlkZXJWZXJ0aWNhbFBhcnQpCi0gICAgICAgIG1haW5TaGFkaW5nLmFk
b3B0Q0YoQ0dTaGFkaW5nQ3JlYXRlQXhpYWwoY3NwYWNlLCBDR1BvaW50TWFrZShib3VuZHMucmVj
dCgpLngoKSwgIGJvdW5kcy5yZWN0KCkuYm90dG9tKCkpLCBDR1BvaW50TWFrZShib3VuZHMucmVj
dCgpLnJpZ2h0KCksIGJvdW5kcy5yZWN0KCkuYm90dG9tKCkpLCBtYWluRnVuY3Rpb24uZ2V0KCks
IGZhbHNlLCBmYWxzZSkpOworICAgICAgICBtYWluU2hhZGluZy5hZG9wdENGKENHU2hhZGluZ0Ny
ZWF0ZUF4aWFsKGNzcGFjZSwgQ0dQb2ludE1ha2UoYm91bmRzLnJlY3QoKS54KCksICBib3VuZHMu
cmVjdCgpLm1heFkoKSksIENHUG9pbnRNYWtlKGJvdW5kcy5yZWN0KCkubWF4WCgpLCBib3VuZHMu
cmVjdCgpLm1heFkoKSksIG1haW5GdW5jdGlvbi5nZXQoKSwgZmFsc2UsIGZhbHNlKSk7CiAgICAg
ZWxzZQotICAgICAgICBtYWluU2hhZGluZy5hZG9wdENGKENHU2hhZGluZ0NyZWF0ZUF4aWFsKGNz
cGFjZSwgQ0dQb2ludE1ha2UoYm91bmRzLnJlY3QoKS54KCksICBib3VuZHMucmVjdCgpLnkoKSks
IENHUG9pbnRNYWtlKGJvdW5kcy5yZWN0KCkueCgpLCBib3VuZHMucmVjdCgpLmJvdHRvbSgpKSwg
bWFpbkZ1bmN0aW9uLmdldCgpLCBmYWxzZSwgZmFsc2UpKTsKKyAgICAgICAgbWFpblNoYWRpbmcu
YWRvcHRDRihDR1NoYWRpbmdDcmVhdGVBeGlhbChjc3BhY2UsIENHUG9pbnRNYWtlKGJvdW5kcy5y
ZWN0KCkueCgpLCAgYm91bmRzLnJlY3QoKS55KCkpLCBDR1BvaW50TWFrZShib3VuZHMucmVjdCgp
LngoKSwgYm91bmRzLnJlY3QoKS5tYXhZKCkpLCBtYWluRnVuY3Rpb24uZ2V0KCksIGZhbHNlLCBm
YWxzZSkpOwogCiAgICAgcGFpbnRJbmZvLmNvbnRleHQtPmFkZFJvdW5kZWRSZWN0Q2xpcChib3Vu
ZHMpOwogICAgIENHQ29udGV4dERyYXdTaGFkaW5nKGNvbnRleHQsIG1haW5TaGFkaW5nLmdldCgp
KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZVdpbi5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lV2luLmNwcAko
cmV2aXNpb24gNzczNDcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVX
aW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02OTQsNyArNjk0LDcgQEAgYm9vbCBSZW5kZXJUaGVt
ZVdpbjo6cGFpbnRJbm5lclNwaW5CdXR0bwogICAgIEludFJlY3QgdXBSZWN0KHIpOwogICAgIHVw
UmVjdC5zZXRIZWlnaHQoci5oZWlnaHQoKSAvIDIpOwogICAgIEludFJlY3QgZG93blJlY3Qocik7
Ci0gICAgZG93blJlY3Quc2V0WSh1cFJlY3QuYm90dG9tKCkpOworICAgIGRvd25SZWN0LnNldFko
dXBSZWN0Lm1heFkoKSk7CiAgICAgZG93blJlY3Quc2V0SGVpZ2h0KHIuaGVpZ2h0KCkgLSB1cFJl
Y3QuaGVpZ2h0KCkpOwogICAgIGRyYXdDb250cm9sKGkuY29udGV4dCwgbywgc3BpbkJ1dHRvblRo
ZW1lKCksIGdldFRoZW1lRGF0YShvLCBTcGluQnV0dG9uVXApLCB1cFJlY3QpOwogICAgIGRyYXdD
b250cm9sKGkuY29udGV4dCwgbywgc3BpbkJ1dHRvblRoZW1lKCksIGdldFRoZW1lRGF0YShvLCBT
cGluQnV0dG9uRG93biksIGRvd25SZWN0KTsKQEAgLTc4OCw3ICs3ODgsNyBAQCBib29sIFJlbmRl
clRoZW1lV2luOjpwYWludE1lbnVMaXN0QnV0dG9uCiAgICAgSW50UmVjdCBidXR0b25SZWN0KHIp
OwogICAgIGJ1dHRvblJlY3QuaW5mbGF0ZSgtYm9yZGVyVGhpY2tuZXNzKTsKICAgICBpZiAoby0+
c3R5bGUoKS0+ZGlyZWN0aW9uKCkgPT0gTFRSKQotICAgICAgICBidXR0b25SZWN0LnNldFgoYnV0
dG9uUmVjdC5yaWdodCgpIC0gZHJvcERvd25CdXR0b25XaWR0aCk7CisgICAgICAgIGJ1dHRvblJl
Y3Quc2V0WChidXR0b25SZWN0Lm1heFgoKSAtIGRyb3BEb3duQnV0dG9uV2lkdGgpOwogICAgIGJ1
dHRvblJlY3Quc2V0V2lkdGgoZHJvcERvd25CdXR0b25XaWR0aCk7CiAKICAgICBpZiAoaXNSdW5u
aW5nT25WaXN0YU9yTGF0ZXIoKSkgewpJbmRleDogU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dl
YmtpdHdlYnZpZXcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93
ZWJraXR3ZWJ2aWV3LmNwcAkocmV2aXNpb24gNzczNDcpCisrKyBTb3VyY2UvV2ViS2l0L2d0ay93
ZWJraXQvd2Via2l0d2Vidmlldy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwMiw3ICs0MDIsNyBA
QCBzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X3dlYl92aWV3X3BvcHVwX21lCiAgICAgICAgIC8vIElm
IHRoZXJlJ3MgYSBmb2N1c2VkIGVsbWVudCwgdXNlIGl0cyBsb2NhdGlvbi4KICAgICAgICAgaWYg
KE5vZGUqIGZvY3VzZWROb2RlID0gZ2V0Rm9jdXNlZE5vZGUoZnJhbWUpKSB7CiAgICAgICAgICAg
ICBJbnRSZWN0IGZvY3VzZWROb2RlUmVjdCA9IGZvY3VzZWROb2RlLT5nZXRSZWN0KCk7Ci0gICAg
ICAgICAgICBsb2NhdGlvbiA9IEludFBvaW50KHJpZ2h0QWxpZ25lZCA/IGZvY3VzZWROb2RlUmVj
dC5yaWdodCgpIDogZm9jdXNlZE5vZGVSZWN0LngoKSwgZm9jdXNlZE5vZGVSZWN0LmJvdHRvbSgp
KTsKKyAgICAgICAgICAgIGxvY2F0aW9uID0gSW50UG9pbnQocmlnaHRBbGlnbmVkID8gZm9jdXNl
ZE5vZGVSZWN0Lm1heFgoKSA6IGZvY3VzZWROb2RlUmVjdC54KCksIGZvY3VzZWROb2RlUmVjdC5t
YXhZKCkpOwogICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIGxvY2F0aW9uID0gSW50UG9pbnQo
cmlnaHRBbGlnbmVkID8gdmlldy0+Y29udGVudHNXaWR0aCgpIC0gY29udGV4dE1lbnVNYXJnaW4g
OiBjb250ZXh0TWVudU1hcmdpbiwgY29udGV4dE1lbnVNYXJnaW4pOwogICAgIH0gZWxzZSB7CkBA
IC00NDAsNyArNDQwLDcgQEAgc3RhdGljIGdib29sZWFuIHdlYmtpdF93ZWJfdmlld19wb3B1cF9t
ZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydENhcmV0UmVjdC53aWR0aCgp
ICsgZXh0cmFXaWR0aFRvRW5kT2ZMaW5lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzdGFydENhcmV0UmVjdC5oZWlnaHQoKSk7CiAKLSAgICAgICAgbG9jYXRpb24gPSBJbnRQb2lu
dChyaWdodEFsaWduZWQgPyBmaXJzdFJlY3QucmlnaHQoKSA6IGZpcnN0UmVjdC54KCksIGZpcnN0
UmVjdC5ib3R0b20oKSk7CisgICAgICAgIGxvY2F0aW9uID0gSW50UG9pbnQocmlnaHRBbGlnbmVk
ID8gZmlyc3RSZWN0Lm1heFgoKSA6IGZpcnN0UmVjdC54KCksIGZpcnN0UmVjdC5tYXhZKCkpOwog
ICAgIH0KIAogICAgIC8vIEZJWE1FOiBUaGUgSW50U2l6ZSgwLCAtMSkgaXMgYSBoYWNrIHRvIGdl
dCB0aGUgaGl0LXRlc3RpbmcgdG8gcmVzdWx0IGluIHRoZSBzZWxlY3RlZCBlbGVtZW50LgpJbmRl
eDogU291cmNlL1dlYktpdC93aW4vRE9NSFRNTENsYXNzZXMuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvd2luL0RPTUhUTUxDbGFzc2VzLmNwcAkocmV2aXNpb24gNzczNDcpCisrKyBT
b3VyY2UvV2ViS2l0L3dpbi9ET01IVE1MQ2xhc3Nlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEz
MTQsOCArMTMxNCw4IEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgRE9NSFRNTElucHV0RWwK
ICAgICBJbnRSZWN0IGNvcmVSZWN0ID0gdmlldy0+Y29udGVudHNUb1NjcmVlbihyZW5kZXJlci0+
YWJzb2x1dGVCb3VuZGluZ0JveFJlY3QoKSk7CiAgICAgcmVjdC0+bGVmdCA9IGNvcmVSZWN0Lngo
KTsKICAgICByZWN0LT50b3AgPSBjb3JlUmVjdC55KCk7Ci0gICAgcmVjdC0+cmlnaHQgPSBjb3Jl
UmVjdC5yaWdodCgpOwotICAgIHJlY3QtPmJvdHRvbSA9IGNvcmVSZWN0LmJvdHRvbSgpOworICAg
IHJlY3QtPnJpZ2h0ID0gY29yZVJlY3QubWF4WCgpOworICAgIHJlY3QtPmJvdHRvbSA9IGNvcmVS
ZWN0Lm1heFkoKTsKIAogICAgIHJldHVybiBTX09LOwogfQpJbmRleDogU291cmNlL1dlYktpdC93
aW4vV2ViRnJhbWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvd2luL1dlYkZyYW1l
LmNwcAkocmV2aXNpb24gNzczNDcpCisrKyBTb3VyY2UvV2ViS2l0L3dpbi9XZWJGcmFtZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTIwNjYsOCArMjA2Niw4IEBAIGNvbnN0IFZlY3RvcjxXZWJDb3Jl
OjpJbnRSZWN0PiYgV2ViRnJhbWUKICAgICBJbnRSZWN0IGFkanVzdGVkUmVjdCA9IEludFJlY3Qo
CiAgICAgICAgIHBhZ2VSZWN0LngoKSArIG1hcmdpblJlY3QueCgpLAogICAgICAgICBwYWdlUmVj
dC55KCkgKyBtYXJnaW5SZWN0LnkoKSwKLSAgICAgICAgcGFnZVJlY3Qud2lkdGgoKSAtIG1hcmdp
blJlY3QueCgpIC0gbWFyZ2luUmVjdC5yaWdodCgpLAotICAgICAgICBwYWdlUmVjdC5oZWlnaHQo
KSAtIG1hcmdpblJlY3QueSgpIC0gbWFyZ2luUmVjdC5ib3R0b20oKSk7CisgICAgICAgIHBhZ2VS
ZWN0LndpZHRoKCkgLSBtYXJnaW5SZWN0LngoKSAtIG1hcmdpblJlY3QubWF4WCgpLAorICAgICAg
ICBwYWdlUmVjdC5oZWlnaHQoKSAtIG1hcmdpblJlY3QueSgpIC0gbWFyZ2luUmVjdC5tYXhZKCkp
OwogCiAgICAgY29tcHV0ZVBhZ2VSZWN0c0ZvckZyYW1lKGNvcmVGcmFtZSwgYWRqdXN0ZWRSZWN0
LCBoZWFkZXJIZWlnaHQsIGZvb3RlckhlaWdodCwgMS4wLG1fcGFnZVJlY3RzLCBtX3BhZ2VIZWln
aHQpOwogICAgIApJbmRleDogU291cmNlL1dlYktpdC93aW4vV2ViU2Nyb2xsQmFyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3dpbi9XZWJTY3JvbGxCYXIuY3BwCShyZXZpc2lvbiA3
NzM0NykKKysrIFNvdXJjZS9XZWJLaXQvd2luL1dlYlNjcm9sbEJhci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTE3NCw5ICsxNzQsOSBAQCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFdlYlNjcm9s
bEJhcjo6CiAgICAgICAgIHJldHVybiBFX1BPSU5URVI7CiAgICAgSW50UmVjdCByZWN0ID0gbV9z
Y3JvbGxCYXItPmZyYW1lUmVjdCgpOwogICAgIGJvdW5kcy0+bGVmdCA9IHJlY3QueCgpOwotICAg
IGJvdW5kcy0+cmlnaHQgPSByZWN0LnJpZ2h0KCk7CisgICAgYm91bmRzLT5yaWdodCA9IHJlY3Qu
bWF4WCgpOwogICAgIGJvdW5kcy0+dG9wID0gcmVjdC55KCk7Ci0gICAgYm91bmRzLT5ib3R0b20g
PSByZWN0LmJvdHRvbSgpOworICAgIGJvdW5kcy0+Ym90dG9tID0gcmVjdC5tYXhZKCk7CiAgICAg
cmV0dXJuIFNfT0s7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvd2luL1dlYlZpZXcuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvd2luL1dlYlZpZXcuY3BwCShyZXZpc2lvbiA3NzM0
NykKKysrIFNvdXJjZS9XZWJLaXQvd2luL1dlYlZpZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04
MDIsNyArODAyLDcgQEAgdm9pZCBXZWJWaWV3OjphZGRUb0RpcnR5UmVnaW9uKGNvbnN0IEludAog
I2VuZGlmCiAKICAgICBIUkdOIG5ld1JlZ2lvbiA9IDo6Q3JlYXRlUmVjdFJnbihkaXJ0eVJlY3Qu
eCgpLCBkaXJ0eVJlY3QueSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGRpcnR5UmVjdC5yaWdodCgpLCBkaXJ0eVJlY3QuYm90dG9tKCkpOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGRpcnR5UmVjdC5tYXhYKCksIGRpcnR5UmVjdC5tYXhZKCkp
OwogICAgIGFkZFRvRGlydHlSZWdpb24obmV3UmVnaW9uKTsKIH0KIApAQCAtNDk4MCw4ICs0OTgw
LDggQEAgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBXZWJWaWV3Ojp2aXNpYgogICAgIEZsb2F0
UmVjdCB2aXNpYmxlQ29udGVudCA9IG1fcGFnZS0+bWFpbkZyYW1lKCktPnZpZXcoKS0+dmlzaWJs
ZUNvbnRlbnRSZWN0KCk7CiAgICAgcmVjdC0+bGVmdCA9IChMT05HKSB2aXNpYmxlQ29udGVudC54
KCk7CiAgICAgcmVjdC0+dG9wID0gKExPTkcpIHZpc2libGVDb250ZW50LnkoKTsKLSAgICByZWN0
LT5yaWdodCA9IChMT05HKSB2aXNpYmxlQ29udGVudC5yaWdodCgpOwotICAgIHJlY3QtPmJvdHRv
bSA9IChMT05HKSB2aXNpYmxlQ29udGVudC5ib3R0b20oKTsKKyAgICByZWN0LT5yaWdodCA9IChM
T05HKSB2aXNpYmxlQ29udGVudC5tYXhYKCk7CisgICAgcmVjdC0+Ym90dG9tID0gKExPTkcpIHZp
c2libGVDb250ZW50Lm1heFkoKTsKICAgICByZXR1cm4gU19PSzsKIH0KIApAQCAtNTM0NSw5ICs1
MzQ1LDkgQEAgdm9pZCBXZWJWaWV3OjpwcmVwYXJlQ2FuZGlkYXRlV2luZG93KEZyYQogICAgIGZv
cm0ucHRDdXJyZW50UG9zLnggPSBjYXJldC54KCk7CiAgICAgZm9ybS5wdEN1cnJlbnRQb3MueSA9
IGNhcmV0LnkoKSArIGNhcmV0LmhlaWdodCgpOwogICAgIGZvcm0ucmNBcmVhLnRvcCA9IGNhcmV0
LnkoKTsKLSAgICBmb3JtLnJjQXJlYS5ib3R0b20gPSBjYXJldC5ib3R0b20oKTsKKyAgICBmb3Jt
LnJjQXJlYS5ib3R0b20gPSBjYXJldC5tYXhZKCk7CiAgICAgZm9ybS5yY0FyZWEubGVmdCA9IGNh
cmV0LngoKTsKLSAgICBmb3JtLnJjQXJlYS5yaWdodCA9IGNhcmV0LnJpZ2h0KCk7CisgICAgZm9y
bS5yY0FyZWEucmlnaHQgPSBjYXJldC5tYXhYKCk7CiAgICAgSU1NRGljdDo6ZGljdCgpLnNldENh
bmRpZGF0ZVdpbmRvdyhoSW5wdXRDb250ZXh0LCAmZm9ybSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQvd2luL1dlYkNvcmVTdXBwb3J0L0VtYmVkZGVkV2lkZ2V0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0L3dpbi9XZWJDb3JlU3VwcG9ydC9FbWJlZGRlZFdpZGdldC5jcHAJKHJl
dmlzaW9uIDc3MzQ3KQorKysgU291cmNlL1dlYktpdC93aW4vV2ViQ29yZVN1cHBvcnQvRW1iZWRk
ZWRXaWRnZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjAsNyArMTIwLDcgQEAgdm9pZCBFbWJl
ZGRlZFdpZGdldDo6ZnJhbWVSZWN0c0NoYW5nZWQoKQogICAgICAgICByZ24gPSA6OkNyZWF0ZVJl
Y3RSZ24oMCwgMCwgMCwgMCk7CiAgICAgICAgIDo6U2V0V2luZG93UmduKG1fd2luZG93LCByZ24s
IEZBTFNFKTsKICAgICB9IGVsc2UgewotICAgICAgICByZ24gPSA6OkNyZWF0ZVJlY3RSZ24obV9j
bGlwUmVjdC54KCksIG1fY2xpcFJlY3QueSgpLCBtX2NsaXBSZWN0LnJpZ2h0KCksIG1fY2xpcFJl
Y3QuYm90dG9tKCkpOworICAgICAgICByZ24gPSA6OkNyZWF0ZVJlY3RSZ24obV9jbGlwUmVjdC54
KCksIG1fY2xpcFJlY3QueSgpLCBtX2NsaXBSZWN0Lm1heFgoKSwgbV9jbGlwUmVjdC5tYXhZKCkp
OwogICAgICAgICA6OlNldFdpbmRvd1JnbihtX3dpbmRvdywgcmduLCBUUlVFKTsKICAgICAgfQog
CkBAIC0xMjgsNyArMTI4LDcgQEAgdm9pZCBFbWJlZGRlZFdpZGdldDo6ZnJhbWVSZWN0c0NoYW5n
ZWQoKQogICAgICAgICA6Ok1vdmVXaW5kb3cobV93aW5kb3csIG1fd2luZG93UmVjdC54KCksIG1f
d2luZG93UmVjdC55KCksIG1fd2luZG93UmVjdC53aWR0aCgpLCBtX3dpbmRvd1JlY3QuaGVpZ2h0
KCksIFRSVUUpOwogCiAgICAgIGlmIChjbGlwVG9aZXJvUmVjdCkgewotICAgICAgICByZ24gPSA6
OkNyZWF0ZVJlY3RSZ24obV9jbGlwUmVjdC54KCksIG1fY2xpcFJlY3QueSgpLCBtX2NsaXBSZWN0
LnJpZ2h0KCksIG1fY2xpcFJlY3QuYm90dG9tKCkpOworICAgICAgICByZ24gPSA6OkNyZWF0ZVJl
Y3RSZ24obV9jbGlwUmVjdC54KCksIG1fY2xpcFJlY3QueSgpLCBtX2NsaXBSZWN0Lm1heFgoKSwg
bV9jbGlwUmVjdC5tYXhZKCkpOwogICAgICAgICA6OlNldFdpbmRvd1JnbihtX3dpbmRvdywgcmdu
LCBUUlVFKTsKICAgICB9CiB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>80880</attachid>
            <date>2011-02-01 20:40:12 -0800</date>
            <delta_ts>2011-02-02 09:29:24 -0800</delta_ts>
            <desc>Step 2: (Reviewed by Darin, just using bots to check for errors) Remove accessors.</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>41987</size>
            <attacher name="Dave Hyatt">hyatt</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1BvcHVwTWVudUNocm9taXVt
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9Qb3B1
cE1lbnVDaHJvbWl1bS5jcHAJKHJldmlzaW9uIDc3MzQ3KQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vY2hyb21pdW0vUG9wdXBNZW51Q2hyb21pdW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
NTAsNyArMzUwLDcgQEAgSW50UmVjdCBQb3B1cENvbnRhaW5lcjo6bGF5b3V0QW5kQ2FsY3VsYQog
ICAgICAgICAvLyBpbnN0ZWFkLgogICAgICAgICBGbG9hdFJlY3Qgc2NyZWVuID0gc2NyZWVuQXZh
aWxhYmxlUmVjdChtX2ZyYW1lVmlldy5nZXQoKSk7CiAgICAgICAgIHdpZGdldFJlY3QgPSBjaHJv
bWVDbGllbnQtPndpbmRvd1RvU2NyZWVuKEludFJlY3QocG9wdXBJbml0aWFsQ29vcmRpbmF0ZSwg
dGFyZ2V0U2l6ZSkpOwotICAgICAgICBpZiAod2lkZ2V0UmVjdC5ib3R0b20oKSA+IHN0YXRpY19j
YXN0PGludD4oc2NyZWVuLmJvdHRvbSgpKSkgeworICAgICAgICBpZiAod2lkZ2V0UmVjdC5tYXhZ
KCkgPiBzdGF0aWNfY2FzdDxpbnQ+KHNjcmVlbi5tYXhZKCkpKSB7CiAgICAgICAgICAgICBpZiAo
d2lkZ2V0UmVjdC55KCkgLSB3aWRnZXRSZWN0LmhlaWdodCgpIC0gdGFyZ2V0Q29udHJvbEhlaWdo
dCA+IDApIHsKICAgICAgICAgICAgICAgICAvLyBUaGVyZSBpcyBlbm91Z2ggcm9vbSB0byBvcGVu
IHVwd2FyZHMuCiAgICAgICAgICAgICAgICAgd2lkZ2V0UmVjdC5tb3ZlKDAsIC0od2lkZ2V0UmVj
dC5oZWlnaHQoKSArIHRhcmdldENvbnRyb2xIZWlnaHQpKTsKQEAgLTM1OCw3ICszNTgsNyBAQCBJ
bnRSZWN0IFBvcHVwQ29udGFpbmVyOjpsYXlvdXRBbmRDYWxjdWxhCiAgICAgICAgICAgICAgICAg
Ly8gRmlndXJlIHdoZXRoZXIgdXB3YXJkcyBvciBkb3dud2FyZHMgaGFzIG1vcmUgcm9vbSBhbmQg
c2V0IHRoZQogICAgICAgICAgICAgICAgIC8vIG1heGltdW0gbnVtYmVyIG9mIGl0ZW1zLgogICAg
ICAgICAgICAgICAgIGludCBzcGFjZUFib3ZlID0gd2lkZ2V0UmVjdC55KCkgLSB0YXJnZXRDb250
cm9sSGVpZ2h0OwotICAgICAgICAgICAgICAgIGludCBzcGFjZUJlbG93ID0gc2NyZWVuLmJvdHRv
bSgpIC0gd2lkZ2V0UmVjdC55KCk7CisgICAgICAgICAgICAgICAgaW50IHNwYWNlQmVsb3cgPSBz
Y3JlZW4ubWF4WSgpIC0gd2lkZ2V0UmVjdC55KCk7CiAgICAgICAgICAgICAgICAgaWYgKHNwYWNl
QWJvdmUgPiBzcGFjZUJlbG93KQogICAgICAgICAgICAgICAgICAgICBtX2xpc3RCb3gtPnNldE1h
eEhlaWdodChzcGFjZUFib3ZlKTsKICAgICAgICAgICAgICAgICBlbHNlCkBAIC0xMTUzLDkgKzEx
NTMsOSBAQCB2b2lkIFBvcHVwTGlzdEJveDo6c2Nyb2xsVG9SZXZlYWxSb3coaW50CiAgICAgaWYg
KHJvd1JlY3QueSgpIDwgc2Nyb2xsWSgpKSB7CiAgICAgICAgIC8vIFJvdyBpcyBhYm92ZSBjdXJy
ZW50IHNjcm9sbCBwb3NpdGlvbiwgc2Nyb2xsIHVwLgogICAgICAgICBTY3JvbGxWaWV3OjpzZXRT
Y3JvbGxQb3NpdGlvbihJbnRQb2ludCgwLCByb3dSZWN0LnkoKSkpOwotICAgIH0gZWxzZSBpZiAo
cm93UmVjdC5ib3R0b20oKSA+IHNjcm9sbFkoKSArIHZpc2libGVIZWlnaHQoKSkgeworICAgIH0g
ZWxzZSBpZiAocm93UmVjdC5tYXhZKCkgPiBzY3JvbGxZKCkgKyB2aXNpYmxlSGVpZ2h0KCkpIHsK
ICAgICAgICAgLy8gUm93IGlzIGJlbG93IGN1cnJlbnQgc2Nyb2xsIHBvc2l0aW9uLCBzY3JvbGwg
ZG93bi4KLSAgICAgICAgU2Nyb2xsVmlldzo6c2V0U2Nyb2xsUG9zaXRpb24oSW50UG9pbnQoMCwg
cm93UmVjdC5ib3R0b20oKSAtIHZpc2libGVIZWlnaHQoKSkpOworICAgICAgICBTY3JvbGxWaWV3
OjpzZXRTY3JvbGxQb3NpdGlvbihJbnRQb2ludCgwLCByb3dSZWN0Lm1heFkoKSAtIHZpc2libGVI
ZWlnaHQoKSkpOwogICAgIH0KIH0KIApAQCAtMTM2Miw3ICsxMzYyLDcgQEAgdm9pZCBQb3B1cExp
c3RCb3g6OmxheW91dCgpCiAgICAgfQogCiAgICAgcmVzaXplKHdpbmRvd1dpZHRoLCB3aW5kb3dI
ZWlnaHQpOwotICAgIHNldENvbnRlbnRzU2l6ZShJbnRTaXplKGNvbnRlbnRXaWR0aCwgZ2V0Um93
Qm91bmRzKG51bUl0ZW1zKCkgLSAxKS5ib3R0b20oKSkpOworICAgIHNldENvbnRlbnRzU2l6ZShJ
bnRTaXplKGNvbnRlbnRXaWR0aCwgZ2V0Um93Qm91bmRzKG51bUl0ZW1zKCkgLSAxKS5tYXhZKCkp
KTsKIAogICAgIGlmIChob3N0V2luZG93KCkpCiAgICAgICAgIHNjcm9sbFRvUmV2ZWFsU2VsZWN0
aW9uKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3Qu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJl
Y3QuaAkocmV2aXNpb24gNzczNDcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9GbG9hdFJlY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMTAyLDExICsxMDIsNiBAQCBwdWJsaWM6
CiAKICAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiBtX3NpemUuaXNFbXB0eSgpOyB9
CiAKLSAgICBmbG9hdCBsZWZ0KCkgY29uc3QgeyByZXR1cm4geCgpOyB9Ci0gICAgZmxvYXQgcmln
aHQoKSBjb25zdCB7IHJldHVybiB4KCkgKyB3aWR0aCgpOyB9Ci0gICAgZmxvYXQgdG9wKCkgY29u
c3QgeyByZXR1cm4geSgpOyB9Ci0gICAgZmxvYXQgYm90dG9tKCkgY29uc3QgeyByZXR1cm4geSgp
ICsgaGVpZ2h0KCk7IH0KLQogICAgIEZsb2F0UG9pbnQgY2VudGVyKCkgY29uc3QgeyByZXR1cm4g
RmxvYXRQb2ludCh4KCkgKyB3aWR0aCgpIC8gMiwgeSgpICsgaGVpZ2h0KCkgLyAyKTsgfQogCiAg
ICAgdm9pZCBtb3ZlKGNvbnN0IEZsb2F0U2l6ZSYgZGVsdGEpIHsgbV9sb2NhdGlvbiArPSBkZWx0
YTsgfSAKQEAgLTEyNCw3ICsxMTksNiBAQCBwdWJsaWM6CiAgICAgICAgIHsgcmV0dXJuIHB4ID49
IHgoKSAmJiBweCA8PSBtYXhYKCkgJiYgcHkgPj0geSgpICYmIHB5IDw9IG1heFkoKTsgfQogICAg
IGJvb2wgY29udGFpbnMoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpIGNvbnN0IHsgcmV0dXJuIGNv
bnRhaW5zKHBvaW50LngoKSwgcG9pbnQueSgpKTsgfQogCi0KICAgICB2b2lkIGluZmxhdGVYKGZs
b2F0IGR4KSB7CiAgICAgICAgIG1fbG9jYXRpb24uc2V0WChtX2xvY2F0aW9uLngoKSAtIGR4KTsK
ICAgICAgICAgbV9zaXplLnNldFdpZHRoKG1fc2l6ZS53aWR0aCgpICsgZHggKyBkeCk7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbnRSZWN0LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW50UmVjdC5oCShyZXZpc2lvbiA3
NzM0NykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ludFJlY3QuaAkod29y
a2luZyBjb3B5KQpAQCAtMTAzLDkgKzEwMyw2IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgaXNFbXB0
eSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZS5pc0VtcHR5KCk7IH0KIAotICAgIGludCByaWdodCgp
IGNvbnN0IHsgcmV0dXJuIHgoKSArIHdpZHRoKCk7IH0KLSAgICBpbnQgYm90dG9tKCkgY29uc3Qg
eyByZXR1cm4geSgpICsgaGVpZ2h0KCk7IH0KLQogICAgIC8vIE5PVEU6IFRoZSByZXN1bHQgaXMg
cm91bmRlZCB0byBpbnRlZ2VyIHZhbHVlcywgYW5kIHRodXMgbWF5IGJlIG5vdCB0aGUgZXhhY3QK
ICAgICAvLyBjZW50ZXIgcG9pbnQuCiAgICAgSW50UG9pbnQgY2VudGVyKCkgY29uc3QgeyByZXR1
cm4gSW50UG9pbnQoeCgpICsgd2lkdGgoKSAvIDIsIHkoKSArIGhlaWdodCgpIC8gMik7IH0KSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fp
cm8uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nh
aXJvL0ltYWdlQnVmZmVyQ2Fpcm8uY3BwCShyZXZpc2lvbiA3NzM0NykKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm8uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xNzMsNyArMTczLDcgQEAgUGFzc1JlZlB0cjxCeXRlQXJyYXk+IGdldEltYWdl
RGF0YShjb25zdAogICAgICAgICBkZXN0eCA9IC1vcmlnaW54OwogICAgICAgICBvcmlnaW54ID0g
MDsKICAgICB9Ci0gICAgaW50IGVuZHggPSByZWN0LnJpZ2h0KCk7CisgICAgaW50IGVuZHggPSBy
ZWN0Lm1heFgoKTsKICAgICBpZiAoZW5keCA+IHNpemUud2lkdGgoKSkKICAgICAgICAgZW5keCA9
IHNpemUud2lkdGgoKTsKICAgICBpbnQgbnVtQ29sdW1ucyA9IGVuZHggLSBvcmlnaW54OwpAQCAt
MTg0LDcgKzE4NCw3IEBAIFBhc3NSZWZQdHI8Qnl0ZUFycmF5PiBnZXRJbWFnZURhdGEoY29uc3QK
ICAgICAgICAgZGVzdHkgPSAtb3JpZ2lueTsKICAgICAgICAgb3JpZ2lueSA9IDA7CiAgICAgfQot
ICAgIGludCBlbmR5ID0gcmVjdC5ib3R0b20oKTsKKyAgICBpbnQgZW5keSA9IHJlY3QubWF4WSgp
OwogICAgIGlmIChlbmR5ID4gc2l6ZS5oZWlnaHQoKSkKICAgICAgICAgZW5keSA9IHNpemUuaGVp
Z2h0KCk7CiAgICAgaW50IG51bVJvd3MgPSBlbmR5IC0gb3JpZ2lueTsKQEAgLTIzOSw5ICsyMzks
OSBAQCB2b2lkIHB1dEltYWdlRGF0YShCeXRlQXJyYXkqJiBzb3VyY2UsIGNvCiAgICAgQVNTRVJU
KGRlc3R4ID49IDApOwogICAgIEFTU0VSVChkZXN0eCA8IHNpemUud2lkdGgoKSk7CiAgICAgQVNT
RVJUKG9yaWdpbnggPj0gMCk7Ci0gICAgQVNTRVJUKG9yaWdpbnggPD0gc291cmNlUmVjdC5yaWdo
dCgpKTsKKyAgICBBU1NFUlQob3JpZ2lueCA8PSBzb3VyY2VSZWN0Lm1heFgoKSk7CiAKLSAgICBp
bnQgZW5keCA9IGRlc3RQb2ludC54KCkgKyBzb3VyY2VSZWN0LnJpZ2h0KCk7CisgICAgaW50IGVu
ZHggPSBkZXN0UG9pbnQueCgpICsgc291cmNlUmVjdC5tYXhYKCk7CiAgICAgQVNTRVJUKGVuZHgg
PD0gc2l6ZS53aWR0aCgpKTsKIAogICAgIGludCBudW1Db2x1bW5zID0gZW5keCAtIGRlc3R4OwpA
QCAtMjUxLDkgKzI1MSw5IEBAIHZvaWQgcHV0SW1hZ2VEYXRhKEJ5dGVBcnJheSomIHNvdXJjZSwg
Y28KICAgICBBU1NFUlQoZGVzdHkgPj0gMCk7CiAgICAgQVNTRVJUKGRlc3R5IDwgc2l6ZS5oZWln
aHQoKSk7CiAgICAgQVNTRVJUKG9yaWdpbnkgPj0gMCk7Ci0gICAgQVNTRVJUKG9yaWdpbnkgPD0g
c291cmNlUmVjdC5ib3R0b20oKSk7CisgICAgQVNTRVJUKG9yaWdpbnkgPD0gc291cmNlUmVjdC5t
YXhZKCkpOwogCi0gICAgaW50IGVuZHkgPSBkZXN0UG9pbnQueSgpICsgc291cmNlUmVjdC5ib3R0
b20oKTsKKyAgICBpbnQgZW5keSA9IGRlc3RQb2ludC55KCkgKyBzb3VyY2VSZWN0Lm1heFkoKTsK
ICAgICBBU1NFUlQoZW5keSA8PSBzaXplLmhlaWdodCgpKTsKICAgICBpbnQgbnVtUm93cyA9IGVu
ZHkgLSBkZXN0eTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vR0xFUzJDYW52YXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0dMRVMyQ2FudmFzLmNwcAkocmV2aXNpb24gNzczNDcpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HTEVTMkNhbnZhcy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTMyMiw4ICszMjIsOCBAQCB2b2lkIEdMRVMyQ2FudmFzOjpk
cmF3VGV4dHVyZWRSZWN0KFRleHR1CiAgICAgbV9jb250ZXh0LT51c2VRdWFkVmVydGljZXMoKTsK
ICAgICBtX2NvbnRleHQtPnNldEFjdGl2ZVRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRV
UkUwKTsKIAotICAgIGZvciAoaW50IHkgPSB0aWxlSWR4UmVjdC55KCk7IHkgPD0gdGlsZUlkeFJl
Y3QuYm90dG9tKCk7IHkrKykgewotICAgICAgICBmb3IgKGludCB4ID0gdGlsZUlkeFJlY3QueCgp
OyB4IDw9IHRpbGVJZHhSZWN0LnJpZ2h0KCk7IHgrKykKKyAgICBmb3IgKGludCB5ID0gdGlsZUlk
eFJlY3QueSgpOyB5IDw9IHRpbGVJZHhSZWN0Lm1heFkoKTsgeSsrKSB7CisgICAgICAgIGZvciAo
aW50IHggPSB0aWxlSWR4UmVjdC54KCk7IHggPD0gdGlsZUlkeFJlY3QubWF4WCgpOyB4KyspCiAg
ICAgICAgICAgICBkcmF3VGV4dHVyZWRSZWN0VGlsZSh0ZXh0dXJlLCB0aWxlcy50aWxlSW5kZXgo
eCwgeSksIHNyY1JlY3QsIGRzdFJlY3QsIHRyYW5zZm9ybSwgYWxwaGEpOwogICAgIH0KIH0KSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVy
ZXJDaHJvbWl1bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcAkocmV2aXNpb24gNzczNDcp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRl
cmVyQ2hyb21pdW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDMsMTMgKzE0MywxMyBAQCB2b2lk
IExheWVyUmVuZGVyZXJDaHJvbWl1bTo6dXNlU2hhZGVyKHVuCiAKIEludFJlY3QgTGF5ZXJSZW5k
ZXJlckNocm9taXVtOjp2ZXJ0aWNhbFNjcm9sbGJhclJlY3QoY29uc3QgSW50UmVjdCYgdmlzaWJs
ZVJlY3QsIGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KQogewotICAgIEludFJlY3QgdmVydGlj
YWxTY3JvbGxiYXIoSW50UG9pbnQoY29udGVudFJlY3QucmlnaHQoKSwgY29udGVudFJlY3QueSgp
KSwgSW50U2l6ZSh2aXNpYmxlUmVjdC53aWR0aCgpIC0gY29udGVudFJlY3Qud2lkdGgoKSwgdmlz
aWJsZVJlY3QuaGVpZ2h0KCkpKTsKKyAgICBJbnRSZWN0IHZlcnRpY2FsU2Nyb2xsYmFyKEludFBv
aW50KGNvbnRlbnRSZWN0Lm1heFgoKSwgY29udGVudFJlY3QueSgpKSwgSW50U2l6ZSh2aXNpYmxl
UmVjdC53aWR0aCgpIC0gY29udGVudFJlY3Qud2lkdGgoKSwgdmlzaWJsZVJlY3QuaGVpZ2h0KCkp
KTsKICAgICByZXR1cm4gdmVydGljYWxTY3JvbGxiYXI7CiB9CiAKIEludFJlY3QgTGF5ZXJSZW5k
ZXJlckNocm9taXVtOjpob3Jpem9udGFsU2Nyb2xsYmFyUmVjdChjb25zdCBJbnRSZWN0JiB2aXNp
YmxlUmVjdCwgY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QpCiB7Ci0gICAgSW50UmVjdCBob3Jp
em9udGFsU2Nyb2xsYmFyKEludFBvaW50KGNvbnRlbnRSZWN0LngoKSwgY29udGVudFJlY3QuYm90
dG9tKCkpLCBJbnRTaXplKHZpc2libGVSZWN0LndpZHRoKCksIHZpc2libGVSZWN0LmhlaWdodCgp
IC0gY29udGVudFJlY3QuaGVpZ2h0KCkpKTsKKyAgICBJbnRSZWN0IGhvcml6b250YWxTY3JvbGxi
YXIoSW50UG9pbnQoY29udGVudFJlY3QueCgpLCBjb250ZW50UmVjdC5tYXhZKCkpLCBJbnRTaXpl
KHZpc2libGVSZWN0LndpZHRoKCksIHZpc2libGVSZWN0LmhlaWdodCgpIC0gY29udGVudFJlY3Qu
aGVpZ2h0KCkpKTsKICAgICByZXR1cm4gaG9yaXpvbnRhbFNjcm9sbGJhcjsKIH0KIApAQCAtNzI0
LDcgKzcyNCw3IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpzZXRTY2lzc29yVG8KICAg
ICAvLyBCdXQsIGlmIHJlbmRlcmluZyB0byBvZmZzY3JlZW4gdGV4dHVyZSwgd2UgcmV2ZXJzZSBv
dXIgc2Vuc2Ugb2YgJ3Vwc2lkZSBkb3duJy4KICAgICBpbnQgc2Npc3Nvclk7CiAgICAgaWYgKG1f
Y3VycmVudFJlbmRlclN1cmZhY2UgPT0gbV9kZWZhdWx0UmVuZGVyU3VyZmFjZSAmJiAhbV9jb21w
b3NpdGVPZmZzY3JlZW4pCi0gICAgICAgIHNjaXNzb3JZID0gbV9jdXJyZW50UmVuZGVyU3VyZmFj
ZS0+bV9jb250ZW50UmVjdC5oZWlnaHQoKSAtIChzY2lzc29yUmVjdC5ib3R0b20oKSAtIG1fY3Vy
cmVudFJlbmRlclN1cmZhY2UtPm1fY29udGVudFJlY3QueSgpKTsKKyAgICAgICAgc2Npc3Nvclkg
PSBtX2N1cnJlbnRSZW5kZXJTdXJmYWNlLT5tX2NvbnRlbnRSZWN0LmhlaWdodCgpIC0gKHNjaXNz
b3JSZWN0Lm1heFkoKSAtIG1fY3VycmVudFJlbmRlclN1cmZhY2UtPm1fY29udGVudFJlY3QueSgp
KTsKICAgICBlbHNlCiAgICAgICAgIHNjaXNzb3JZID0gc2Npc3NvclJlY3QueSgpIC0gbV9jdXJy
ZW50UmVuZGVyU3VyZmFjZS0+bV9jb250ZW50UmVjdC55KCk7CiAgICAgR0xDKG1fY29udGV4dC5n
ZXQoKSwgbV9jb250ZXh0LT5zY2lzc29yKHNjaXNzb3JYLCBzY2lzc29yWSwgc2Npc3NvclJlY3Qu
d2lkdGgoKSwgc2Npc3NvclJlY3QuaGVpZ2h0KCkpKTsKQEAgLTc1MCw5ICs3NTAsOSBAQCBib29s
IExheWVyUmVuZGVyZXJDaHJvbWl1bTo6Y2hlY2tUZXh0dXJlCiB2b2lkIExheWVyUmVuZGVyZXJD
aHJvbWl1bTo6c2V0RHJhd1ZpZXdwb3J0UmVjdChjb25zdCBJbnRSZWN0JiBkcmF3UmVjdCwgYm9v
bCBmbGlwWSkKIHsKICAgICBpZiAoZmxpcFkpCi0gICAgICAgIG1fcHJvamVjdGlvbk1hdHJpeCA9
IG9ydGhvTWF0cml4KGRyYXdSZWN0LngoKSwgZHJhd1JlY3QucmlnaHQoKSwgZHJhd1JlY3QuYm90
dG9tKCksIGRyYXdSZWN0LnkoKSk7CisgICAgICAgIG1fcHJvamVjdGlvbk1hdHJpeCA9IG9ydGhv
TWF0cml4KGRyYXdSZWN0LngoKSwgZHJhd1JlY3QubWF4WCgpLCBkcmF3UmVjdC5tYXhZKCksIGRy
YXdSZWN0LnkoKSk7CiAgICAgZWxzZQotICAgICAgICBtX3Byb2plY3Rpb25NYXRyaXggPSBvcnRo
b01hdHJpeChkcmF3UmVjdC54KCksIGRyYXdSZWN0LnJpZ2h0KCksIGRyYXdSZWN0LnkoKSwgZHJh
d1JlY3QuYm90dG9tKCkpOworICAgICAgICBtX3Byb2plY3Rpb25NYXRyaXggPSBvcnRob01hdHJp
eChkcmF3UmVjdC54KCksIGRyYXdSZWN0Lm1heFgoKSwgZHJhd1JlY3QueSgpLCBkcmF3UmVjdC5t
YXhZKCkpOwogICAgIEdMQyhtX2NvbnRleHQuZ2V0KCksIG1fY29udGV4dC0+dmlld3BvcnQoMCwg
MCwgZHJhd1JlY3Qud2lkdGgoKSwgZHJhd1JlY3QuaGVpZ2h0KCkpKTsKIH0KIApJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJUaWxlckNocm9taXVt
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9MYXllclRpbGVyQ2hyb21pdW0uY3BwCShyZXZpc2lvbiA3NzM0NykKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGlsZXJDaHJvbWl1bS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTE0NSw4ICsxNDUsOCBAQCB2b2lkIExheWVyVGlsZXJDaHJvbWl1
bTo6Y29udGVudFJlY3RUb1RpCiAKICAgICBsZWZ0ID0gbGF5ZXJSZWN0LngoKSAvIG1fdGlsZVNp
emUud2lkdGgoKTsKICAgICB0b3AgPSBsYXllclJlY3QueSgpIC8gbV90aWxlU2l6ZS5oZWlnaHQo
KTsKLSAgICByaWdodCA9IChsYXllclJlY3QucmlnaHQoKSAtIDEpIC8gbV90aWxlU2l6ZS53aWR0
aCgpOwotICAgIGJvdHRvbSA9IChsYXllclJlY3QuYm90dG9tKCkgLSAxKSAvIG1fdGlsZVNpemUu
aGVpZ2h0KCk7CisgICAgcmlnaHQgPSAobGF5ZXJSZWN0Lm1heFgoKSAtIDEpIC8gbV90aWxlU2l6
ZS53aWR0aCgpOworICAgIGJvdHRvbSA9IChsYXllclJlY3QubWF4WSgpIC0gMSkgLyBtX3RpbGVT
aXplLmhlaWdodCgpOwogfQogCiBJbnRSZWN0IExheWVyVGlsZXJDaHJvbWl1bTo6Y29udGVudFJl
Y3RUb0xheWVyUmVjdChjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCkgY29uc3QKQEAgLTQyNyw3
ICs0MjcsNyBAQCB2b2lkIExheWVyVGlsZXJDaHJvbWl1bTo6Z3Jvd0xheWVyVG9Db250CiB7CiAg
ICAgLy8gR3JvdyB0aGUgdGlsZSBhcnJheSB0byBjb250YWluIHRoaXMgY29udGVudCByZWN0Lgog
ICAgIEludFJlY3QgbGF5ZXJSZWN0ID0gY29udGVudFJlY3RUb0xheWVyUmVjdChjb250ZW50UmVj
dCk7Ci0gICAgSW50U2l6ZSBsYXllclNpemUgPSBJbnRTaXplKGxheWVyUmVjdC5yaWdodCgpLCBs
YXllclJlY3QuYm90dG9tKCkpOworICAgIEludFNpemUgbGF5ZXJTaXplID0gSW50U2l6ZShsYXll
clJlY3QubWF4WCgpLCBsYXllclJlY3QubWF4WSgpKTsKIAogICAgIEludFNpemUgbmV3U2l6ZSA9
IGxheWVyU2l6ZS5leHBhbmRlZFRvKG1fbGF5ZXJTaXplKTsKICAgICByZXNpemVMYXllcihuZXdT
aXplKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9UaWxpbmdE
YXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9n
cHUvVGlsaW5nRGF0YS5jcHAJKHJldmlzaW9uIDc3MzQ3KQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZ3B1L1RpbGluZ0RhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04OSw5
ICs4OSw5IEBAIEludFJlY3QgVGlsaW5nRGF0YTo6dGlsZUJvdW5kc1dpdGhCb3JkZXIKIAogICAg
IGlmIChtX2JvcmRlclRleGVscykgewogICAgICAgICBpbnQgeDEgPSBib3VuZHMueCgpOwotICAg
ICAgICBpbnQgeDIgPSBib3VuZHMucmlnaHQoKTsKKyAgICAgICAgaW50IHgyID0gYm91bmRzLm1h
eFgoKTsKICAgICAgICAgaW50IHkxID0gYm91bmRzLnkoKTsKLSAgICAgICAgaW50IHkyID0gYm91
bmRzLmJvdHRvbSgpOworICAgICAgICBpbnQgeTIgPSBib3VuZHMubWF4WSgpOwogCiAgICAgICAg
IGlmICh0aWxlWEluZGV4KHRpbGUpID4gMCkKICAgICAgICAgICAgIHgxLS07CkBAIC0xODIsOCAr
MTgyLDggQEAgSW50UmVjdCBUaWxpbmdEYXRhOjpvdmVybGFwcGVkVGlsZUluZGljZQogewogICAg
IGludCB4ID0gdGlsZVhJbmRleEZyb21TcmNDb29yZChzcmNSZWN0LngoKSk7CiAgICAgaW50IHkg
PSB0aWxlWUluZGV4RnJvbVNyY0Nvb3JkKHNyY1JlY3QueSgpKTsKLSAgICBpbnQgciA9IHRpbGVY
SW5kZXhGcm9tU3JjQ29vcmQoc3JjUmVjdC5yaWdodCgpKTsKLSAgICBpbnQgYiA9IHRpbGVZSW5k
ZXhGcm9tU3JjQ29vcmQoc3JjUmVjdC5ib3R0b20oKSk7CisgICAgaW50IHIgPSB0aWxlWEluZGV4
RnJvbVNyY0Nvb3JkKHNyY1JlY3QubWF4WCgpKTsKKyAgICBpbnQgYiA9IHRpbGVZSW5kZXhGcm9t
U3JjQ29vcmQoc3JjUmVjdC5tYXhZKCkpOwogICAgIHJldHVybiBJbnRSZWN0KHgsIHksIHIgLSB4
LCBiIC0geSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0
L0ltYWdlQnVmZmVyUXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3F0L0ltYWdlQnVmZmVyUXQuY3BwCShyZXZpc2lvbiA3NzM0NykKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ltYWdlQnVmZmVyUXQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xODgsNyArMTg4LDcgQEAgUGFzc1JlZlB0cjxCeXRlQXJyYXk+IGdldEltYWdl
RGF0YShjb25zdAogICAgIFJlZlB0cjxCeXRlQXJyYXk+IHJlc3VsdCA9IEJ5dGVBcnJheTo6Y3Jl
YXRlKHJlY3Qud2lkdGgoKSAqIHJlY3QuaGVpZ2h0KCkgKiA0KTsKICAgICB1bnNpZ25lZCBjaGFy
KiBkYXRhID0gcmVzdWx0LT5kYXRhKCk7CiAKLSAgICBpZiAocmVjdC54KCkgPCAwIHx8IHJlY3Qu
eSgpIDwgMCB8fCByZWN0LnJpZ2h0KCkgPiBzaXplLndpZHRoKCkgfHwgcmVjdC5ib3R0b20oKSA+
IHNpemUuaGVpZ2h0KCkpCisgICAgaWYgKHJlY3QueCgpIDwgMCB8fCByZWN0LnkoKSA8IDAgfHwg
cmVjdC5tYXhYKCkgPiBzaXplLndpZHRoKCkgfHwgcmVjdC5tYXhZKCkgPiBzaXplLmhlaWdodCgp
KQogICAgICAgICBtZW1zZXQoZGF0YSwgMCwgcmVzdWx0LT5sZW5ndGgoKSk7CiAKICAgICBpbnQg
b3JpZ2lueCA9IHJlY3QueCgpOwpAQCAtMTk3LDcgKzE5Nyw3IEBAIFBhc3NSZWZQdHI8Qnl0ZUFy
cmF5PiBnZXRJbWFnZURhdGEoY29uc3QKICAgICAgICAgZGVzdHggPSAtb3JpZ2lueDsKICAgICAg
ICAgb3JpZ2lueCA9IDA7CiAgICAgfQotICAgIGludCBlbmR4ID0gcmVjdC5yaWdodCgpOworICAg
IGludCBlbmR4ID0gcmVjdC5tYXhYKCk7CiAgICAgaWYgKGVuZHggPiBzaXplLndpZHRoKCkpCiAg
ICAgICAgIGVuZHggPSBzaXplLndpZHRoKCk7CiAgICAgaW50IG51bUNvbHVtbnMgPSBlbmR4IC0g
b3JpZ2lueDsKQEAgLTIwOCw3ICsyMDgsNyBAQCBQYXNzUmVmUHRyPEJ5dGVBcnJheT4gZ2V0SW1h
Z2VEYXRhKGNvbnN0CiAgICAgICAgIGRlc3R5ID0gLW9yaWdpbnk7CiAgICAgICAgIG9yaWdpbnkg
PSAwOwogICAgIH0KLSAgICBpbnQgZW5keSA9IHJlY3QuYm90dG9tKCk7CisgICAgaW50IGVuZHkg
PSByZWN0Lm1heFkoKTsKICAgICBpZiAoZW5keSA+IHNpemUuaGVpZ2h0KCkpCiAgICAgICAgIGVu
ZHkgPSBzaXplLmhlaWdodCgpOwogICAgIGludCBudW1Sb3dzID0gZW5keSAtIG9yaWdpbnk7CkBA
IC0zMDIsOSArMzAyLDkgQEAgdm9pZCBwdXRJbWFnZURhdGEoQnl0ZUFycmF5KiYgc291cmNlLCBj
bwogICAgIEFTU0VSVChkZXN0eCA+PSAwKTsKICAgICBBU1NFUlQoZGVzdHggPCBzaXplLndpZHRo
KCkpOwogICAgIEFTU0VSVChvcmlnaW54ID49IDApOwotICAgIEFTU0VSVChvcmlnaW54IDw9IHNv
dXJjZVJlY3QucmlnaHQoKSk7CisgICAgQVNTRVJUKG9yaWdpbnggPD0gc291cmNlUmVjdC5tYXhY
KCkpOwogCi0gICAgaW50IGVuZHggPSBkZXN0UG9pbnQueCgpICsgc291cmNlUmVjdC5yaWdodCgp
OworICAgIGludCBlbmR4ID0gZGVzdFBvaW50LngoKSArIHNvdXJjZVJlY3QubWF4WCgpOwogICAg
IEFTU0VSVChlbmR4IDw9IHNpemUud2lkdGgoKSk7CiAKICAgICBpbnQgbnVtQ29sdW1ucyA9IGVu
ZHggLSBkZXN0eDsKQEAgLTMxNCw5ICszMTQsOSBAQCB2b2lkIHB1dEltYWdlRGF0YShCeXRlQXJy
YXkqJiBzb3VyY2UsIGNvCiAgICAgQVNTRVJUKGRlc3R5ID49IDApOwogICAgIEFTU0VSVChkZXN0
eSA8IHNpemUuaGVpZ2h0KCkpOwogICAgIEFTU0VSVChvcmlnaW55ID49IDApOwotICAgIEFTU0VS
VChvcmlnaW55IDw9IHNvdXJjZVJlY3QuYm90dG9tKCkpOworICAgIEFTU0VSVChvcmlnaW55IDw9
IHNvdXJjZVJlY3QubWF4WSgpKTsKIAotICAgIGludCBlbmR5ID0gZGVzdFBvaW50LnkoKSArIHNv
dXJjZVJlY3QuYm90dG9tKCk7CisgICAgaW50IGVuZHkgPSBkZXN0UG9pbnQueSgpICsgc291cmNl
UmVjdC5tYXhZKCk7CiAgICAgQVNTRVJUKGVuZHkgPD0gc2l6ZS5oZWlnaHQoKSk7CiAgICAgaW50
IG51bVJvd3MgPSBlbmR5IC0gZGVzdHk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3NraWEvRmxvYXRSZWN0U2tpYS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9GbG9hdFJlY3RTa2lhLmNwcAkocmV2aXNpb24g
NzczNDcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0Zsb2F0UmVj
dFNraWEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Myw3ICs0Myw3IEBAIEZsb2F0UmVjdDo6Rmxv
YXRSZWN0KGNvbnN0IFNrUmVjdCYgcikKIAogRmxvYXRSZWN0OjpvcGVyYXRvciBTa1JlY3QoKSBj
b25zdAogewotICAgIFNrUmVjdCByZWN0ID0geyB4KCksIHkoKSwgcmlnaHQoKSwgYm90dG9tKCkg
fTsKKyAgICBTa1JlY3QgcmVjdCA9IHsgeCgpLCB5KCksIG1heFgoKSwgbWF4WSgpIH07CiAgICAg
cmV0dXJuIHJlY3Q7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3NraWEvSW1hZ2VCdWZmZXJTa2lhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9za2lhL0ltYWdlQnVmZmVyU2tpYS5jcHAJKHJldmlzaW9uIDc3MzQ3
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9JbWFnZUJ1ZmZlclNr
aWEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzcsOCArMTc3LDggQEAgUGFzc1JlZlB0cjxCeXRl
QXJyYXk+IGdldEltYWdlRGF0YShjb25zdAogCiAgICAgaWYgKHJlY3QueCgpIDwgMAogICAgICAg
ICB8fCByZWN0LnkoKSA8IDAKLSAgICAgICAgfHwgcmVjdC5yaWdodCgpID4gc2l6ZS53aWR0aCgp
Ci0gICAgICAgIHx8IHJlY3QuYm90dG9tKCkgPiBzaXplLmhlaWdodCgpKQorICAgICAgICB8fCBy
ZWN0Lm1heFgoKSA+IHNpemUud2lkdGgoKQorICAgICAgICB8fCByZWN0Lm1heFkoKSA+IHNpemUu
aGVpZ2h0KCkpCiAgICAgICAgIG1lbXNldChkYXRhLCAwLCByZXN1bHQtPmxlbmd0aCgpKTsKIAog
ICAgIGludCBvcmlnaW5YID0gcmVjdC54KCk7CkBAIC0xODcsNyArMTg3LDcgQEAgUGFzc1JlZlB0
cjxCeXRlQXJyYXk+IGdldEltYWdlRGF0YShjb25zdAogICAgICAgICBkZXN0WCA9IC1vcmlnaW5Y
OwogICAgICAgICBvcmlnaW5YID0gMDsKICAgICB9Ci0gICAgaW50IGVuZFggPSByZWN0LnJpZ2h0
KCk7CisgICAgaW50IGVuZFggPSByZWN0Lm1heFgoKTsKICAgICBpZiAoZW5kWCA+IHNpemUud2lk
dGgoKSkKICAgICAgICAgZW5kWCA9IHNpemUud2lkdGgoKTsKICAgICBpbnQgbnVtQ29sdW1ucyA9
IGVuZFggLSBvcmlnaW5YOwpAQCAtMjAxLDcgKzIwMSw3IEBAIFBhc3NSZWZQdHI8Qnl0ZUFycmF5
PiBnZXRJbWFnZURhdGEoY29uc3QKICAgICAgICAgZGVzdFkgPSAtb3JpZ2luWTsKICAgICAgICAg
b3JpZ2luWSA9IDA7CiAgICAgfQotICAgIGludCBlbmRZID0gcmVjdC5ib3R0b20oKTsKKyAgICBp
bnQgZW5kWSA9IHJlY3QubWF4WSgpOwogICAgIGlmIChlbmRZID4gc2l6ZS5oZWlnaHQoKSkKICAg
ICAgICAgZW5kWSA9IHNpemUuaGVpZ2h0KCk7CiAgICAgaW50IG51bVJvd3MgPSBlbmRZIC0gb3Jp
Z2luWTsKQEAgLTI2NSw5ICsyNjUsOSBAQCB2b2lkIHB1dEltYWdlRGF0YShCeXRlQXJyYXkqJiBz
b3VyY2UsIGNvCiAgICAgQVNTRVJUKGRlc3RYID49IDApOwogICAgIEFTU0VSVChkZXN0WCA8IHNp
emUud2lkdGgoKSk7CiAgICAgQVNTRVJUKG9yaWdpblggPj0gMCk7Ci0gICAgQVNTRVJUKG9yaWdp
blggPCBzb3VyY2VSZWN0LnJpZ2h0KCkpOworICAgIEFTU0VSVChvcmlnaW5YIDwgc291cmNlUmVj
dC5tYXhYKCkpOwogCi0gICAgaW50IGVuZFggPSBkZXN0UG9pbnQueCgpICsgc291cmNlUmVjdC5y
aWdodCgpOworICAgIGludCBlbmRYID0gZGVzdFBvaW50LngoKSArIHNvdXJjZVJlY3QubWF4WCgp
OwogICAgIEFTU0VSVChlbmRYIDw9IHNpemUud2lkdGgoKSk7CiAKICAgICBpbnQgbnVtQ29sdW1u
cyA9IGVuZFggLSBkZXN0WDsKQEAgLTI3Nyw5ICsyNzcsOSBAQCB2b2lkIHB1dEltYWdlRGF0YShC
eXRlQXJyYXkqJiBzb3VyY2UsIGNvCiAgICAgQVNTRVJUKGRlc3RZID49IDApOwogICAgIEFTU0VS
VChkZXN0WSA8IHNpemUuaGVpZ2h0KCkpOwogICAgIEFTU0VSVChvcmlnaW5ZID49IDApOwotICAg
IEFTU0VSVChvcmlnaW5ZIDwgc291cmNlUmVjdC5ib3R0b20oKSk7CisgICAgQVNTRVJUKG9yaWdp
blkgPCBzb3VyY2VSZWN0Lm1heFkoKSk7CiAKLSAgICBpbnQgZW5kWSA9IGRlc3RQb2ludC55KCkg
KyBzb3VyY2VSZWN0LmJvdHRvbSgpOworICAgIGludCBlbmRZID0gZGVzdFBvaW50LnkoKSArIHNv
dXJjZVJlY3QubWF4WSgpOwogICAgIEFTU0VSVChlbmRZIDw9IHNpemUuaGVpZ2h0KCkpOwogICAg
IGludCBudW1Sb3dzID0gZW5kWSAtIGRlc3RZOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9za2lhL0ludFJlY3RTa2lhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0ludFJlY3RTa2lhLmNwcAkocmV2aXNpb24g
NzczNDcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0ludFJlY3RT
a2lhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsMTQgKzM3LDE0IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAogSW50UmVjdDo6b3BlcmF0b3IgU2tJUmVjdCgpIGNvbnN0CiB7Ci0gICAgU2tJUmVj
dCByZWN0ID0geyB4KCksIHkoKSwgcmlnaHQoKSwgYm90dG9tKCkgfTsKKyAgICBTa0lSZWN0IHJl
Y3QgPSB7IHgoKSwgeSgpLCBtYXhYKCksIG1heFkoKSB9OwogICAgIHJldHVybiByZWN0OwogfQog
CiBJbnRSZWN0OjpvcGVyYXRvciBTa1JlY3QoKSBjb25zdAogewogICAgIFNrUmVjdCByZWN0Owot
ICAgIHJlY3Quc2V0KFNrSW50VG9TY2FsYXIoeCgpKSwgU2tJbnRUb1NjYWxhcih5KCkpLCBTa0lu
dFRvU2NhbGFyKHJpZ2h0KCkpLCBTa0ludFRvU2NhbGFyKGJvdHRvbSgpKSk7CisgICAgcmVjdC5z
ZXQoU2tJbnRUb1NjYWxhcih4KCkpLCBTa0ludFRvU2NhbGFyKHkoKSksIFNrSW50VG9TY2FsYXIo
bWF4WCgpKSwgU2tJbnRUb1NjYWxhcihtYXhZKCkpKTsKICAgICByZXR1cm4gcmVjdDsKIH0KIApJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4
dFdpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL0dyYXBoaWNzQ29udGV4dFdpbi5jcHAJKHJldmlzaW9uIDc3MzQ3KQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dFdpbi5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTE1NCw3ICsxNTQsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dFBsYXRmb3Jt
UHJpdmF0ZTo6Y2xpCiB7CiAgICAgaWYgKCFtX2hkYykKICAgICAgICAgcmV0dXJuOwotICAgIElu
dGVyc2VjdENsaXBSZWN0KG1faGRjLCBjbGlwUmVjdC54KCksIGNsaXBSZWN0LnkoKSwgY2xpcFJl
Y3QucmlnaHQoKSwgY2xpcFJlY3QuYm90dG9tKCkpOworICAgIEludGVyc2VjdENsaXBSZWN0KG1f
aGRjLCBjbGlwUmVjdC54KCksIGNsaXBSZWN0LnkoKSwgY2xpcFJlY3QubWF4WCgpLCBjbGlwUmVj
dC5tYXhZKCkpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6Y2xp
cChjb25zdCBQYXRoJikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dp
bi9JbnRSZWN0V2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy93aW4vSW50UmVjdFdpbi5jcHAJKHJldmlzaW9uIDc3MzQ3KQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ludFJlY3RXaW4uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zOCw3ICszOCw3IEBAIEludFJlY3Q6OkludFJlY3QoY29uc3QgUkVDVCYgcikKIAogSW50
UmVjdDo6b3BlcmF0b3IgUkVDVCgpIGNvbnN0CiB7Ci0gICAgUkVDVCByZWN0ID0geyB4KCksIHko
KSwgcmlnaHQoKSwgYm90dG9tKCkgfTsKKyAgICBSRUNUIHJlY3QgPSB7IHgoKSwgeSgpLCBtYXhY
KCksIG1heFkoKSB9OwogICAgIHJldHVybiByZWN0OwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vVW5pc2NyaWJlQ29udHJvbGxlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1VuaXNjcmliZUNvbnRy
b2xsZXIuY3BwCShyZXZpc2lvbiA3NzM0NykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3dpbi9VbmlzY3JpYmVDb250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzk0
LDkgKzM5NCw5IEBAIGJvb2wgVW5pc2NyaWJlQ29udHJvbGxlcjo6c2hhcGVBbmRQbGFjZUkKICAg
ICAgICAgRmxvYXRSZWN0IGdseXBoQm91bmRzID0gZm9udERhdGEtPmJvdW5kc0ZvckdseXBoKGds
eXBoKTsKICAgICAgICAgZ2x5cGhCb3VuZHMubW92ZShtX2dseXBoT3JpZ2luLngoKSwgbV9nbHlw
aE9yaWdpbi55KCkpOwogICAgICAgICBtX21pbkdseXBoQm91bmRpbmdCb3hYID0gbWluKG1fbWlu
R2x5cGhCb3VuZGluZ0JveFgsIGdseXBoQm91bmRzLngoKSk7Ci0gICAgICAgIG1fbWF4R2x5cGhC
b3VuZGluZ0JveFggPSBtYXgobV9tYXhHbHlwaEJvdW5kaW5nQm94WCwgZ2x5cGhCb3VuZHMucmln
aHQoKSk7CisgICAgICAgIG1fbWF4R2x5cGhCb3VuZGluZ0JveFggPSBtYXgobV9tYXhHbHlwaEJv
dW5kaW5nQm94WCwgZ2x5cGhCb3VuZHMubWF4WCgpKTsKICAgICAgICAgbV9taW5HbHlwaEJvdW5k
aW5nQm94WSA9IG1pbihtX21pbkdseXBoQm91bmRpbmdCb3hZLCBnbHlwaEJvdW5kcy55KCkpOwot
ICAgICAgICBtX21heEdseXBoQm91bmRpbmdCb3hZID0gbWF4KG1fbWF4R2x5cGhCb3VuZGluZ0Jv
eFksIGdseXBoQm91bmRzLmJvdHRvbSgpKTsKKyAgICAgICAgbV9tYXhHbHlwaEJvdW5kaW5nQm94
WSA9IG1heChtX21heEdseXBoQm91bmRpbmdCb3hZLCBnbHlwaEJvdW5kcy5tYXhZKCkpOwogICAg
ICAgICBtX2dseXBoT3JpZ2luLm1vdmUoYWR2YW5jZSArIG9mZnNldFgsIC1vZmZzZXRZKTsKIAog
ICAgICAgICAvLyBNdXRhdGUgdGhlIGdseXBoIGFycmF5IHRvIGNvbnRhaW4gb3VyIGFsdGVyZWQg
YWR2YW5jZXMuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9H
cmFwaGljc0NvbnRleHRXaW5DRS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvd2luY2UvR3JhcGhpY3NDb250ZXh0V2luQ0UuY3BwCShyZXZpc2lvbiA3
NzM0NykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL0dyYXBoaWNz
Q29udGV4dFdpbkNFLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjEsNyArNjEsNyBAQCBzdGF0aWMg
aW5saW5lIGludCBzdGFibGVSb3VuZChkb3VibGUgZCkKIC8vIFVubGlrZSBlbmNsb3NpbmdJbnRS
ZWN0KCksIHRoaXMgZnVuY3Rpb24gZG9lcyBzdHJpY3Qgcm91bmRpbmcuCiBzdGF0aWMgaW5saW5l
IEludFJlY3Qgcm91bmRSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcikKIHsKLSAgICByZXR1cm4gSW50
UmVjdChzdGFibGVSb3VuZChyLngoKSksIHN0YWJsZVJvdW5kKHIueSgpKSwgc3RhYmxlUm91bmQo
ci5yaWdodCgpKSAtIHN0YWJsZVJvdW5kKHIueCgpKSwgc3RhYmxlUm91bmQoci5ib3R0b20oKSkg
LSBzdGFibGVSb3VuZChyLnkoKSkpOworICAgIHJldHVybiBJbnRSZWN0KHN0YWJsZVJvdW5kKHIu
eCgpKSwgc3RhYmxlUm91bmQoci55KCkpLCBzdGFibGVSb3VuZChyLm1heFgoKSkgLSBzdGFibGVS
b3VuZChyLngoKSksIHN0YWJsZVJvdW5kKHIubWF4WSgpKSAtIHN0YWJsZVJvdW5kKHIueSgpKSk7
CiB9CiAKIC8vIFJvdGF0aW9uIHRyYW5zZm9ybWF0aW9uCkBAIC0xMjgsOCArMTI4LDggQEAgdGVt
cGxhdGU8Y2xhc3MgVHJhbnNmb3JtLCBjbGFzcyBSZWN0LCBjbAogewogICAgIFZhbHVlIHhbNF0s
IHlbNF07CiAgICAgVmFsdWUgbCwgdCwgciwgYjsKLSAgICByID0gcmVjdC5yaWdodCgpIC0gMTsK
LSAgICBiID0gcmVjdC5ib3R0b20oKSAtIDE7CisgICAgciA9IHJlY3QubWF4WCgpIC0gMTsKKyAg
ICBiID0gcmVjdC5tYXhZKCkgLSAxOwogICAgIHRyYW5zZm9ybS5tYXAocmVjdC54KCksIHJlY3Qu
eSgpLCB4LCB5KTsKICAgICB0cmFuc2Zvcm0ubWFwKHJlY3QueCgpLCBiLCB4ICsgMSwgeSArIDEp
OwogICAgIHRyYW5zZm9ybS5tYXAociwgYiwgeCArIDIsIHkgKyAyKTsKQEAgLTUwMyw5ICs1MDMs
OSBAQCBUcmFuc3BhcmVudExheWVyREM6OlRyYW5zcGFyZW50TGF5ZXJEQyhHCiAgICAgICAgICAg
ICBtX3JvdGF0aW9uLm1fcG9zdFNoaWZ0WSAtPSBtX29yaWdSZWN0LnkoKTsKIAogICAgICAgICAg
ICAgRmxvYXRQb2ludCB0b3BMZWZ0ID0gbV9kYXRhLT5tX3RyYW5zZm9ybS5tYXBQb2ludChGbG9h
dFBvaW50KHJlY3RCZWZvcmVUcmFuc2Zvcm0tPmxvY2F0aW9uKCkpKTsKLSAgICAgICAgICAgIEZs
b2F0UG9pbnQgdG9wUmlnaHQocmVjdEJlZm9yZVRyYW5zZm9ybS0+cmlnaHQoKSAtIDEsIHJlY3RC
ZWZvcmVUcmFuc2Zvcm0tPnkoKSk7CisgICAgICAgICAgICBGbG9hdFBvaW50IHRvcFJpZ2h0KHJl
Y3RCZWZvcmVUcmFuc2Zvcm0tPm1heFgoKSAtIDEsIHJlY3RCZWZvcmVUcmFuc2Zvcm0tPnkoKSk7
CiAgICAgICAgICAgICB0b3BSaWdodCA9IG1fZGF0YS0+bV90cmFuc2Zvcm0ubWFwUG9pbnQodG9w
UmlnaHQpOwotICAgICAgICAgICAgRmxvYXRQb2ludCBib3R0b21MZWZ0KHJlY3RCZWZvcmVUcmFu
c2Zvcm0tPngoKSwgcmVjdEJlZm9yZVRyYW5zZm9ybS0+Ym90dG9tKCkgLSAxKTsKKyAgICAgICAg
ICAgIEZsb2F0UG9pbnQgYm90dG9tTGVmdChyZWN0QmVmb3JlVHJhbnNmb3JtLT54KCksIHJlY3RC
ZWZvcmVUcmFuc2Zvcm0tPm1heFkoKSAtIDEpOwogICAgICAgICAgICAgYm90dG9tTGVmdCA9IG1f
ZGF0YS0+bV90cmFuc2Zvcm0ubWFwUG9pbnQoYm90dG9tTGVmdCk7CiAgICAgICAgICAgICBGbG9h
dFNpemUgc2lkZVRvcCA9IHRvcFJpZ2h0IC0gdG9wTGVmdDsKICAgICAgICAgICAgIEZsb2F0U2l6
ZSBzaWRlTGVmdCA9IGJvdHRvbUxlZnQgLSB0b3BMZWZ0OwpAQCAtNjU1LDcgKzY1NSw3IEBAIHZv
aWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3UmVjdChjb25zdCBJbnQKICAgICAgICAgaWYgKHRyUmVj
dC5oZWlnaHQoKSA8PSAwKQogICAgICAgICAgICAgdHJSZWN0LnNldEhlaWdodCgxKTsKIAotICAg
ICAgICBSZWN0YW5nbGUoZGMsIHRyUmVjdC54KCksIHRyUmVjdC55KCksIHRyUmVjdC5yaWdodCgp
LCB0clJlY3QuYm90dG9tKCkpOworICAgICAgICBSZWN0YW5nbGUoZGMsIHRyUmVjdC54KCksIHRy
UmVjdC55KCksIHRyUmVjdC5tYXhYKCksIHRyUmVjdC5tYXhZKCkpOwogICAgIH0KIAogICAgIFNl
bGVjdE9iamVjdChkYywgb2xkUGVuKTsKQEAgLTcyNSw3ICs3MjUsNyBAQCB2b2lkIEdyYXBoaWNz
Q29udGV4dDo6ZHJhd0VsbGlwc2UoY29uc3QgCiAgICAgICAgIG9sZFBlbiA9IFNlbGVjdE9iamVj
dChkYywgR2V0U3RvY2tPYmplY3QoTlVMTF9QRU4pKTsKIAogICAgIGlmIChicnVzaCB8fCBwZW4p
Ci0gICAgICAgIEVsbGlwc2UoZGMsIHRyUmVjdC54KCksIHRyUmVjdC55KCksIHRyUmVjdC5yaWdo
dCgpLCB0clJlY3QuYm90dG9tKCkpOworICAgICAgICBFbGxpcHNlKGRjLCB0clJlY3QueCgpLCB0
clJlY3QueSgpLCB0clJlY3QubWF4WCgpLCB0clJlY3QubWF4WSgpKTsKIAogICAgIFNlbGVjdE9i
amVjdChkYywgb2xkUGVuKTsKICAgICBTZWxlY3RPYmplY3QoZGMsIG9sZEJydXNoKTsKQEAgLTgz
OCw3ICs4MzgsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlQXJjKGNvbnN0IEluCiAg
ICAgfQogCiAgICAgSEdESU9CSiBvbGRCcnVzaCA9IFNlbGVjdE9iamVjdChkYywgR2V0U3RvY2tP
YmplY3QoTlVMTF9CUlVTSCkpOwotICAgIEVsbGlwc2UoZGMsIHRyUmVjdC54KCksIHRyUmVjdC55
KCksIHRyUmVjdC5yaWdodCgpLCB0clJlY3QuYm90dG9tKCkpOworICAgIEVsbGlwc2UoZGMsIHRy
UmVjdC54KCksIHRyUmVjdC55KCksIHRyUmVjdC5tYXhYKCksIHRyUmVjdC5tYXhZKCkpOwogICAg
IFNlbGVjdE9iamVjdChkYywgb2xkQnJ1c2gpOwogCiAgICAgaWYgKG5ld0NsaXApCkBAIC05NTks
OSArOTU5LDkgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXAoY29uc3QgRmxvYXRSZQogCiAg
ICAgT3duUHRyPEhSR04+IGNsaXBSZ24oQ3JlYXRlUmVjdFJnbigwLCAwLCAwLCAwKSk7CiAgICAg
aWYgKEdldENsaXBSZ24obV9kYXRhLT5tX2RjLCBjbGlwUmduLmdldCgpKSA+IDApCi0gICAgICAg
IEludGVyc2VjdENsaXBSZWN0KG1fZGF0YS0+bV9kYywgdHJSZWN0LngoKSwgdHJSZWN0LnkoKSwg
dHJSZWN0LnJpZ2h0KCksIHRyUmVjdC5ib3R0b20oKSk7CisgICAgICAgIEludGVyc2VjdENsaXBS
ZWN0KG1fZGF0YS0+bV9kYywgdHJSZWN0LngoKSwgdHJSZWN0LnkoKSwgdHJSZWN0Lm1heFgoKSwg
dHJSZWN0Lm1heFkoKSk7CiAgICAgZWxzZSB7Ci0gICAgICAgIGNsaXBSZ24uc2V0KENyZWF0ZVJl
Y3RSZ24odHJSZWN0LngoKSwgdHJSZWN0LnkoKSwgdHJSZWN0LnJpZ2h0KCksIHRyUmVjdC5ib3R0
b20oKSkpOworICAgICAgICBjbGlwUmduLnNldChDcmVhdGVSZWN0UmduKHRyUmVjdC54KCksIHRy
UmVjdC55KCksIHRyUmVjdC5tYXhYKCksIHRyUmVjdC5tYXhZKCkpKTsKICAgICAgICAgU2VsZWN0
Q2xpcFJnbihtX2RhdGEtPm1fZGMsIGNsaXBSZ24uZ2V0KCkpOwogICAgIH0KIH0KQEAgLTk3Niw3
ICs5NzYsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcE91dChjb25zdCBJbnRSCiAKICAg
ICBJbnRSZWN0IHRyUmVjdCA9IG1fZGF0YS0+bWFwUmVjdChyZWN0KTsKIAotICAgIEV4Y2x1ZGVD
bGlwUmVjdChtX2RhdGEtPm1fZGMsIHRyUmVjdC54KCksIHRyUmVjdC55KCksIHRyUmVjdC5yaWdo
dCgpLCB0clJlY3QuYm90dG9tKCkpOworICAgIEV4Y2x1ZGVDbGlwUmVjdChtX2RhdGEtPm1fZGMs
IHRyUmVjdC54KCksIHRyUmVjdC55KCksIHRyUmVjdC5tYXhYKCksIHRyUmVjdC5tYXhZKCkpOwog
fQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ZvY3VzUmluZyhjb25zdCBQYXRoJiBwYXRo
LCBpbnQgd2lkdGgsIGludCBvZmZzZXQsIGNvbnN0IENvbG9yJiBjb2xvcikKQEAgLTEwOTIsOCAr
MTA5Miw4IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzdHJva2VSZWN0KGNvbnN0IEYKICAgICBP
d25QdHI8SFBFTj4gcGVuID0gY3JlYXRlUGVuKHN0cm9rZUNvbG9yKCksIHN0cm9rZVRoaWNrbmVz
cygpLCBzdHJva2VTdHlsZSgpKTsKICAgICBIR0RJT0JKIG9sZFBlbiA9IFNlbGVjdE9iamVjdChk
YywgcGVuLmdldCgpKTsKIAotICAgIGludCByaWdodCA9IHRyUmVjdC5yaWdodCgpIC0gMTsKLSAg
ICBpbnQgYm90dG9tID0gdHJSZWN0LmJvdHRvbSgpIC0gMTsKKyAgICBpbnQgcmlnaHQgPSB0clJl
Y3QubWF4WCgpIC0gMTsKKyAgICBpbnQgYm90dG9tID0gdHJSZWN0Lm1heFkoKSAtIDE7CiAgICAg
Y29uc3QgUE9JTlQgaW50UG9pbnRzWzVdID0KICAgICB7CiAgICAgICAgIHsgdHJSZWN0LngoKSwg
dHJSZWN0LnkoKSB9LApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2Rl
cnMvZ2lmL0dJRkltYWdlRGVjb2Rlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlRGVjb2Rlci5jcHAJKHJldmlzaW9u
IDc3MzQ3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJ
RkltYWdlRGVjb2Rlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyNywxNiArMzI3LDE2IEBAIGJv
b2wgR0lGSW1hZ2VEZWNvZGVyOjppbml0RnJhbWVCdWZmZXIodW4KICAgICBJbnRSZWN0IGZyYW1l
UmVjdChmcmFtZVJlYWRlci0+eF9vZmZzZXQsIGZyYW1lUmVhZGVyLT55X29mZnNldCwgZnJhbWVS
ZWFkZXItPndpZHRoLCBmcmFtZVJlYWRlci0+aGVpZ2h0KTsKIAogICAgIC8vIE1ha2Ugc3VyZSB0
aGUgZnJhbWVSZWN0IGRvZXNuJ3QgZXh0ZW5kIG91dHNpZGUgdGhlIGJ1ZmZlci4KLSAgICBpZiAo
ZnJhbWVSZWN0LnJpZ2h0KCkgPiBzaXplKCkud2lkdGgoKSkKKyAgICBpZiAoZnJhbWVSZWN0Lm1h
eFgoKSA+IHNpemUoKS53aWR0aCgpKQogICAgICAgICBmcmFtZVJlY3Quc2V0V2lkdGgoc2l6ZSgp
LndpZHRoKCkgLSBmcmFtZVJlYWRlci0+eF9vZmZzZXQpOwotICAgIGlmIChmcmFtZVJlY3QuYm90
dG9tKCkgPiBzaXplKCkuaGVpZ2h0KCkpCisgICAgaWYgKGZyYW1lUmVjdC5tYXhZKCkgPiBzaXpl
KCkuaGVpZ2h0KCkpCiAgICAgICAgIGZyYW1lUmVjdC5zZXRIZWlnaHQoc2l6ZSgpLmhlaWdodCgp
IC0gZnJhbWVSZWFkZXItPnlfb2Zmc2V0KTsKIAogICAgIEltYWdlRnJhbWUqIGNvbnN0IGJ1ZmZl
ciA9ICZtX2ZyYW1lQnVmZmVyQ2FjaGVbZnJhbWVJbmRleF07CiAgICAgaW50IGxlZnQgPSB1cHBl
ckJvdW5kU2NhbGVkWChmcmFtZVJlY3QueCgpKTsKLSAgICBpbnQgcmlnaHQgPSBsb3dlckJvdW5k
U2NhbGVkWChmcmFtZVJlY3QucmlnaHQoKSwgbGVmdCk7CisgICAgaW50IHJpZ2h0ID0gbG93ZXJC
b3VuZFNjYWxlZFgoZnJhbWVSZWN0Lm1heFgoKSwgbGVmdCk7CiAgICAgaW50IHRvcCA9IHVwcGVy
Qm91bmRTY2FsZWRZKGZyYW1lUmVjdC55KCkpOwotICAgIGludCBib3R0b20gPSBsb3dlckJvdW5k
U2NhbGVkWShmcmFtZVJlY3QuYm90dG9tKCksIHRvcCk7CisgICAgaW50IGJvdHRvbSA9IGxvd2Vy
Qm91bmRTY2FsZWRZKGZyYW1lUmVjdC5tYXhZKCksIHRvcCk7CiAgICAgYnVmZmVyLT5zZXRSZWN0
KEludFJlY3QobGVmdCwgdG9wLCByaWdodCAtIGxlZnQsIGJvdHRvbSAtIHRvcCkpOwogICAgIAog
ICAgIGlmICghZnJhbWVJbmRleCkgewpAQCAtMzc4LDggKzM3OCw4IEBAIGJvb2wgR0lGSW1hZ2VE
ZWNvZGVyOjppbml0RnJhbWVCdWZmZXIodW4KICAgICAgICAgICAgICAgLy8gQ29weSB0aGUgd2hv
bGUgcHJldmlvdXMgYnVmZmVyLCB0aGVuIGNsZWFyIGp1c3QgaXRzIGZyYW1lLgogICAgICAgICAg
ICAgICBpZiAoIWJ1ZmZlci0+Y29weUJpdG1hcERhdGEoKnByZXZCdWZmZXIpKQogICAgICAgICAg
ICAgICAgICAgcmV0dXJuIHNldEZhaWxlZCgpOwotICAgICAgICAgICAgICBmb3IgKGludCB5ID0g
cHJldlJlY3QueSgpOyB5IDwgcHJldlJlY3QuYm90dG9tKCk7ICsreSkgewotICAgICAgICAgICAg
ICAgICAgZm9yIChpbnQgeCA9IHByZXZSZWN0LngoKTsgeCA8IHByZXZSZWN0LnJpZ2h0KCk7ICsr
eCkKKyAgICAgICAgICAgICAgZm9yIChpbnQgeSA9IHByZXZSZWN0LnkoKTsgeSA8IHByZXZSZWN0
Lm1heFkoKTsgKyt5KSB7CisgICAgICAgICAgICAgICAgICBmb3IgKGludCB4ID0gcHJldlJlY3Qu
eCgpOyB4IDwgcHJldlJlY3QubWF4WCgpOyArK3gpCiAgICAgICAgICAgICAgICAgICAgICAgYnVm
ZmVyLT5zZXRSR0JBKHgsIHksIDAsIDAsIDAsIDApOwogICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgIGlmICgocHJldlJlY3Qud2lkdGgoKSA+IDApICYmIChwcmV2UmVjdC5oZWlnaHQoKSA+
IDApKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1BvcHVwTWVudVdpbi5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1BvcHVwTWVudVdpbi5j
cHAJKHJldmlzaW9uIDc3MzQ3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1BvcHVw
TWVudVdpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0NywxMyArMzQ3LDEzIEBAIHZvaWQgUG9w
dXBNZW51V2luOjpjYWxjdWxhdGVQb3NpdGlvbkFuZFMKICAgICAvLyBBbHdheXMgbGVmdC1hbGln
biBpdGVtcyBpbiB0aGUgcG9wdXAuICBUaGlzIG1hdGNoZXMgcG9wdXAgbWVudXMgb24gdGhlIG1h
Yy4KICAgICBpbnQgcG9wdXBYID0gclNjcmVlbkNvb3Jkcy54KCkgKyBjbGllbnQoKS0+Y2xpZW50
SW5zZXRMZWZ0KCk7CiAKLSAgICBJbnRSZWN0IHBvcHVwUmVjdChwb3B1cFgsIHJTY3JlZW5Db29y
ZHMuYm90dG9tKCksIHBvcHVwV2lkdGgsIHBvcHVwSGVpZ2h0KTsKKyAgICBJbnRSZWN0IHBvcHVw
UmVjdChwb3B1cFgsIHJTY3JlZW5Db29yZHMubWF4WSgpLCBwb3B1cFdpZHRoLCBwb3B1cEhlaWdo
dCk7CiAKICAgICAvLyBUaGUgcG9wdXAgbmVlZHMgdG8gc3RheSB3aXRoaW4gdGhlIGJvdW5kcyBv
ZiB0aGUgc2NyZWVuIGFuZCBub3Qgb3ZlcmxhcCBhbnkgdG9vbGJhcnMKICAgICBGbG9hdFJlY3Qg
c2NyZWVuID0gc2NyZWVuQXZhaWxhYmxlUmVjdCh2KTsKIAogICAgIC8vIENoZWNrIHRoYXQgd2Ug
ZG9uJ3QgZ28gb2ZmIHRoZSBzY3JlZW4gdmVydGljYWxseQotICAgIGlmIChwb3B1cFJlY3QuYm90
dG9tKCkgPiBzY3JlZW4uaGVpZ2h0KCkpIHsKKyAgICBpZiAocG9wdXBSZWN0Lm1heFkoKSA+IHNj
cmVlbi5oZWlnaHQoKSkgewogICAgICAgICAvLyBUaGUgcG9wdXAgd2lsbCBnbyBvZmYgdGhlIHNj
cmVlbiwgc28gdHJ5IHBsYWNpbmcgaXQgYWJvdmUgdGhlIGNsaWVudAogICAgICAgICBpZiAoclNj
cmVlbkNvb3Jkcy55KCkgLSBwb3B1cFJlY3QuaGVpZ2h0KCkgPCAwKSB7CiAgICAgICAgICAgICAv
LyBUaGUgcG9wdXAgd29uJ3QgZml0IGFib3ZlLCBlaXRoZXIsIHNvIHBsYWNlIGl0IHdoZXJlZXZl
cidzIGJpZ2dlciBhbmQgcmVzaXplIGl0IHRvIGZpdApAQCAtNjAyLDcgKzYwMiw3IEBAIHZvaWQg
UG9wdXBNZW51V2luOjpwYWludChjb25zdCBJbnRSZWN0JiAKICAgICBJbnRSZWN0IGxpc3RSZWN0
ID0gZGFtYWdlUmVjdDsKICAgICBsaXN0UmVjdC5tb3ZlKEludFNpemUoMCwgbV9zY3JvbGxPZmZz
ZXQgKiBtX2l0ZW1IZWlnaHQpKTsKIAotICAgIGZvciAoaW50IHkgPSBsaXN0UmVjdC55KCk7IHkg
PCBsaXN0UmVjdC5ib3R0b20oKTsgeSArPSBtX2l0ZW1IZWlnaHQpIHsKKyAgICBmb3IgKGludCB5
ID0gbGlzdFJlY3QueSgpOyB5IDwgbGlzdFJlY3QubWF4WSgpOyB5ICs9IG1faXRlbUhlaWdodCkg
ewogICAgICAgICBpbnQgaW5kZXggPSB5IC8gbV9pdGVtSGVpZ2h0OwogCiAgICAgICAgIENvbG9y
IG9wdGlvbkJhY2tncm91bmRDb2xvciwgb3B0aW9uVGV4dENvbG9yOwpJbmRleDogU291cmNlL1dl
YkNvcmUvcGx1Z2lucy93aW4vUGx1Z2luVmlld1dpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGx1Z2lucy93aW4vUGx1Z2luVmlld1dpbi5jcHAJKHJldmlzaW9uIDc3MzQ3KQor
KysgU291cmNlL1dlYkNvcmUvcGx1Z2lucy93aW4vUGx1Z2luVmlld1dpbi5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTQ0OCw3ICs0NDgsNyBAQCB2b2lkIFBsdWdpblZpZXc6OnVwZGF0ZVBsdWdpbldp
ZGdldCgpCiAgICAgICAgICAgICByZ24gPSA6OkNyZWF0ZVJlY3RSZ24oMCwgMCwgMCwgMCk7CiAg
ICAgICAgICAgICA6OlNldFdpbmRvd1JnbihwbGF0Zm9ybVBsdWdpbldpZGdldCgpLCByZ24sIEZB
TFNFKTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHJnbiA9IDo6Q3JlYXRlUmVjdFJn
bihtX2NsaXBSZWN0LngoKSwgbV9jbGlwUmVjdC55KCksIG1fY2xpcFJlY3QucmlnaHQoKSwgbV9j
bGlwUmVjdC5ib3R0b20oKSk7CisgICAgICAgICAgICByZ24gPSA6OkNyZWF0ZVJlY3RSZ24obV9j
bGlwUmVjdC54KCksIG1fY2xpcFJlY3QueSgpLCBtX2NsaXBSZWN0Lm1heFgoKSwgbV9jbGlwUmVj
dC5tYXhZKCkpOwogICAgICAgICAgICAgOjpTZXRXaW5kb3dSZ24ocGxhdGZvcm1QbHVnaW5XaWRn
ZXQoKSwgcmduLCBUUlVFKTsKICAgICAgICAgfQogCkBAIC00NTYsNyArNDU2LDcgQEAgdm9pZCBQ
bHVnaW5WaWV3Ojp1cGRhdGVQbHVnaW5XaWRnZXQoKQogICAgICAgICAgICAgOjpNb3ZlV2luZG93
KHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCksIG1fd2luZG93UmVjdC54KCksIG1fd2luZG93UmVjdC55
KCksIG1fd2luZG93UmVjdC53aWR0aCgpLCBtX3dpbmRvd1JlY3QuaGVpZ2h0KCksIFRSVUUpOwog
CiAgICAgICAgIGlmIChjbGlwVG9aZXJvUmVjdCkgewotICAgICAgICAgICAgcmduID0gOjpDcmVh
dGVSZWN0UmduKG1fY2xpcFJlY3QueCgpLCBtX2NsaXBSZWN0LnkoKSwgbV9jbGlwUmVjdC5yaWdo
dCgpLCBtX2NsaXBSZWN0LmJvdHRvbSgpKTsKKyAgICAgICAgICAgIHJnbiA9IDo6Q3JlYXRlUmVj
dFJnbihtX2NsaXBSZWN0LngoKSwgbV9jbGlwUmVjdC55KCksIG1fY2xpcFJlY3QubWF4WCgpLCBt
X2NsaXBSZWN0Lm1heFkoKSk7CiAgICAgICAgICAgICA6OlNldFdpbmRvd1JnbihwbGF0Zm9ybVBs
dWdpbldpZGdldCgpLCByZ24sIFRSVUUpOwogICAgICAgICB9CiAKQEAgLTg5Niw3ICs4OTYsNyBA
QCBib29sIFBsdWdpblZpZXc6OnBsYXRmb3JtR2V0VmFsdWUoTlBOVmFyCiB2b2lkIFBsdWdpblZp
ZXc6OmludmFsaWRhdGVSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpCiB7CiAgICAgaWYgKG1faXNX
aW5kb3dlZCkgewotICAgICAgICBSRUNUIGludmFsaWRSZWN0ID0geyByZWN0LngoKSwgcmVjdC55
KCksIHJlY3QucmlnaHQoKSwgcmVjdC5ib3R0b20oKSB9OworICAgICAgICBSRUNUIGludmFsaWRS
ZWN0ID0geyByZWN0LngoKSwgcmVjdC55KCksIHJlY3QubWF4WCgpLCByZWN0Lm1heFkoKSB9Owog
ICAgICAgICA6OkludmFsaWRhdGVSZWN0KHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCksICZpbnZhbGlk
UmVjdCwgZmFsc2UpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtOTE0LDcgKzkxNCw3IEBA
IHZvaWQgUGx1Z2luVmlldzo6aW52YWxpZGF0ZVJlY3QoTlBSZWN0KiAKICAgICBJbnRSZWN0IHIo
cmVjdC0+bGVmdCwgcmVjdC0+dG9wLCByZWN0LT5yaWdodCAtIHJlY3QtPmxlZnQsIHJlY3QtPmJv
dHRvbSAtIHJlY3QtPnRvcCk7CiAKICAgICBpZiAobV9pc1dpbmRvd2VkKSB7Ci0gICAgICAgIFJF
Q1QgaW52YWxpZFJlY3QgPSB7IHIueCgpLCByLnkoKSwgci5yaWdodCgpLCByLmJvdHRvbSgpIH07
CisgICAgICAgIFJFQ1QgaW52YWxpZFJlY3QgPSB7IHIueCgpLCByLnkoKSwgci5tYXhYKCksIHIu
bWF4WSgpIH07CiAgICAgICAgIEludmFsaWRhdGVSZWN0KHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCks
ICZpbnZhbGlkUmVjdCwgRkFMU0UpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIGlmIChtX3BsdWdp
bi0+cXVpcmtzKCkuY29udGFpbnMoUGx1Z2luUXVpcmtUaHJvdHRsZUludmFsaWRhdGUpKSB7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVTYWZhcmkuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZVNhZmFyaS5jcHAJ
KHJldmlzaW9uIDc3MzQ3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1l
U2FmYXJpLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzYwLDIwICs3NjAsMjAgQEAgdm9pZCBSZW5k
ZXJUaGVtZVNhZmFyaTo6cGFpbnRNZW51TGlzdEJ1dAogICAgIEZsb2F0UmVjdCB0b3BHcmFkaWVu
dChyLngoKSwgci55KCksIHIud2lkdGgoKSwgci5oZWlnaHQoKSAvIDIuMGYpOwogICAgIHN0cnVj
dCBDR0Z1bmN0aW9uQ2FsbGJhY2tzIHRvcENhbGxiYWNrcyA9IHsgMCwgVG9wR3JhZGllbnRJbnRl
cnBvbGF0ZSwgTlVMTCB9OwogICAgIFJldGFpblB0cjxDR0Z1bmN0aW9uUmVmPiB0b3BGdW5jdGlv
bihBZG9wdENGLCBDR0Z1bmN0aW9uQ3JlYXRlKE5VTEwsIDEsIE5VTEwsIDQsIE5VTEwsICZ0b3BD
YWxsYmFja3MpKTsKLSAgICBSZXRhaW5QdHI8Q0dTaGFkaW5nUmVmPiB0b3BTaGFkaW5nKEFkb3B0
Q0YsIENHU2hhZGluZ0NyZWF0ZUF4aWFsKGNzcGFjZSwgQ0dQb2ludE1ha2UodG9wR3JhZGllbnQu
eCgpLCB0b3BHcmFkaWVudC55KCkpLCBDR1BvaW50TWFrZSh0b3BHcmFkaWVudC54KCksIHRvcEdy
YWRpZW50LmJvdHRvbSgpKSwgdG9wRnVuY3Rpb24uZ2V0KCksIGZhbHNlLCBmYWxzZSkpOworICAg
IFJldGFpblB0cjxDR1NoYWRpbmdSZWY+IHRvcFNoYWRpbmcoQWRvcHRDRiwgQ0dTaGFkaW5nQ3Jl
YXRlQXhpYWwoY3NwYWNlLCBDR1BvaW50TWFrZSh0b3BHcmFkaWVudC54KCksIHRvcEdyYWRpZW50
LnkoKSksIENHUG9pbnRNYWtlKHRvcEdyYWRpZW50LngoKSwgdG9wR3JhZGllbnQubWF4WSgpKSwg
dG9wRnVuY3Rpb24uZ2V0KCksIGZhbHNlLCBmYWxzZSkpOwogCiAgICAgRmxvYXRSZWN0IGJvdHRv
bUdyYWRpZW50KHIueCgpICsgcmFkaXVzLCByLnkoKSArIHIuaGVpZ2h0KCkgLyAyLjBmLCByLndp
ZHRoKCkgLSAyLjBmICogcmFkaXVzLCByLmhlaWdodCgpIC8gMi4wZik7CiAgICAgc3RydWN0IENH
RnVuY3Rpb25DYWxsYmFja3MgYm90dG9tQ2FsbGJhY2tzID0geyAwLCBCb3R0b21HcmFkaWVudElu
dGVycG9sYXRlLCBOVUxMIH07CiAgICAgUmV0YWluUHRyPENHRnVuY3Rpb25SZWY+IGJvdHRvbUZ1
bmN0aW9uKEFkb3B0Q0YsIENHRnVuY3Rpb25DcmVhdGUoTlVMTCwgMSwgTlVMTCwgNCwgTlVMTCwg
JmJvdHRvbUNhbGxiYWNrcykpOwotICAgIFJldGFpblB0cjxDR1NoYWRpbmdSZWY+IGJvdHRvbVNo
YWRpbmcoQWRvcHRDRiwgQ0dTaGFkaW5nQ3JlYXRlQXhpYWwoY3NwYWNlLCBDR1BvaW50TWFrZShi
b3R0b21HcmFkaWVudC54KCksICBib3R0b21HcmFkaWVudC55KCkpLCBDR1BvaW50TWFrZShib3R0
b21HcmFkaWVudC54KCksIGJvdHRvbUdyYWRpZW50LmJvdHRvbSgpKSwgYm90dG9tRnVuY3Rpb24u
Z2V0KCksIGZhbHNlLCBmYWxzZSkpOworICAgIFJldGFpblB0cjxDR1NoYWRpbmdSZWY+IGJvdHRv
bVNoYWRpbmcoQWRvcHRDRiwgQ0dTaGFkaW5nQ3JlYXRlQXhpYWwoY3NwYWNlLCBDR1BvaW50TWFr
ZShib3R0b21HcmFkaWVudC54KCksICBib3R0b21HcmFkaWVudC55KCkpLCBDR1BvaW50TWFrZShi
b3R0b21HcmFkaWVudC54KCksIGJvdHRvbUdyYWRpZW50Lm1heFkoKSksIGJvdHRvbUZ1bmN0aW9u
LmdldCgpLCBmYWxzZSwgZmFsc2UpKTsKIAogICAgIHN0cnVjdCBDR0Z1bmN0aW9uQ2FsbGJhY2tz
IG1haW5DYWxsYmFja3MgPSB7IDAsIE1haW5HcmFkaWVudEludGVycG9sYXRlLCBOVUxMIH07CiAg
ICAgUmV0YWluUHRyPENHRnVuY3Rpb25SZWY+IG1haW5GdW5jdGlvbihBZG9wdENGLCBDR0Z1bmN0
aW9uQ3JlYXRlKE5VTEwsIDEsIE5VTEwsIDQsIE5VTEwsICZtYWluQ2FsbGJhY2tzKSk7Ci0gICAg
UmV0YWluUHRyPENHU2hhZGluZ1JlZj4gbWFpblNoYWRpbmcoQWRvcHRDRiwgQ0dTaGFkaW5nQ3Jl
YXRlQXhpYWwoY3NwYWNlLCBDR1BvaW50TWFrZShyLngoKSwgIHIueSgpKSwgQ0dQb2ludE1ha2Uo
ci54KCksIHIuYm90dG9tKCkpLCBtYWluRnVuY3Rpb24uZ2V0KCksIGZhbHNlLCBmYWxzZSkpOwor
ICAgIFJldGFpblB0cjxDR1NoYWRpbmdSZWY+IG1haW5TaGFkaW5nKEFkb3B0Q0YsIENHU2hhZGlu
Z0NyZWF0ZUF4aWFsKGNzcGFjZSwgQ0dQb2ludE1ha2Uoci54KCksICByLnkoKSksIENHUG9pbnRN
YWtlKHIueCgpLCByLm1heFkoKSksIG1haW5GdW5jdGlvbi5nZXQoKSwgZmFsc2UsIGZhbHNlKSk7
CiAKICAgICBSZXRhaW5QdHI8Q0dTaGFkaW5nUmVmPiBsZWZ0U2hhZGluZyhBZG9wdENGLCBDR1No
YWRpbmdDcmVhdGVBeGlhbChjc3BhY2UsIENHUG9pbnRNYWtlKHIueCgpLCAgci55KCkpLCBDR1Bv
aW50TWFrZShyLngoKSArIHJhZGl1cywgci55KCkpLCBtYWluRnVuY3Rpb24uZ2V0KCksIGZhbHNl
LCBmYWxzZSkpOwogCi0gICAgUmV0YWluUHRyPENHU2hhZGluZ1JlZj4gcmlnaHRTaGFkaW5nKEFk
b3B0Q0YsIENHU2hhZGluZ0NyZWF0ZUF4aWFsKGNzcGFjZSwgQ0dQb2ludE1ha2Uoci5yaWdodCgp
LCAgci55KCkpLCBDR1BvaW50TWFrZShyLnJpZ2h0KCkgLSByYWRpdXMsIHIueSgpKSwgbWFpbkZ1
bmN0aW9uLmdldCgpLCBmYWxzZSwgZmFsc2UpKTsKKyAgICBSZXRhaW5QdHI8Q0dTaGFkaW5nUmVm
PiByaWdodFNoYWRpbmcoQWRvcHRDRiwgQ0dTaGFkaW5nQ3JlYXRlQXhpYWwoY3NwYWNlLCBDR1Bv
aW50TWFrZShyLm1heFgoKSwgIHIueSgpKSwgQ0dQb2ludE1ha2Uoci5tYXhYKCkgLSByYWRpdXMs
IHIueSgpKSwgbWFpbkZ1bmN0aW9uLmdldCgpLCBmYWxzZSwgZmFsc2UpKTsKICAgICBwYWludElu
Zm8uY29udGV4dC0+c2F2ZSgpOwogICAgIENHQ29udGV4dENsaXBUb1JlY3QoY29udGV4dCwgYm91
bmQucmVjdCgpKTsKICAgICBwYWludEluZm8uY29udGV4dC0+YWRkUm91bmRlZFJlY3RDbGlwKGJv
dW5kKTsKQEAgLTgxOCw3ICs4MTgsNyBAQCBib29sIFJlbmRlclRoZW1lU2FmYXJpOjpwYWludE1l
bnVMaXN0QnV0CiAgICAgZmxvYXQgY2VudGVyWSA9IGJvdW5kcy55KCkgKyBib3VuZHMuaGVpZ2h0
KCkgLyAyLjBmOwogICAgIGZsb2F0IGFycm93SGVpZ2h0ID0gYmFzZUFycm93SGVpZ2h0ICogZm9u
dFNjYWxlOwogICAgIGZsb2F0IGFycm93V2lkdGggPSBiYXNlQXJyb3dXaWR0aCAqIGZvbnRTY2Fs
ZTsKLSAgICBmbG9hdCBsZWZ0RWRnZSA9IGJvdW5kcy5yaWdodCgpIC0gYXJyb3dQYWRkaW5nUmln
aHQgLSBhcnJvd1dpZHRoOworICAgIGZsb2F0IGxlZnRFZGdlID0gYm91bmRzLm1heFgoKSAtIGFy
cm93UGFkZGluZ1JpZ2h0IC0gYXJyb3dXaWR0aDsKIAogICAgIGlmIChib3VuZHMud2lkdGgoKSA8
IGFycm93V2lkdGggKyBhcnJvd1BhZGRpbmdMZWZ0KQogICAgICAgICByZXR1cm4gZmFsc2U7CkBA
IC04NDgsMTEgKzg0OCwxMSBAQCBib29sIFJlbmRlclRoZW1lU2FmYXJpOjpwYWludE1lbnVMaXN0
QnV0CiAgICAgcGFpbnRJbmZvLmNvbnRleHQtPnNldFN0cm9rZVN0eWxlKFNvbGlkU3Ryb2tlKTsK
ICAgICBwYWludEluZm8uY29udGV4dC0+c2V0U3Ryb2tlQ29sb3IobGVmdFNlcGFyYXRvckNvbG9y
LCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKICAgICBwYWludEluZm8uY29udGV4dC0+ZHJhd0xpbmUo
SW50UG9pbnQobGVmdEVkZ2VPZlNlcGFyYXRvciwgYm91bmRzLnkoKSksCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEludFBvaW50KGxlZnRFZGdlT2ZTZXBhcmF0b3IsIGJvdW5kcy5i
b3R0b20oKSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRQb2ludChsZWZ0
RWRnZU9mU2VwYXJhdG9yLCBib3VuZHMubWF4WSgpKSk7CiAKICAgICBwYWludEluZm8uY29udGV4
dC0+c2V0U3Ryb2tlQ29sb3IocmlnaHRTZXBhcmF0b3JDb2xvciwgQ29sb3JTcGFjZURldmljZVJH
Qik7CiAgICAgcGFpbnRJbmZvLmNvbnRleHQtPmRyYXdMaW5lKEludFBvaW50KGxlZnRFZGdlT2ZT
ZXBhcmF0b3IgKyBzZXBhcmF0b3JTcGFjZSwgYm91bmRzLnkoKSksCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEludFBvaW50KGxlZnRFZGdlT2ZTZXBhcmF0b3IgKyBzZXBhcmF0b3JT
cGFjZSwgYm91bmRzLmJvdHRvbSgpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEludFBvaW50KGxlZnRFZGdlT2ZTZXBhcmF0b3IgKyBzZXBhcmF0b3JTcGFjZSwgYm91bmRzLm1h
eFkoKSkpOwogCiAgICAgcGFpbnRJbmZvLmNvbnRleHQtPnJlc3RvcmUoKTsKICAgICByZXR1cm4g
ZmFsc2U7CkBAIC05NzYsOSArOTc2LDkgQEAgYm9vbCBSZW5kZXJUaGVtZVNhZmFyaTo6cGFpbnRT
bGlkZXJUcmFjawogICAgIFJldGFpblB0cjxDR0Z1bmN0aW9uUmVmPiBtYWluRnVuY3Rpb24oQWRv
cHRDRiwgQ0dGdW5jdGlvbkNyZWF0ZShOVUxMLCAxLCBOVUxMLCA0LCBOVUxMLCAmbWFpbkNhbGxi
YWNrcykpOwogICAgIFJldGFpblB0cjxDR1NoYWRpbmdSZWY+IG1haW5TaGFkaW5nOwogICAgIGlm
IChvLT5zdHlsZSgpLT5hcHBlYXJhbmNlKCkgPT0gU2xpZGVyVmVydGljYWxQYXJ0KQotICAgICAg
ICBtYWluU2hhZGluZy5hZG9wdENGKENHU2hhZGluZ0NyZWF0ZUF4aWFsKGNzcGFjZSwgQ0dQb2lu
dE1ha2UoYm91bmRzLnJlY3QoKS54KCksICBib3VuZHMucmVjdCgpLmJvdHRvbSgpKSwgQ0dQb2lu
dE1ha2UoYm91bmRzLnJlY3QoKS5yaWdodCgpLCBib3VuZHMucmVjdCgpLmJvdHRvbSgpKSwgbWFp
bkZ1bmN0aW9uLmdldCgpLCBmYWxzZSwgZmFsc2UpKTsKKyAgICAgICAgbWFpblNoYWRpbmcuYWRv
cHRDRihDR1NoYWRpbmdDcmVhdGVBeGlhbChjc3BhY2UsIENHUG9pbnRNYWtlKGJvdW5kcy5yZWN0
KCkueCgpLCAgYm91bmRzLnJlY3QoKS5tYXhZKCkpLCBDR1BvaW50TWFrZShib3VuZHMucmVjdCgp
Lm1heFgoKSwgYm91bmRzLnJlY3QoKS5tYXhZKCkpLCBtYWluRnVuY3Rpb24uZ2V0KCksIGZhbHNl
LCBmYWxzZSkpOwogICAgIGVsc2UKLSAgICAgICAgbWFpblNoYWRpbmcuYWRvcHRDRihDR1NoYWRp
bmdDcmVhdGVBeGlhbChjc3BhY2UsIENHUG9pbnRNYWtlKGJvdW5kcy5yZWN0KCkueCgpLCAgYm91
bmRzLnJlY3QoKS55KCkpLCBDR1BvaW50TWFrZShib3VuZHMucmVjdCgpLngoKSwgYm91bmRzLnJl
Y3QoKS5ib3R0b20oKSksIG1haW5GdW5jdGlvbi5nZXQoKSwgZmFsc2UsIGZhbHNlKSk7CisgICAg
ICAgIG1haW5TaGFkaW5nLmFkb3B0Q0YoQ0dTaGFkaW5nQ3JlYXRlQXhpYWwoY3NwYWNlLCBDR1Bv
aW50TWFrZShib3VuZHMucmVjdCgpLngoKSwgIGJvdW5kcy5yZWN0KCkueSgpKSwgQ0dQb2ludE1h
a2UoYm91bmRzLnJlY3QoKS54KCksIGJvdW5kcy5yZWN0KCkubWF4WSgpKSwgbWFpbkZ1bmN0aW9u
LmdldCgpLCBmYWxzZSwgZmFsc2UpKTsKIAogICAgIHBhaW50SW5mby5jb250ZXh0LT5hZGRSb3Vu
ZGVkUmVjdENsaXAoYm91bmRzKTsKICAgICBDR0NvbnRleHREcmF3U2hhZGluZyhjb250ZXh0LCBt
YWluU2hhZGluZy5nZXQoKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
VGhlbWVXaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJUaGVtZVdpbi5jcHAJKHJldmlzaW9uIDc3MzQ3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRoZW1lV2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjk0LDcgKzY5NCw3IEBA
IGJvb2wgUmVuZGVyVGhlbWVXaW46OnBhaW50SW5uZXJTcGluQnV0dG8KICAgICBJbnRSZWN0IHVw
UmVjdChyKTsKICAgICB1cFJlY3Quc2V0SGVpZ2h0KHIuaGVpZ2h0KCkgLyAyKTsKICAgICBJbnRS
ZWN0IGRvd25SZWN0KHIpOwotICAgIGRvd25SZWN0LnNldFkodXBSZWN0LmJvdHRvbSgpKTsKKyAg
ICBkb3duUmVjdC5zZXRZKHVwUmVjdC5tYXhZKCkpOwogICAgIGRvd25SZWN0LnNldEhlaWdodChy
LmhlaWdodCgpIC0gdXBSZWN0LmhlaWdodCgpKTsKICAgICBkcmF3Q29udHJvbChpLmNvbnRleHQs
IG8sIHNwaW5CdXR0b25UaGVtZSgpLCBnZXRUaGVtZURhdGEobywgU3BpbkJ1dHRvblVwKSwgdXBS
ZWN0KTsKICAgICBkcmF3Q29udHJvbChpLmNvbnRleHQsIG8sIHNwaW5CdXR0b25UaGVtZSgpLCBn
ZXRUaGVtZURhdGEobywgU3BpbkJ1dHRvbkRvd24pLCBkb3duUmVjdCk7CkBAIC03ODgsNyArNzg4
LDcgQEAgYm9vbCBSZW5kZXJUaGVtZVdpbjo6cGFpbnRNZW51TGlzdEJ1dHRvbgogICAgIEludFJl
Y3QgYnV0dG9uUmVjdChyKTsKICAgICBidXR0b25SZWN0LmluZmxhdGUoLWJvcmRlclRoaWNrbmVz
cyk7CiAgICAgaWYgKG8tPnN0eWxlKCktPmRpcmVjdGlvbigpID09IExUUikKLSAgICAgICAgYnV0
dG9uUmVjdC5zZXRYKGJ1dHRvblJlY3QucmlnaHQoKSAtIGRyb3BEb3duQnV0dG9uV2lkdGgpOwor
ICAgICAgICBidXR0b25SZWN0LnNldFgoYnV0dG9uUmVjdC5tYXhYKCkgLSBkcm9wRG93bkJ1dHRv
bldpZHRoKTsKICAgICBidXR0b25SZWN0LnNldFdpZHRoKGRyb3BEb3duQnV0dG9uV2lkdGgpOwog
CiAgICAgaWYgKGlzUnVubmluZ09uVmlzdGFPckxhdGVyKCkpIHsKSW5kZXg6IFNvdXJjZS9XZWJL
aXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0L2d0ay93ZWJraXQvd2Via2l0d2Vidmlldy5jcHAJKHJldmlzaW9uIDc3MzQ3KQorKysgU291
cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00MDIsNyArNDAyLDcgQEAgc3RhdGljIGdib29sZWFuIHdlYmtpdF93ZWJfdmlld19wb3B1cF9t
ZQogICAgICAgICAvLyBJZiB0aGVyZSdzIGEgZm9jdXNlZCBlbG1lbnQsIHVzZSBpdHMgbG9jYXRp
b24uCiAgICAgICAgIGlmIChOb2RlKiBmb2N1c2VkTm9kZSA9IGdldEZvY3VzZWROb2RlKGZyYW1l
KSkgewogICAgICAgICAgICAgSW50UmVjdCBmb2N1c2VkTm9kZVJlY3QgPSBmb2N1c2VkTm9kZS0+
Z2V0UmVjdCgpOwotICAgICAgICAgICAgbG9jYXRpb24gPSBJbnRQb2ludChyaWdodEFsaWduZWQg
PyBmb2N1c2VkTm9kZVJlY3QucmlnaHQoKSA6IGZvY3VzZWROb2RlUmVjdC54KCksIGZvY3VzZWRO
b2RlUmVjdC5ib3R0b20oKSk7CisgICAgICAgICAgICBsb2NhdGlvbiA9IEludFBvaW50KHJpZ2h0
QWxpZ25lZCA/IGZvY3VzZWROb2RlUmVjdC5tYXhYKCkgOiBmb2N1c2VkTm9kZVJlY3QueCgpLCBm
b2N1c2VkTm9kZVJlY3QubWF4WSgpKTsKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICBsb2Nh
dGlvbiA9IEludFBvaW50KHJpZ2h0QWxpZ25lZCA/IHZpZXctPmNvbnRlbnRzV2lkdGgoKSAtIGNv
bnRleHRNZW51TWFyZ2luIDogY29udGV4dE1lbnVNYXJnaW4sIGNvbnRleHRNZW51TWFyZ2luKTsK
ICAgICB9IGVsc2UgewpAQCAtNDQwLDcgKzQ0MCw3IEBAIHN0YXRpYyBnYm9vbGVhbiB3ZWJraXRf
d2ViX3ZpZXdfcG9wdXBfbWUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRD
YXJldFJlY3Qud2lkdGgoKSArIGV4dHJhV2lkdGhUb0VuZE9mTGluZSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc3RhcnRDYXJldFJlY3QuaGVpZ2h0KCkpOwogCi0gICAgICAgIGxv
Y2F0aW9uID0gSW50UG9pbnQocmlnaHRBbGlnbmVkID8gZmlyc3RSZWN0LnJpZ2h0KCkgOiBmaXJz
dFJlY3QueCgpLCBmaXJzdFJlY3QuYm90dG9tKCkpOworICAgICAgICBsb2NhdGlvbiA9IEludFBv
aW50KHJpZ2h0QWxpZ25lZCA/IGZpcnN0UmVjdC5tYXhYKCkgOiBmaXJzdFJlY3QueCgpLCBmaXJz
dFJlY3QubWF4WSgpKTsKICAgICB9CiAKICAgICAvLyBGSVhNRTogVGhlIEludFNpemUoMCwgLTEp
IGlzIGEgaGFjayB0byBnZXQgdGhlIGhpdC10ZXN0aW5nIHRvIHJlc3VsdCBpbiB0aGUgc2VsZWN0
ZWQgZWxlbWVudC4KSW5kZXg6IFNvdXJjZS9XZWJLaXQvd2luL0RPTUhUTUxDbGFzc2VzLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3dpbi9ET01IVE1MQ2xhc3Nlcy5jcHAJKHJldmlz
aW9uIDc3MzQ3KQorKysgU291cmNlL1dlYktpdC93aW4vRE9NSFRNTENsYXNzZXMuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMzE0LDggKzEzMTQsOCBAQCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBF
IERPTUhUTUxJbnB1dEVsCiAgICAgSW50UmVjdCBjb3JlUmVjdCA9IHZpZXctPmNvbnRlbnRzVG9T
Y3JlZW4ocmVuZGVyZXItPmFic29sdXRlQm91bmRpbmdCb3hSZWN0KCkpOwogICAgIHJlY3QtPmxl
ZnQgPSBjb3JlUmVjdC54KCk7CiAgICAgcmVjdC0+dG9wID0gY29yZVJlY3QueSgpOwotICAgIHJl
Y3QtPnJpZ2h0ID0gY29yZVJlY3QucmlnaHQoKTsKLSAgICByZWN0LT5ib3R0b20gPSBjb3JlUmVj
dC5ib3R0b20oKTsKKyAgICByZWN0LT5yaWdodCA9IGNvcmVSZWN0Lm1heFgoKTsKKyAgICByZWN0
LT5ib3R0b20gPSBjb3JlUmVjdC5tYXhZKCk7CiAKICAgICByZXR1cm4gU19PSzsKIH0KSW5kZXg6
IFNvdXJjZS9XZWJLaXQvd2luL1dlYkZyYW1lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0L3dpbi9XZWJGcmFtZS5jcHAJKHJldmlzaW9uIDc3MzQ3KQorKysgU291cmNlL1dlYktpdC93
aW4vV2ViRnJhbWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDY2LDggKzIwNjYsOCBAQCBjb25z
dCBWZWN0b3I8V2ViQ29yZTo6SW50UmVjdD4mIFdlYkZyYW1lCiAgICAgSW50UmVjdCBhZGp1c3Rl
ZFJlY3QgPSBJbnRSZWN0KAogICAgICAgICBwYWdlUmVjdC54KCkgKyBtYXJnaW5SZWN0LngoKSwK
ICAgICAgICAgcGFnZVJlY3QueSgpICsgbWFyZ2luUmVjdC55KCksCi0gICAgICAgIHBhZ2VSZWN0
LndpZHRoKCkgLSBtYXJnaW5SZWN0LngoKSAtIG1hcmdpblJlY3QucmlnaHQoKSwKLSAgICAgICAg
cGFnZVJlY3QuaGVpZ2h0KCkgLSBtYXJnaW5SZWN0LnkoKSAtIG1hcmdpblJlY3QuYm90dG9tKCkp
OworICAgICAgICBwYWdlUmVjdC53aWR0aCgpIC0gbWFyZ2luUmVjdC54KCkgLSBtYXJnaW5SZWN0
Lm1heFgoKSwKKyAgICAgICAgcGFnZVJlY3QuaGVpZ2h0KCkgLSBtYXJnaW5SZWN0LnkoKSAtIG1h
cmdpblJlY3QubWF4WSgpKTsKIAogICAgIGNvbXB1dGVQYWdlUmVjdHNGb3JGcmFtZShjb3JlRnJh
bWUsIGFkanVzdGVkUmVjdCwgaGVhZGVySGVpZ2h0LCBmb290ZXJIZWlnaHQsIDEuMCxtX3BhZ2VS
ZWN0cywgbV9wYWdlSGVpZ2h0KTsKICAgICAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvd2luL1dlYlNj
cm9sbEJhci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC93aW4vV2ViU2Nyb2xsQmFy
LmNwcAkocmV2aXNpb24gNzczNDcpCisrKyBTb3VyY2UvV2ViS2l0L3dpbi9XZWJTY3JvbGxCYXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzQsOSArMTc0LDkgQEAgSFJFU1VMVCBTVERNRVRIT0RD
QUxMVFlQRSBXZWJTY3JvbGxCYXI6OgogICAgICAgICByZXR1cm4gRV9QT0lOVEVSOwogICAgIElu
dFJlY3QgcmVjdCA9IG1fc2Nyb2xsQmFyLT5mcmFtZVJlY3QoKTsKICAgICBib3VuZHMtPmxlZnQg
PSByZWN0LngoKTsKLSAgICBib3VuZHMtPnJpZ2h0ID0gcmVjdC5yaWdodCgpOworICAgIGJvdW5k
cy0+cmlnaHQgPSByZWN0Lm1heFgoKTsKICAgICBib3VuZHMtPnRvcCA9IHJlY3QueSgpOwotICAg
IGJvdW5kcy0+Ym90dG9tID0gcmVjdC5ib3R0b20oKTsKKyAgICBib3VuZHMtPmJvdHRvbSA9IHJl
Y3QubWF4WSgpOwogICAgIHJldHVybiBTX09LOwogfQogCkluZGV4OiBTb3VyY2UvV2ViS2l0L3dp
bi9XZWJWaWV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3dpbi9XZWJWaWV3LmNw
cAkocmV2aXNpb24gNzczNDcpCisrKyBTb3VyY2UvV2ViS2l0L3dpbi9XZWJWaWV3LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtODAyLDcgKzgwMiw3IEBAIHZvaWQgV2ViVmlldzo6YWRkVG9EaXJ0eVJl
Z2lvbihjb25zdCBJbnQKICNlbmRpZgogCiAgICAgSFJHTiBuZXdSZWdpb24gPSA6OkNyZWF0ZVJl
Y3RSZ24oZGlydHlSZWN0LngoKSwgZGlydHlSZWN0LnkoKSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBkaXJ0eVJlY3QucmlnaHQoKSwgZGlydHlSZWN0LmJvdHRvbSgpKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXJ0eVJlY3QubWF4WCgpLCBk
aXJ0eVJlY3QubWF4WSgpKTsKICAgICBhZGRUb0RpcnR5UmVnaW9uKG5ld1JlZ2lvbik7CiB9CiAK
QEAgLTQ5ODAsOCArNDk4MCw4IEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgV2ViVmlldzo6
dmlzaWIKICAgICBGbG9hdFJlY3QgdmlzaWJsZUNvbnRlbnQgPSBtX3BhZ2UtPm1haW5GcmFtZSgp
LT52aWV3KCktPnZpc2libGVDb250ZW50UmVjdCgpOwogICAgIHJlY3QtPmxlZnQgPSAoTE9ORykg
dmlzaWJsZUNvbnRlbnQueCgpOwogICAgIHJlY3QtPnRvcCA9IChMT05HKSB2aXNpYmxlQ29udGVu
dC55KCk7Ci0gICAgcmVjdC0+cmlnaHQgPSAoTE9ORykgdmlzaWJsZUNvbnRlbnQucmlnaHQoKTsK
LSAgICByZWN0LT5ib3R0b20gPSAoTE9ORykgdmlzaWJsZUNvbnRlbnQuYm90dG9tKCk7CisgICAg
cmVjdC0+cmlnaHQgPSAoTE9ORykgdmlzaWJsZUNvbnRlbnQubWF4WCgpOworICAgIHJlY3QtPmJv
dHRvbSA9IChMT05HKSB2aXNpYmxlQ29udGVudC5tYXhZKCk7CiAgICAgcmV0dXJuIFNfT0s7CiB9
CiAKQEAgLTUzNDUsOSArNTM0NSw5IEBAIHZvaWQgV2ViVmlldzo6cHJlcGFyZUNhbmRpZGF0ZVdp
bmRvdyhGcmEKICAgICBmb3JtLnB0Q3VycmVudFBvcy54ID0gY2FyZXQueCgpOwogICAgIGZvcm0u
cHRDdXJyZW50UG9zLnkgPSBjYXJldC55KCkgKyBjYXJldC5oZWlnaHQoKTsKICAgICBmb3JtLnJj
QXJlYS50b3AgPSBjYXJldC55KCk7Ci0gICAgZm9ybS5yY0FyZWEuYm90dG9tID0gY2FyZXQuYm90
dG9tKCk7CisgICAgZm9ybS5yY0FyZWEuYm90dG9tID0gY2FyZXQubWF4WSgpOwogICAgIGZvcm0u
cmNBcmVhLmxlZnQgPSBjYXJldC54KCk7Ci0gICAgZm9ybS5yY0FyZWEucmlnaHQgPSBjYXJldC5y
aWdodCgpOworICAgIGZvcm0ucmNBcmVhLnJpZ2h0ID0gY2FyZXQubWF4WCgpOwogICAgIElNTURp
Y3Q6OmRpY3QoKS5zZXRDYW5kaWRhdGVXaW5kb3coaElucHV0Q29udGV4dCwgJmZvcm0pOwogfQog
CkluZGV4OiBTb3VyY2UvV2ViS2l0L3dpbi9XZWJDb3JlU3VwcG9ydC9FbWJlZGRlZFdpZGdldC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC93aW4vV2ViQ29yZVN1cHBvcnQvRW1iZWRk
ZWRXaWRnZXQuY3BwCShyZXZpc2lvbiA3NzM0NykKKysrIFNvdXJjZS9XZWJLaXQvd2luL1dlYkNv
cmVTdXBwb3J0L0VtYmVkZGVkV2lkZ2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTIwLDcgKzEy
MCw3IEBAIHZvaWQgRW1iZWRkZWRXaWRnZXQ6OmZyYW1lUmVjdHNDaGFuZ2VkKCkKICAgICAgICAg
cmduID0gOjpDcmVhdGVSZWN0UmduKDAsIDAsIDAsIDApOwogICAgICAgICA6OlNldFdpbmRvd1Jn
bihtX3dpbmRvdywgcmduLCBGQUxTRSk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgcmduID0gOjpD
cmVhdGVSZWN0UmduKG1fY2xpcFJlY3QueCgpLCBtX2NsaXBSZWN0LnkoKSwgbV9jbGlwUmVjdC5y
aWdodCgpLCBtX2NsaXBSZWN0LmJvdHRvbSgpKTsKKyAgICAgICAgcmduID0gOjpDcmVhdGVSZWN0
UmduKG1fY2xpcFJlY3QueCgpLCBtX2NsaXBSZWN0LnkoKSwgbV9jbGlwUmVjdC5tYXhYKCksIG1f
Y2xpcFJlY3QubWF4WSgpKTsKICAgICAgICAgOjpTZXRXaW5kb3dSZ24obV93aW5kb3csIHJnbiwg
VFJVRSk7CiAgICAgIH0KIApAQCAtMTI4LDcgKzEyOCw3IEBAIHZvaWQgRW1iZWRkZWRXaWRnZXQ6
OmZyYW1lUmVjdHNDaGFuZ2VkKCkKICAgICAgICAgOjpNb3ZlV2luZG93KG1fd2luZG93LCBtX3dp
bmRvd1JlY3QueCgpLCBtX3dpbmRvd1JlY3QueSgpLCBtX3dpbmRvd1JlY3Qud2lkdGgoKSwgbV93
aW5kb3dSZWN0LmhlaWdodCgpLCBUUlVFKTsKIAogICAgICBpZiAoY2xpcFRvWmVyb1JlY3QpIHsK
LSAgICAgICAgcmduID0gOjpDcmVhdGVSZWN0UmduKG1fY2xpcFJlY3QueCgpLCBtX2NsaXBSZWN0
LnkoKSwgbV9jbGlwUmVjdC5yaWdodCgpLCBtX2NsaXBSZWN0LmJvdHRvbSgpKTsKKyAgICAgICAg
cmduID0gOjpDcmVhdGVSZWN0UmduKG1fY2xpcFJlY3QueCgpLCBtX2NsaXBSZWN0LnkoKSwgbV9j
bGlwUmVjdC5tYXhYKCksIG1fY2xpcFJlY3QubWF4WSgpKTsKICAgICAgICAgOjpTZXRXaW5kb3dS
Z24obV93aW5kb3csIHJnbiwgVFJVRSk7CiAgICAgfQogfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>80922</attachid>
            <date>2011-02-02 09:29:24 -0800</date>
            <delta_ts>2011-02-02 10:34:38 -0800</delta_ts>
            <desc>Step 2: (Reviewed by Darin, just using bots to check for errors) Remove accessors.</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>46001</size>
            <attacher name="Dave Hyatt">hyatt</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1BvcHVwTWVudUNocm9taXVt
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9Qb3B1
cE1lbnVDaHJvbWl1bS5jcHAJKHJldmlzaW9uIDc3MzQ3KQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vY2hyb21pdW0vUG9wdXBNZW51Q2hyb21pdW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
NTAsNyArMzUwLDcgQEAgSW50UmVjdCBQb3B1cENvbnRhaW5lcjo6bGF5b3V0QW5kQ2FsY3VsYQog
ICAgICAgICAvLyBpbnN0ZWFkLgogICAgICAgICBGbG9hdFJlY3Qgc2NyZWVuID0gc2NyZWVuQXZh
aWxhYmxlUmVjdChtX2ZyYW1lVmlldy5nZXQoKSk7CiAgICAgICAgIHdpZGdldFJlY3QgPSBjaHJv
bWVDbGllbnQtPndpbmRvd1RvU2NyZWVuKEludFJlY3QocG9wdXBJbml0aWFsQ29vcmRpbmF0ZSwg
dGFyZ2V0U2l6ZSkpOwotICAgICAgICBpZiAod2lkZ2V0UmVjdC5ib3R0b20oKSA+IHN0YXRpY19j
YXN0PGludD4oc2NyZWVuLmJvdHRvbSgpKSkgeworICAgICAgICBpZiAod2lkZ2V0UmVjdC5tYXhZ
KCkgPiBzdGF0aWNfY2FzdDxpbnQ+KHNjcmVlbi5tYXhZKCkpKSB7CiAgICAgICAgICAgICBpZiAo
d2lkZ2V0UmVjdC55KCkgLSB3aWRnZXRSZWN0LmhlaWdodCgpIC0gdGFyZ2V0Q29udHJvbEhlaWdo
dCA+IDApIHsKICAgICAgICAgICAgICAgICAvLyBUaGVyZSBpcyBlbm91Z2ggcm9vbSB0byBvcGVu
IHVwd2FyZHMuCiAgICAgICAgICAgICAgICAgd2lkZ2V0UmVjdC5tb3ZlKDAsIC0od2lkZ2V0UmVj
dC5oZWlnaHQoKSArIHRhcmdldENvbnRyb2xIZWlnaHQpKTsKQEAgLTM1OCw3ICszNTgsNyBAQCBJ
bnRSZWN0IFBvcHVwQ29udGFpbmVyOjpsYXlvdXRBbmRDYWxjdWxhCiAgICAgICAgICAgICAgICAg
Ly8gRmlndXJlIHdoZXRoZXIgdXB3YXJkcyBvciBkb3dud2FyZHMgaGFzIG1vcmUgcm9vbSBhbmQg
c2V0IHRoZQogICAgICAgICAgICAgICAgIC8vIG1heGltdW0gbnVtYmVyIG9mIGl0ZW1zLgogICAg
ICAgICAgICAgICAgIGludCBzcGFjZUFib3ZlID0gd2lkZ2V0UmVjdC55KCkgLSB0YXJnZXRDb250
cm9sSGVpZ2h0OwotICAgICAgICAgICAgICAgIGludCBzcGFjZUJlbG93ID0gc2NyZWVuLmJvdHRv
bSgpIC0gd2lkZ2V0UmVjdC55KCk7CisgICAgICAgICAgICAgICAgaW50IHNwYWNlQmVsb3cgPSBz
Y3JlZW4ubWF4WSgpIC0gd2lkZ2V0UmVjdC55KCk7CiAgICAgICAgICAgICAgICAgaWYgKHNwYWNl
QWJvdmUgPiBzcGFjZUJlbG93KQogICAgICAgICAgICAgICAgICAgICBtX2xpc3RCb3gtPnNldE1h
eEhlaWdodChzcGFjZUFib3ZlKTsKICAgICAgICAgICAgICAgICBlbHNlCkBAIC0xMTUzLDkgKzEx
NTMsOSBAQCB2b2lkIFBvcHVwTGlzdEJveDo6c2Nyb2xsVG9SZXZlYWxSb3coaW50CiAgICAgaWYg
KHJvd1JlY3QueSgpIDwgc2Nyb2xsWSgpKSB7CiAgICAgICAgIC8vIFJvdyBpcyBhYm92ZSBjdXJy
ZW50IHNjcm9sbCBwb3NpdGlvbiwgc2Nyb2xsIHVwLgogICAgICAgICBTY3JvbGxWaWV3OjpzZXRT
Y3JvbGxQb3NpdGlvbihJbnRQb2ludCgwLCByb3dSZWN0LnkoKSkpOwotICAgIH0gZWxzZSBpZiAo
cm93UmVjdC5ib3R0b20oKSA+IHNjcm9sbFkoKSArIHZpc2libGVIZWlnaHQoKSkgeworICAgIH0g
ZWxzZSBpZiAocm93UmVjdC5tYXhZKCkgPiBzY3JvbGxZKCkgKyB2aXNpYmxlSGVpZ2h0KCkpIHsK
ICAgICAgICAgLy8gUm93IGlzIGJlbG93IGN1cnJlbnQgc2Nyb2xsIHBvc2l0aW9uLCBzY3JvbGwg
ZG93bi4KLSAgICAgICAgU2Nyb2xsVmlldzo6c2V0U2Nyb2xsUG9zaXRpb24oSW50UG9pbnQoMCwg
cm93UmVjdC5ib3R0b20oKSAtIHZpc2libGVIZWlnaHQoKSkpOworICAgICAgICBTY3JvbGxWaWV3
OjpzZXRTY3JvbGxQb3NpdGlvbihJbnRQb2ludCgwLCByb3dSZWN0Lm1heFkoKSAtIHZpc2libGVI
ZWlnaHQoKSkpOwogICAgIH0KIH0KIApAQCAtMTM2Miw3ICsxMzYyLDcgQEAgdm9pZCBQb3B1cExp
c3RCb3g6OmxheW91dCgpCiAgICAgfQogCiAgICAgcmVzaXplKHdpbmRvd1dpZHRoLCB3aW5kb3dI
ZWlnaHQpOwotICAgIHNldENvbnRlbnRzU2l6ZShJbnRTaXplKGNvbnRlbnRXaWR0aCwgZ2V0Um93
Qm91bmRzKG51bUl0ZW1zKCkgLSAxKS5ib3R0b20oKSkpOworICAgIHNldENvbnRlbnRzU2l6ZShJ
bnRTaXplKGNvbnRlbnRXaWR0aCwgZ2V0Um93Qm91bmRzKG51bUl0ZW1zKCkgLSAxKS5tYXhZKCkp
KTsKIAogICAgIGlmIChob3N0V2luZG93KCkpCiAgICAgICAgIHNjcm9sbFRvUmV2ZWFsU2VsZWN0
aW9uKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3Qu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJl
Y3QuaAkocmV2aXNpb24gNzczNDcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9GbG9hdFJlY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMTAyLDExICsxMDIsNiBAQCBwdWJsaWM6
CiAKICAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiBtX3NpemUuaXNFbXB0eSgpOyB9
CiAKLSAgICBmbG9hdCBsZWZ0KCkgY29uc3QgeyByZXR1cm4geCgpOyB9Ci0gICAgZmxvYXQgcmln
aHQoKSBjb25zdCB7IHJldHVybiB4KCkgKyB3aWR0aCgpOyB9Ci0gICAgZmxvYXQgdG9wKCkgY29u
c3QgeyByZXR1cm4geSgpOyB9Ci0gICAgZmxvYXQgYm90dG9tKCkgY29uc3QgeyByZXR1cm4geSgp
ICsgaGVpZ2h0KCk7IH0KLQogICAgIEZsb2F0UG9pbnQgY2VudGVyKCkgY29uc3QgeyByZXR1cm4g
RmxvYXRQb2ludCh4KCkgKyB3aWR0aCgpIC8gMiwgeSgpICsgaGVpZ2h0KCkgLyAyKTsgfQogCiAg
ICAgdm9pZCBtb3ZlKGNvbnN0IEZsb2F0U2l6ZSYgZGVsdGEpIHsgbV9sb2NhdGlvbiArPSBkZWx0
YTsgfSAKQEAgLTEyNCw3ICsxMTksNiBAQCBwdWJsaWM6CiAgICAgICAgIHsgcmV0dXJuIHB4ID49
IHgoKSAmJiBweCA8PSBtYXhYKCkgJiYgcHkgPj0geSgpICYmIHB5IDw9IG1heFkoKTsgfQogICAg
IGJvb2wgY29udGFpbnMoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpIGNvbnN0IHsgcmV0dXJuIGNv
bnRhaW5zKHBvaW50LngoKSwgcG9pbnQueSgpKTsgfQogCi0KICAgICB2b2lkIGluZmxhdGVYKGZs
b2F0IGR4KSB7CiAgICAgICAgIG1fbG9jYXRpb24uc2V0WChtX2xvY2F0aW9uLngoKSAtIGR4KTsK
ICAgICAgICAgbV9zaXplLnNldFdpZHRoKG1fc2l6ZS53aWR0aCgpICsgZHggKyBkeCk7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbnRSZWN0LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW50UmVjdC5oCShyZXZpc2lvbiA3
NzM0NykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ludFJlY3QuaAkod29y
a2luZyBjb3B5KQpAQCAtMTAzLDkgKzEwMyw2IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgaXNFbXB0
eSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZS5pc0VtcHR5KCk7IH0KIAotICAgIGludCByaWdodCgp
IGNvbnN0IHsgcmV0dXJuIHgoKSArIHdpZHRoKCk7IH0KLSAgICBpbnQgYm90dG9tKCkgY29uc3Qg
eyByZXR1cm4geSgpICsgaGVpZ2h0KCk7IH0KLQogICAgIC8vIE5PVEU6IFRoZSByZXN1bHQgaXMg
cm91bmRlZCB0byBpbnRlZ2VyIHZhbHVlcywgYW5kIHRodXMgbWF5IGJlIG5vdCB0aGUgZXhhY3QK
ICAgICAvLyBjZW50ZXIgcG9pbnQuCiAgICAgSW50UG9pbnQgY2VudGVyKCkgY29uc3QgeyByZXR1
cm4gSW50UG9pbnQoeCgpICsgd2lkdGgoKSAvIDIsIHkoKSArIGhlaWdodCgpIC8gMik7IH0KSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fp
cm8uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nh
aXJvL0ltYWdlQnVmZmVyQ2Fpcm8uY3BwCShyZXZpc2lvbiA3NzM0NykKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm8uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xNzMsNyArMTczLDcgQEAgUGFzc1JlZlB0cjxCeXRlQXJyYXk+IGdldEltYWdl
RGF0YShjb25zdAogICAgICAgICBkZXN0eCA9IC1vcmlnaW54OwogICAgICAgICBvcmlnaW54ID0g
MDsKICAgICB9Ci0gICAgaW50IGVuZHggPSByZWN0LnJpZ2h0KCk7CisgICAgaW50IGVuZHggPSBy
ZWN0Lm1heFgoKTsKICAgICBpZiAoZW5keCA+IHNpemUud2lkdGgoKSkKICAgICAgICAgZW5keCA9
IHNpemUud2lkdGgoKTsKICAgICBpbnQgbnVtQ29sdW1ucyA9IGVuZHggLSBvcmlnaW54OwpAQCAt
MTg0LDcgKzE4NCw3IEBAIFBhc3NSZWZQdHI8Qnl0ZUFycmF5PiBnZXRJbWFnZURhdGEoY29uc3QK
ICAgICAgICAgZGVzdHkgPSAtb3JpZ2lueTsKICAgICAgICAgb3JpZ2lueSA9IDA7CiAgICAgfQot
ICAgIGludCBlbmR5ID0gcmVjdC5ib3R0b20oKTsKKyAgICBpbnQgZW5keSA9IHJlY3QubWF4WSgp
OwogICAgIGlmIChlbmR5ID4gc2l6ZS5oZWlnaHQoKSkKICAgICAgICAgZW5keSA9IHNpemUuaGVp
Z2h0KCk7CiAgICAgaW50IG51bVJvd3MgPSBlbmR5IC0gb3JpZ2lueTsKQEAgLTIzOSw5ICsyMzks
OSBAQCB2b2lkIHB1dEltYWdlRGF0YShCeXRlQXJyYXkqJiBzb3VyY2UsIGNvCiAgICAgQVNTRVJU
KGRlc3R4ID49IDApOwogICAgIEFTU0VSVChkZXN0eCA8IHNpemUud2lkdGgoKSk7CiAgICAgQVNT
RVJUKG9yaWdpbnggPj0gMCk7Ci0gICAgQVNTRVJUKG9yaWdpbnggPD0gc291cmNlUmVjdC5yaWdo
dCgpKTsKKyAgICBBU1NFUlQob3JpZ2lueCA8PSBzb3VyY2VSZWN0Lm1heFgoKSk7CiAKLSAgICBp
bnQgZW5keCA9IGRlc3RQb2ludC54KCkgKyBzb3VyY2VSZWN0LnJpZ2h0KCk7CisgICAgaW50IGVu
ZHggPSBkZXN0UG9pbnQueCgpICsgc291cmNlUmVjdC5tYXhYKCk7CiAgICAgQVNTRVJUKGVuZHgg
PD0gc2l6ZS53aWR0aCgpKTsKIAogICAgIGludCBudW1Db2x1bW5zID0gZW5keCAtIGRlc3R4OwpA
QCAtMjUxLDkgKzI1MSw5IEBAIHZvaWQgcHV0SW1hZ2VEYXRhKEJ5dGVBcnJheSomIHNvdXJjZSwg
Y28KICAgICBBU1NFUlQoZGVzdHkgPj0gMCk7CiAgICAgQVNTRVJUKGRlc3R5IDwgc2l6ZS5oZWln
aHQoKSk7CiAgICAgQVNTRVJUKG9yaWdpbnkgPj0gMCk7Ci0gICAgQVNTRVJUKG9yaWdpbnkgPD0g
c291cmNlUmVjdC5ib3R0b20oKSk7CisgICAgQVNTRVJUKG9yaWdpbnkgPD0gc291cmNlUmVjdC5t
YXhZKCkpOwogCi0gICAgaW50IGVuZHkgPSBkZXN0UG9pbnQueSgpICsgc291cmNlUmVjdC5ib3R0
b20oKTsKKyAgICBpbnQgZW5keSA9IGRlc3RQb2ludC55KCkgKyBzb3VyY2VSZWN0Lm1heFkoKTsK
ICAgICBBU1NFUlQoZW5keSA8PSBzaXplLmhlaWdodCgpKTsKICAgICBpbnQgbnVtUm93cyA9IGVu
ZHkgLSBkZXN0eTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vR0xFUzJDYW52YXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0dMRVMyQ2FudmFzLmNwcAkocmV2aXNpb24gNzczNDcpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HTEVTMkNhbnZhcy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTMyMiw4ICszMjIsOCBAQCB2b2lkIEdMRVMyQ2FudmFzOjpk
cmF3VGV4dHVyZWRSZWN0KFRleHR1CiAgICAgbV9jb250ZXh0LT51c2VRdWFkVmVydGljZXMoKTsK
ICAgICBtX2NvbnRleHQtPnNldEFjdGl2ZVRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRV
UkUwKTsKIAotICAgIGZvciAoaW50IHkgPSB0aWxlSWR4UmVjdC55KCk7IHkgPD0gdGlsZUlkeFJl
Y3QuYm90dG9tKCk7IHkrKykgewotICAgICAgICBmb3IgKGludCB4ID0gdGlsZUlkeFJlY3QueCgp
OyB4IDw9IHRpbGVJZHhSZWN0LnJpZ2h0KCk7IHgrKykKKyAgICBmb3IgKGludCB5ID0gdGlsZUlk
eFJlY3QueSgpOyB5IDw9IHRpbGVJZHhSZWN0Lm1heFkoKTsgeSsrKSB7CisgICAgICAgIGZvciAo
aW50IHggPSB0aWxlSWR4UmVjdC54KCk7IHggPD0gdGlsZUlkeFJlY3QubWF4WCgpOyB4KyspCiAg
ICAgICAgICAgICBkcmF3VGV4dHVyZWRSZWN0VGlsZSh0ZXh0dXJlLCB0aWxlcy50aWxlSW5kZXgo
eCwgeSksIHNyY1JlY3QsIGRzdFJlY3QsIHRyYW5zZm9ybSwgYWxwaGEpOwogICAgIH0KIH0KSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVy
ZXJDaHJvbWl1bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcAkocmV2aXNpb24gNzczNDcp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRl
cmVyQ2hyb21pdW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDMsMTMgKzE0MywxMyBAQCB2b2lk
IExheWVyUmVuZGVyZXJDaHJvbWl1bTo6dXNlU2hhZGVyKHVuCiAKIEludFJlY3QgTGF5ZXJSZW5k
ZXJlckNocm9taXVtOjp2ZXJ0aWNhbFNjcm9sbGJhclJlY3QoY29uc3QgSW50UmVjdCYgdmlzaWJs
ZVJlY3QsIGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0KQogewotICAgIEludFJlY3QgdmVydGlj
YWxTY3JvbGxiYXIoSW50UG9pbnQoY29udGVudFJlY3QucmlnaHQoKSwgY29udGVudFJlY3QueSgp
KSwgSW50U2l6ZSh2aXNpYmxlUmVjdC53aWR0aCgpIC0gY29udGVudFJlY3Qud2lkdGgoKSwgdmlz
aWJsZVJlY3QuaGVpZ2h0KCkpKTsKKyAgICBJbnRSZWN0IHZlcnRpY2FsU2Nyb2xsYmFyKEludFBv
aW50KGNvbnRlbnRSZWN0Lm1heFgoKSwgY29udGVudFJlY3QueSgpKSwgSW50U2l6ZSh2aXNpYmxl
UmVjdC53aWR0aCgpIC0gY29udGVudFJlY3Qud2lkdGgoKSwgdmlzaWJsZVJlY3QuaGVpZ2h0KCkp
KTsKICAgICByZXR1cm4gdmVydGljYWxTY3JvbGxiYXI7CiB9CiAKIEludFJlY3QgTGF5ZXJSZW5k
ZXJlckNocm9taXVtOjpob3Jpem9udGFsU2Nyb2xsYmFyUmVjdChjb25zdCBJbnRSZWN0JiB2aXNp
YmxlUmVjdCwgY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QpCiB7Ci0gICAgSW50UmVjdCBob3Jp
em9udGFsU2Nyb2xsYmFyKEludFBvaW50KGNvbnRlbnRSZWN0LngoKSwgY29udGVudFJlY3QuYm90
dG9tKCkpLCBJbnRTaXplKHZpc2libGVSZWN0LndpZHRoKCksIHZpc2libGVSZWN0LmhlaWdodCgp
IC0gY29udGVudFJlY3QuaGVpZ2h0KCkpKTsKKyAgICBJbnRSZWN0IGhvcml6b250YWxTY3JvbGxi
YXIoSW50UG9pbnQoY29udGVudFJlY3QueCgpLCBjb250ZW50UmVjdC5tYXhZKCkpLCBJbnRTaXpl
KHZpc2libGVSZWN0LndpZHRoKCksIHZpc2libGVSZWN0LmhlaWdodCgpIC0gY29udGVudFJlY3Qu
aGVpZ2h0KCkpKTsKICAgICByZXR1cm4gaG9yaXpvbnRhbFNjcm9sbGJhcjsKIH0KIApAQCAtNzI0
LDcgKzcyNCw3IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpzZXRTY2lzc29yVG8KICAg
ICAvLyBCdXQsIGlmIHJlbmRlcmluZyB0byBvZmZzY3JlZW4gdGV4dHVyZSwgd2UgcmV2ZXJzZSBv
dXIgc2Vuc2Ugb2YgJ3Vwc2lkZSBkb3duJy4KICAgICBpbnQgc2Npc3Nvclk7CiAgICAgaWYgKG1f
Y3VycmVudFJlbmRlclN1cmZhY2UgPT0gbV9kZWZhdWx0UmVuZGVyU3VyZmFjZSAmJiAhbV9jb21w
b3NpdGVPZmZzY3JlZW4pCi0gICAgICAgIHNjaXNzb3JZID0gbV9jdXJyZW50UmVuZGVyU3VyZmFj
ZS0+bV9jb250ZW50UmVjdC5oZWlnaHQoKSAtIChzY2lzc29yUmVjdC5ib3R0b20oKSAtIG1fY3Vy
cmVudFJlbmRlclN1cmZhY2UtPm1fY29udGVudFJlY3QueSgpKTsKKyAgICAgICAgc2Npc3Nvclkg
PSBtX2N1cnJlbnRSZW5kZXJTdXJmYWNlLT5tX2NvbnRlbnRSZWN0LmhlaWdodCgpIC0gKHNjaXNz
b3JSZWN0Lm1heFkoKSAtIG1fY3VycmVudFJlbmRlclN1cmZhY2UtPm1fY29udGVudFJlY3QueSgp
KTsKICAgICBlbHNlCiAgICAgICAgIHNjaXNzb3JZID0gc2Npc3NvclJlY3QueSgpIC0gbV9jdXJy
ZW50UmVuZGVyU3VyZmFjZS0+bV9jb250ZW50UmVjdC55KCk7CiAgICAgR0xDKG1fY29udGV4dC5n
ZXQoKSwgbV9jb250ZXh0LT5zY2lzc29yKHNjaXNzb3JYLCBzY2lzc29yWSwgc2Npc3NvclJlY3Qu
d2lkdGgoKSwgc2Npc3NvclJlY3QuaGVpZ2h0KCkpKTsKQEAgLTc1MCw5ICs3NTAsOSBAQCBib29s
IExheWVyUmVuZGVyZXJDaHJvbWl1bTo6Y2hlY2tUZXh0dXJlCiB2b2lkIExheWVyUmVuZGVyZXJD
aHJvbWl1bTo6c2V0RHJhd1ZpZXdwb3J0UmVjdChjb25zdCBJbnRSZWN0JiBkcmF3UmVjdCwgYm9v
bCBmbGlwWSkKIHsKICAgICBpZiAoZmxpcFkpCi0gICAgICAgIG1fcHJvamVjdGlvbk1hdHJpeCA9
IG9ydGhvTWF0cml4KGRyYXdSZWN0LngoKSwgZHJhd1JlY3QucmlnaHQoKSwgZHJhd1JlY3QuYm90
dG9tKCksIGRyYXdSZWN0LnkoKSk7CisgICAgICAgIG1fcHJvamVjdGlvbk1hdHJpeCA9IG9ydGhv
TWF0cml4KGRyYXdSZWN0LngoKSwgZHJhd1JlY3QubWF4WCgpLCBkcmF3UmVjdC5tYXhZKCksIGRy
YXdSZWN0LnkoKSk7CiAgICAgZWxzZQotICAgICAgICBtX3Byb2plY3Rpb25NYXRyaXggPSBvcnRo
b01hdHJpeChkcmF3UmVjdC54KCksIGRyYXdSZWN0LnJpZ2h0KCksIGRyYXdSZWN0LnkoKSwgZHJh
d1JlY3QuYm90dG9tKCkpOworICAgICAgICBtX3Byb2plY3Rpb25NYXRyaXggPSBvcnRob01hdHJp
eChkcmF3UmVjdC54KCksIGRyYXdSZWN0Lm1heFgoKSwgZHJhd1JlY3QueSgpLCBkcmF3UmVjdC5t
YXhZKCkpOwogICAgIEdMQyhtX2NvbnRleHQuZ2V0KCksIG1fY29udGV4dC0+dmlld3BvcnQoMCwg
MCwgZHJhd1JlY3Qud2lkdGgoKSwgZHJhd1JlY3QuaGVpZ2h0KCkpKTsKIH0KIApJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJUaWxlckNocm9taXVt
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9MYXllclRpbGVyQ2hyb21pdW0uY3BwCShyZXZpc2lvbiA3NzM0NykKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGlsZXJDaHJvbWl1bS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTE0NSw4ICsxNDUsOCBAQCB2b2lkIExheWVyVGlsZXJDaHJvbWl1
bTo6Y29udGVudFJlY3RUb1RpCiAKICAgICBsZWZ0ID0gbGF5ZXJSZWN0LngoKSAvIG1fdGlsZVNp
emUud2lkdGgoKTsKICAgICB0b3AgPSBsYXllclJlY3QueSgpIC8gbV90aWxlU2l6ZS5oZWlnaHQo
KTsKLSAgICByaWdodCA9IChsYXllclJlY3QucmlnaHQoKSAtIDEpIC8gbV90aWxlU2l6ZS53aWR0
aCgpOwotICAgIGJvdHRvbSA9IChsYXllclJlY3QuYm90dG9tKCkgLSAxKSAvIG1fdGlsZVNpemUu
aGVpZ2h0KCk7CisgICAgcmlnaHQgPSAobGF5ZXJSZWN0Lm1heFgoKSAtIDEpIC8gbV90aWxlU2l6
ZS53aWR0aCgpOworICAgIGJvdHRvbSA9IChsYXllclJlY3QubWF4WSgpIC0gMSkgLyBtX3RpbGVT
aXplLmhlaWdodCgpOwogfQogCiBJbnRSZWN0IExheWVyVGlsZXJDaHJvbWl1bTo6Y29udGVudFJl
Y3RUb0xheWVyUmVjdChjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCkgY29uc3QKQEAgLTQyNyw3
ICs0MjcsNyBAQCB2b2lkIExheWVyVGlsZXJDaHJvbWl1bTo6Z3Jvd0xheWVyVG9Db250CiB7CiAg
ICAgLy8gR3JvdyB0aGUgdGlsZSBhcnJheSB0byBjb250YWluIHRoaXMgY29udGVudCByZWN0Lgog
ICAgIEludFJlY3QgbGF5ZXJSZWN0ID0gY29udGVudFJlY3RUb0xheWVyUmVjdChjb250ZW50UmVj
dCk7Ci0gICAgSW50U2l6ZSBsYXllclNpemUgPSBJbnRTaXplKGxheWVyUmVjdC5yaWdodCgpLCBs
YXllclJlY3QuYm90dG9tKCkpOworICAgIEludFNpemUgbGF5ZXJTaXplID0gSW50U2l6ZShsYXll
clJlY3QubWF4WCgpLCBsYXllclJlY3QubWF4WSgpKTsKIAogICAgIEludFNpemUgbmV3U2l6ZSA9
IGxheWVyU2l6ZS5leHBhbmRlZFRvKG1fbGF5ZXJTaXplKTsKICAgICByZXNpemVMYXllcihuZXdT
aXplKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9UaWxpbmdE
YXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9n
cHUvVGlsaW5nRGF0YS5jcHAJKHJldmlzaW9uIDc3MzQ3KQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZ3B1L1RpbGluZ0RhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04OSw5
ICs4OSw5IEBAIEludFJlY3QgVGlsaW5nRGF0YTo6dGlsZUJvdW5kc1dpdGhCb3JkZXIKIAogICAg
IGlmIChtX2JvcmRlclRleGVscykgewogICAgICAgICBpbnQgeDEgPSBib3VuZHMueCgpOwotICAg
ICAgICBpbnQgeDIgPSBib3VuZHMucmlnaHQoKTsKKyAgICAgICAgaW50IHgyID0gYm91bmRzLm1h
eFgoKTsKICAgICAgICAgaW50IHkxID0gYm91bmRzLnkoKTsKLSAgICAgICAgaW50IHkyID0gYm91
bmRzLmJvdHRvbSgpOworICAgICAgICBpbnQgeTIgPSBib3VuZHMubWF4WSgpOwogCiAgICAgICAg
IGlmICh0aWxlWEluZGV4KHRpbGUpID4gMCkKICAgICAgICAgICAgIHgxLS07CkBAIC0xODIsOCAr
MTgyLDggQEAgSW50UmVjdCBUaWxpbmdEYXRhOjpvdmVybGFwcGVkVGlsZUluZGljZQogewogICAg
IGludCB4ID0gdGlsZVhJbmRleEZyb21TcmNDb29yZChzcmNSZWN0LngoKSk7CiAgICAgaW50IHkg
PSB0aWxlWUluZGV4RnJvbVNyY0Nvb3JkKHNyY1JlY3QueSgpKTsKLSAgICBpbnQgciA9IHRpbGVY
SW5kZXhGcm9tU3JjQ29vcmQoc3JjUmVjdC5yaWdodCgpKTsKLSAgICBpbnQgYiA9IHRpbGVZSW5k
ZXhGcm9tU3JjQ29vcmQoc3JjUmVjdC5ib3R0b20oKSk7CisgICAgaW50IHIgPSB0aWxlWEluZGV4
RnJvbVNyY0Nvb3JkKHNyY1JlY3QubWF4WCgpKTsKKyAgICBpbnQgYiA9IHRpbGVZSW5kZXhGcm9t
U3JjQ29vcmQoc3JjUmVjdC5tYXhZKCkpOwogICAgIHJldHVybiBJbnRSZWN0KHgsIHksIHIgLSB4
LCBiIC0geSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0
L0ltYWdlQnVmZmVyUXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3F0L0ltYWdlQnVmZmVyUXQuY3BwCShyZXZpc2lvbiA3NzM0NykKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ltYWdlQnVmZmVyUXQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xODgsNyArMTg4LDcgQEAgUGFzc1JlZlB0cjxCeXRlQXJyYXk+IGdldEltYWdl
RGF0YShjb25zdAogICAgIFJlZlB0cjxCeXRlQXJyYXk+IHJlc3VsdCA9IEJ5dGVBcnJheTo6Y3Jl
YXRlKHJlY3Qud2lkdGgoKSAqIHJlY3QuaGVpZ2h0KCkgKiA0KTsKICAgICB1bnNpZ25lZCBjaGFy
KiBkYXRhID0gcmVzdWx0LT5kYXRhKCk7CiAKLSAgICBpZiAocmVjdC54KCkgPCAwIHx8IHJlY3Qu
eSgpIDwgMCB8fCByZWN0LnJpZ2h0KCkgPiBzaXplLndpZHRoKCkgfHwgcmVjdC5ib3R0b20oKSA+
IHNpemUuaGVpZ2h0KCkpCisgICAgaWYgKHJlY3QueCgpIDwgMCB8fCByZWN0LnkoKSA8IDAgfHwg
cmVjdC5tYXhYKCkgPiBzaXplLndpZHRoKCkgfHwgcmVjdC5tYXhZKCkgPiBzaXplLmhlaWdodCgp
KQogICAgICAgICBtZW1zZXQoZGF0YSwgMCwgcmVzdWx0LT5sZW5ndGgoKSk7CiAKICAgICBpbnQg
b3JpZ2lueCA9IHJlY3QueCgpOwpAQCAtMTk3LDcgKzE5Nyw3IEBAIFBhc3NSZWZQdHI8Qnl0ZUFy
cmF5PiBnZXRJbWFnZURhdGEoY29uc3QKICAgICAgICAgZGVzdHggPSAtb3JpZ2lueDsKICAgICAg
ICAgb3JpZ2lueCA9IDA7CiAgICAgfQotICAgIGludCBlbmR4ID0gcmVjdC5yaWdodCgpOworICAg
IGludCBlbmR4ID0gcmVjdC5tYXhYKCk7CiAgICAgaWYgKGVuZHggPiBzaXplLndpZHRoKCkpCiAg
ICAgICAgIGVuZHggPSBzaXplLndpZHRoKCk7CiAgICAgaW50IG51bUNvbHVtbnMgPSBlbmR4IC0g
b3JpZ2lueDsKQEAgLTIwOCw3ICsyMDgsNyBAQCBQYXNzUmVmUHRyPEJ5dGVBcnJheT4gZ2V0SW1h
Z2VEYXRhKGNvbnN0CiAgICAgICAgIGRlc3R5ID0gLW9yaWdpbnk7CiAgICAgICAgIG9yaWdpbnkg
PSAwOwogICAgIH0KLSAgICBpbnQgZW5keSA9IHJlY3QuYm90dG9tKCk7CisgICAgaW50IGVuZHkg
PSByZWN0Lm1heFkoKTsKICAgICBpZiAoZW5keSA+IHNpemUuaGVpZ2h0KCkpCiAgICAgICAgIGVu
ZHkgPSBzaXplLmhlaWdodCgpOwogICAgIGludCBudW1Sb3dzID0gZW5keSAtIG9yaWdpbnk7CkBA
IC0zMDIsOSArMzAyLDkgQEAgdm9pZCBwdXRJbWFnZURhdGEoQnl0ZUFycmF5KiYgc291cmNlLCBj
bwogICAgIEFTU0VSVChkZXN0eCA+PSAwKTsKICAgICBBU1NFUlQoZGVzdHggPCBzaXplLndpZHRo
KCkpOwogICAgIEFTU0VSVChvcmlnaW54ID49IDApOwotICAgIEFTU0VSVChvcmlnaW54IDw9IHNv
dXJjZVJlY3QucmlnaHQoKSk7CisgICAgQVNTRVJUKG9yaWdpbnggPD0gc291cmNlUmVjdC5tYXhY
KCkpOwogCi0gICAgaW50IGVuZHggPSBkZXN0UG9pbnQueCgpICsgc291cmNlUmVjdC5yaWdodCgp
OworICAgIGludCBlbmR4ID0gZGVzdFBvaW50LngoKSArIHNvdXJjZVJlY3QubWF4WCgpOwogICAg
IEFTU0VSVChlbmR4IDw9IHNpemUud2lkdGgoKSk7CiAKICAgICBpbnQgbnVtQ29sdW1ucyA9IGVu
ZHggLSBkZXN0eDsKQEAgLTMxNCw5ICszMTQsOSBAQCB2b2lkIHB1dEltYWdlRGF0YShCeXRlQXJy
YXkqJiBzb3VyY2UsIGNvCiAgICAgQVNTRVJUKGRlc3R5ID49IDApOwogICAgIEFTU0VSVChkZXN0
eSA8IHNpemUuaGVpZ2h0KCkpOwogICAgIEFTU0VSVChvcmlnaW55ID49IDApOwotICAgIEFTU0VS
VChvcmlnaW55IDw9IHNvdXJjZVJlY3QuYm90dG9tKCkpOworICAgIEFTU0VSVChvcmlnaW55IDw9
IHNvdXJjZVJlY3QubWF4WSgpKTsKIAotICAgIGludCBlbmR5ID0gZGVzdFBvaW50LnkoKSArIHNv
dXJjZVJlY3QuYm90dG9tKCk7CisgICAgaW50IGVuZHkgPSBkZXN0UG9pbnQueSgpICsgc291cmNl
UmVjdC5tYXhZKCk7CiAgICAgQVNTRVJUKGVuZHkgPD0gc2l6ZS5oZWlnaHQoKSk7CiAgICAgaW50
IG51bVJvd3MgPSBlbmR5IC0gZGVzdHk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3NraWEvRmxvYXRSZWN0U2tpYS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9GbG9hdFJlY3RTa2lhLmNwcAkocmV2aXNpb24g
NzczNDcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0Zsb2F0UmVj
dFNraWEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Myw3ICs0Myw3IEBAIEZsb2F0UmVjdDo6Rmxv
YXRSZWN0KGNvbnN0IFNrUmVjdCYgcikKIAogRmxvYXRSZWN0OjpvcGVyYXRvciBTa1JlY3QoKSBj
b25zdAogewotICAgIFNrUmVjdCByZWN0ID0geyB4KCksIHkoKSwgcmlnaHQoKSwgYm90dG9tKCkg
fTsKKyAgICBTa1JlY3QgcmVjdCA9IHsgeCgpLCB5KCksIG1heFgoKSwgbWF4WSgpIH07CiAgICAg
cmV0dXJuIHJlY3Q7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3NraWEvSW1hZ2VCdWZmZXJTa2lhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9za2lhL0ltYWdlQnVmZmVyU2tpYS5jcHAJKHJldmlzaW9uIDc3MzQ3
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9JbWFnZUJ1ZmZlclNr
aWEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzcsOCArMTc3LDggQEAgUGFzc1JlZlB0cjxCeXRl
QXJyYXk+IGdldEltYWdlRGF0YShjb25zdAogCiAgICAgaWYgKHJlY3QueCgpIDwgMAogICAgICAg
ICB8fCByZWN0LnkoKSA8IDAKLSAgICAgICAgfHwgcmVjdC5yaWdodCgpID4gc2l6ZS53aWR0aCgp
Ci0gICAgICAgIHx8IHJlY3QuYm90dG9tKCkgPiBzaXplLmhlaWdodCgpKQorICAgICAgICB8fCBy
ZWN0Lm1heFgoKSA+IHNpemUud2lkdGgoKQorICAgICAgICB8fCByZWN0Lm1heFkoKSA+IHNpemUu
aGVpZ2h0KCkpCiAgICAgICAgIG1lbXNldChkYXRhLCAwLCByZXN1bHQtPmxlbmd0aCgpKTsKIAog
ICAgIGludCBvcmlnaW5YID0gcmVjdC54KCk7CkBAIC0xODcsNyArMTg3LDcgQEAgUGFzc1JlZlB0
cjxCeXRlQXJyYXk+IGdldEltYWdlRGF0YShjb25zdAogICAgICAgICBkZXN0WCA9IC1vcmlnaW5Y
OwogICAgICAgICBvcmlnaW5YID0gMDsKICAgICB9Ci0gICAgaW50IGVuZFggPSByZWN0LnJpZ2h0
KCk7CisgICAgaW50IGVuZFggPSByZWN0Lm1heFgoKTsKICAgICBpZiAoZW5kWCA+IHNpemUud2lk
dGgoKSkKICAgICAgICAgZW5kWCA9IHNpemUud2lkdGgoKTsKICAgICBpbnQgbnVtQ29sdW1ucyA9
IGVuZFggLSBvcmlnaW5YOwpAQCAtMjAxLDcgKzIwMSw3IEBAIFBhc3NSZWZQdHI8Qnl0ZUFycmF5
PiBnZXRJbWFnZURhdGEoY29uc3QKICAgICAgICAgZGVzdFkgPSAtb3JpZ2luWTsKICAgICAgICAg
b3JpZ2luWSA9IDA7CiAgICAgfQotICAgIGludCBlbmRZID0gcmVjdC5ib3R0b20oKTsKKyAgICBp
bnQgZW5kWSA9IHJlY3QubWF4WSgpOwogICAgIGlmIChlbmRZID4gc2l6ZS5oZWlnaHQoKSkKICAg
ICAgICAgZW5kWSA9IHNpemUuaGVpZ2h0KCk7CiAgICAgaW50IG51bVJvd3MgPSBlbmRZIC0gb3Jp
Z2luWTsKQEAgLTI2NSw5ICsyNjUsOSBAQCB2b2lkIHB1dEltYWdlRGF0YShCeXRlQXJyYXkqJiBz
b3VyY2UsIGNvCiAgICAgQVNTRVJUKGRlc3RYID49IDApOwogICAgIEFTU0VSVChkZXN0WCA8IHNp
emUud2lkdGgoKSk7CiAgICAgQVNTRVJUKG9yaWdpblggPj0gMCk7Ci0gICAgQVNTRVJUKG9yaWdp
blggPCBzb3VyY2VSZWN0LnJpZ2h0KCkpOworICAgIEFTU0VSVChvcmlnaW5YIDwgc291cmNlUmVj
dC5tYXhYKCkpOwogCi0gICAgaW50IGVuZFggPSBkZXN0UG9pbnQueCgpICsgc291cmNlUmVjdC5y
aWdodCgpOworICAgIGludCBlbmRYID0gZGVzdFBvaW50LngoKSArIHNvdXJjZVJlY3QubWF4WCgp
OwogICAgIEFTU0VSVChlbmRYIDw9IHNpemUud2lkdGgoKSk7CiAKICAgICBpbnQgbnVtQ29sdW1u
cyA9IGVuZFggLSBkZXN0WDsKQEAgLTI3Nyw5ICsyNzcsOSBAQCB2b2lkIHB1dEltYWdlRGF0YShC
eXRlQXJyYXkqJiBzb3VyY2UsIGNvCiAgICAgQVNTRVJUKGRlc3RZID49IDApOwogICAgIEFTU0VS
VChkZXN0WSA8IHNpemUuaGVpZ2h0KCkpOwogICAgIEFTU0VSVChvcmlnaW5ZID49IDApOwotICAg
IEFTU0VSVChvcmlnaW5ZIDwgc291cmNlUmVjdC5ib3R0b20oKSk7CisgICAgQVNTRVJUKG9yaWdp
blkgPCBzb3VyY2VSZWN0Lm1heFkoKSk7CiAKLSAgICBpbnQgZW5kWSA9IGRlc3RQb2ludC55KCkg
KyBzb3VyY2VSZWN0LmJvdHRvbSgpOworICAgIGludCBlbmRZID0gZGVzdFBvaW50LnkoKSArIHNv
dXJjZVJlY3QubWF4WSgpOwogICAgIEFTU0VSVChlbmRZIDw9IHNpemUuaGVpZ2h0KCkpOwogICAg
IGludCBudW1Sb3dzID0gZW5kWSAtIGRlc3RZOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9za2lhL0ludFJlY3RTa2lhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0ludFJlY3RTa2lhLmNwcAkocmV2aXNpb24g
NzczNDcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0ludFJlY3RT
a2lhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsMTQgKzM3LDE0IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAogSW50UmVjdDo6b3BlcmF0b3IgU2tJUmVjdCgpIGNvbnN0CiB7Ci0gICAgU2tJUmVj
dCByZWN0ID0geyB4KCksIHkoKSwgcmlnaHQoKSwgYm90dG9tKCkgfTsKKyAgICBTa0lSZWN0IHJl
Y3QgPSB7IHgoKSwgeSgpLCBtYXhYKCksIG1heFkoKSB9OwogICAgIHJldHVybiByZWN0OwogfQog
CiBJbnRSZWN0OjpvcGVyYXRvciBTa1JlY3QoKSBjb25zdAogewogICAgIFNrUmVjdCByZWN0Owot
ICAgIHJlY3Quc2V0KFNrSW50VG9TY2FsYXIoeCgpKSwgU2tJbnRUb1NjYWxhcih5KCkpLCBTa0lu
dFRvU2NhbGFyKHJpZ2h0KCkpLCBTa0ludFRvU2NhbGFyKGJvdHRvbSgpKSk7CisgICAgcmVjdC5z
ZXQoU2tJbnRUb1NjYWxhcih4KCkpLCBTa0ludFRvU2NhbGFyKHkoKSksIFNrSW50VG9TY2FsYXIo
bWF4WCgpKSwgU2tJbnRUb1NjYWxhcihtYXhZKCkpKTsKICAgICByZXR1cm4gcmVjdDsKIH0KIApJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9QbGF0Zm9ybUNvbnRl
eHRTa2lhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9za2lhL1BsYXRmb3JtQ29udGV4dFNraWEuY3BwCShyZXZpc2lvbiA3NzM0NykKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvUGxhdGZvcm1Db250ZXh0U2tpYS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTI2Niw3ICsyNjYsNyBAQCB2b2lkIFBsYXRmb3JtQ29udGV4dFNr
aWE6OmJlZ2luTGF5ZXJDbGlwCiAgICAgLy8gY3JlYXRlIHRoZSByZXN1bHRpbmcgaW1hZ2UuCiAg
ICAgbV9zdGF0ZS0+bV9jbGlwID0gcmVjdDsKICAgICBTa1JlY3QgYm91bmRzID0geyBTa0Zsb2F0
VG9TY2FsYXIocmVjdC54KCkpLCBTa0Zsb2F0VG9TY2FsYXIocmVjdC55KCkpLAotICAgICAgICAg
ICAgICAgICAgICAgIFNrRmxvYXRUb1NjYWxhcihyZWN0LnJpZ2h0KCkpLCBTa0Zsb2F0VG9TY2Fs
YXIocmVjdC5ib3R0b20oKSkgfTsKKyAgICAgICAgICAgICAgICAgICAgICBTa0Zsb2F0VG9TY2Fs
YXIocmVjdC5tYXhYKCkpLCBTa0Zsb2F0VG9TY2FsYXIocmVjdC5tYXhZKCkpIH07CiAKICAgICBj
YW52YXMoKS0+Y2xpcFJlY3QoYm91bmRzKTsKICAgICBjYW52YXMoKS0+c2F2ZUxheWVyQWxwaGEo
JmJvdW5kcywgMjU1LApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L0dyYXBoaWNzQ29udGV4dFdpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dFdpbi5jcHAJKHJldmlzaW9uIDc3MzQ3
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4
dFdpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1NCw3ICsxNTQsNyBAQCB2b2lkIEdyYXBoaWNz
Q29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6Y2xpCiB7CiAgICAgaWYgKCFtX2hkYykKICAgICAgICAg
cmV0dXJuOwotICAgIEludGVyc2VjdENsaXBSZWN0KG1faGRjLCBjbGlwUmVjdC54KCksIGNsaXBS
ZWN0LnkoKSwgY2xpcFJlY3QucmlnaHQoKSwgY2xpcFJlY3QuYm90dG9tKCkpOworICAgIEludGVy
c2VjdENsaXBSZWN0KG1faGRjLCBjbGlwUmVjdC54KCksIGNsaXBSZWN0LnkoKSwgY2xpcFJlY3Qu
bWF4WCgpLCBjbGlwUmVjdC5tYXhZKCkpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dFBsYXRm
b3JtUHJpdmF0ZTo6Y2xpcChjb25zdCBQYXRoJikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3dpbi9JbnRSZWN0V2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW50UmVjdFdpbi5jcHAJKHJldmlzaW9uIDc3MzQ3
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ludFJlY3RXaW4uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zOCw3ICszOCw3IEBAIEludFJlY3Q6OkludFJlY3QoY29uc3Qg
UkVDVCYgcikKIAogSW50UmVjdDo6b3BlcmF0b3IgUkVDVCgpIGNvbnN0CiB7Ci0gICAgUkVDVCBy
ZWN0ID0geyB4KCksIHkoKSwgcmlnaHQoKSwgYm90dG9tKCkgfTsKKyAgICBSRUNUIHJlY3QgPSB7
IHgoKSwgeSgpLCBtYXhYKCksIG1heFkoKSB9OwogICAgIHJldHVybiByZWN0OwogfQogCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vVW5pc2NyaWJlQ29udHJvbGxl
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L1VuaXNjcmliZUNvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiA3NzM0NykKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9VbmlzY3JpYmVDb250cm9sbGVyLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzk0LDkgKzM5NCw5IEBAIGJvb2wgVW5pc2NyaWJlQ29udHJvbGxlcjo6c2hh
cGVBbmRQbGFjZUkKICAgICAgICAgRmxvYXRSZWN0IGdseXBoQm91bmRzID0gZm9udERhdGEtPmJv
dW5kc0ZvckdseXBoKGdseXBoKTsKICAgICAgICAgZ2x5cGhCb3VuZHMubW92ZShtX2dseXBoT3Jp
Z2luLngoKSwgbV9nbHlwaE9yaWdpbi55KCkpOwogICAgICAgICBtX21pbkdseXBoQm91bmRpbmdC
b3hYID0gbWluKG1fbWluR2x5cGhCb3VuZGluZ0JveFgsIGdseXBoQm91bmRzLngoKSk7Ci0gICAg
ICAgIG1fbWF4R2x5cGhCb3VuZGluZ0JveFggPSBtYXgobV9tYXhHbHlwaEJvdW5kaW5nQm94WCwg
Z2x5cGhCb3VuZHMucmlnaHQoKSk7CisgICAgICAgIG1fbWF4R2x5cGhCb3VuZGluZ0JveFggPSBt
YXgobV9tYXhHbHlwaEJvdW5kaW5nQm94WCwgZ2x5cGhCb3VuZHMubWF4WCgpKTsKICAgICAgICAg
bV9taW5HbHlwaEJvdW5kaW5nQm94WSA9IG1pbihtX21pbkdseXBoQm91bmRpbmdCb3hZLCBnbHlw
aEJvdW5kcy55KCkpOwotICAgICAgICBtX21heEdseXBoQm91bmRpbmdCb3hZID0gbWF4KG1fbWF4
R2x5cGhCb3VuZGluZ0JveFksIGdseXBoQm91bmRzLmJvdHRvbSgpKTsKKyAgICAgICAgbV9tYXhH
bHlwaEJvdW5kaW5nQm94WSA9IG1heChtX21heEdseXBoQm91bmRpbmdCb3hZLCBnbHlwaEJvdW5k
cy5tYXhZKCkpOwogICAgICAgICBtX2dseXBoT3JpZ2luLm1vdmUoYWR2YW5jZSArIG9mZnNldFgs
IC1vZmZzZXRZKTsKIAogICAgICAgICAvLyBNdXRhdGUgdGhlIGdseXBoIGFycmF5IHRvIGNvbnRh
aW4gb3VyIGFsdGVyZWQgYWR2YW5jZXMuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy93aW5jZS9HcmFwaGljc0NvbnRleHRXaW5DRS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvR3JhcGhpY3NDb250ZXh0V2luQ0Uu
Y3BwCShyZXZpc2lvbiA3NzM0NykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3dpbmNlL0dyYXBoaWNzQ29udGV4dFdpbkNFLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjEsNyAr
NjEsNyBAQCBzdGF0aWMgaW5saW5lIGludCBzdGFibGVSb3VuZChkb3VibGUgZCkKIC8vIFVubGlr
ZSBlbmNsb3NpbmdJbnRSZWN0KCksIHRoaXMgZnVuY3Rpb24gZG9lcyBzdHJpY3Qgcm91bmRpbmcu
CiBzdGF0aWMgaW5saW5lIEludFJlY3Qgcm91bmRSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcikKIHsK
LSAgICByZXR1cm4gSW50UmVjdChzdGFibGVSb3VuZChyLngoKSksIHN0YWJsZVJvdW5kKHIueSgp
KSwgc3RhYmxlUm91bmQoci5yaWdodCgpKSAtIHN0YWJsZVJvdW5kKHIueCgpKSwgc3RhYmxlUm91
bmQoci5ib3R0b20oKSkgLSBzdGFibGVSb3VuZChyLnkoKSkpOworICAgIHJldHVybiBJbnRSZWN0
KHN0YWJsZVJvdW5kKHIueCgpKSwgc3RhYmxlUm91bmQoci55KCkpLCBzdGFibGVSb3VuZChyLm1h
eFgoKSkgLSBzdGFibGVSb3VuZChyLngoKSksIHN0YWJsZVJvdW5kKHIubWF4WSgpKSAtIHN0YWJs
ZVJvdW5kKHIueSgpKSk7CiB9CiAKIC8vIFJvdGF0aW9uIHRyYW5zZm9ybWF0aW9uCkBAIC0xMjgs
OCArMTI4LDggQEAgdGVtcGxhdGU8Y2xhc3MgVHJhbnNmb3JtLCBjbGFzcyBSZWN0LCBjbAogewog
ICAgIFZhbHVlIHhbNF0sIHlbNF07CiAgICAgVmFsdWUgbCwgdCwgciwgYjsKLSAgICByID0gcmVj
dC5yaWdodCgpIC0gMTsKLSAgICBiID0gcmVjdC5ib3R0b20oKSAtIDE7CisgICAgciA9IHJlY3Qu
bWF4WCgpIC0gMTsKKyAgICBiID0gcmVjdC5tYXhZKCkgLSAxOwogICAgIHRyYW5zZm9ybS5tYXAo
cmVjdC54KCksIHJlY3QueSgpLCB4LCB5KTsKICAgICB0cmFuc2Zvcm0ubWFwKHJlY3QueCgpLCBi
LCB4ICsgMSwgeSArIDEpOwogICAgIHRyYW5zZm9ybS5tYXAociwgYiwgeCArIDIsIHkgKyAyKTsK
QEAgLTUwMyw5ICs1MDMsOSBAQCBUcmFuc3BhcmVudExheWVyREM6OlRyYW5zcGFyZW50TGF5ZXJE
QyhHCiAgICAgICAgICAgICBtX3JvdGF0aW9uLm1fcG9zdFNoaWZ0WSAtPSBtX29yaWdSZWN0Lnko
KTsKIAogICAgICAgICAgICAgRmxvYXRQb2ludCB0b3BMZWZ0ID0gbV9kYXRhLT5tX3RyYW5zZm9y
bS5tYXBQb2ludChGbG9hdFBvaW50KHJlY3RCZWZvcmVUcmFuc2Zvcm0tPmxvY2F0aW9uKCkpKTsK
LSAgICAgICAgICAgIEZsb2F0UG9pbnQgdG9wUmlnaHQocmVjdEJlZm9yZVRyYW5zZm9ybS0+cmln
aHQoKSAtIDEsIHJlY3RCZWZvcmVUcmFuc2Zvcm0tPnkoKSk7CisgICAgICAgICAgICBGbG9hdFBv
aW50IHRvcFJpZ2h0KHJlY3RCZWZvcmVUcmFuc2Zvcm0tPm1heFgoKSAtIDEsIHJlY3RCZWZvcmVU
cmFuc2Zvcm0tPnkoKSk7CiAgICAgICAgICAgICB0b3BSaWdodCA9IG1fZGF0YS0+bV90cmFuc2Zv
cm0ubWFwUG9pbnQodG9wUmlnaHQpOwotICAgICAgICAgICAgRmxvYXRQb2ludCBib3R0b21MZWZ0
KHJlY3RCZWZvcmVUcmFuc2Zvcm0tPngoKSwgcmVjdEJlZm9yZVRyYW5zZm9ybS0+Ym90dG9tKCkg
LSAxKTsKKyAgICAgICAgICAgIEZsb2F0UG9pbnQgYm90dG9tTGVmdChyZWN0QmVmb3JlVHJhbnNm
b3JtLT54KCksIHJlY3RCZWZvcmVUcmFuc2Zvcm0tPm1heFkoKSAtIDEpOwogICAgICAgICAgICAg
Ym90dG9tTGVmdCA9IG1fZGF0YS0+bV90cmFuc2Zvcm0ubWFwUG9pbnQoYm90dG9tTGVmdCk7CiAg
ICAgICAgICAgICBGbG9hdFNpemUgc2lkZVRvcCA9IHRvcFJpZ2h0IC0gdG9wTGVmdDsKICAgICAg
ICAgICAgIEZsb2F0U2l6ZSBzaWRlTGVmdCA9IGJvdHRvbUxlZnQgLSB0b3BMZWZ0OwpAQCAtNjU1
LDcgKzY1NSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3UmVjdChjb25zdCBJbnQKICAg
ICAgICAgaWYgKHRyUmVjdC5oZWlnaHQoKSA8PSAwKQogICAgICAgICAgICAgdHJSZWN0LnNldEhl
aWdodCgxKTsKIAotICAgICAgICBSZWN0YW5nbGUoZGMsIHRyUmVjdC54KCksIHRyUmVjdC55KCks
IHRyUmVjdC5yaWdodCgpLCB0clJlY3QuYm90dG9tKCkpOworICAgICAgICBSZWN0YW5nbGUoZGMs
IHRyUmVjdC54KCksIHRyUmVjdC55KCksIHRyUmVjdC5tYXhYKCksIHRyUmVjdC5tYXhZKCkpOwog
ICAgIH0KIAogICAgIFNlbGVjdE9iamVjdChkYywgb2xkUGVuKTsKQEAgLTcyNSw3ICs3MjUsNyBA
QCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0VsbGlwc2UoY29uc3QgCiAgICAgICAgIG9sZFBl
biA9IFNlbGVjdE9iamVjdChkYywgR2V0U3RvY2tPYmplY3QoTlVMTF9QRU4pKTsKIAogICAgIGlm
IChicnVzaCB8fCBwZW4pCi0gICAgICAgIEVsbGlwc2UoZGMsIHRyUmVjdC54KCksIHRyUmVjdC55
KCksIHRyUmVjdC5yaWdodCgpLCB0clJlY3QuYm90dG9tKCkpOworICAgICAgICBFbGxpcHNlKGRj
LCB0clJlY3QueCgpLCB0clJlY3QueSgpLCB0clJlY3QubWF4WCgpLCB0clJlY3QubWF4WSgpKTsK
IAogICAgIFNlbGVjdE9iamVjdChkYywgb2xkUGVuKTsKICAgICBTZWxlY3RPYmplY3QoZGMsIG9s
ZEJydXNoKTsKQEAgLTgzOCw3ICs4MzgsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tl
QXJjKGNvbnN0IEluCiAgICAgfQogCiAgICAgSEdESU9CSiBvbGRCcnVzaCA9IFNlbGVjdE9iamVj
dChkYywgR2V0U3RvY2tPYmplY3QoTlVMTF9CUlVTSCkpOwotICAgIEVsbGlwc2UoZGMsIHRyUmVj
dC54KCksIHRyUmVjdC55KCksIHRyUmVjdC5yaWdodCgpLCB0clJlY3QuYm90dG9tKCkpOworICAg
IEVsbGlwc2UoZGMsIHRyUmVjdC54KCksIHRyUmVjdC55KCksIHRyUmVjdC5tYXhYKCksIHRyUmVj
dC5tYXhZKCkpOwogICAgIFNlbGVjdE9iamVjdChkYywgb2xkQnJ1c2gpOwogCiAgICAgaWYgKG5l
d0NsaXApCkBAIC05NTksOSArOTU5LDkgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXAoY29u
c3QgRmxvYXRSZQogCiAgICAgT3duUHRyPEhSR04+IGNsaXBSZ24oQ3JlYXRlUmVjdFJnbigwLCAw
LCAwLCAwKSk7CiAgICAgaWYgKEdldENsaXBSZ24obV9kYXRhLT5tX2RjLCBjbGlwUmduLmdldCgp
KSA+IDApCi0gICAgICAgIEludGVyc2VjdENsaXBSZWN0KG1fZGF0YS0+bV9kYywgdHJSZWN0Lngo
KSwgdHJSZWN0LnkoKSwgdHJSZWN0LnJpZ2h0KCksIHRyUmVjdC5ib3R0b20oKSk7CisgICAgICAg
IEludGVyc2VjdENsaXBSZWN0KG1fZGF0YS0+bV9kYywgdHJSZWN0LngoKSwgdHJSZWN0LnkoKSwg
dHJSZWN0Lm1heFgoKSwgdHJSZWN0Lm1heFkoKSk7CiAgICAgZWxzZSB7Ci0gICAgICAgIGNsaXBS
Z24uc2V0KENyZWF0ZVJlY3RSZ24odHJSZWN0LngoKSwgdHJSZWN0LnkoKSwgdHJSZWN0LnJpZ2h0
KCksIHRyUmVjdC5ib3R0b20oKSkpOworICAgICAgICBjbGlwUmduLnNldChDcmVhdGVSZWN0Umdu
KHRyUmVjdC54KCksIHRyUmVjdC55KCksIHRyUmVjdC5tYXhYKCksIHRyUmVjdC5tYXhZKCkpKTsK
ICAgICAgICAgU2VsZWN0Q2xpcFJnbihtX2RhdGEtPm1fZGMsIGNsaXBSZ24uZ2V0KCkpOwogICAg
IH0KIH0KQEAgLTk3Niw3ICs5NzYsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcE91dChj
b25zdCBJbnRSCiAKICAgICBJbnRSZWN0IHRyUmVjdCA9IG1fZGF0YS0+bWFwUmVjdChyZWN0KTsK
IAotICAgIEV4Y2x1ZGVDbGlwUmVjdChtX2RhdGEtPm1fZGMsIHRyUmVjdC54KCksIHRyUmVjdC55
KCksIHRyUmVjdC5yaWdodCgpLCB0clJlY3QuYm90dG9tKCkpOworICAgIEV4Y2x1ZGVDbGlwUmVj
dChtX2RhdGEtPm1fZGMsIHRyUmVjdC54KCksIHRyUmVjdC55KCksIHRyUmVjdC5tYXhYKCksIHRy
UmVjdC5tYXhZKCkpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ZvY3VzUmluZyhj
b25zdCBQYXRoJiBwYXRoLCBpbnQgd2lkdGgsIGludCBvZmZzZXQsIGNvbnN0IENvbG9yJiBjb2xv
cikKQEAgLTEwOTIsOCArMTA5Miw4IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzdHJva2VSZWN0
KGNvbnN0IEYKICAgICBPd25QdHI8SFBFTj4gcGVuID0gY3JlYXRlUGVuKHN0cm9rZUNvbG9yKCks
IHN0cm9rZVRoaWNrbmVzcygpLCBzdHJva2VTdHlsZSgpKTsKICAgICBIR0RJT0JKIG9sZFBlbiA9
IFNlbGVjdE9iamVjdChkYywgcGVuLmdldCgpKTsKIAotICAgIGludCByaWdodCA9IHRyUmVjdC5y
aWdodCgpIC0gMTsKLSAgICBpbnQgYm90dG9tID0gdHJSZWN0LmJvdHRvbSgpIC0gMTsKKyAgICBp
bnQgcmlnaHQgPSB0clJlY3QubWF4WCgpIC0gMTsKKyAgICBpbnQgYm90dG9tID0gdHJSZWN0Lm1h
eFkoKSAtIDE7CiAgICAgY29uc3QgUE9JTlQgaW50UG9pbnRzWzVdID0KICAgICB7CiAgICAgICAg
IHsgdHJSZWN0LngoKSwgdHJSZWN0LnkoKSB9LApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlRGVjb2Rlci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlRGVjb2Rl
ci5jcHAJKHJldmlzaW9uIDc3MzQ3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2Ut
ZGVjb2RlcnMvZ2lmL0dJRkltYWdlRGVjb2Rlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyNywx
NiArMzI3LDE2IEBAIGJvb2wgR0lGSW1hZ2VEZWNvZGVyOjppbml0RnJhbWVCdWZmZXIodW4KICAg
ICBJbnRSZWN0IGZyYW1lUmVjdChmcmFtZVJlYWRlci0+eF9vZmZzZXQsIGZyYW1lUmVhZGVyLT55
X29mZnNldCwgZnJhbWVSZWFkZXItPndpZHRoLCBmcmFtZVJlYWRlci0+aGVpZ2h0KTsKIAogICAg
IC8vIE1ha2Ugc3VyZSB0aGUgZnJhbWVSZWN0IGRvZXNuJ3QgZXh0ZW5kIG91dHNpZGUgdGhlIGJ1
ZmZlci4KLSAgICBpZiAoZnJhbWVSZWN0LnJpZ2h0KCkgPiBzaXplKCkud2lkdGgoKSkKKyAgICBp
ZiAoZnJhbWVSZWN0Lm1heFgoKSA+IHNpemUoKS53aWR0aCgpKQogICAgICAgICBmcmFtZVJlY3Qu
c2V0V2lkdGgoc2l6ZSgpLndpZHRoKCkgLSBmcmFtZVJlYWRlci0+eF9vZmZzZXQpOwotICAgIGlm
IChmcmFtZVJlY3QuYm90dG9tKCkgPiBzaXplKCkuaGVpZ2h0KCkpCisgICAgaWYgKGZyYW1lUmVj
dC5tYXhZKCkgPiBzaXplKCkuaGVpZ2h0KCkpCiAgICAgICAgIGZyYW1lUmVjdC5zZXRIZWlnaHQo
c2l6ZSgpLmhlaWdodCgpIC0gZnJhbWVSZWFkZXItPnlfb2Zmc2V0KTsKIAogICAgIEltYWdlRnJh
bWUqIGNvbnN0IGJ1ZmZlciA9ICZtX2ZyYW1lQnVmZmVyQ2FjaGVbZnJhbWVJbmRleF07CiAgICAg
aW50IGxlZnQgPSB1cHBlckJvdW5kU2NhbGVkWChmcmFtZVJlY3QueCgpKTsKLSAgICBpbnQgcmln
aHQgPSBsb3dlckJvdW5kU2NhbGVkWChmcmFtZVJlY3QucmlnaHQoKSwgbGVmdCk7CisgICAgaW50
IHJpZ2h0ID0gbG93ZXJCb3VuZFNjYWxlZFgoZnJhbWVSZWN0Lm1heFgoKSwgbGVmdCk7CiAgICAg
aW50IHRvcCA9IHVwcGVyQm91bmRTY2FsZWRZKGZyYW1lUmVjdC55KCkpOwotICAgIGludCBib3R0
b20gPSBsb3dlckJvdW5kU2NhbGVkWShmcmFtZVJlY3QuYm90dG9tKCksIHRvcCk7CisgICAgaW50
IGJvdHRvbSA9IGxvd2VyQm91bmRTY2FsZWRZKGZyYW1lUmVjdC5tYXhZKCksIHRvcCk7CiAgICAg
YnVmZmVyLT5zZXRSZWN0KEludFJlY3QobGVmdCwgdG9wLCByaWdodCAtIGxlZnQsIGJvdHRvbSAt
IHRvcCkpOwogICAgIAogICAgIGlmICghZnJhbWVJbmRleCkgewpAQCAtMzc4LDggKzM3OCw4IEBA
IGJvb2wgR0lGSW1hZ2VEZWNvZGVyOjppbml0RnJhbWVCdWZmZXIodW4KICAgICAgICAgICAgICAg
Ly8gQ29weSB0aGUgd2hvbGUgcHJldmlvdXMgYnVmZmVyLCB0aGVuIGNsZWFyIGp1c3QgaXRzIGZy
YW1lLgogICAgICAgICAgICAgICBpZiAoIWJ1ZmZlci0+Y29weUJpdG1hcERhdGEoKnByZXZCdWZm
ZXIpKQogICAgICAgICAgICAgICAgICAgcmV0dXJuIHNldEZhaWxlZCgpOwotICAgICAgICAgICAg
ICBmb3IgKGludCB5ID0gcHJldlJlY3QueSgpOyB5IDwgcHJldlJlY3QuYm90dG9tKCk7ICsreSkg
ewotICAgICAgICAgICAgICAgICAgZm9yIChpbnQgeCA9IHByZXZSZWN0LngoKTsgeCA8IHByZXZS
ZWN0LnJpZ2h0KCk7ICsreCkKKyAgICAgICAgICAgICAgZm9yIChpbnQgeSA9IHByZXZSZWN0Lnko
KTsgeSA8IHByZXZSZWN0Lm1heFkoKTsgKyt5KSB7CisgICAgICAgICAgICAgICAgICBmb3IgKGlu
dCB4ID0gcHJldlJlY3QueCgpOyB4IDwgcHJldlJlY3QubWF4WCgpOyArK3gpCiAgICAgICAgICAg
ICAgICAgICAgICAgYnVmZmVyLT5zZXRSR0JBKHgsIHksIDAsIDAsIDAsIDApOwogICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgIGlmICgocHJldlJlY3Qud2lkdGgoKSA+IDApICYmIChwcmV2
UmVjdC5oZWlnaHQoKSA+IDApKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1Bv
cHVwTWVudVdpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2lu
L1BvcHVwTWVudVdpbi5jcHAJKHJldmlzaW9uIDc3MzQ3KQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vd2luL1BvcHVwTWVudVdpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0NywxMyArMzQ3
LDEzIEBAIHZvaWQgUG9wdXBNZW51V2luOjpjYWxjdWxhdGVQb3NpdGlvbkFuZFMKICAgICAvLyBB
bHdheXMgbGVmdC1hbGlnbiBpdGVtcyBpbiB0aGUgcG9wdXAuICBUaGlzIG1hdGNoZXMgcG9wdXAg
bWVudXMgb24gdGhlIG1hYy4KICAgICBpbnQgcG9wdXBYID0gclNjcmVlbkNvb3Jkcy54KCkgKyBj
bGllbnQoKS0+Y2xpZW50SW5zZXRMZWZ0KCk7CiAKLSAgICBJbnRSZWN0IHBvcHVwUmVjdChwb3B1
cFgsIHJTY3JlZW5Db29yZHMuYm90dG9tKCksIHBvcHVwV2lkdGgsIHBvcHVwSGVpZ2h0KTsKKyAg
ICBJbnRSZWN0IHBvcHVwUmVjdChwb3B1cFgsIHJTY3JlZW5Db29yZHMubWF4WSgpLCBwb3B1cFdp
ZHRoLCBwb3B1cEhlaWdodCk7CiAKICAgICAvLyBUaGUgcG9wdXAgbmVlZHMgdG8gc3RheSB3aXRo
aW4gdGhlIGJvdW5kcyBvZiB0aGUgc2NyZWVuIGFuZCBub3Qgb3ZlcmxhcCBhbnkgdG9vbGJhcnMK
ICAgICBGbG9hdFJlY3Qgc2NyZWVuID0gc2NyZWVuQXZhaWxhYmxlUmVjdCh2KTsKIAogICAgIC8v
IENoZWNrIHRoYXQgd2UgZG9uJ3QgZ28gb2ZmIHRoZSBzY3JlZW4gdmVydGljYWxseQotICAgIGlm
IChwb3B1cFJlY3QuYm90dG9tKCkgPiBzY3JlZW4uaGVpZ2h0KCkpIHsKKyAgICBpZiAocG9wdXBS
ZWN0Lm1heFkoKSA+IHNjcmVlbi5oZWlnaHQoKSkgewogICAgICAgICAvLyBUaGUgcG9wdXAgd2ls
bCBnbyBvZmYgdGhlIHNjcmVlbiwgc28gdHJ5IHBsYWNpbmcgaXQgYWJvdmUgdGhlIGNsaWVudAog
ICAgICAgICBpZiAoclNjcmVlbkNvb3Jkcy55KCkgLSBwb3B1cFJlY3QuaGVpZ2h0KCkgPCAwKSB7
CiAgICAgICAgICAgICAvLyBUaGUgcG9wdXAgd29uJ3QgZml0IGFib3ZlLCBlaXRoZXIsIHNvIHBs
YWNlIGl0IHdoZXJlZXZlcidzIGJpZ2dlciBhbmQgcmVzaXplIGl0IHRvIGZpdApAQCAtNjAyLDcg
KzYwMiw3IEBAIHZvaWQgUG9wdXBNZW51V2luOjpwYWludChjb25zdCBJbnRSZWN0JiAKICAgICBJ
bnRSZWN0IGxpc3RSZWN0ID0gZGFtYWdlUmVjdDsKICAgICBsaXN0UmVjdC5tb3ZlKEludFNpemUo
MCwgbV9zY3JvbGxPZmZzZXQgKiBtX2l0ZW1IZWlnaHQpKTsKIAotICAgIGZvciAoaW50IHkgPSBs
aXN0UmVjdC55KCk7IHkgPCBsaXN0UmVjdC5ib3R0b20oKTsgeSArPSBtX2l0ZW1IZWlnaHQpIHsK
KyAgICBmb3IgKGludCB5ID0gbGlzdFJlY3QueSgpOyB5IDwgbGlzdFJlY3QubWF4WSgpOyB5ICs9
IG1faXRlbUhlaWdodCkgewogICAgICAgICBpbnQgaW5kZXggPSB5IC8gbV9pdGVtSGVpZ2h0Owog
CiAgICAgICAgIENvbG9yIG9wdGlvbkJhY2tncm91bmRDb2xvciwgb3B0aW9uVGV4dENvbG9yOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGx1Z2lucy93aW4vUGx1Z2luVmlld1dpbi5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGx1Z2lucy93aW4vUGx1Z2luVmlld1dpbi5jcHAJKHJl
dmlzaW9uIDc3MzQ3KQorKysgU291cmNlL1dlYkNvcmUvcGx1Z2lucy93aW4vUGx1Z2luVmlld1dp
bi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0OCw3ICs0NDgsNyBAQCB2b2lkIFBsdWdpblZpZXc6
OnVwZGF0ZVBsdWdpbldpZGdldCgpCiAgICAgICAgICAgICByZ24gPSA6OkNyZWF0ZVJlY3RSZ24o
MCwgMCwgMCwgMCk7CiAgICAgICAgICAgICA6OlNldFdpbmRvd1JnbihwbGF0Zm9ybVBsdWdpbldp
ZGdldCgpLCByZ24sIEZBTFNFKTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHJnbiA9
IDo6Q3JlYXRlUmVjdFJnbihtX2NsaXBSZWN0LngoKSwgbV9jbGlwUmVjdC55KCksIG1fY2xpcFJl
Y3QucmlnaHQoKSwgbV9jbGlwUmVjdC5ib3R0b20oKSk7CisgICAgICAgICAgICByZ24gPSA6OkNy
ZWF0ZVJlY3RSZ24obV9jbGlwUmVjdC54KCksIG1fY2xpcFJlY3QueSgpLCBtX2NsaXBSZWN0Lm1h
eFgoKSwgbV9jbGlwUmVjdC5tYXhZKCkpOwogICAgICAgICAgICAgOjpTZXRXaW5kb3dSZ24ocGxh
dGZvcm1QbHVnaW5XaWRnZXQoKSwgcmduLCBUUlVFKTsKICAgICAgICAgfQogCkBAIC00NTYsNyAr
NDU2LDcgQEAgdm9pZCBQbHVnaW5WaWV3Ojp1cGRhdGVQbHVnaW5XaWRnZXQoKQogICAgICAgICAg
ICAgOjpNb3ZlV2luZG93KHBsYXRmb3JtUGx1Z2luV2lkZ2V0KCksIG1fd2luZG93UmVjdC54KCks
IG1fd2luZG93UmVjdC55KCksIG1fd2luZG93UmVjdC53aWR0aCgpLCBtX3dpbmRvd1JlY3QuaGVp
Z2h0KCksIFRSVUUpOwogCiAgICAgICAgIGlmIChjbGlwVG9aZXJvUmVjdCkgewotICAgICAgICAg
ICAgcmduID0gOjpDcmVhdGVSZWN0UmduKG1fY2xpcFJlY3QueCgpLCBtX2NsaXBSZWN0LnkoKSwg
bV9jbGlwUmVjdC5yaWdodCgpLCBtX2NsaXBSZWN0LmJvdHRvbSgpKTsKKyAgICAgICAgICAgIHJn
biA9IDo6Q3JlYXRlUmVjdFJnbihtX2NsaXBSZWN0LngoKSwgbV9jbGlwUmVjdC55KCksIG1fY2xp
cFJlY3QubWF4WCgpLCBtX2NsaXBSZWN0Lm1heFkoKSk7CiAgICAgICAgICAgICA6OlNldFdpbmRv
d1JnbihwbGF0Zm9ybVBsdWdpbldpZGdldCgpLCByZ24sIFRSVUUpOwogICAgICAgICB9CiAKQEAg
LTg5Niw3ICs4OTYsNyBAQCBib29sIFBsdWdpblZpZXc6OnBsYXRmb3JtR2V0VmFsdWUoTlBOVmFy
CiB2b2lkIFBsdWdpblZpZXc6OmludmFsaWRhdGVSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpCiB7
CiAgICAgaWYgKG1faXNXaW5kb3dlZCkgewotICAgICAgICBSRUNUIGludmFsaWRSZWN0ID0geyBy
ZWN0LngoKSwgcmVjdC55KCksIHJlY3QucmlnaHQoKSwgcmVjdC5ib3R0b20oKSB9OworICAgICAg
ICBSRUNUIGludmFsaWRSZWN0ID0geyByZWN0LngoKSwgcmVjdC55KCksIHJlY3QubWF4WCgpLCBy
ZWN0Lm1heFkoKSB9OwogICAgICAgICA6OkludmFsaWRhdGVSZWN0KHBsYXRmb3JtUGx1Z2luV2lk
Z2V0KCksICZpbnZhbGlkUmVjdCwgZmFsc2UpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAt
OTE0LDcgKzkxNCw3IEBAIHZvaWQgUGx1Z2luVmlldzo6aW52YWxpZGF0ZVJlY3QoTlBSZWN0KiAK
ICAgICBJbnRSZWN0IHIocmVjdC0+bGVmdCwgcmVjdC0+dG9wLCByZWN0LT5yaWdodCAtIHJlY3Qt
PmxlZnQsIHJlY3QtPmJvdHRvbSAtIHJlY3QtPnRvcCk7CiAKICAgICBpZiAobV9pc1dpbmRvd2Vk
KSB7Ci0gICAgICAgIFJFQ1QgaW52YWxpZFJlY3QgPSB7IHIueCgpLCByLnkoKSwgci5yaWdodCgp
LCByLmJvdHRvbSgpIH07CisgICAgICAgIFJFQ1QgaW52YWxpZFJlY3QgPSB7IHIueCgpLCByLnko
KSwgci5tYXhYKCksIHIubWF4WSgpIH07CiAgICAgICAgIEludmFsaWRhdGVSZWN0KHBsYXRmb3Jt
UGx1Z2luV2lkZ2V0KCksICZpbnZhbGlkUmVjdCwgRkFMU0UpOwogICAgIH0gZWxzZSB7CiAgICAg
ICAgIGlmIChtX3BsdWdpbi0+cXVpcmtzKCkuY29udGFpbnMoUGx1Z2luUXVpcmtUaHJvdHRsZUlu
dmFsaWRhdGUpKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVT
YWZhcmkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
aGVtZVNhZmFyaS5jcHAJKHJldmlzaW9uIDc3MzQ3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRoZW1lU2FmYXJpLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzYwLDIwICs3NjAs
MjAgQEAgdm9pZCBSZW5kZXJUaGVtZVNhZmFyaTo6cGFpbnRNZW51TGlzdEJ1dAogICAgIEZsb2F0
UmVjdCB0b3BHcmFkaWVudChyLngoKSwgci55KCksIHIud2lkdGgoKSwgci5oZWlnaHQoKSAvIDIu
MGYpOwogICAgIHN0cnVjdCBDR0Z1bmN0aW9uQ2FsbGJhY2tzIHRvcENhbGxiYWNrcyA9IHsgMCwg
VG9wR3JhZGllbnRJbnRlcnBvbGF0ZSwgTlVMTCB9OwogICAgIFJldGFpblB0cjxDR0Z1bmN0aW9u
UmVmPiB0b3BGdW5jdGlvbihBZG9wdENGLCBDR0Z1bmN0aW9uQ3JlYXRlKE5VTEwsIDEsIE5VTEws
IDQsIE5VTEwsICZ0b3BDYWxsYmFja3MpKTsKLSAgICBSZXRhaW5QdHI8Q0dTaGFkaW5nUmVmPiB0
b3BTaGFkaW5nKEFkb3B0Q0YsIENHU2hhZGluZ0NyZWF0ZUF4aWFsKGNzcGFjZSwgQ0dQb2ludE1h
a2UodG9wR3JhZGllbnQueCgpLCB0b3BHcmFkaWVudC55KCkpLCBDR1BvaW50TWFrZSh0b3BHcmFk
aWVudC54KCksIHRvcEdyYWRpZW50LmJvdHRvbSgpKSwgdG9wRnVuY3Rpb24uZ2V0KCksIGZhbHNl
LCBmYWxzZSkpOworICAgIFJldGFpblB0cjxDR1NoYWRpbmdSZWY+IHRvcFNoYWRpbmcoQWRvcHRD
RiwgQ0dTaGFkaW5nQ3JlYXRlQXhpYWwoY3NwYWNlLCBDR1BvaW50TWFrZSh0b3BHcmFkaWVudC54
KCksIHRvcEdyYWRpZW50LnkoKSksIENHUG9pbnRNYWtlKHRvcEdyYWRpZW50LngoKSwgdG9wR3Jh
ZGllbnQubWF4WSgpKSwgdG9wRnVuY3Rpb24uZ2V0KCksIGZhbHNlLCBmYWxzZSkpOwogCiAgICAg
RmxvYXRSZWN0IGJvdHRvbUdyYWRpZW50KHIueCgpICsgcmFkaXVzLCByLnkoKSArIHIuaGVpZ2h0
KCkgLyAyLjBmLCByLndpZHRoKCkgLSAyLjBmICogcmFkaXVzLCByLmhlaWdodCgpIC8gMi4wZik7
CiAgICAgc3RydWN0IENHRnVuY3Rpb25DYWxsYmFja3MgYm90dG9tQ2FsbGJhY2tzID0geyAwLCBC
b3R0b21HcmFkaWVudEludGVycG9sYXRlLCBOVUxMIH07CiAgICAgUmV0YWluUHRyPENHRnVuY3Rp
b25SZWY+IGJvdHRvbUZ1bmN0aW9uKEFkb3B0Q0YsIENHRnVuY3Rpb25DcmVhdGUoTlVMTCwgMSwg
TlVMTCwgNCwgTlVMTCwgJmJvdHRvbUNhbGxiYWNrcykpOwotICAgIFJldGFpblB0cjxDR1NoYWRp
bmdSZWY+IGJvdHRvbVNoYWRpbmcoQWRvcHRDRiwgQ0dTaGFkaW5nQ3JlYXRlQXhpYWwoY3NwYWNl
LCBDR1BvaW50TWFrZShib3R0b21HcmFkaWVudC54KCksICBib3R0b21HcmFkaWVudC55KCkpLCBD
R1BvaW50TWFrZShib3R0b21HcmFkaWVudC54KCksIGJvdHRvbUdyYWRpZW50LmJvdHRvbSgpKSwg
Ym90dG9tRnVuY3Rpb24uZ2V0KCksIGZhbHNlLCBmYWxzZSkpOworICAgIFJldGFpblB0cjxDR1No
YWRpbmdSZWY+IGJvdHRvbVNoYWRpbmcoQWRvcHRDRiwgQ0dTaGFkaW5nQ3JlYXRlQXhpYWwoY3Nw
YWNlLCBDR1BvaW50TWFrZShib3R0b21HcmFkaWVudC54KCksICBib3R0b21HcmFkaWVudC55KCkp
LCBDR1BvaW50TWFrZShib3R0b21HcmFkaWVudC54KCksIGJvdHRvbUdyYWRpZW50Lm1heFkoKSks
IGJvdHRvbUZ1bmN0aW9uLmdldCgpLCBmYWxzZSwgZmFsc2UpKTsKIAogICAgIHN0cnVjdCBDR0Z1
bmN0aW9uQ2FsbGJhY2tzIG1haW5DYWxsYmFja3MgPSB7IDAsIE1haW5HcmFkaWVudEludGVycG9s
YXRlLCBOVUxMIH07CiAgICAgUmV0YWluUHRyPENHRnVuY3Rpb25SZWY+IG1haW5GdW5jdGlvbihB
ZG9wdENGLCBDR0Z1bmN0aW9uQ3JlYXRlKE5VTEwsIDEsIE5VTEwsIDQsIE5VTEwsICZtYWluQ2Fs
bGJhY2tzKSk7Ci0gICAgUmV0YWluUHRyPENHU2hhZGluZ1JlZj4gbWFpblNoYWRpbmcoQWRvcHRD
RiwgQ0dTaGFkaW5nQ3JlYXRlQXhpYWwoY3NwYWNlLCBDR1BvaW50TWFrZShyLngoKSwgIHIueSgp
KSwgQ0dQb2ludE1ha2Uoci54KCksIHIuYm90dG9tKCkpLCBtYWluRnVuY3Rpb24uZ2V0KCksIGZh
bHNlLCBmYWxzZSkpOworICAgIFJldGFpblB0cjxDR1NoYWRpbmdSZWY+IG1haW5TaGFkaW5nKEFk
b3B0Q0YsIENHU2hhZGluZ0NyZWF0ZUF4aWFsKGNzcGFjZSwgQ0dQb2ludE1ha2Uoci54KCksICBy
LnkoKSksIENHUG9pbnRNYWtlKHIueCgpLCByLm1heFkoKSksIG1haW5GdW5jdGlvbi5nZXQoKSwg
ZmFsc2UsIGZhbHNlKSk7CiAKICAgICBSZXRhaW5QdHI8Q0dTaGFkaW5nUmVmPiBsZWZ0U2hhZGlu
ZyhBZG9wdENGLCBDR1NoYWRpbmdDcmVhdGVBeGlhbChjc3BhY2UsIENHUG9pbnRNYWtlKHIueCgp
LCAgci55KCkpLCBDR1BvaW50TWFrZShyLngoKSArIHJhZGl1cywgci55KCkpLCBtYWluRnVuY3Rp
b24uZ2V0KCksIGZhbHNlLCBmYWxzZSkpOwogCi0gICAgUmV0YWluUHRyPENHU2hhZGluZ1JlZj4g
cmlnaHRTaGFkaW5nKEFkb3B0Q0YsIENHU2hhZGluZ0NyZWF0ZUF4aWFsKGNzcGFjZSwgQ0dQb2lu
dE1ha2Uoci5yaWdodCgpLCAgci55KCkpLCBDR1BvaW50TWFrZShyLnJpZ2h0KCkgLSByYWRpdXMs
IHIueSgpKSwgbWFpbkZ1bmN0aW9uLmdldCgpLCBmYWxzZSwgZmFsc2UpKTsKKyAgICBSZXRhaW5Q
dHI8Q0dTaGFkaW5nUmVmPiByaWdodFNoYWRpbmcoQWRvcHRDRiwgQ0dTaGFkaW5nQ3JlYXRlQXhp
YWwoY3NwYWNlLCBDR1BvaW50TWFrZShyLm1heFgoKSwgIHIueSgpKSwgQ0dQb2ludE1ha2Uoci5t
YXhYKCkgLSByYWRpdXMsIHIueSgpKSwgbWFpbkZ1bmN0aW9uLmdldCgpLCBmYWxzZSwgZmFsc2Up
KTsKICAgICBwYWludEluZm8uY29udGV4dC0+c2F2ZSgpOwogICAgIENHQ29udGV4dENsaXBUb1Jl
Y3QoY29udGV4dCwgYm91bmQucmVjdCgpKTsKICAgICBwYWludEluZm8uY29udGV4dC0+YWRkUm91
bmRlZFJlY3RDbGlwKGJvdW5kKTsKQEAgLTgxOCw3ICs4MTgsNyBAQCBib29sIFJlbmRlclRoZW1l
U2FmYXJpOjpwYWludE1lbnVMaXN0QnV0CiAgICAgZmxvYXQgY2VudGVyWSA9IGJvdW5kcy55KCkg
KyBib3VuZHMuaGVpZ2h0KCkgLyAyLjBmOwogICAgIGZsb2F0IGFycm93SGVpZ2h0ID0gYmFzZUFy
cm93SGVpZ2h0ICogZm9udFNjYWxlOwogICAgIGZsb2F0IGFycm93V2lkdGggPSBiYXNlQXJyb3dX
aWR0aCAqIGZvbnRTY2FsZTsKLSAgICBmbG9hdCBsZWZ0RWRnZSA9IGJvdW5kcy5yaWdodCgpIC0g
YXJyb3dQYWRkaW5nUmlnaHQgLSBhcnJvd1dpZHRoOworICAgIGZsb2F0IGxlZnRFZGdlID0gYm91
bmRzLm1heFgoKSAtIGFycm93UGFkZGluZ1JpZ2h0IC0gYXJyb3dXaWR0aDsKIAogICAgIGlmIChi
b3VuZHMud2lkdGgoKSA8IGFycm93V2lkdGggKyBhcnJvd1BhZGRpbmdMZWZ0KQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CkBAIC04NDgsMTEgKzg0OCwxMSBAQCBib29sIFJlbmRlclRoZW1lU2FmYXJp
OjpwYWludE1lbnVMaXN0QnV0CiAgICAgcGFpbnRJbmZvLmNvbnRleHQtPnNldFN0cm9rZVN0eWxl
KFNvbGlkU3Ryb2tlKTsKICAgICBwYWludEluZm8uY29udGV4dC0+c2V0U3Ryb2tlQ29sb3IobGVm
dFNlcGFyYXRvckNvbG9yLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKICAgICBwYWludEluZm8uY29u
dGV4dC0+ZHJhd0xpbmUoSW50UG9pbnQobGVmdEVkZ2VPZlNlcGFyYXRvciwgYm91bmRzLnkoKSks
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEludFBvaW50KGxlZnRFZGdlT2ZTZXBh
cmF0b3IsIGJvdW5kcy5ib3R0b20oKSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBJbnRQb2ludChsZWZ0RWRnZU9mU2VwYXJhdG9yLCBib3VuZHMubWF4WSgpKSk7CiAKICAgICBw
YWludEluZm8uY29udGV4dC0+c2V0U3Ryb2tlQ29sb3IocmlnaHRTZXBhcmF0b3JDb2xvciwgQ29s
b3JTcGFjZURldmljZVJHQik7CiAgICAgcGFpbnRJbmZvLmNvbnRleHQtPmRyYXdMaW5lKEludFBv
aW50KGxlZnRFZGdlT2ZTZXBhcmF0b3IgKyBzZXBhcmF0b3JTcGFjZSwgYm91bmRzLnkoKSksCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEludFBvaW50KGxlZnRFZGdlT2ZTZXBhcmF0
b3IgKyBzZXBhcmF0b3JTcGFjZSwgYm91bmRzLmJvdHRvbSgpKSk7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEludFBvaW50KGxlZnRFZGdlT2ZTZXBhcmF0b3IgKyBzZXBhcmF0b3JT
cGFjZSwgYm91bmRzLm1heFkoKSkpOwogCiAgICAgcGFpbnRJbmZvLmNvbnRleHQtPnJlc3RvcmUo
KTsKICAgICByZXR1cm4gZmFsc2U7CkBAIC05NzYsOSArOTc2LDkgQEAgYm9vbCBSZW5kZXJUaGVt
ZVNhZmFyaTo6cGFpbnRTbGlkZXJUcmFjawogICAgIFJldGFpblB0cjxDR0Z1bmN0aW9uUmVmPiBt
YWluRnVuY3Rpb24oQWRvcHRDRiwgQ0dGdW5jdGlvbkNyZWF0ZShOVUxMLCAxLCBOVUxMLCA0LCBO
VUxMLCAmbWFpbkNhbGxiYWNrcykpOwogICAgIFJldGFpblB0cjxDR1NoYWRpbmdSZWY+IG1haW5T
aGFkaW5nOwogICAgIGlmIChvLT5zdHlsZSgpLT5hcHBlYXJhbmNlKCkgPT0gU2xpZGVyVmVydGlj
YWxQYXJ0KQotICAgICAgICBtYWluU2hhZGluZy5hZG9wdENGKENHU2hhZGluZ0NyZWF0ZUF4aWFs
KGNzcGFjZSwgQ0dQb2ludE1ha2UoYm91bmRzLnJlY3QoKS54KCksICBib3VuZHMucmVjdCgpLmJv
dHRvbSgpKSwgQ0dQb2ludE1ha2UoYm91bmRzLnJlY3QoKS5yaWdodCgpLCBib3VuZHMucmVjdCgp
LmJvdHRvbSgpKSwgbWFpbkZ1bmN0aW9uLmdldCgpLCBmYWxzZSwgZmFsc2UpKTsKKyAgICAgICAg
bWFpblNoYWRpbmcuYWRvcHRDRihDR1NoYWRpbmdDcmVhdGVBeGlhbChjc3BhY2UsIENHUG9pbnRN
YWtlKGJvdW5kcy5yZWN0KCkueCgpLCAgYm91bmRzLnJlY3QoKS5tYXhZKCkpLCBDR1BvaW50TWFr
ZShib3VuZHMucmVjdCgpLm1heFgoKSwgYm91bmRzLnJlY3QoKS5tYXhZKCkpLCBtYWluRnVuY3Rp
b24uZ2V0KCksIGZhbHNlLCBmYWxzZSkpOwogICAgIGVsc2UKLSAgICAgICAgbWFpblNoYWRpbmcu
YWRvcHRDRihDR1NoYWRpbmdDcmVhdGVBeGlhbChjc3BhY2UsIENHUG9pbnRNYWtlKGJvdW5kcy5y
ZWN0KCkueCgpLCAgYm91bmRzLnJlY3QoKS55KCkpLCBDR1BvaW50TWFrZShib3VuZHMucmVjdCgp
LngoKSwgYm91bmRzLnJlY3QoKS5ib3R0b20oKSksIG1haW5GdW5jdGlvbi5nZXQoKSwgZmFsc2Us
IGZhbHNlKSk7CisgICAgICAgIG1haW5TaGFkaW5nLmFkb3B0Q0YoQ0dTaGFkaW5nQ3JlYXRlQXhp
YWwoY3NwYWNlLCBDR1BvaW50TWFrZShib3VuZHMucmVjdCgpLngoKSwgIGJvdW5kcy5yZWN0KCku
eSgpKSwgQ0dQb2ludE1ha2UoYm91bmRzLnJlY3QoKS54KCksIGJvdW5kcy5yZWN0KCkubWF4WSgp
KSwgbWFpbkZ1bmN0aW9uLmdldCgpLCBmYWxzZSwgZmFsc2UpKTsKIAogICAgIHBhaW50SW5mby5j
b250ZXh0LT5hZGRSb3VuZGVkUmVjdENsaXAoYm91bmRzKTsKICAgICBDR0NvbnRleHREcmF3U2hh
ZGluZyhjb250ZXh0LCBtYWluU2hhZGluZy5nZXQoKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVGhlbWVXaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUaGVtZVdpbi5jcHAJKHJldmlzaW9uIDc3MzQ3KQorKysgU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lV2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
Njk0LDcgKzY5NCw3IEBAIGJvb2wgUmVuZGVyVGhlbWVXaW46OnBhaW50SW5uZXJTcGluQnV0dG8K
ICAgICBJbnRSZWN0IHVwUmVjdChyKTsKICAgICB1cFJlY3Quc2V0SGVpZ2h0KHIuaGVpZ2h0KCkg
LyAyKTsKICAgICBJbnRSZWN0IGRvd25SZWN0KHIpOwotICAgIGRvd25SZWN0LnNldFkodXBSZWN0
LmJvdHRvbSgpKTsKKyAgICBkb3duUmVjdC5zZXRZKHVwUmVjdC5tYXhZKCkpOwogICAgIGRvd25S
ZWN0LnNldEhlaWdodChyLmhlaWdodCgpIC0gdXBSZWN0LmhlaWdodCgpKTsKICAgICBkcmF3Q29u
dHJvbChpLmNvbnRleHQsIG8sIHNwaW5CdXR0b25UaGVtZSgpLCBnZXRUaGVtZURhdGEobywgU3Bp
bkJ1dHRvblVwKSwgdXBSZWN0KTsKICAgICBkcmF3Q29udHJvbChpLmNvbnRleHQsIG8sIHNwaW5C
dXR0b25UaGVtZSgpLCBnZXRUaGVtZURhdGEobywgU3BpbkJ1dHRvbkRvd24pLCBkb3duUmVjdCk7
CkBAIC03ODgsNyArNzg4LDcgQEAgYm9vbCBSZW5kZXJUaGVtZVdpbjo6cGFpbnRNZW51TGlzdEJ1
dHRvbgogICAgIEludFJlY3QgYnV0dG9uUmVjdChyKTsKICAgICBidXR0b25SZWN0LmluZmxhdGUo
LWJvcmRlclRoaWNrbmVzcyk7CiAgICAgaWYgKG8tPnN0eWxlKCktPmRpcmVjdGlvbigpID09IExU
UikKLSAgICAgICAgYnV0dG9uUmVjdC5zZXRYKGJ1dHRvblJlY3QucmlnaHQoKSAtIGRyb3BEb3du
QnV0dG9uV2lkdGgpOworICAgICAgICBidXR0b25SZWN0LnNldFgoYnV0dG9uUmVjdC5tYXhYKCkg
LSBkcm9wRG93bkJ1dHRvbldpZHRoKTsKICAgICBidXR0b25SZWN0LnNldFdpZHRoKGRyb3BEb3du
QnV0dG9uV2lkdGgpOwogCiAgICAgaWYgKGlzUnVubmluZ09uVmlzdGFPckxhdGVyKCkpIHsKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy93aW4vV2ViUG9wdXBNZW51UHJveHlXaW4uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy93aW4vV2ViUG9wdXBNZW51
UHJveHlXaW4uY3BwCShyZXZpc2lvbiA3NzM0NykKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy93aW4vV2ViUG9wdXBNZW51UHJveHlXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNzMsNyAr
MzczLDcgQEAgdm9pZCBXZWJQb3B1cE1lbnVQcm94eVdpbjo6Y2FsY3VsYXRlUG9zaQogICAgIC8v
IEFsd2F5cyBsZWZ0LWFsaWduIGl0ZW1zIGluIHRoZSBwb3B1cC4gIFRoaXMgbWF0Y2hlcyBwb3B1
cCBtZW51cyBvbiB0aGUgbWFjLgogICAgIGludCBwb3B1cFggPSByZWN0SW5TY3JlZW5Db29yZHMu
eCgpICsgbV9kYXRhLm1fY2xpZW50SW5zZXRMZWZ0OwogCi0gICAgSW50UmVjdCBwb3B1cFJlY3Qo
cG9wdXBYLCByZWN0SW5TY3JlZW5Db29yZHMuYm90dG9tKCksIHBvcHVwV2lkdGgsIHBvcHVwSGVp
Z2h0KTsKKyAgICBJbnRSZWN0IHBvcHVwUmVjdChwb3B1cFgsIHJlY3RJblNjcmVlbkNvb3Jkcy5t
YXhZKCksIHBvcHVwV2lkdGgsIHBvcHVwSGVpZ2h0KTsKIAogICAgIC8vIFRoZSBwb3B1cCBuZWVk
cyB0byBzdGF5IHdpdGhpbiB0aGUgYm91bmRzIG9mIHRoZSBzY3JlZW4gYW5kIG5vdCBvdmVybGFw
IGFueSB0b29sYmFycwogICAgIEhNT05JVE9SIG1vbml0b3IgPSA6Ok1vbml0b3JGcm9tV2luZG93
KG1fd2ViVmlldy0+d2luZG93KCksIE1PTklUT1JfREVGQVVMVFRPUFJJTUFSWSk7CkBAIC0zODMs
NyArMzgzLDcgQEAgdm9pZCBXZWJQb3B1cE1lbnVQcm94eVdpbjo6Y2FsY3VsYXRlUG9zaQogICAg
IEZsb2F0UmVjdCBzY3JlZW4gPSBtb25pdG9ySW5mby5yY1dvcms7CiAKICAgICAvLyBDaGVjayB0
aGF0IHdlIGRvbid0IGdvIG9mZiB0aGUgc2NyZWVuIHZlcnRpY2FsbHkKLSAgICBpZiAocG9wdXBS
ZWN0LmJvdHRvbSgpID4gc2NyZWVuLmhlaWdodCgpKSB7CisgICAgaWYgKHBvcHVwUmVjdC5tYXhZ
KCkgPiBzY3JlZW4uaGVpZ2h0KCkpIHsKICAgICAgICAgLy8gVGhlIHBvcHVwIHdpbGwgZ28gb2Zm
IHRoZSBzY3JlZW4sIHNvIHRyeSBwbGFjaW5nIGl0IGFib3ZlIHRoZSBjbGllbnQKICAgICAgICAg
aWYgKHJlY3RJblNjcmVlbkNvb3Jkcy55KCkgLSBwb3B1cFJlY3QuaGVpZ2h0KCkgPCAwKSB7CiAg
ICAgICAgICAgICAvLyBUaGUgcG9wdXAgd29uJ3QgZml0IGFib3ZlLCBlaXRoZXIsIHNvIHBsYWNl
IGl0IHdoZXJlZXZlcidzIGJpZ2dlciBhbmQgcmVzaXplIGl0IHRvIGZpdApJbmRleDogU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL3dpbi9XZWJWaWV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3Mvd2luL1dlYlZpZXcuY3BwCShyZXZpc2lvbiA3NzM0NykKKysrIFNv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy93aW4vV2ViVmlldy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTc1OCwxMSArNzU4LDExIEBAIHZvaWQgV2ViVmlldzo6cHJlcGFyZUNhbmRpZGF0ZVdpbmRvdyhI
SU0KICAgICBmb3JtLmR3SW5kZXggPSAwOwogICAgIGZvcm0uZHdTdHlsZSA9IENGU19FWENMVURF
OwogICAgIGZvcm0ucHRDdXJyZW50UG9zLnggPSBjYXJldC54KCk7Ci0gICAgZm9ybS5wdEN1cnJl
bnRQb3MueSA9IGNhcmV0LmJvdHRvbSgpOworICAgIGZvcm0ucHRDdXJyZW50UG9zLnkgPSBjYXJl
dC5tYXhZKCk7CiAgICAgZm9ybS5yY0FyZWEudG9wID0gY2FyZXQueSgpOwotICAgIGZvcm0ucmNB
cmVhLmJvdHRvbSA9IGNhcmV0LmJvdHRvbSgpOworICAgIGZvcm0ucmNBcmVhLmJvdHRvbSA9IGNh
cmV0Lm1heFkoKTsKICAgICBmb3JtLnJjQXJlYS5sZWZ0ID0gY2FyZXQueCgpOwotICAgIGZvcm0u
cmNBcmVhLnJpZ2h0ID0gY2FyZXQucmlnaHQoKTsKKyAgICBmb3JtLnJjQXJlYS5yaWdodCA9IGNh
cmV0Lm1heFgoKTsKICAgICBJbWU6OkltbVNldENhbmRpZGF0ZVdpbmRvdyhoSW5wdXRDb250ZXh0
LCAmZm9ybSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9O
ZXRzY2FwZS93aW4vTmV0c2NhcGVQbHVnaW5XaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS93aW4vTmV0c2NhcGVQbHVnaW5XaW4u
Y3BwCShyZXZpc2lvbiA3NzM0NykKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lu
cy9OZXRzY2FwZS93aW4vTmV0c2NhcGVQbHVnaW5XaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
MjcsNyArMTI3LDcgQEAgdm9pZCBOZXRzY2FwZVBsdWdpbjo6cGxhdGZvcm1HZW9tZXRyeURpZAog
ICAgIEludFJlY3QgY2xpcFJlY3RJblBsdWdpbldpbmRvd0Nvb3JkaW5hdGVzID0gbV9jbGlwUmVj
dDsKICAgICBjbGlwUmVjdEluUGx1Z2luV2luZG93Q29vcmRpbmF0ZXMubW92ZSgtbV9mcmFtZVJl
Y3QueCgpLCAtbV9mcmFtZVJlY3QueSgpKTsKIAotICAgIE93blB0cjxIUkdOPiBjbGlwUmVnaW9u
ID0gYWRvcHRQdHIoOjpDcmVhdGVSZWN0UmduKGNsaXBSZWN0SW5QbHVnaW5XaW5kb3dDb29yZGlu
YXRlcy54KCksIGNsaXBSZWN0SW5QbHVnaW5XaW5kb3dDb29yZGluYXRlcy55KCksIGNsaXBSZWN0
SW5QbHVnaW5XaW5kb3dDb29yZGluYXRlcy5yaWdodCgpLCBjbGlwUmVjdEluUGx1Z2luV2luZG93
Q29vcmRpbmF0ZXMuYm90dG9tKCkpKTsKKyAgICBPd25QdHI8SFJHTj4gY2xpcFJlZ2lvbiA9IGFk
b3B0UHRyKDo6Q3JlYXRlUmVjdFJnbihjbGlwUmVjdEluUGx1Z2luV2luZG93Q29vcmRpbmF0ZXMu
eCgpLCBjbGlwUmVjdEluUGx1Z2luV2luZG93Q29vcmRpbmF0ZXMueSgpLCBjbGlwUmVjdEluUGx1
Z2luV2luZG93Q29vcmRpbmF0ZXMubWF4WCgpLCBjbGlwUmVjdEluUGx1Z2luV2luZG93Q29vcmRp
bmF0ZXMubWF4WSgpKSk7CiAgICAgc2V0V2luZG93UmVnaW9uKG1fd2luZG93LCBjbGlwUmVnaW9u
LnJlbGVhc2UoKSwgUmVkcmF3KTsKIAogICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgb25seSB1cGRh
dGUgdGhlIHNpemUgaGVyZSBhbmQgbGV0IHRoZSBVSSBwcm9jZXNzIHVwZGF0ZSBvdXIgcG9zaXRp
b24gc28KSW5kZXg6IFNvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vidmlldy5jcHAJ
KHJldmlzaW9uIDc3MzQ3KQorKysgU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZp
ZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MDIsNyArNDAyLDcgQEAgc3RhdGljIGdib29sZWFu
IHdlYmtpdF93ZWJfdmlld19wb3B1cF9tZQogICAgICAgICAvLyBJZiB0aGVyZSdzIGEgZm9jdXNl
ZCBlbG1lbnQsIHVzZSBpdHMgbG9jYXRpb24uCiAgICAgICAgIGlmIChOb2RlKiBmb2N1c2VkTm9k
ZSA9IGdldEZvY3VzZWROb2RlKGZyYW1lKSkgewogICAgICAgICAgICAgSW50UmVjdCBmb2N1c2Vk
Tm9kZVJlY3QgPSBmb2N1c2VkTm9kZS0+Z2V0UmVjdCgpOwotICAgICAgICAgICAgbG9jYXRpb24g
PSBJbnRQb2ludChyaWdodEFsaWduZWQgPyBmb2N1c2VkTm9kZVJlY3QucmlnaHQoKSA6IGZvY3Vz
ZWROb2RlUmVjdC54KCksIGZvY3VzZWROb2RlUmVjdC5ib3R0b20oKSk7CisgICAgICAgICAgICBs
b2NhdGlvbiA9IEludFBvaW50KHJpZ2h0QWxpZ25lZCA/IGZvY3VzZWROb2RlUmVjdC5tYXhYKCkg
OiBmb2N1c2VkTm9kZVJlY3QueCgpLCBmb2N1c2VkTm9kZVJlY3QubWF4WSgpKTsKICAgICAgICAg
fSBlbHNlCiAgICAgICAgICAgICBsb2NhdGlvbiA9IEludFBvaW50KHJpZ2h0QWxpZ25lZCA/IHZp
ZXctPmNvbnRlbnRzV2lkdGgoKSAtIGNvbnRleHRNZW51TWFyZ2luIDogY29udGV4dE1lbnVNYXJn
aW4sIGNvbnRleHRNZW51TWFyZ2luKTsKICAgICB9IGVsc2UgewpAQCAtNDQwLDcgKzQ0MCw3IEBA
IHN0YXRpYyBnYm9vbGVhbiB3ZWJraXRfd2ViX3ZpZXdfcG9wdXBfbWUKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc3RhcnRDYXJldFJlY3Qud2lkdGgoKSArIGV4dHJhV2lkdGhUb0Vu
ZE9mTGluZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRDYXJldFJlY3Qu
aGVpZ2h0KCkpOwogCi0gICAgICAgIGxvY2F0aW9uID0gSW50UG9pbnQocmlnaHRBbGlnbmVkID8g
Zmlyc3RSZWN0LnJpZ2h0KCkgOiBmaXJzdFJlY3QueCgpLCBmaXJzdFJlY3QuYm90dG9tKCkpOwor
ICAgICAgICBsb2NhdGlvbiA9IEludFBvaW50KHJpZ2h0QWxpZ25lZCA/IGZpcnN0UmVjdC5tYXhY
KCkgOiBmaXJzdFJlY3QueCgpLCBmaXJzdFJlY3QubWF4WSgpKTsKICAgICB9CiAKICAgICAvLyBG
SVhNRTogVGhlIEludFNpemUoMCwgLTEpIGlzIGEgaGFjayB0byBnZXQgdGhlIGhpdC10ZXN0aW5n
IHRvIHJlc3VsdCBpbiB0aGUgc2VsZWN0ZWQgZWxlbWVudC4KSW5kZXg6IFNvdXJjZS9XZWJLaXQv
d2luL0RPTUhUTUxDbGFzc2VzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3dpbi9E
T01IVE1MQ2xhc3Nlcy5jcHAJKHJldmlzaW9uIDc3MzQ3KQorKysgU291cmNlL1dlYktpdC93aW4v
RE9NSFRNTENsYXNzZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzE0LDggKzEzMTQsOCBAQCBI
UkVTVUxUIFNURE1FVEhPRENBTExUWVBFIERPTUhUTUxJbnB1dEVsCiAgICAgSW50UmVjdCBjb3Jl
UmVjdCA9IHZpZXctPmNvbnRlbnRzVG9TY3JlZW4ocmVuZGVyZXItPmFic29sdXRlQm91bmRpbmdC
b3hSZWN0KCkpOwogICAgIHJlY3QtPmxlZnQgPSBjb3JlUmVjdC54KCk7CiAgICAgcmVjdC0+dG9w
ID0gY29yZVJlY3QueSgpOwotICAgIHJlY3QtPnJpZ2h0ID0gY29yZVJlY3QucmlnaHQoKTsKLSAg
ICByZWN0LT5ib3R0b20gPSBjb3JlUmVjdC5ib3R0b20oKTsKKyAgICByZWN0LT5yaWdodCA9IGNv
cmVSZWN0Lm1heFgoKTsKKyAgICByZWN0LT5ib3R0b20gPSBjb3JlUmVjdC5tYXhZKCk7CiAKICAg
ICByZXR1cm4gU19PSzsKIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQvd2luL1dlYkZyYW1lLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3dpbi9XZWJGcmFtZS5jcHAJKHJldmlzaW9uIDc3
MzQ3KQorKysgU291cmNlL1dlYktpdC93aW4vV2ViRnJhbWUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yMDY2LDggKzIwNjYsOCBAQCBjb25zdCBWZWN0b3I8V2ViQ29yZTo6SW50UmVjdD4mIFdlYkZy
YW1lCiAgICAgSW50UmVjdCBhZGp1c3RlZFJlY3QgPSBJbnRSZWN0KAogICAgICAgICBwYWdlUmVj
dC54KCkgKyBtYXJnaW5SZWN0LngoKSwKICAgICAgICAgcGFnZVJlY3QueSgpICsgbWFyZ2luUmVj
dC55KCksCi0gICAgICAgIHBhZ2VSZWN0LndpZHRoKCkgLSBtYXJnaW5SZWN0LngoKSAtIG1hcmdp
blJlY3QucmlnaHQoKSwKLSAgICAgICAgcGFnZVJlY3QuaGVpZ2h0KCkgLSBtYXJnaW5SZWN0Lnko
KSAtIG1hcmdpblJlY3QuYm90dG9tKCkpOworICAgICAgICBwYWdlUmVjdC53aWR0aCgpIC0gbWFy
Z2luUmVjdC54KCkgLSBtYXJnaW5SZWN0Lm1heFgoKSwKKyAgICAgICAgcGFnZVJlY3QuaGVpZ2h0
KCkgLSBtYXJnaW5SZWN0LnkoKSAtIG1hcmdpblJlY3QubWF4WSgpKTsKIAogICAgIGNvbXB1dGVQ
YWdlUmVjdHNGb3JGcmFtZShjb3JlRnJhbWUsIGFkanVzdGVkUmVjdCwgaGVhZGVySGVpZ2h0LCBm
b290ZXJIZWlnaHQsIDEuMCxtX3BhZ2VSZWN0cywgbV9wYWdlSGVpZ2h0KTsKICAgICAKSW5kZXg6
IFNvdXJjZS9XZWJLaXQvd2luL1dlYlNjcm9sbEJhci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdC93aW4vV2ViU2Nyb2xsQmFyLmNwcAkocmV2aXNpb24gNzczNDcpCisrKyBTb3VyY2Uv
V2ViS2l0L3dpbi9XZWJTY3JvbGxCYXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzQsOSArMTc0
LDkgQEAgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBXZWJTY3JvbGxCYXI6OgogICAgICAgICBy
ZXR1cm4gRV9QT0lOVEVSOwogICAgIEludFJlY3QgcmVjdCA9IG1fc2Nyb2xsQmFyLT5mcmFtZVJl
Y3QoKTsKICAgICBib3VuZHMtPmxlZnQgPSByZWN0LngoKTsKLSAgICBib3VuZHMtPnJpZ2h0ID0g
cmVjdC5yaWdodCgpOworICAgIGJvdW5kcy0+cmlnaHQgPSByZWN0Lm1heFgoKTsKICAgICBib3Vu
ZHMtPnRvcCA9IHJlY3QueSgpOwotICAgIGJvdW5kcy0+Ym90dG9tID0gcmVjdC5ib3R0b20oKTsK
KyAgICBib3VuZHMtPmJvdHRvbSA9IHJlY3QubWF4WSgpOwogICAgIHJldHVybiBTX09LOwogfQog
CkluZGV4OiBTb3VyY2UvV2ViS2l0L3dpbi9XZWJWaWV3LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0L3dpbi9XZWJWaWV3LmNwcAkocmV2aXNpb24gNzczNDcpCisrKyBTb3VyY2UvV2Vi
S2l0L3dpbi9XZWJWaWV3LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODAyLDcgKzgwMiw3IEBAIHZv
aWQgV2ViVmlldzo6YWRkVG9EaXJ0eVJlZ2lvbihjb25zdCBJbnQKICNlbmRpZgogCiAgICAgSFJH
TiBuZXdSZWdpb24gPSA6OkNyZWF0ZVJlY3RSZ24oZGlydHlSZWN0LngoKSwgZGlydHlSZWN0Lnko
KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXJ0eVJlY3QucmlnaHQo
KSwgZGlydHlSZWN0LmJvdHRvbSgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBkaXJ0eVJlY3QubWF4WCgpLCBkaXJ0eVJlY3QubWF4WSgpKTsKICAgICBhZGRUb0RpcnR5
UmVnaW9uKG5ld1JlZ2lvbik7CiB9CiAKQEAgLTQ5ODAsOCArNDk4MCw4IEBAIEhSRVNVTFQgU1RE
TUVUSE9EQ0FMTFRZUEUgV2ViVmlldzo6dmlzaWIKICAgICBGbG9hdFJlY3QgdmlzaWJsZUNvbnRl
bnQgPSBtX3BhZ2UtPm1haW5GcmFtZSgpLT52aWV3KCktPnZpc2libGVDb250ZW50UmVjdCgpOwog
ICAgIHJlY3QtPmxlZnQgPSAoTE9ORykgdmlzaWJsZUNvbnRlbnQueCgpOwogICAgIHJlY3QtPnRv
cCA9IChMT05HKSB2aXNpYmxlQ29udGVudC55KCk7Ci0gICAgcmVjdC0+cmlnaHQgPSAoTE9ORykg
dmlzaWJsZUNvbnRlbnQucmlnaHQoKTsKLSAgICByZWN0LT5ib3R0b20gPSAoTE9ORykgdmlzaWJs
ZUNvbnRlbnQuYm90dG9tKCk7CisgICAgcmVjdC0+cmlnaHQgPSAoTE9ORykgdmlzaWJsZUNvbnRl
bnQubWF4WCgpOworICAgIHJlY3QtPmJvdHRvbSA9IChMT05HKSB2aXNpYmxlQ29udGVudC5tYXhZ
KCk7CiAgICAgcmV0dXJuIFNfT0s7CiB9CiAKQEAgLTUzNDUsOSArNTM0NSw5IEBAIHZvaWQgV2Vi
Vmlldzo6cHJlcGFyZUNhbmRpZGF0ZVdpbmRvdyhGcmEKICAgICBmb3JtLnB0Q3VycmVudFBvcy54
ID0gY2FyZXQueCgpOwogICAgIGZvcm0ucHRDdXJyZW50UG9zLnkgPSBjYXJldC55KCkgKyBjYXJl
dC5oZWlnaHQoKTsKICAgICBmb3JtLnJjQXJlYS50b3AgPSBjYXJldC55KCk7Ci0gICAgZm9ybS5y
Y0FyZWEuYm90dG9tID0gY2FyZXQuYm90dG9tKCk7CisgICAgZm9ybS5yY0FyZWEuYm90dG9tID0g
Y2FyZXQubWF4WSgpOwogICAgIGZvcm0ucmNBcmVhLmxlZnQgPSBjYXJldC54KCk7Ci0gICAgZm9y
bS5yY0FyZWEucmlnaHQgPSBjYXJldC5yaWdodCgpOworICAgIGZvcm0ucmNBcmVhLnJpZ2h0ID0g
Y2FyZXQubWF4WCgpOwogICAgIElNTURpY3Q6OmRpY3QoKS5zZXRDYW5kaWRhdGVXaW5kb3coaElu
cHV0Q29udGV4dCwgJmZvcm0pOwogfQogCkluZGV4OiBTb3VyY2UvV2ViS2l0L3dpbi9XZWJDb3Jl
U3VwcG9ydC9FbWJlZGRlZFdpZGdldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC93
aW4vV2ViQ29yZVN1cHBvcnQvRW1iZWRkZWRXaWRnZXQuY3BwCShyZXZpc2lvbiA3NzM0NykKKysr
IFNvdXJjZS9XZWJLaXQvd2luL1dlYkNvcmVTdXBwb3J0L0VtYmVkZGVkV2lkZ2V0LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTIwLDcgKzEyMCw3IEBAIHZvaWQgRW1iZWRkZWRXaWRnZXQ6OmZyYW1l
UmVjdHNDaGFuZ2VkKCkKICAgICAgICAgcmduID0gOjpDcmVhdGVSZWN0UmduKDAsIDAsIDAsIDAp
OwogICAgICAgICA6OlNldFdpbmRvd1JnbihtX3dpbmRvdywgcmduLCBGQUxTRSk7CiAgICAgfSBl
bHNlIHsKLSAgICAgICAgcmduID0gOjpDcmVhdGVSZWN0UmduKG1fY2xpcFJlY3QueCgpLCBtX2Ns
aXBSZWN0LnkoKSwgbV9jbGlwUmVjdC5yaWdodCgpLCBtX2NsaXBSZWN0LmJvdHRvbSgpKTsKKyAg
ICAgICAgcmduID0gOjpDcmVhdGVSZWN0UmduKG1fY2xpcFJlY3QueCgpLCBtX2NsaXBSZWN0Lnko
KSwgbV9jbGlwUmVjdC5tYXhYKCksIG1fY2xpcFJlY3QubWF4WSgpKTsKICAgICAgICAgOjpTZXRX
aW5kb3dSZ24obV93aW5kb3csIHJnbiwgVFJVRSk7CiAgICAgIH0KIApAQCAtMTI4LDcgKzEyOCw3
IEBAIHZvaWQgRW1iZWRkZWRXaWRnZXQ6OmZyYW1lUmVjdHNDaGFuZ2VkKCkKICAgICAgICAgOjpN
b3ZlV2luZG93KG1fd2luZG93LCBtX3dpbmRvd1JlY3QueCgpLCBtX3dpbmRvd1JlY3QueSgpLCBt
X3dpbmRvd1JlY3Qud2lkdGgoKSwgbV93aW5kb3dSZWN0LmhlaWdodCgpLCBUUlVFKTsKIAogICAg
ICBpZiAoY2xpcFRvWmVyb1JlY3QpIHsKLSAgICAgICAgcmduID0gOjpDcmVhdGVSZWN0UmduKG1f
Y2xpcFJlY3QueCgpLCBtX2NsaXBSZWN0LnkoKSwgbV9jbGlwUmVjdC5yaWdodCgpLCBtX2NsaXBS
ZWN0LmJvdHRvbSgpKTsKKyAgICAgICAgcmduID0gOjpDcmVhdGVSZWN0UmduKG1fY2xpcFJlY3Qu
eCgpLCBtX2NsaXBSZWN0LnkoKSwgbV9jbGlwUmVjdC5tYXhYKCksIG1fY2xpcFJlY3QubWF4WSgp
KTsKICAgICAgICAgOjpTZXRXaW5kb3dSZ24obV93aW5kb3csIHJnbiwgVFJVRSk7CiAgICAgfQog
fQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>80929</attachid>
            <date>2011-02-02 10:34:38 -0800</date>
            <delta_ts>2011-02-02 10:36:09 -0800</delta_ts>
            <desc>Step 2: (Reviewed by Darin, just using bots to check for errors) Remove accessors.</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>3218</size>
            <attacher name="Dave Hyatt">hyatt</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UmVjdC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UmVjdC5oCShy
ZXZpc2lvbiA3NzM4NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0
UmVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDIsMTEgKzEwMiw2IEBAIHB1YmxpYzoKIAogICAg
IGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZS5pc0VtcHR5KCk7IH0KIAotICAg
IGZsb2F0IGxlZnQoKSBjb25zdCB7IHJldHVybiB4KCk7IH0KLSAgICBmbG9hdCByaWdodCgpIGNv
bnN0IHsgcmV0dXJuIHgoKSArIHdpZHRoKCk7IH0KLSAgICBmbG9hdCB0b3AoKSBjb25zdCB7IHJl
dHVybiB5KCk7IH0KLSAgICBmbG9hdCBib3R0b20oKSBjb25zdCB7IHJldHVybiB5KCkgKyBoZWln
aHQoKTsgfQotCiAgICAgRmxvYXRQb2ludCBjZW50ZXIoKSBjb25zdCB7IHJldHVybiBGbG9hdFBv
aW50KHgoKSArIHdpZHRoKCkgLyAyLCB5KCkgKyBoZWlnaHQoKSAvIDIpOyB9CiAKICAgICB2b2lk
IG1vdmUoY29uc3QgRmxvYXRTaXplJiBkZWx0YSkgeyBtX2xvY2F0aW9uICs9IGRlbHRhOyB9IApA
QCAtMTI0LDcgKzExOSw2IEBAIHB1YmxpYzoKICAgICAgICAgeyByZXR1cm4gcHggPj0geCgpICYm
IHB4IDw9IG1heFgoKSAmJiBweSA+PSB5KCkgJiYgcHkgPD0gbWF4WSgpOyB9CiAgICAgYm9vbCBj
b250YWlucyhjb25zdCBGbG9hdFBvaW50JiBwb2ludCkgY29uc3QgeyByZXR1cm4gY29udGFpbnMo
cG9pbnQueCgpLCBwb2ludC55KCkpOyB9CiAKLQogICAgIHZvaWQgaW5mbGF0ZVgoZmxvYXQgZHgp
IHsKICAgICAgICAgbV9sb2NhdGlvbi5zZXRYKG1fbG9jYXRpb24ueCgpIC0gZHgpOwogICAgICAg
ICBtX3NpemUuc2V0V2lkdGgobV9zaXplLndpZHRoKCkgKyBkeCArIGR4KTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ludFJlY3QuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbnRSZWN0LmgJKHJldmlzaW9uIDc3Mzg0KQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW50UmVjdC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xMDMsOSArMTAzLDYgQEAgcHVibGljOgogCiAgICAgYm9vbCBpc0VtcHR5KCkgY29u
c3QgeyByZXR1cm4gbV9zaXplLmlzRW1wdHkoKTsgfQogCi0gICAgaW50IHJpZ2h0KCkgY29uc3Qg
eyByZXR1cm4geCgpICsgd2lkdGgoKTsgfQotICAgIGludCBib3R0b20oKSBjb25zdCB7IHJldHVy
biB5KCkgKyBoZWlnaHQoKTsgfQotCiAgICAgLy8gTk9URTogVGhlIHJlc3VsdCBpcyByb3VuZGVk
IHRvIGludGVnZXIgdmFsdWVzLCBhbmQgdGh1cyBtYXkgYmUgbm90IHRoZSBleGFjdAogICAgIC8v
IGNlbnRlciBwb2ludC4KICAgICBJbnRQb2ludCBjZW50ZXIoKSBjb25zdCB7IHJldHVybiBJbnRQ
b2ludCh4KCkgKyB3aWR0aCgpIC8gMiwgeSgpICsgaGVpZ2h0KCkgLyAyKTsgfQpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1BvcHVwTWVudVdpbi5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1BvcHVwTWVudVdpbi5jcHAJKHJldmlzaW9uIDc3
Mzg0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1BvcHVwTWVudVdpbi5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTM0NywxMyArMzQ3LDEzIEBAIHZvaWQgUG9wdXBNZW51V2luOjpjYWxj
dWxhdGVQb3NpdGlvbkFuZFMKICAgICAvLyBBbHdheXMgbGVmdC1hbGlnbiBpdGVtcyBpbiB0aGUg
cG9wdXAuICBUaGlzIG1hdGNoZXMgcG9wdXAgbWVudXMgb24gdGhlIG1hYy4KICAgICBpbnQgcG9w
dXBYID0gclNjcmVlbkNvb3Jkcy54KCkgKyBjbGllbnQoKS0+Y2xpZW50SW5zZXRMZWZ0KCk7CiAK
LSAgICBJbnRSZWN0IHBvcHVwUmVjdChwb3B1cFgsIHJTY3JlZW5Db29yZHMuYm90dG9tKCksIHBv
cHVwV2lkdGgsIHBvcHVwSGVpZ2h0KTsKKyAgICBJbnRSZWN0IHBvcHVwUmVjdChwb3B1cFgsIHJT
Y3JlZW5Db29yZHMubWF4WSgpLCBwb3B1cFdpZHRoLCBwb3B1cEhlaWdodCk7CiAKICAgICAvLyBU
aGUgcG9wdXAgbmVlZHMgdG8gc3RheSB3aXRoaW4gdGhlIGJvdW5kcyBvZiB0aGUgc2NyZWVuIGFu
ZCBub3Qgb3ZlcmxhcCBhbnkgdG9vbGJhcnMKICAgICBGbG9hdFJlY3Qgc2NyZWVuID0gc2NyZWVu
QXZhaWxhYmxlUmVjdCh2KTsKIAogICAgIC8vIENoZWNrIHRoYXQgd2UgZG9uJ3QgZ28gb2ZmIHRo
ZSBzY3JlZW4gdmVydGljYWxseQotICAgIGlmIChwb3B1cFJlY3QuYm90dG9tKCkgPiBzY3JlZW4u
aGVpZ2h0KCkpIHsKKyAgICBpZiAocG9wdXBSZWN0Lm1heFkoKSA+IHNjcmVlbi5oZWlnaHQoKSkg
ewogICAgICAgICAvLyBUaGUgcG9wdXAgd2lsbCBnbyBvZmYgdGhlIHNjcmVlbiwgc28gdHJ5IHBs
YWNpbmcgaXQgYWJvdmUgdGhlIGNsaWVudAogICAgICAgICBpZiAoclNjcmVlbkNvb3Jkcy55KCkg
LSBwb3B1cFJlY3QuaGVpZ2h0KCkgPCAwKSB7CiAgICAgICAgICAgICAvLyBUaGUgcG9wdXAgd29u
J3QgZml0IGFib3ZlLCBlaXRoZXIsIHNvIHBsYWNlIGl0IHdoZXJlZXZlcidzIGJpZ2dlciBhbmQg
cmVzaXplIGl0IHRvIGZpdApAQCAtNjAyLDcgKzYwMiw3IEBAIHZvaWQgUG9wdXBNZW51V2luOjpw
YWludChjb25zdCBJbnRSZWN0JiAKICAgICBJbnRSZWN0IGxpc3RSZWN0ID0gZGFtYWdlUmVjdDsK
ICAgICBsaXN0UmVjdC5tb3ZlKEludFNpemUoMCwgbV9zY3JvbGxPZmZzZXQgKiBtX2l0ZW1IZWln
aHQpKTsKIAotICAgIGZvciAoaW50IHkgPSBsaXN0UmVjdC55KCk7IHkgPCBsaXN0UmVjdC5ib3R0
b20oKTsgeSArPSBtX2l0ZW1IZWlnaHQpIHsKKyAgICBmb3IgKGludCB5ID0gbGlzdFJlY3QueSgp
OyB5IDwgbGlzdFJlY3QubWF4WSgpOyB5ICs9IG1faXRlbUhlaWdodCkgewogICAgICAgICBpbnQg
aW5kZXggPSB5IC8gbV9pdGVtSGVpZ2h0OwogCiAgICAgICAgIENvbG9yIG9wdGlvbkJhY2tncm91
bmRDb2xvciwgb3B0aW9uVGV4dENvbG9yOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>80930</attachid>
            <date>2011-02-02 10:36:09 -0800</date>
            <delta_ts>2011-02-02 12:20:50 -0800</delta_ts>
            <desc>Step 2: (Reviewed by Darin, just using bots to check for errors) Remove accessors.</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>1643</size>
            <attacher name="Dave Hyatt">hyatt</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UmVjdC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UmVjdC5oCShy
ZXZpc2lvbiA3NzM4NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0
UmVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDIsMTEgKzEwMiw2IEBAIHB1YmxpYzoKIAogICAg
IGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZS5pc0VtcHR5KCk7IH0KIAotICAg
IGZsb2F0IGxlZnQoKSBjb25zdCB7IHJldHVybiB4KCk7IH0KLSAgICBmbG9hdCByaWdodCgpIGNv
bnN0IHsgcmV0dXJuIHgoKSArIHdpZHRoKCk7IH0KLSAgICBmbG9hdCB0b3AoKSBjb25zdCB7IHJl
dHVybiB5KCk7IH0KLSAgICBmbG9hdCBib3R0b20oKSBjb25zdCB7IHJldHVybiB5KCkgKyBoZWln
aHQoKTsgfQotCiAgICAgRmxvYXRQb2ludCBjZW50ZXIoKSBjb25zdCB7IHJldHVybiBGbG9hdFBv
aW50KHgoKSArIHdpZHRoKCkgLyAyLCB5KCkgKyBoZWlnaHQoKSAvIDIpOyB9CiAKICAgICB2b2lk
IG1vdmUoY29uc3QgRmxvYXRTaXplJiBkZWx0YSkgeyBtX2xvY2F0aW9uICs9IGRlbHRhOyB9IApA
QCAtMTI0LDcgKzExOSw2IEBAIHB1YmxpYzoKICAgICAgICAgeyByZXR1cm4gcHggPj0geCgpICYm
IHB4IDw9IG1heFgoKSAmJiBweSA+PSB5KCkgJiYgcHkgPD0gbWF4WSgpOyB9CiAgICAgYm9vbCBj
b250YWlucyhjb25zdCBGbG9hdFBvaW50JiBwb2ludCkgY29uc3QgeyByZXR1cm4gY29udGFpbnMo
cG9pbnQueCgpLCBwb2ludC55KCkpOyB9CiAKLQogICAgIHZvaWQgaW5mbGF0ZVgoZmxvYXQgZHgp
IHsKICAgICAgICAgbV9sb2NhdGlvbi5zZXRYKG1fbG9jYXRpb24ueCgpIC0gZHgpOwogICAgICAg
ICBtX3NpemUuc2V0V2lkdGgobV9zaXplLndpZHRoKCkgKyBkeCArIGR4KTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ludFJlY3QuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbnRSZWN0LmgJKHJldmlzaW9uIDc3Mzg0KQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW50UmVjdC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xMDMsOSArMTAzLDYgQEAgcHVibGljOgogCiAgICAgYm9vbCBpc0VtcHR5KCkgY29u
c3QgeyByZXR1cm4gbV9zaXplLmlzRW1wdHkoKTsgfQogCi0gICAgaW50IHJpZ2h0KCkgY29uc3Qg
eyByZXR1cm4geCgpICsgd2lkdGgoKTsgfQotICAgIGludCBib3R0b20oKSBjb25zdCB7IHJldHVy
biB5KCkgKyBoZWlnaHQoKTsgfQotCiAgICAgLy8gTk9URTogVGhlIHJlc3VsdCBpcyByb3VuZGVk
IHRvIGludGVnZXIgdmFsdWVzLCBhbmQgdGh1cyBtYXkgYmUgbm90IHRoZSBleGFjdAogICAgIC8v
IGNlbnRlciBwb2ludC4KICAgICBJbnRQb2ludCBjZW50ZXIoKSBjb25zdCB7IHJldHVybiBJbnRQ
b2ludCh4KCkgKyB3aWR0aCgpIC8gMiwgeSgpICsgaGVpZ2h0KCkgLyAyKTsgfQo=
</data>
<flag name="review"
          id="72442"
          type_id="1"
          status="+"
          setter="hyatt"
    />
          </attachment>
      

    </bug>

</bugzilla>