<?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>57676</bug_id>
          
          <creation_ts>2011-04-01 15:53:20 -0700</creation_ts>
          <short_desc>Add support for offline audio rendering to AudioContext API</short_desc>
          <delta_ts>2012-11-29 02:30:10 -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>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Other</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>
          
          
          <everconfirmed>0</everconfirmed>
          <reporter name="Chris Rogers">crogers</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>karl</cc>
    
    <cc>kbr</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>378158</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2011-04-01 15:53:20 -0700</bug_when>
    <thetext>Add support for offline audio rendering to AudioContext API</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>378174</commentid>
    <comment_count>1</comment_count>
      <attachid>87936</attachid>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2011-04-01 16:13:43 -0700</bug_when>
    <thetext>Created attachment 87936
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>378176</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-04-01 16:16:45 -0700</bug_when>
    <thetext>Attachment 87936 did not pass style-queue:

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

Source/WebCore/dom/EventTarget.h:43:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Total errors found: 1 in 26 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>378187</commentid>
    <comment_count>3</comment_count>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2011-04-01 16:27:47 -0700</bug_when>
    <thetext>This adds a new constructor to AudioContext for offline rendering into an AudioBuffer.  Offline rendering will be an important part of the audio layout test system.  It will also have some other interesting applications.

This is an early version of the patch for initial review.  It&apos;s still incomplete, since a few new files have been added but not all of the necessary makefiles have yet been updated.

A few notes:

* I&apos;ve re-factored AudioDestinationNode to now be a base class, with the existing default implementation (talking to audio hardware) being hoisted up into DefaultAudioDestinationNode.  There&apos;s also a new sub-class OfflineAudioDestinationNode where most of the interesting new offline stuff happens.

* I&apos;ve currently kept the AudioContext implementation for both default (talking to audio hardware) and offline processing in the same AudioContext class.  An alternative would be to also subclass AudioContext in a similar way to AudioDestinationNode (as explained above).

* JSAudioContextCustom.cpp also needs similar changes to V8AudioContextCustom.cpp but I haven&apos;t done that yet.

* This has been minimally tested and works with a simple test case.  It&apos;s pretty remarkable to see how much faster than real-time the offline context can render.  I think the audio layout tests should mostly be able to run very quickly.

* Here&apos;s part of a simple test case I used which shows what this looks like in JavaScript:


function playNote(context, time) {
    var source = context.createBufferSource();

    source.buffer = hihatShort;
    source.connect(context.destination);

    source.noteOn(time);
}

// Gets called when resource loading has finished.
function startOfflineProcessing() {
    offlineContext = new webkitAudioContext(2, 2 * 44100, 44100);

    offlineContext.oncomplete = function(event) {
      var source = context.createBufferSource();
      source.buffer = event.renderedBuffer;
      source.connect(context.destination);
      source.noteOn(0);
    };

    playNote(offlineContext, 0.0);
    playNote(offlineContext, 0.5);
    playNote(offlineContext, 0.75);
    playNote(offlineContext, 1.25);
    playNote(offlineContext, 1.5);
    playNote(offlineContext, 1.6);
    playNote(offlineContext, 1.8);

    offlineContext.startRendering();    
}

function init() {    
    context = new webkitAudioContext();
    loadHihat(&quot;sounds/drum-samples/hihat-short.wav&quot;);
}</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>378931</commentid>
    <comment_count>4</comment_count>
      <attachid>87936</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2011-04-04 11:53:37 -0700</bug_when>
    <thetext>Comment on attachment 87936
Patch

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

This looks good overall. There&apos;s a minor issue around initialization of one of the members of OfflineAudioDestinationNode, and a couple of formatting issues. I&apos;m not touching the review bit at the moment; let me know if you want me to r+ this and fix any issues upon landing.

&gt; Source/WebCore/bindings/v8/custom/V8AudioContextCustom.cpp:57
&gt; +        // Construct for default AudioContext which talks to audio hardware.

Typo: Construct -&gt; Constructor?

&gt; Source/WebCore/bindings/v8/custom/V8AudioContextCustom.cpp:60
&gt; +        // Construct for offline (render-target) AudioContext which renders into an AudioBuffer.

Same typo?

&gt; Source/WebCore/webaudio/AudioContext.cpp:103
&gt; +AudioContext::AudioContext(Document* document, unsigned numberOfChannels, size_t numberOfFrames, double sampleRate)

I think it&apos;s worth commenting above this function that this constructor is used for offline rendering, and above the old constructor, that it is used for rendering to the actual audio hardware.

&gt; Source/WebCore/webaudio/AudioContext.cpp:104
&gt; +        : ActiveDOMObject(document, this)

The indentation looks off here. It should match that of the constructor above.

&gt; Source/WebCore/webaudio/AudioContext.h:193
&gt; +    virtual EventTargetData* ensureEventTargetData()  { return &amp;m_eventTargetData; }

Extra space after ().

&gt; Source/WebCore/webaudio/OfflineAudioDestinationNode.cpp:83
&gt; +        m_startedRendering = true;
&gt; +        m_renderThread = createThread(OfflineAudioDestinationNode::renderEntry, this, &quot;offline renderer&quot;);

Due to this state transition you&apos;ll only be able to run each OfflineAudioDestinationNode to completion once. If you reset m_renderThread to 0 when renderEntry returned and determined whether to spawn the thread based on whether m_renderThread was 0, you could make them reusable.

&gt; Source/WebCore/webaudio/OfflineAudioDestinationNode.h:66
&gt; +    ThreadIdentifier m_renderThread;

Should probably be volatile for safety. Also, you should initialize this in the constructor. I think 0 is the safe uninitialized value on all platforms. See Source/WebCore/workers/WorkerThread.cpp and libxmlLoaderThread in Source/WebCore/dom/XMLDocumentParserLibxml2.cpp. You might want to clean up UndefinedThreadIdentifier in Source/WebCore/webaudio/AudioContext.cpp.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>378971</commentid>
    <comment_count>5</comment_count>
      <attachid>87936</attachid>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2011-04-04 12:42:30 -0700</bug_when>
    <thetext>Comment on attachment 87936
Patch

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

&gt;&gt; Source/WebCore/bindings/v8/custom/V8AudioContextCustom.cpp:57
&gt;&gt; +        // Construct for default AudioContext which talks to audio hardware.
&gt; 
&gt; Typo: Construct -&gt; Constructor?

FIXED

&gt;&gt; Source/WebCore/bindings/v8/custom/V8AudioContextCustom.cpp:60
&gt;&gt; +        // Construct for offline (render-target) AudioContext which renders into an AudioBuffer.
&gt; 
&gt; Same typo?

FIXED

&gt;&gt; Source/WebCore/dom/EventTarget.h:43
&gt;&gt; +    class AudioContext;
&gt; 
&gt; Code inside a namespace should not be indented.  [whitespace/indent] [4]

The file already has this incorrect indentation (I didn&apos;t add it).  Should I fix the whole file?

&gt;&gt; Source/WebCore/webaudio/AudioContext.cpp:103
&gt;&gt; +AudioContext::AudioContext(Document* document, unsigned numberOfChannels, size_t numberOfFrames, double sampleRate)
&gt; 
&gt; I think it&apos;s worth commenting above this function that this constructor is used for offline rendering, and above the old constructor, that it is used for rendering to the actual audio hardware.

DONE

&gt;&gt; Source/WebCore/webaudio/AudioContext.cpp:104
&gt;&gt; +        : ActiveDOMObject(document, this)
&gt; 
&gt; The indentation looks off here. It should match that of the constructor above.

FIXED

&gt;&gt; Source/WebCore/webaudio/AudioContext.h:193
&gt;&gt; +    virtual EventTargetData* ensureEventTargetData()  { return &amp;m_eventTargetData; }
&gt; 
&gt; Extra space after ().

FIXED

&gt;&gt; Source/WebCore/webaudio/OfflineAudioDestinationNode.cpp:83
&gt;&gt; +        m_renderThread = createThread(OfflineAudioDestinationNode::renderEntry, this, &quot;offline renderer&quot;);
&gt; 
&gt; Due to this state transition you&apos;ll only be able to run each OfflineAudioDestinationNode to completion once. If you reset m_renderThread to 0 when renderEntry returned and determined whether to spawn the thread based on whether m_renderThread was 0, you could make them reusable.

To make them re-usable there would be more work necessary than this because the entire AudioContext state (including all of its AudioNodes) would need to be reset.  It&apos;s non-trivial to do this, so for now at least I think it would be good to limit to the single usage case.  I can add a FIXME about throwing an exception if startRendering() is called a second time.

&gt;&gt; Source/WebCore/webaudio/OfflineAudioDestinationNode.h:66
&gt;&gt; +    ThreadIdentifier m_renderThread;
&gt; 
&gt; Should probably be volatile for safety. Also, you should initialize this in the constructor. I think 0 is the safe uninitialized value on all platforms. See Source/WebCore/workers/WorkerThread.cpp and libxmlLoaderThread in Source/WebCore/dom/XMLDocumentParserLibxml2.cpp. You might want to clean up UndefinedThreadIdentifier in Source/WebCore/webaudio/AudioContext.cpp.

Actually, at least on Mac OS X in my debugging I found that 0 is actually a thread value of a real thread and does not mean &quot;no thread&apos;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>378980</commentid>
    <comment_count>6</comment_count>
      <attachid>88104</attachid>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2011-04-04 12:49:40 -0700</bug_when>
    <thetext>Created attachment 88104
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>378981</commentid>
    <comment_count>7</comment_count>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2011-04-04 12:50:11 -0700</bug_when>
    <thetext>Latest patch also adds the makefile stuff for the mac port</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>379072</commentid>
    <comment_count>8</comment_count>
      <attachid>88104</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2011-04-04 14:18:15 -0700</bug_when>
    <thetext>Comment on attachment 88104
Patch

OK, the revision looks good to me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>379168</commentid>
    <comment_count>9</comment_count>
      <attachid>88148</attachid>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2011-04-04 16:10:17 -0700</bug_when>
    <thetext>Created attachment 88148
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>379171</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-04-04 16:13:58 -0700</bug_when>
    <thetext>Attachment 88148 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;]&quot; exit_code: 1

Source/WebCore/dom/EventTarget.h:43:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Total errors found: 1 in 29 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>379786</commentid>
    <comment_count>11</comment_count>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2011-04-05 12:00:08 -0700</bug_when>
    <thetext>Committed r82963: &lt;http://trac.webkit.org/changeset/82963&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>380589</commentid>
    <comment_count>12</comment_count>
      <attachid>88148</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-04-06 10:40:59 -0700</bug_when>
    <thetext>Comment on attachment 88148
Patch

Cleared review? from attachment 88148 so that this bug does not appear in http://webkit.org/pending-review.  If you would like this patch reviewed, please attach it to a new bug (or re-open this bug before marking it for review again).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>778691</commentid>
    <comment_count>13</comment_count>
    <who name="Karl Godard">karl</who>
    <bug_when>2012-11-28 22:11:09 -0800</bug_when>
    <thetext>Is this implemented in windows, or just mac osx?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>778694</commentid>
    <comment_count>14</comment_count>
    <who name="Karl Godard">karl</who>
    <bug_when>2012-11-28 22:21:11 -0800</bug_when>
    <thetext>nevermind, I think i was passing wrong parameters to the constructor. Looks like my revised test shows that this is indeed working in windows! 

Web Audio API is awesome. Keep up the great work!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>778851</commentid>
    <comment_count>15</comment_count>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2012-11-29 02:30:10 -0800</bug_when>
    <thetext>(In reply to comment #14)
&gt; nevermind, I think i was passing wrong parameters to the constructor. Looks like my revised test shows that this is indeed working in windows! 
&gt; 
&gt; Web Audio API is awesome. Keep up the great work!

Thanks Karl, please keep in mind that the AudioContext constructor currently available is *not* documented in the spec and will likely change.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>87936</attachid>
            <date>2011-04-01 16:13:43 -0700</date>
            <delta_ts>2011-04-04 12:49:37 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-57676-20110401161342.patch</filename>
            <type>text/plain</type>
            <size>48129</size>
            <attacher name="Chris Rogers">crogers</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDgyNzMzKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNTcgQEAKKzIwMTEtMDQtMDEgIENocmlzIFJv
Z2VycyAgPGNyb2dlcnNAZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBBZGQgc3VwcG9ydCBmb3Igb2ZmbGluZSBhdWRpbyByZW5kZXJp
bmcgdG8gQXVkaW9Db250ZXh0IEFQSQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9NTc2NzYKKworICAgICAgICBObyBuZXcgdGVzdHMgc2luY2UgYXVkaW8g
QVBJIGlzIG5vdCB5ZXQgaW1wbGVtZW50ZWQuCisKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6Cisg
ICAgICAgICogYmluZGluZ3MvanMvSlNFdmVudEN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3Jl
Ojp0b0pTKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0V2ZW50VGFyZ2V0LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OnRvSlMpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4RE9NV3JhcHBlci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpWOERPTVdyYXBwZXI6OmNvbnZlcnRFdmVudFRhcmdldFRv
VjhPYmplY3QpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOEF1ZGlvQ29udGV4dEN1
c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpWOEF1ZGlvQ29udGV4dDo6Y29uc3RydWN0b3JD
YWxsYmFjayk6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4RXZlbnRDdXN0b20uY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6dG9WOCk6CisgICAgICAgICogZG9tL0V2ZW50LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkV2ZW50Ojppc09mZmxpbmVBdWRpb0NvbXBsZXRpb25FdmVudCk6Cisg
ICAgICAgICogZG9tL0V2ZW50Lmg6CisgICAgICAgICogZG9tL0V2ZW50VGFyZ2V0LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkV2ZW50VGFyZ2V0Ojp0b0F1ZGlvQ29udGV4dCk6CisgICAgICAgICog
ZG9tL0V2ZW50VGFyZ2V0Lmg6CisgICAgICAgICogcGxhdGZvcm0vYXVkaW8vSFJURkRhdGFiYXNl
TG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhSVEZEYXRhYmFzZUxvYWRlcjo6d2FpdEZv
ckxvYWRlclRocmVhZENvbXBsZXRpb24pOgorICAgICAgICAqIHBsYXRmb3JtL2F1ZGlvL0hSVEZE
YXRhYmFzZUxvYWRlci5oOgorICAgICAgICAoV2ViQ29yZTo6SFJURkRhdGFiYXNlTG9hZGVyOjps
b2FkZXIpOgorICAgICAgICAqIHdlYmF1ZGlvL0F1ZGlvQ29udGV4dC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpBdWRpb0NvbnRleHQ6OmNyZWF0ZU9mZmxpbmVDb250ZXh0KToKKyAgICAgICAgKFdl
YkNvcmU6OkF1ZGlvQ29udGV4dDo6QXVkaW9Db250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkF1
ZGlvQ29udGV4dDo6Y29uc3RydWN0Q29tbW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvQ29u
dGV4dDo6ZG9jdW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9Db250ZXh0OjpzY3JpcHRF
eGVjdXRpb25Db250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvQ29udGV4dDo6dG9BdWRp
b0NvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9Db250ZXh0OjpzdGFydFJlbmRlcmlu
Zyk6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb0NvbnRleHQ6OmZpcmVDb21wbGV0aW9uRXZlbnQp
OgorICAgICAgICAqIHdlYmF1ZGlvL0F1ZGlvQ29udGV4dC5oOgorICAgICAgICAoV2ViQ29yZTo6
QXVkaW9Db250ZXh0Ojppc09mZmxpbmVDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlv
Q29udGV4dDo6ZXZlbnRUYXJnZXREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvQ29udGV4
dDo6ZW5zdXJlRXZlbnRUYXJnZXREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvQ29udGV4
dDo6cmVmRXZlbnRUYXJnZXQpOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9Db250ZXh0OjpkZXJl
ZkV2ZW50VGFyZ2V0KToKKyAgICAgICAgKiB3ZWJhdWRpby9BdWRpb0NvbnRleHQuaWRsOgorICAg
ICAgICAqIHdlYmF1ZGlvL0F1ZGlvRGVzdGluYXRpb25Ob2RlLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkF1ZGlvRGVzdGluYXRpb25Ob2RlOjpBdWRpb0Rlc3RpbmF0aW9uTm9kZSk6CisgICAgICAg
ICogd2ViYXVkaW8vQXVkaW9EZXN0aW5hdGlvbk5vZGUuaDoKKyAgICAgICAgKFdlYkNvcmU6OkF1
ZGlvRGVzdGluYXRpb25Ob2RlOjpyZXNldCk6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb0Rlc3Rp
bmF0aW9uTm9kZTo6bnVtYmVyT2ZDaGFubmVscyk6CisgICAgICAgICogd2ViYXVkaW8vQ29udm9s
dmVyTm9kZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb252b2x2ZXJOb2RlOjpzZXRCdWZmZXIp
OgorCiAyMDExLTA0LTAxICBKZXIgTm9ibGUgIDxqZXIubm9ibGVAYXBwbGUuY29tPgogCiAgICAg
ICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgpJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS5neXBpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQkocmV2aXNp
b24gODI0NzYpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHdvcmtpbmcgY29weSkK
QEAgLTEzODcsNiArMTM4Nyw3IEBACiAgICAgICAgICAgICAnd2ViYXVkaW8vSGlnaFBhc3MyRmls
dGVyTm9kZS5pZGwnLAogICAgICAgICAgICAgJ3dlYmF1ZGlvL0phdmFTY3JpcHRBdWRpb05vZGUu
aWRsJywKICAgICAgICAgICAgICd3ZWJhdWRpby9Mb3dQYXNzMkZpbHRlck5vZGUuaWRsJywKKyAg
ICAgICAgICAgICd3ZWJhdWRpby9PZmZsaW5lQXVkaW9Db21wbGV0aW9uRXZlbnQuaWRsJywKICAg
ICAgICAgICAgICd3ZWJhdWRpby9SZWFsdGltZUFuYWx5c2VyTm9kZS5pZGwnLAogICAgICAgICAg
ICAgJ3dlYnNvY2tldHMvV2ViU29ja2V0LmlkbCcsCiAgICAgICAgICAgICAnd29ya2Vycy9BYnN0
cmFjdFdvcmtlci5pZGwnLApAQCAtNTg3OCw2ICs1ODc5LDggQEAKICAgICAgICAgICAgICd3ZWJh
dWRpby9CaXF1YWRQcm9jZXNzb3IuaCcsCiAgICAgICAgICAgICAnd2ViYXVkaW8vQ29udm9sdmVy
Tm9kZS5jcHAnLAogICAgICAgICAgICAgJ3dlYmF1ZGlvL0NvbnZvbHZlck5vZGUuaCcsCisgICAg
ICAgICAgICAnd2ViYXVkaW8vRGVmYXVsdEF1ZGlvRGVzdGluYXRpb25Ob2RlLmNwcCcsCisgICAg
ICAgICAgICAnd2ViYXVkaW8vRGVmYXVsdEF1ZGlvRGVzdGluYXRpb25Ob2RlLmgnLAogICAgICAg
ICAgICAgJ3dlYmF1ZGlvL0RlbGF5RFNQS2VybmVsLmNwcCcsCiAgICAgICAgICAgICAnd2ViYXVk
aW8vRGVsYXlEU1BLZXJuZWwuaCcsCiAgICAgICAgICAgICAnd2ViYXVkaW8vRGVsYXlOb2RlLmNw
cCcsCkBAIC01ODkwLDYgKzU4OTMsMTAgQEAKICAgICAgICAgICAgICd3ZWJhdWRpby9KYXZhU2Ny
aXB0QXVkaW9Ob2RlLmgnLAogICAgICAgICAgICAgJ3dlYmF1ZGlvL0xvd1Bhc3MyRmlsdGVyTm9k
ZS5jcHAnLAogICAgICAgICAgICAgJ3dlYmF1ZGlvL0xvd1Bhc3MyRmlsdGVyTm9kZS5oJywKKyAg
ICAgICAgICAgICd3ZWJhdWRpby9PZmZsaW5lQXVkaW9Db21wbGV0aW9uRXZlbnQuY3BwJywKKyAg
ICAgICAgICAgICd3ZWJhdWRpby9PZmZsaW5lQXVkaW9Db21wbGV0aW9uRXZlbnQuaCcsCisgICAg
ICAgICAgICAnd2ViYXVkaW8vT2ZmbGluZUF1ZGlvRGVzdGluYXRpb25Ob2RlLmNwcCcsCisgICAg
ICAgICAgICAnd2ViYXVkaW8vT2ZmbGluZUF1ZGlvRGVzdGluYXRpb25Ob2RlLmgnLAogICAgICAg
ICAgICAgJ3dlYmF1ZGlvL1JlYWx0aW1lQW5hbHlzZXIuY3BwJywKICAgICAgICAgICAgICd3ZWJh
dWRpby9SZWFsdGltZUFuYWx5c2VyLmgnLAogICAgICAgICAgICAgJ3dlYmF1ZGlvL1JlYWx0aW1l
QW5hbHlzZXJOb2RlLmNwcCcsCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2
ZW50Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0V2ZW50Q3VzdG9tLmNwcAkocmV2aXNpb24gODI0NzYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0V2ZW50Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAxLDYgKzEwMSw4
IEBACiAjaWYgRU5BQkxFKFdFQl9BVURJTykKICNpbmNsdWRlICJBdWRpb1Byb2Nlc3NpbmdFdmVu
dC5oIgogI2luY2x1ZGUgIkpTQXVkaW9Qcm9jZXNzaW5nRXZlbnQuaCIKKyNpbmNsdWRlICJKU09m
ZmxpbmVBdWRpb0NvbXBsZXRpb25FdmVudC5oIgorI2luY2x1ZGUgIk9mZmxpbmVBdWRpb0NvbXBs
ZXRpb25FdmVudC5oIgogI2VuZGlmCiAKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CkBAIC0xOTAsNiAr
MTkyLDggQEAgSlNWYWx1ZSB0b0pTKEV4ZWNTdGF0ZSogZXhlYywgSlNET01HbG9iYQogI2lmIEVO
QUJMRShXRUJfQVVESU8pCiAgICAgZWxzZSBpZiAoZXZlbnQtPmlzQXVkaW9Qcm9jZXNzaW5nRXZl
bnQoKSkKICAgICAgICAgd3JhcHBlciA9IENSRUFURV9ET01fT0JKRUNUX1dSQVBQRVIoZXhlYywg
Z2xvYmFsT2JqZWN0LCBBdWRpb1Byb2Nlc3NpbmdFdmVudCwgZXZlbnQpOworICAgIGVsc2UgaWYg
KGV2ZW50LT5pc09mZmxpbmVBdWRpb0NvbXBsZXRpb25FdmVudCgpKQorICAgICAgICB3cmFwcGVy
ID0gQ1JFQVRFX0RPTV9PQkpFQ1RfV1JBUFBFUihleGVjLCBnbG9iYWxPYmplY3QsIE9mZmxpbmVB
dWRpb0NvbXBsZXRpb25FdmVudCwgZXZlbnQpOwogI2VuZGlmCiAjaWYgRU5BQkxFKElOUFVUX1NQ
RUVDSCkKICAgICBlbHNlIGlmIChldmVudC0+aXNTcGVlY2hJbnB1dEV2ZW50KCkpCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50VGFyZ2V0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50VGFyZ2V0LmNwcAkocmV2aXNpb24g
ODI0NzYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50VGFyZ2V0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtODQsNiArODQsOCBAQAogI2VuZGlmCiAKICNpZiBFTkFCTEUoV0VC
X0FVRElPKQorI2luY2x1ZGUgIkF1ZGlvQ29udGV4dC5oIgorI2luY2x1ZGUgIkpTQXVkaW9Db250
ZXh0LmgiCiAjaW5jbHVkZSAiSlNKYXZhU2NyaXB0QXVkaW9Ob2RlLmgiCiAjaW5jbHVkZSAiSmF2
YVNjcmlwdEF1ZGlvTm9kZS5oIgogI2VuZGlmCkBAIC0xNzMsNiArMTc1LDggQEAgSlNWYWx1ZSB0
b0pTKEV4ZWNTdGF0ZSogZXhlYywgSlNET01HbG9iYQogI2lmIEVOQUJMRShXRUJfQVVESU8pCiAg
ICAgaWYgKEphdmFTY3JpcHRBdWRpb05vZGUqIGpzQXVkaW9Ob2RlID0gdGFyZ2V0LT50b0phdmFT
Y3JpcHRBdWRpb05vZGUoKSkKICAgICAgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0
LCBqc0F1ZGlvTm9kZSk7CisgICAgaWYgKEF1ZGlvQ29udGV4dCogYXVkaW9Db250ZXh0ID0gdGFy
Z2V0LT50b0F1ZGlvQ29udGV4dCgpKQorICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxP
YmplY3QsIGF1ZGlvQ29udGV4dCk7CiAjZW5kaWYKIAogI2lmIEVOQUJMRShXRUJfU09DS0VUUykK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RE9NV3JhcHBlci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhET01XcmFwcGVyLmNwcAkocmV2
aXNpb24gODI0NzYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTVdyYXBwZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NCw2ICs4NCw3IEBACiAjZW5kaWYKIAogI2lmIEVOQUJM
RShXRUJfQVVESU8pCisjaW5jbHVkZSAiVjhBdWRpb0NvbnRleHQuaCIKICNpbmNsdWRlICJWOEph
dmFTY3JpcHRBdWRpb05vZGUuaCIKICNlbmRpZgogCkBAIC00NDQsNiArNDQ1LDggQEAgdjg6Okhh
bmRsZTx2ODo6VmFsdWU+IFY4RE9NV3JhcHBlcjo6Y29udgogI2lmIEVOQUJMRShXRUJfQVVESU8p
CiAgICAgaWYgKEphdmFTY3JpcHRBdWRpb05vZGUqIGpzQXVkaW9Ob2RlID0gdGFyZ2V0LT50b0ph
dmFTY3JpcHRBdWRpb05vZGUoKSkKICAgICAgICAgcmV0dXJuIHRvVjgoanNBdWRpb05vZGUpOwor
ICAgIGlmIChBdWRpb0NvbnRleHQqIGF1ZGlvQ29udGV4dCA9IHRhcmdldC0+dG9BdWRpb0NvbnRl
eHQoKSkKKyAgICAgICAgcmV0dXJuIHRvVjgoYXVkaW9Db250ZXh0KTsKICNlbmRpZiAgICAKIAog
ICAgIEFTU0VSVCgwKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9W
OEF1ZGlvQ29udGV4dEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvdjgvY3VzdG9tL1Y4QXVkaW9Db250ZXh0Q3VzdG9tLmNwcAkocmV2aXNpb24gODI0NzYp
CisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhBdWRpb0NvbnRleHRDdXN0
b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MSw3ICs1MSwzNCBAQCB2ODo6SGFuZGxlPHY4OjpW
YWx1ZT4gVjhBdWRpb0NvbnRleHQ6OmNvCiAgICAgaWYgKCFkb2N1bWVudCkKICAgICAgICAgcmV0
dXJuIHRocm93RXJyb3IoIkF1ZGlvQ29udGV4dCBjb25zdHJ1Y3RvciBhc3NvY2lhdGVkIGRvY3Vt
ZW50IGlzIHVuYXZhaWxhYmxlIiwgVjhQcm94eTo6UmVmZXJlbmNlRXJyb3IpOwogCi0gICAgUmVm
UHRyPEF1ZGlvQ29udGV4dD4gYXVkaW9Db250ZXh0ID0gQXVkaW9Db250ZXh0OjpjcmVhdGUoZG9j
dW1lbnQpOworICAgIFJlZlB0cjxBdWRpb0NvbnRleHQ+IGF1ZGlvQ29udGV4dDsKKyAgICAKKyAg
ICBpZiAoIWFyZ3MuTGVuZ3RoKCkpIHsKKyAgICAgICAgLy8gQ29uc3RydWN0IGZvciBkZWZhdWx0
IEF1ZGlvQ29udGV4dCB3aGljaCB0YWxrcyB0byBhdWRpbyBoYXJkd2FyZS4KKyAgICAgICAgYXVk
aW9Db250ZXh0ID0gQXVkaW9Db250ZXh0OjpjcmVhdGUoZG9jdW1lbnQpOworICAgIH0gZWxzZSB7
CisgICAgICAgIC8vIENvbnN0cnVjdCBmb3Igb2ZmbGluZSAocmVuZGVyLXRhcmdldCkgQXVkaW9D
b250ZXh0IHdoaWNoIHJlbmRlcnMgaW50byBhbiBBdWRpb0J1ZmZlci4KKyAgICAgICAgLy8gbmV3
IEF1ZGlvQ29udGV4dChpbiB1bnNpZ25lZCBsb25nIG51bWJlck9mQ2hhbm5lbHMsIGluIHVuc2ln
bmVkIGxvbmcgbnVtYmVyT2ZGcmFtZXMsIGluIGZsb2F0IHNhbXBsZVJhdGUpOworICAgICAgICBp
ZiAoYXJncy5MZW5ndGgoKSA8IDMpCisgICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigiTm90
IGVub3VnaCBhcmd1bWVudHMiLCBWOFByb3h5OjpTeW50YXhFcnJvcik7CisKKyAgICAgICAgYm9v
bCBvayA9IGZhbHNlOworCisgICAgICAgIHVuc2lnbmVkIG51bWJlck9mQ2hhbm5lbHMgPSB0b0lu
dDMyKGFyZ3NbMF0sIG9rKTsKKyAgICAgICAgaWYgKCFvaykKKyAgICAgICAgICAgIHJldHVybiB0
aHJvd0Vycm9yKCJJbnZhbGlkIG51bWJlciBvZiBjaGFubmVscyIsIFY4UHJveHk6OlN5bnRheEVy
cm9yKTsKKworICAgICAgICB1bnNpZ25lZCBudW1iZXJPZkZyYW1lcyA9IHRvSW50MzIoYXJnc1sx
XSwgb2spOworICAgICAgICBpZiAoIW9rKQorICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3Io
IkludmFsaWQgbnVtYmVyIG9mIGZyYW1lcyIsIFY4UHJveHk6OlN5bnRheEVycm9yKTsKKworICAg
ICAgICBmbG9hdCBzYW1wbGVSYXRlID0gdG9GbG9hdChhcmdzWzJdKTsKKworICAgICAgICBhdWRp
b0NvbnRleHQgPSBBdWRpb0NvbnRleHQ6OmNyZWF0ZU9mZmxpbmVDb250ZXh0KGRvY3VtZW50LCBu
dW1iZXJPZkNoYW5uZWxzLCBudW1iZXJPZkZyYW1lcywgc2FtcGxlUmF0ZSk7CisgICAgfQorCisg
ICAgaWYgKCFhdWRpb0NvbnRleHQuZ2V0KCkpCisgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCJF
cnJvciBjcmVhdGluZyBBdWRpb0NvbnRleHQiLCBWOFByb3h5OjpTeW50YXhFcnJvcik7CiAgICAg
CiAgICAgLy8gVHJhbnNmb3JtIHRoZSBob2xkZXIgaW50byBhIHdyYXBwZXIgb2JqZWN0IGZvciB0
aGUgYXVkaW8gY29udGV4dC4KICAgICBWOERPTVdyYXBwZXI6OnNldERPTVdyYXBwZXIoYXJncy5I
b2xkZXIoKSwgJmluZm8sIGF1ZGlvQ29udGV4dC5nZXQoKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy92OC9jdXN0b20vVjhFdmVudEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4RXZlbnRDdXN0b20uY3BwCShyZXZpc2lv
biA4MjQ3NikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEV2ZW50Q3Vz
dG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzAsNiArNzAsNyBAQAogCiAjaWYgRU5BQkxFKFdF
Ql9BVURJTykKICNpbmNsdWRlICJWOEF1ZGlvUHJvY2Vzc2luZ0V2ZW50LmgiCisjaW5jbHVkZSAi
VjhPZmZsaW5lQXVkaW9Db21wbGV0aW9uRXZlbnQuaCIKICNlbmRpZgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CkBAIC0xNjksNiArMTcwLDggQEAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjgoRXZl
bnQqIGltcGwpCiAjaWYgRU5BQkxFKFdFQl9BVURJTykKICAgICBpZiAoaW1wbC0+aXNBdWRpb1By
b2Nlc3NpbmdFdmVudCgpKQogICAgICAgICByZXR1cm4gdG9WOChzdGF0aWNfY2FzdDxBdWRpb1By
b2Nlc3NpbmdFdmVudCo+KGltcGwpKTsKKyAgICBpZiAoaW1wbC0+aXNPZmZsaW5lQXVkaW9Db21w
bGV0aW9uRXZlbnQoKSkKKyAgICAgICAgcmV0dXJuIHRvVjgoc3RhdGljX2Nhc3Q8T2ZmbGluZUF1
ZGlvQ29tcGxldGlvbkV2ZW50Kj4oaW1wbCkpOwogI2VuZGlmCiAjaWYgRU5BQkxFKElOUFVUX1NQ
RUVDSCkKICAgICBpZiAoaW1wbC0+aXNTcGVlY2hJbnB1dEV2ZW50KCkpCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9kb20vRXZlbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9F
dmVudC5jcHAJKHJldmlzaW9uIDgyNDc2KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjI5LDYgKzIyOSwxMSBAQCBib29sIEV2ZW50Ojppc0F1ZGlv
UHJvY2Vzc2luZ0V2ZW50KCkgY29uCiB7CiAgICAgcmV0dXJuIGZhbHNlOwogfQorCitib29sIEV2
ZW50Ojppc09mZmxpbmVBdWRpb0NvbXBsZXRpb25FdmVudCgpIGNvbnN0Cit7CisgICAgcmV0dXJu
IGZhbHNlOworfQogI2VuZGlmCiAKICNpZiBFTkFCTEUoSU5QVVRfU1BFRUNIKQpJbmRleDogU291
cmNlL1dlYkNvcmUvZG9tL0V2ZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9t
L0V2ZW50LmgJKHJldmlzaW9uIDgyNDc2KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEzMSw2ICsxMzEsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAj
ZW5kaWYKICNpZiBFTkFCTEUoV0VCX0FVRElPKQogICAgICAgICB2aXJ0dWFsIGJvb2wgaXNBdWRp
b1Byb2Nlc3NpbmdFdmVudCgpIGNvbnN0OworICAgICAgICB2aXJ0dWFsIGJvb2wgaXNPZmZsaW5l
QXVkaW9Db21wbGV0aW9uRXZlbnQoKSBjb25zdDsKICNlbmRpZgogICAgICAgICB2aXJ0dWFsIGJv
b2wgaXNFcnJvckV2ZW50KCkgY29uc3Q7CiAjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2RvbS9FdmVudFRhcmdldC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvZG9tL0V2ZW50VGFyZ2V0LmNwcAkocmV2aXNpb24gODI0NzYpCisrKyBTb3VyY2Uv
V2ViQ29yZS9kb20vRXZlbnRUYXJnZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTksNiArMTE5
LDExIEBAIFNWR0VsZW1lbnRJbnN0YW5jZSogRXZlbnRUYXJnZXQ6OnRvU1ZHRWwKICNlbmRpZgog
CiAjaWYgRU5BQkxFKFdFQl9BVURJTykKK0F1ZGlvQ29udGV4dCogRXZlbnRUYXJnZXQ6OnRvQXVk
aW9Db250ZXh0KCkKK3sKKyAgICByZXR1cm4gMDsKK30KKwogSmF2YVNjcmlwdEF1ZGlvTm9kZSog
RXZlbnRUYXJnZXQ6OnRvSmF2YVNjcmlwdEF1ZGlvTm9kZSgpCiB7CiAgICAgcmV0dXJuIDA7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRUYXJnZXQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9kb20vRXZlbnRUYXJnZXQuaAkocmV2aXNpb24gODI0NzYpCisrKyBTb3VyY2Uv
V2ViQ29yZS9kb20vRXZlbnRUYXJnZXQuaAkod29ya2luZyBjb3B5KQpAQCAtNDAsNiArNDAsNyBA
QAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKKyAgICBjbGFzcyBBdWRpb0NvbnRleHQ7CiAgICAg
Y2xhc3MgQWJzdHJhY3RXb3JrZXI7CiAgICAgY2xhc3MgRGVkaWNhdGVkV29ya2VyQ29udGV4dDsK
ICAgICBjbGFzcyBET01BcHBsaWNhdGlvbkNhY2hlOwpAQCAtMTIyLDYgKzEyMyw3IEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKICNlbmRpZgogCiAjaWYgRU5BQkxFKFdFQl9BVURJTykKKyAgICAgICAg
dmlydHVhbCBBdWRpb0NvbnRleHQqIHRvQXVkaW9Db250ZXh0KCk7CiAgICAgICAgIHZpcnR1YWwg
SmF2YVNjcmlwdEF1ZGlvTm9kZSogdG9KYXZhU2NyaXB0QXVkaW9Ob2RlKCk7CiAjZW5kaWYKIApJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vSFJURkRhdGFiYXNlTG9hZGVyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9IUlRGRGF0YWJh
c2VMb2FkZXIuY3BwCShyZXZpc2lvbiA4MjQ3NikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2F1ZGlvL0hSVEZEYXRhYmFzZUxvYWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyMCw2ICsx
MjAsMTQgQEAgYm9vbCBIUlRGRGF0YWJhc2VMb2FkZXI6OmlzTG9hZGVkKCkgY29ucwogICAgIHJl
dHVybiBtX2hydGZEYXRhYmFzZS5nZXQoKTsKIH0KIAorCit2b2lkIEhSVEZEYXRhYmFzZUxvYWRl
cjo6d2FpdEZvckxvYWRlclRocmVhZENvbXBsZXRpb24oKQoreworICAgIEFTU0VSVCghaXNNYWlu
VGhyZWFkKCkpOworICAgIEFTU0VSVChtX2RhdGFiYXNlTG9hZGVyVGhyZWFkKTsKKyAgICB3YWl0
Rm9yVGhyZWFkQ29tcGxldGlvbihtX2RhdGFiYXNlTG9hZGVyVGhyZWFkLCAwKTsgICAgCit9CisK
IEhSVEZEYXRhYmFzZSogSFJURkRhdGFiYXNlTG9hZGVyOjpkZWZhdWx0SFJURkRhdGFiYXNlKCkK
IHsKICAgICBpZiAoIXNfbG9hZGVyKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVk
aW8vSFJURkRhdGFiYXNlTG9hZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vYXVkaW8vSFJURkRhdGFiYXNlTG9hZGVyLmgJKHJldmlzaW9uIDgyNDc2KQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vSFJURkRhdGFiYXNlTG9hZGVyLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTQ2LDExICs0NiwxOCBAQCBwdWJsaWM6CiAgICAgLy8gTXVzdCBiZSBjYWxsZWQg
ZnJvbSB0aGUgbWFpbiB0aHJlYWQuCiAgICAgc3RhdGljIFBhc3NSZWZQdHI8SFJURkRhdGFiYXNl
TG9hZGVyPiBjcmVhdGVBbmRMb2FkQXN5bmNocm9ub3VzbHlJZk5lY2Vzc2FyeShkb3VibGUgc2Ft
cGxlUmF0ZSk7CiAKKyAgICAvLyBSZXR1cm5zIHRoZSBzaW5nbGV0b24gSFJURkRhdGFiYXNlTG9h
ZGVyLgorICAgIHN0YXRpYyBIUlRGRGF0YWJhc2VMb2FkZXIqIGxvYWRlcigpIHsgcmV0dXJuIHNf
bG9hZGVyOyB9CisgICAgCiAgICAgLy8gQm90aCBjb25zdHJ1Y3RvciBhbmQgZGVzdHJ1Y3RvciBt
dXN0IGJlIGNhbGxlZCBmcm9tIHRoZSBtYWluIHRocmVhZC4KICAgICB+SFJURkRhdGFiYXNlTG9h
ZGVyKCk7CiAgICAgCiAgICAgLy8gUmV0dXJucyB0cnVlIG9uY2UgdGhlIGRlZmF1bHQgZGF0YWJh
c2UgaGFzIGJlZW4gY29tcGxldGVseSBsb2FkZWQuCiAgICAgYm9vbCBpc0xvYWRlZCgpIGNvbnN0
OworCisgICAgLy8gTWF5IG5vdCBiZSBjYWxsZWQgb24gdGhlIG1haW4gdGhyZWFkLgorICAgIC8v
IFRoaXMgaXMgc28gYSBkaWZmZXJlbnQgYmFja2dyb3VuZCB0aHJlYWQgbWF5IHN5bmNocm9uaXpl
IHdpdGggdGhlIGxvYWRlciB0aHJlYWQuCisgICAgdm9pZCB3YWl0Rm9yTG9hZGVyVGhyZWFkQ29t
cGxldGlvbigpOwogICAgIAogICAgIEhSVEZEYXRhYmFzZSogZGF0YWJhc2UoKSB7IHJldHVybiBt
X2hydGZEYXRhYmFzZS5nZXQoKTsgfQogICAgIApJbmRleDogU291cmNlL1dlYkNvcmUvd2ViYXVk
aW8vQXVkaW9Db250ZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS93ZWJhdWRp
by9BdWRpb0NvbnRleHQuY3BwCShyZXZpc2lvbiA4MjQ3NikKKysrIFNvdXJjZS9XZWJDb3JlL3dl
YmF1ZGlvL0F1ZGlvQ29udGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5LDYgKzM5LDcgQEAK
ICNpbmNsdWRlICJBdWRpb05vZGVPdXRwdXQuaCIKICNpbmNsdWRlICJBdWRpb1Bhbm5lck5vZGUu
aCIKICNpbmNsdWRlICJDb252b2x2ZXJOb2RlLmgiCisjaW5jbHVkZSAiRGVmYXVsdEF1ZGlvRGVz
dGluYXRpb25Ob2RlLmgiCiAjaW5jbHVkZSAiRGVsYXlOb2RlLmgiCiAjaW5jbHVkZSAiRG9jdW1l
bnQuaCIKICNpbmNsdWRlICJGRlRGcmFtZS5oIgpAQCAtNDcsNiArNDgsOCBAQAogI2luY2x1ZGUg
IkhpZ2hQYXNzMkZpbHRlck5vZGUuaCIKICNpbmNsdWRlICJKYXZhU2NyaXB0QXVkaW9Ob2RlLmgi
CiAjaW5jbHVkZSAiTG93UGFzczJGaWx0ZXJOb2RlLmgiCisjaW5jbHVkZSAiT2ZmbGluZUF1ZGlv
Q29tcGxldGlvbkV2ZW50LmgiCisjaW5jbHVkZSAiT2ZmbGluZUF1ZGlvRGVzdGluYXRpb25Ob2Rl
LmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKICNpbmNsdWRlICJSZWFsdGltZUFuYWx5
c2VyTm9kZS5oIgogCkBAIC02Niw2ICs2OSwxMSBAQCBQYXNzUmVmUHRyPEF1ZGlvQ29udGV4dD4g
QXVkaW9Db250ZXh0OjpjCiAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBBdWRpb0NvbnRleHQoZG9j
dW1lbnQpKTsKIH0KIAorUGFzc1JlZlB0cjxBdWRpb0NvbnRleHQ+IEF1ZGlvQ29udGV4dDo6Y3Jl
YXRlT2ZmbGluZUNvbnRleHQoRG9jdW1lbnQqIGRvY3VtZW50LCB1bnNpZ25lZCBudW1iZXJPZkNo
YW5uZWxzLCBzaXplX3QgbnVtYmVyT2ZGcmFtZXMsIGRvdWJsZSBzYW1wbGVSYXRlKQoreworICAg
IHJldHVybiBhZG9wdFJlZihuZXcgQXVkaW9Db250ZXh0KGRvY3VtZW50LCBudW1iZXJPZkNoYW5u
ZWxzLCBudW1iZXJPZkZyYW1lcywgc2FtcGxlUmF0ZSkpOworfQorCiBBdWRpb0NvbnRleHQ6OkF1
ZGlvQ29udGV4dChEb2N1bWVudCogZG9jdW1lbnQpCiAgICAgOiBBY3RpdmVET01PYmplY3QoZG9j
dW1lbnQsIHRoaXMpCiAgICAgLCBtX2lzSW5pdGlhbGl6ZWQoZmFsc2UpCkBAIC03NSw2ICs4Myw0
NSBAQCBBdWRpb0NvbnRleHQ6OkF1ZGlvQ29udGV4dChEb2N1bWVudCogZG9jCiAgICAgLCBtX2Nv
bm5lY3Rpb25Db3VudCgwKQogICAgICwgbV9hdWRpb1RocmVhZCgwKQogICAgICwgbV9ncmFwaE93
bmVyVGhyZWFkKFVuZGVmaW5lZFRocmVhZElkZW50aWZpZXIpCisgICAgLCBtX2lzT2ZmbGluZUNv
bnRleHQoZmFsc2UpCit7CisgICAgY29uc3RydWN0Q29tbW9uKCk7CisKKyAgICBtX2Rlc3RpbmF0
aW9uTm9kZSA9IERlZmF1bHRBdWRpb0Rlc3RpbmF0aW9uTm9kZTo6Y3JlYXRlKHRoaXMpOworCisg
ICAgLy8gVGhpcyBzZXRzIGluIG1vdGlvbiBhbiBhc3luY2hyb25vdXMgbG9hZGluZyBtZWNoYW5p
c20gb24gYW5vdGhlciB0aHJlYWQuCisgICAgLy8gV2UgY2FuIGNoZWNrIG1faHJ0ZkRhdGFiYXNl
TG9hZGVyLT5pc0xvYWRlZCgpIHRvIGZpbmQgb3V0IHdoZXRoZXIgb3Igbm90IGl0IGhhcyBiZWVu
IGZ1bGx5IGxvYWRlZC4KKyAgICAvLyBJdCdzIG5vdCB0aGF0IHVzZWZ1bCB0byBoYXZlIGEgY2Fs
bGJhY2sgZnVuY3Rpb24gZm9yIHRoaXMgc2luY2UgdGhlIGF1ZGlvIHRocmVhZCBhdXRvbWF0aWNh
bGx5IHN0YXJ0cyByZW5kZXJpbmcgb24gdGhlIGdyYXBoCisgICAgLy8gd2hlbiB0aGlzIGhhcyBm
aW5pc2hlZCAoc2VlIEF1ZGlvRGVzdGluYXRpb25Ob2RlKS4KKyAgICBtX2hydGZEYXRhYmFzZUxv
YWRlciA9IEhSVEZEYXRhYmFzZUxvYWRlcjo6Y3JlYXRlQW5kTG9hZEFzeW5jaHJvbm91c2x5SWZO
ZWNlc3Nhcnkoc2FtcGxlUmF0ZSgpKTsKKworICAgIC8vIEZJWE1FOiBmb3Igbm93IGRlZmF1bHQg
QXVkaW9Db250ZXh0IGRvZXMgbm90IG5lZWQgYW4gZXhwbGljaXQgc3RhcnRSZW5kZXJpbmcoKSBj
YWxsLgorICAgIC8vIFdlIG1heSB3YW50IHRvIGNvbnNpZGVyIHJlcXVpcmluZyBpdCBmb3Igc3lt
bWV0cnkgd2l0aCBPZmZsaW5lQXVkaW9Db250ZXh0CisgICAgbV9kZXN0aW5hdGlvbk5vZGUtPnN0
YXJ0UmVuZGVyaW5nKCk7Cit9CisKK0F1ZGlvQ29udGV4dDo6QXVkaW9Db250ZXh0KERvY3VtZW50
KiBkb2N1bWVudCwgdW5zaWduZWQgbnVtYmVyT2ZDaGFubmVscywgc2l6ZV90IG51bWJlck9mRnJh
bWVzLCBkb3VibGUgc2FtcGxlUmF0ZSkKKyAgICAgICAgOiBBY3RpdmVET01PYmplY3QoZG9jdW1l
bnQsIHRoaXMpCisgICAgICAgICwgbV9pc0luaXRpYWxpemVkKGZhbHNlKQorICAgICAgICAsIG1f
aXNBdWRpb1RocmVhZEZpbmlzaGVkKGZhbHNlKQorICAgICAgICAsIG1fZG9jdW1lbnQoZG9jdW1l
bnQpCisgICAgICAgICwgbV9kZXN0aW5hdGlvbk5vZGUoMCkKKyAgICAgICAgLCBtX2Nvbm5lY3Rp
b25Db3VudCgwKQorICAgICAgICAsIG1fYXVkaW9UaHJlYWQoMCkKKyAgICAgICAgLCBtX2dyYXBo
T3duZXJUaHJlYWQoVW5kZWZpbmVkVGhyZWFkSWRlbnRpZmllcikKKyAgICAgICAgLCBtX2lzT2Zm
bGluZUNvbnRleHQodHJ1ZSkKK3sKKyAgICBjb25zdHJ1Y3RDb21tb24oKTsKKworICAgIC8vIEZJ
WE1FOiB0aGUgcGFzc2VkIGluIHNhbXBsZVJhdGUgTVVTVCBtYXRjaCB0aGUgaGFyZHdhcmUgc2Ft
cGxlLXJhdGUgc2luY2UgSFJURkRhdGFiYXNlTG9hZGVyIGlzIGEgc2luZ2xldG9uLgorICAgIG1f
aHJ0ZkRhdGFiYXNlTG9hZGVyID0gSFJURkRhdGFiYXNlTG9hZGVyOjpjcmVhdGVBbmRMb2FkQXN5
bmNocm9ub3VzbHlJZk5lY2Vzc2FyeShzYW1wbGVSYXRlKTsKKworICAgIC8vIENyZWF0ZSBhIG5l
dyBkZXN0aW5hdGlvbiBmb3Igb2ZmbGluZSByZW5kZXJpbmcuCisgICAgbV9yZW5kZXJUYXJnZXQg
PSBBdWRpb0J1ZmZlcjo6Y3JlYXRlKG51bWJlck9mQ2hhbm5lbHMsIG51bWJlck9mRnJhbWVzLCBz
YW1wbGVSYXRlKTsKKyAgICBtX2Rlc3RpbmF0aW9uTm9kZSA9IE9mZmxpbmVBdWRpb0Rlc3RpbmF0
aW9uTm9kZTo6Y3JlYXRlKHRoaXMsIG1fcmVuZGVyVGFyZ2V0LmdldCgpKTsKK30KKwordm9pZCBB
dWRpb0NvbnRleHQ6OmNvbnN0cnVjdENvbW1vbigpCiB7CiAgICAgLy8gTm90ZTogYmVjYXVzZSBh
ZG9wdFJlZigpIHdvbid0IGJlIGNhbGxlZCB1bnRpbCB3ZSBsZWF2ZSB0aGlzIGNvbnN0cnVjdG9y
LCBidXQgY29kZSBpbiB0aGlzIGNvbnN0cnVjdG9yIG5lZWRzIHRvIHJlZmVyZW5jZSB0aGlzIGNv
bnRleHQsCiAgICAgLy8gcmVsYXggdGhlIGNoZWNrLgpAQCAtODIsMTYgKzEyOSw5IEBAIEF1ZGlv
Q29udGV4dDo6QXVkaW9Db250ZXh0KERvY3VtZW50KiBkb2MKICAgICAKICAgICBGRlRGcmFtZTo6
aW5pdGlhbGl6ZSgpOwogICAgIAotICAgIG1fZGVzdGluYXRpb25Ob2RlID0gQXVkaW9EZXN0aW5h
dGlvbk5vZGU6OmNyZWF0ZSh0aGlzKTsKICAgICBtX2xpc3RlbmVyID0gQXVkaW9MaXN0ZW5lcjo6
Y3JlYXRlKCk7CiAgICAgbV90ZW1wb3JhcnlNb25vQnVzID0gYWRvcHRQdHIobmV3IEF1ZGlvQnVz
KDEsIEF1ZGlvTm9kZTo6UHJvY2Vzc2luZ1NpemVJbkZyYW1lcykpOwogICAgIG1fdGVtcG9yYXJ5
U3RlcmVvQnVzID0gYWRvcHRQdHIobmV3IEF1ZGlvQnVzKDIsIEF1ZGlvTm9kZTo6UHJvY2Vzc2lu
Z1NpemVJbkZyYW1lcykpOwotCi0gICAgLy8gVGhpcyBzZXRzIGluIG1vdGlvbiBhbiBhc3luY2hy
b25vdXMgbG9hZGluZyBtZWNoYW5pc20gb24gYW5vdGhlciB0aHJlYWQuCi0gICAgLy8gV2UgY2Fu
IGNoZWNrIG1faHJ0ZkRhdGFiYXNlTG9hZGVyLT5pc0xvYWRlZCgpIHRvIGZpbmQgb3V0IHdoZXRo
ZXIgb3Igbm90IGl0IGhhcyBiZWVuIGZ1bGx5IGxvYWRlZC4KLSAgICAvLyBJdCdzIG5vdCB0aGF0
IHVzZWZ1bCB0byBoYXZlIGEgY2FsbGJhY2sgZnVuY3Rpb24gZm9yIHRoaXMgc2luY2UgdGhlIGF1
ZGlvIHRocmVhZCBhdXRvbWF0aWNhbGx5IHN0YXJ0cyByZW5kZXJpbmcgb24gdGhlIGdyYXBoCi0g
ICAgLy8gd2hlbiB0aGlzIGhhcyBmaW5pc2hlZCAoc2VlIEF1ZGlvRGVzdGluYXRpb25Ob2RlKS4K
LSAgICBtX2hydGZEYXRhYmFzZUxvYWRlciA9IEhSVEZEYXRhYmFzZUxvYWRlcjo6Y3JlYXRlQW5k
TG9hZEFzeW5jaHJvbm91c2x5SWZOZWNlc3Nhcnkoc2FtcGxlUmF0ZSgpKTsKIH0KIAogQXVkaW9D
b250ZXh0Ojp+QXVkaW9Db250ZXh0KCkKQEAgLTE2Nyw3ICsyMDcsNyBAQCB2b2lkIEF1ZGlvQ29u
dGV4dDo6c3RvcCgpCiAgICAgdW5pbml0aWFsaXplKCk7CiB9CiAKLURvY3VtZW50KiBBdWRpb0Nv
bnRleHQ6OmRvY3VtZW50KCkKK0RvY3VtZW50KiBBdWRpb0NvbnRleHQ6OmRvY3VtZW50KCkgY29u
c3QKIHsKICAgICBBU1NFUlQobV9kb2N1bWVudCk7CiAgICAgcmV0dXJuIG1fZG9jdW1lbnQ7CkBA
IC01MjYsNiArNTY2LDM5IEBAIHZvaWQgQXVkaW9Db250ZXh0OjpoYW5kbGVEaXJ0eUF1ZGlvTm9k
ZU8KICAgICBtX2RpcnR5QXVkaW9Ob2RlT3V0cHV0cy5jbGVhcigpOwogfQogCitTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiBBdWRpb0NvbnRleHQ6OnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBjb25z
dAoreworICAgIHJldHVybiBkb2N1bWVudCgpOworfQorCitBdWRpb0NvbnRleHQqIEF1ZGlvQ29u
dGV4dDo6dG9BdWRpb0NvbnRleHQoKQoreworICAgIHJldHVybiB0aGlzOworfQorCit2b2lkIEF1
ZGlvQ29udGV4dDo6c3RhcnRSZW5kZXJpbmcoKQoreworICAgIGRlc3RpbmF0aW9uKCktPnN0YXJ0
UmVuZGVyaW5nKCk7Cit9CisKK3ZvaWQgQXVkaW9Db250ZXh0OjpmaXJlQ29tcGxldGlvbkV2ZW50
KCkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIGlmICghaXNNYWluVGhyZWFk
KCkpCisgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgQXVkaW9CdWZmZXIqIHJlbmRlcmVk
QnVmZmVyID0gbV9yZW5kZXJUYXJnZXQuZ2V0KCk7CisKKyAgICBBU1NFUlQocmVuZGVyZWRCdWZm
ZXIpOworICAgIGlmICghcmVuZGVyZWRCdWZmZXIpCisgICAgICAgIHJldHVybjsKKworICAgIC8v
IEF2b2lkIGZpcmluZyB0aGUgZXZlbnQgaWYgdGhlIGRvY3VtZW50IGhhcyBhbHJlYWR5IGdvbmUg
YXdheS4KKyAgICBpZiAoaGFzRG9jdW1lbnQoKSkgeworICAgICAgICAvLyBDYWxsIHRoZSBvZmZs
aW5lIHJlbmRlcmluZyBjb21wbGV0aW9uIGV2ZW50IGxpc3RlbmVyLgorICAgICAgICBkaXNwYXRj
aEV2ZW50KE9mZmxpbmVBdWRpb0NvbXBsZXRpb25FdmVudDo6Y3JlYXRlKHJlbmRlcmVkQnVmZmVy
KSk7CisgICAgfQorfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvQ29udGV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3dlYmF1ZGlvL0F1ZGlvQ29udGV4dC5oCShyZXZpc2lvbiA4MjQ3NikKKysrIFNvdXJjZS9X
ZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvQ29udGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsy
OCw4IEBACiAjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCiAjaW5jbHVkZSAiQXVkaW9CdXMu
aCIKICNpbmNsdWRlICJBdWRpb0Rlc3RpbmF0aW9uTm9kZS5oIgorI2luY2x1ZGUgIkV2ZW50TGlz
dGVuZXIuaCIKKyNpbmNsdWRlICJFdmVudFRhcmdldC5oIgogI2luY2x1ZGUgIkhSVEZEYXRhYmFz
ZUxvYWRlci5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL093blB0
ci5oPgpAQCAtNTksMTMgKzYxLDE2IEBAIGNsYXNzIEphdmFTY3JpcHRBdWRpb05vZGU7CiAvLyBB
dWRpb0NvbnRleHQgaXMgdGhlIGNvcm5lcnN0b25lIG9mIHRoZSB3ZWIgYXVkaW8gQVBJIGFuZCBh
bGwgQXVkaW9Ob2RlcyBhcmUgY3JlYXRlZCBmcm9tIGl0LgogLy8gRm9yIHRocmVhZCBzYWZldHkg
YmV0d2VlbiB0aGUgYXVkaW8gdGhyZWFkIGFuZCB0aGUgbWFpbiB0aHJlYWQsIGl0IGhhcyBhIHJl
bmRlcmluZyBncmFwaCBsb2NraW5nIG1lY2hhbmlzbS4gCiAKLWNsYXNzIEF1ZGlvQ29udGV4dCA6
IHB1YmxpYyBBY3RpdmVET01PYmplY3QsIHB1YmxpYyBSZWZDb3VudGVkPEF1ZGlvQ29udGV4dD4g
eworY2xhc3MgQXVkaW9Db250ZXh0IDogcHVibGljIEFjdGl2ZURPTU9iamVjdCwgcHVibGljIFJl
ZkNvdW50ZWQ8QXVkaW9Db250ZXh0PiwgcHVibGljIEV2ZW50VGFyZ2V0IHsKIHB1YmxpYzoKICAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxBdWRpb0NvbnRleHQ+IGNyZWF0ZShEb2N1bWVudCopOworICAg
IHN0YXRpYyBQYXNzUmVmUHRyPEF1ZGlvQ29udGV4dD4gY3JlYXRlT2ZmbGluZUNvbnRleHQoRG9j
dW1lbnQqLCB1bnNpZ25lZCBudW1iZXJPZkNoYW5uZWxzLCBzaXplX3QgbnVtYmVyT2ZGcmFtZXMs
IGRvdWJsZSBzYW1wbGVSYXRlKTsKIAogICAgIHZpcnR1YWwgfkF1ZGlvQ29udGV4dCgpOwogCiAg
ICAgYm9vbCBpc0luaXRpYWxpemVkKCkgY29uc3Q7CisgICAgCisgICAgYm9vbCBpc09mZmxpbmVD
b250ZXh0KCkgeyByZXR1cm4gbV9pc09mZmxpbmVDb250ZXh0OyB9CiAKICAgICAvLyBSZXR1cm5z
IHRydWUgd2hlbiBpbml0aWFsaXplKCkgd2FzIGNhbGxlZCBBTkQgYWxsIGFzeW5jaHJvbm91cyBp
bml0aWFsaXphdGlvbiBoYXMgY29tcGxldGVkLgogICAgIGJvb2wgaXNSdW5uYWJsZSgpIGNvbnN0
OwpAQCAtNzMsNyArNzgsNyBAQCBwdWJsaWM6CiAgICAgLy8gRG9jdW1lbnQgbm90aWZpY2F0aW9u
CiAgICAgdmlydHVhbCB2b2lkIHN0b3AoKTsKIAotICAgIERvY3VtZW50KiBkb2N1bWVudCgpOyAv
LyBBU1NFUlRzIGlmIGRvY3VtZW50IG5vIGxvbmdlciBleGlzdHMuCisgICAgRG9jdW1lbnQqIGRv
Y3VtZW50KCkgY29uc3Q7IC8vIEFTU0VSVHMgaWYgZG9jdW1lbnQgbm8gbG9uZ2VyIGV4aXN0cy4K
ICAgICBib29sIGhhc0RvY3VtZW50KCk7CiAKICAgICBBdWRpb0Rlc3RpbmF0aW9uTm9kZSogZGVz
dGluYXRpb24oKSB7IHJldHVybiBtX2Rlc3RpbmF0aW9uTm9kZS5nZXQoKTsgfQpAQCAtMTgwLDkg
KzE4NSwyNyBAQCBwdWJsaWM6CiAgICAgLy8gT25seSBhY2Nlc3NlZCB3aGVuIHRoZSBncmFwaCBs
b2NrIGlzIGhlbGQuCiAgICAgdm9pZCBtYXJrQXVkaW9Ob2RlSW5wdXREaXJ0eShBdWRpb05vZGVJ
bnB1dCopOwogICAgIHZvaWQgbWFya0F1ZGlvTm9kZU91dHB1dERpcnR5KEF1ZGlvTm9kZU91dHB1
dCopOworCisgICAgLy8gRXZlbnRUYXJnZXQKKyAgICB2aXJ0dWFsIFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIEF1ZGlv
Q29udGV4dCogdG9BdWRpb0NvbnRleHQoKTsKKyAgICB2aXJ0dWFsIEV2ZW50VGFyZ2V0RGF0YSog
ZXZlbnRUYXJnZXREYXRhKCkgeyByZXR1cm4gJm1fZXZlbnRUYXJnZXREYXRhOyB9CisgICAgdmly
dHVhbCBFdmVudFRhcmdldERhdGEqIGVuc3VyZUV2ZW50VGFyZ2V0RGF0YSgpICB7IHJldHVybiAm
bV9ldmVudFRhcmdldERhdGE7IH0KKworICAgIERFRklORV9BVFRSSUJVVEVfRVZFTlRfTElTVEVO
RVIoY29tcGxldGUpOworCisgICAgLy8gUmVjb25jaWxlIHJlZi9kZXJlZiB3aGljaCBhcmUgZGVm
aW5lZCBib3RoIGluIEF1ZGlvTm9kZSBhbmQgRXZlbnRUYXJnZXQuCisgICAgdXNpbmcgUmVmQ291
bnRlZDxBdWRpb0NvbnRleHQ+OjpyZWY7CisgICAgdXNpbmcgUmVmQ291bnRlZDxBdWRpb0NvbnRl
eHQ+OjpkZXJlZjsKKworICAgIHZvaWQgc3RhcnRSZW5kZXJpbmcoKTsKKyAgICB2b2lkIGZpcmVD
b21wbGV0aW9uRXZlbnQoKTsKICAgICAKIHByaXZhdGU6CiAgICAgQXVkaW9Db250ZXh0KERvY3Vt
ZW50Kik7CisgICAgQXVkaW9Db250ZXh0KERvY3VtZW50KiwgdW5zaWduZWQgbnVtYmVyT2ZDaGFu
bmVscywgc2l6ZV90IG51bWJlck9mRnJhbWVzLCBkb3VibGUgc2FtcGxlUmF0ZSk7CisgICAgdm9p
ZCBjb25zdHJ1Y3RDb21tb24oKTsKKwogICAgIHZvaWQgbGF6eUluaXRpYWxpemUoKTsKICAgICB2
b2lkIHVuaW5pdGlhbGl6ZSgpOwogICAgIApAQCAtMjUyLDYgKzI3NSwxNSBAQCBwcml2YXRlOgog
ICAgIAogICAgIC8vIEhSVEYgRGF0YWJhc2UgbG9hZGVyCiAgICAgUmVmUHRyPEhSVEZEYXRhYmFz
ZUxvYWRlcj4gbV9ocnRmRGF0YWJhc2VMb2FkZXI7CisKKyAgICAvLyBFdmVudFRhcmdldAorICAg
IHZpcnR1YWwgdm9pZCByZWZFdmVudFRhcmdldCgpIHsgcmVmKCk7IH0KKyAgICB2aXJ0dWFsIHZv
aWQgZGVyZWZFdmVudFRhcmdldCgpIHsgZGVyZWYoKTsgfQorICAgIEV2ZW50VGFyZ2V0RGF0YSBt
X2V2ZW50VGFyZ2V0RGF0YTsKKworICAgIFJlZlB0cjxBdWRpb0J1ZmZlcj4gbV9yZW5kZXJUYXJn
ZXQ7CisgICAgCisgICAgYm9vbCBtX2lzT2ZmbGluZUNvbnRleHQ7CiB9OwogCiB9IC8vIFdlYkNv
cmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvQ29udGV4dC5pZGwKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9Db250ZXh0LmlkbAkocmV2aXNp
b24gODI0NzYpCisrKyBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb0NvbnRleHQuaWRsCSh3
b3JraW5nIGNvcHkpCkBAIC0yNyw3ICsyNywxMCBAQCBtb2R1bGUgd2ViYXVkaW8gewogICAgICAg
ICBDb25kaXRpb25hbD1XRUJfQVVESU8sCiAgICAgICAgIENhbkJlQ29uc3RydWN0ZWQsCiAgICAg
ICAgIEN1c3RvbUNvbnN0cnVjdEZ1bmN0aW9uLAotICAgICAgICBWOEN1c3RvbUNvbnN0cnVjdG9y
CisgICAgICAgIFY4Q3VzdG9tQ29uc3RydWN0b3IsCisjaWYgZGVmaW5lZChWOF9CSU5ESU5HKSAm
JiBWOF9CSU5ESU5HCisgICAgICAgIEV2ZW50VGFyZ2V0CisjZW5kaWYgICAgICAgIAogICAgIF0g
QXVkaW9Db250ZXh0IHsKICAgICAgICAgLy8gQWxsIHJlbmRlcmVkIGF1ZGlvIHVsdGltYXRlbHkg
Y29ubmVjdHMgdG8gZGVzdGluYXRpb24sIHdoaWNoIHJlcHJlc2VudHMgdGhlIGF1ZGlvIGhhcmR3
YXJlLgogICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgQXVkaW9EZXN0aW5hdGlvbk5vZGUgZGVz
dGluYXRpb247CkBAIC02Miw1ICs2NSwxMSBAQCBtb2R1bGUgd2ViYXVkaW8gewogICAgICAgICAv
LyBDaGFubmVsIHNwbGl0dGluZyBhbmQgbWVyZ2luZwogICAgICAgICBBdWRpb0NoYW5uZWxTcGxp
dHRlciBjcmVhdGVDaGFubmVsU3BsaXR0ZXIoKTsKICAgICAgICAgQXVkaW9DaGFubmVsTWVyZ2Vy
IGNyZWF0ZUNoYW5uZWxNZXJnZXIoKTsKKyAgICAgICAgCisgICAgICAgIC8vIE9mZmxpbmUgcmVu
ZGVyaW5nCisgICAgICAgIC8vIHZvaWQgcHJlcGFyZU9mZmxpbmVCdWZmZXJSZW5kZXJpbmcoaW4g
dW5zaWduZWQgbG9uZyBudW1iZXJPZkNoYW5uZWxzLCBpbiB1bnNpZ25lZCBsb25nIG51bWJlck9m
RnJhbWVzLCBpbiBmbG9hdCBzYW1wbGVSYXRlKTsKKyAgICAgICAgYXR0cmlidXRlIEV2ZW50TGlz
dGVuZXIgb25jb21wbGV0ZTsKKyAgICAgICAgdm9pZCBzdGFydFJlbmRlcmluZygpOworICAgICAg
ICAKICAgICB9OwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9EZXN0aW5h
dGlvbk5vZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlv
RGVzdGluYXRpb25Ob2RlLmNwcAkocmV2aXNpb24gODI0NzYpCisrKyBTb3VyY2UvV2ViQ29yZS93
ZWJhdWRpby9BdWRpb0Rlc3RpbmF0aW9uTm9kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDE5
ICszMiwxNiBAQAogI2luY2x1ZGUgIkF1ZGlvQ29udGV4dC5oIgogI2luY2x1ZGUgIkF1ZGlvTm9k
ZUlucHV0LmgiCiAjaW5jbHVkZSAiQXVkaW9Ob2RlT3V0cHV0LmgiCi0jaW5jbHVkZSA8d3RmL1Ro
cmVhZGluZy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLUF1ZGlvRGVzdGluYXRpb25Ob2Rl
OjpBdWRpb0Rlc3RpbmF0aW9uTm9kZShBdWRpb0NvbnRleHQqIGNvbnRleHQpCi0gICAgOiBBdWRp
b05vZGUoY29udGV4dCwgQXVkaW9EZXN0aW5hdGlvbjo6aGFyZHdhcmVTYW1wbGVSYXRlKCkpCisg
ICAgCitBdWRpb0Rlc3RpbmF0aW9uTm9kZTo6QXVkaW9EZXN0aW5hdGlvbk5vZGUoQXVkaW9Db250
ZXh0KiBjb250ZXh0LCBkb3VibGUgc2FtcGxlUmF0ZSkKKyAgICA6IEF1ZGlvTm9kZShjb250ZXh0
LCBzYW1wbGVSYXRlKQogICAgICwgbV9jdXJyZW50VGltZSgwLjApCiB7CiAgICAgYWRkSW5wdXQo
YWRvcHRQdHIobmV3IEF1ZGlvTm9kZUlucHV0KHRoaXMpKSk7CiAgICAgCiAgICAgc2V0VHlwZShO
b2RlVHlwZURlc3RpbmF0aW9uKTsKLSAgICAKLSAgICBpbml0aWFsaXplKCk7CiB9CiAKIEF1ZGlv
RGVzdGluYXRpb25Ob2RlOjp+QXVkaW9EZXN0aW5hdGlvbk5vZGUoKQpAQCAtNTIsMzIgKzQ5LDYg
QEAgQXVkaW9EZXN0aW5hdGlvbk5vZGU6On5BdWRpb0Rlc3RpbmF0aW9uTgogICAgIHVuaW5pdGlh
bGl6ZSgpOwogfQogCi12b2lkIEF1ZGlvRGVzdGluYXRpb25Ob2RlOjppbml0aWFsaXplKCkKLXsK
LSAgICBpZiAoaXNJbml0aWFsaXplZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBkb3VibGUg
aGFyZHdhcmVTYW1wbGVSYXRlID0gQXVkaW9EZXN0aW5hdGlvbjo6aGFyZHdhcmVTYW1wbGVSYXRl
KCk7Ci0jaWZuZGVmIE5ERUJVRyAgICAKLSAgICBmcHJpbnRmKHN0ZGVyciwgIj4+Pj4gaGFyZHdh
cmVTYW1wbGVSYXRlID0gJWZcbiIsIGhhcmR3YXJlU2FtcGxlUmF0ZSk7Ci0jZW5kaWYKLSAgICAK
LSAgICBtX2Rlc3RpbmF0aW9uID0gQXVkaW9EZXN0aW5hdGlvbjo6Y3JlYXRlKCp0aGlzLCBoYXJk
d2FyZVNhbXBsZVJhdGUpOwotICAgIG1fZGVzdGluYXRpb24tPnN0YXJ0KCk7Ci0gICAgCi0gICAg
QXVkaW9Ob2RlOjppbml0aWFsaXplKCk7Ci19Ci0KLXZvaWQgQXVkaW9EZXN0aW5hdGlvbk5vZGU6
OnVuaW5pdGlhbGl6ZSgpCi17Ci0gICAgaWYgKCFpc0luaXRpYWxpemVkKCkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIG1fZGVzdGluYXRpb24tPnN0b3AoKTsKLQotICAgIEF1ZGlvTm9kZTo6dW5p
bml0aWFsaXplKCk7Ci19Ci0KIC8vIFRoZSBhdWRpbyBoYXJkd2FyZSBjYWxscyB1cyBiYWNrIGhl
cmUgdG8gZ2V0cyBpdHMgaW5wdXQgc3RyZWFtLgogdm9pZCBBdWRpb0Rlc3RpbmF0aW9uTm9kZTo6
cHJvdmlkZUlucHV0KEF1ZGlvQnVzKiBkZXN0aW5hdGlvbkJ1cywgc2l6ZV90IG51bWJlck9mRnJh
bWVzKQogewpJbmRleDogU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9EZXN0aW5hdGlvbk5v
ZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb0Rlc3RpbmF0
aW9uTm9kZS5oCShyZXZpc2lvbiA4MjQ3NikKKysrIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1
ZGlvRGVzdGluYXRpb25Ob2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI1LDExICsyNSw5IEBACiAj
aWZuZGVmIEF1ZGlvRGVzdGluYXRpb25Ob2RlX2gKICNkZWZpbmUgQXVkaW9EZXN0aW5hdGlvbk5v
ZGVfaAogCi0jaW5jbHVkZSAiQXVkaW9EZXN0aW5hdGlvbi5oIgorI2luY2x1ZGUgIkF1ZGlvQnVm
ZmVyLmgiCiAjaW5jbHVkZSAiQXVkaW9Ob2RlLmgiCiAjaW5jbHVkZSAiQXVkaW9Tb3VyY2VQcm92
aWRlci5oIgotI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KLSNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0
ci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTM4LDMyICszNiwyNSBAQCBjbGFzcyBB
dWRpb0NvbnRleHQ7CiAgICAgCiBjbGFzcyBBdWRpb0Rlc3RpbmF0aW9uTm9kZSA6IHB1YmxpYyBB
dWRpb05vZGUsIHB1YmxpYyBBdWRpb1NvdXJjZVByb3ZpZGVyIHsKIHB1YmxpYzoKLSAgICBzdGF0
aWMgUGFzc1JlZlB0cjxBdWRpb0Rlc3RpbmF0aW9uTm9kZT4gY3JlYXRlKEF1ZGlvQ29udGV4dCog
Y29udGV4dCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQXVkaW9EZXN0aW5h
dGlvbk5vZGUoY29udGV4dCkpOyAgICAgICAgCi0gICAgfQotCisgICAgQXVkaW9EZXN0aW5hdGlv
bk5vZGUoQXVkaW9Db250ZXh0KiwgZG91YmxlIHNhbXBsZVJhdGUpOwogICAgIHZpcnR1YWwgfkF1
ZGlvRGVzdGluYXRpb25Ob2RlKCk7CiAgICAgCiAgICAgLy8gQXVkaW9Ob2RlICAgCiAgICAgdmly
dHVhbCB2b2lkIHByb2Nlc3Moc2l6ZV90KSB7IH07IC8vIHdlJ3JlIHB1bGxlZCBieSBoYXJkd2Fy
ZSBzbyB0aGlzIGlzIG5ldmVyIGNhbGxlZAogICAgIHZpcnR1YWwgdm9pZCByZXNldCgpIHsgbV9j
dXJyZW50VGltZSA9IDAuMDsgfTsKLSAgICB2aXJ0dWFsIHZvaWQgaW5pdGlhbGl6ZSgpOwotICAg
IHZpcnR1YWwgdm9pZCB1bmluaXRpYWxpemUoKTsKICAgICAKICAgICAvLyBUaGUgYXVkaW8gaGFy
ZHdhcmUgY2FsbHMgaGVyZSBwZXJpb2RpY2FsbHkgdG8gZ2V0cyBpdHMgaW5wdXQgc3RyZWFtLgog
ICAgIHZpcnR1YWwgdm9pZCBwcm92aWRlSW5wdXQoQXVkaW9CdXMqLCBzaXplX3QgbnVtYmVyT2ZG
cmFtZXMpOwogCiAgICAgZG91YmxlIGN1cnJlbnRUaW1lKCkgeyByZXR1cm4gbV9jdXJyZW50VGlt
ZTsgfQogCi0gICAgZG91YmxlIHNhbXBsZVJhdGUoKSBjb25zdCB7IHJldHVybiBtX2Rlc3RpbmF0
aW9uLT5zYW1wbGVSYXRlKCk7IH0KKyAgICB2aXJ0dWFsIGRvdWJsZSBzYW1wbGVSYXRlKCkgY29u
c3QgPSAwOwogCi0gICAgdW5zaWduZWQgbnVtYmVyT2ZDaGFubmVscygpIGNvbnN0IHsgcmV0dXJu
IDI7IH0gLy8gRklYTUU6IHVwZGF0ZSB3aGVuIG11bHRpLWNoYW5uZWwgKG1vcmUgdGhhbiBzdGVy
ZW8pIGlzIHN1cHBvcnRlZAotICAgIAotcHJpdmF0ZToKLSAgICBBdWRpb0Rlc3RpbmF0aW9uTm9k
ZShBdWRpb0NvbnRleHQqKTsKKyAgICB2aXJ0dWFsIHVuc2lnbmVkIG51bWJlck9mQ2hhbm5lbHMo
KSBjb25zdCB7IHJldHVybiAyOyB9IC8vIEZJWE1FOiB1cGRhdGUgd2hlbiBtdWx0aS1jaGFubmVs
IChtb3JlIHRoYW4gc3RlcmVvKSBpcyBzdXBwb3J0ZWQKIAotICAgIE93blB0cjxBdWRpb0Rlc3Rp
bmF0aW9uPiBtX2Rlc3RpbmF0aW9uOworICAgIHZpcnR1YWwgdm9pZCBzdGFydFJlbmRlcmluZygp
ID0gMDsKKyAgICAKK3Byb3RlY3RlZDoKICAgICBkb3VibGUgbV9jdXJyZW50VGltZTsKIH07CiAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0NvbnZvbHZlck5vZGUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0NvbnZvbHZlck5vZGUuY3BwCShyZXZpc2lv
biA4MjQ3NikKKysrIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0NvbnZvbHZlck5vZGUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAiQ29udm9sdmVyTm9kZS5o
IgogCiAjaW5jbHVkZSAiQXVkaW9CdWZmZXIuaCIKKyNpbmNsdWRlICJBdWRpb0NvbnRleHQuaCIK
ICNpbmNsdWRlICJBdWRpb05vZGVJbnB1dC5oIgogI2luY2x1ZGUgIkF1ZGlvTm9kZU91dHB1dC5o
IgogI2luY2x1ZGUgIlJldmVyYi5oIgpAQCAtMTMxLDcgKzEzMiw4IEBAIHZvaWQgQ29udm9sdmVy
Tm9kZTo6c2V0QnVmZmVyKEF1ZGlvQnVmZmUKICAgICAgICAgYnVmZmVyQnVzLnNldENoYW5uZWxN
ZW1vcnkoaSwgYnVmZmVyLT5nZXRDaGFubmVsRGF0YShpKS0+ZGF0YSgpLCBidWZmZXJMZW5ndGgp
OwogICAgIAogICAgIC8vIENyZWF0ZSB0aGUgcmV2ZXJiIHdpdGggdGhlIGdpdmVuIGltcHVsc2Ug
cmVzcG9uc2UuCi0gICAgT3duUHRyPFJldmVyYj4gcmV2ZXJiID0gYWRvcHRQdHIobmV3IFJldmVy
YigmYnVmZmVyQnVzLCBBdWRpb05vZGU6OlByb2Nlc3NpbmdTaXplSW5GcmFtZXMsIE1heEZGVFNp
emUsIDIsIHRydWUpKTsKKyAgICBib29sIHVzZUJhY2tncm91bmRUaHJlYWRzID0gIWNvbnRleHQo
KS0+aXNPZmZsaW5lQ29udGV4dCgpOworICAgIE93blB0cjxSZXZlcmI+IHJldmVyYiA9IGFkb3B0
UHRyKG5ldyBSZXZlcmIoJmJ1ZmZlckJ1cywgQXVkaW9Ob2RlOjpQcm9jZXNzaW5nU2l6ZUluRnJh
bWVzLCBNYXhGRlRTaXplLCAyLCB1c2VCYWNrZ3JvdW5kVGhyZWFkcykpOwogCiAgICAgewogICAg
ICAgICAvLyBTeW5jaHJvbml6ZSB3aXRoIHByb2Nlc3MoKS4KSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3dlYmF1ZGlvL0RlZmF1bHRBdWRpb0Rlc3RpbmF0aW9uTm9kZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvd2ViYXVkaW8vRGVmYXVsdEF1ZGlvRGVzdGluYXRpb25Ob2RlLmNwcAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0RlZmF1bHRBdWRpb0Rlc3Rp
bmF0aW9uTm9kZS5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNzggQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTEsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAq
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgor
ICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoV0VCX0FVRElPKQorCisjaW5jbHVk
ZSAiRGVmYXVsdEF1ZGlvRGVzdGluYXRpb25Ob2RlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KyAgICAKK0RlZmF1bHRBdWRpb0Rlc3RpbmF0aW9uTm9kZTo6RGVmYXVsdEF1ZGlvRGVzdGluYXRp
b25Ob2RlKEF1ZGlvQ29udGV4dCogY29udGV4dCkKKyAgICA6IEF1ZGlvRGVzdGluYXRpb25Ob2Rl
KGNvbnRleHQsIEF1ZGlvRGVzdGluYXRpb246OmhhcmR3YXJlU2FtcGxlUmF0ZSgpKQoreworICAg
IGluaXRpYWxpemUoKTsKK30KKworRGVmYXVsdEF1ZGlvRGVzdGluYXRpb25Ob2RlOjp+RGVmYXVs
dEF1ZGlvRGVzdGluYXRpb25Ob2RlKCkKK3sKKyAgICB1bmluaXRpYWxpemUoKTsKK30KKwordm9p
ZCBEZWZhdWx0QXVkaW9EZXN0aW5hdGlvbk5vZGU6OmluaXRpYWxpemUoKQoreworICAgIGlmIChp
c0luaXRpYWxpemVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGRvdWJsZSBoYXJkd2FyZVNh
bXBsZVJhdGUgPSBBdWRpb0Rlc3RpbmF0aW9uOjpoYXJkd2FyZVNhbXBsZVJhdGUoKTsKKyNpZm5k
ZWYgTkRFQlVHICAgIAorICAgIGZwcmludGYoc3RkZXJyLCAiPj4+PiBoYXJkd2FyZVNhbXBsZVJh
dGUgPSAlZlxuIiwgaGFyZHdhcmVTYW1wbGVSYXRlKTsKKyNlbmRpZgorICAgIAorICAgIG1fZGVz
dGluYXRpb24gPSBBdWRpb0Rlc3RpbmF0aW9uOjpjcmVhdGUoKnRoaXMsIGhhcmR3YXJlU2FtcGxl
UmF0ZSk7CisgICAgCisgICAgQXVkaW9Ob2RlOjppbml0aWFsaXplKCk7Cit9CisKK3ZvaWQgRGVm
YXVsdEF1ZGlvRGVzdGluYXRpb25Ob2RlOjp1bmluaXRpYWxpemUoKQoreworICAgIGlmICghaXNJ
bml0aWFsaXplZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2Rlc3RpbmF0aW9uLT5zdG9w
KCk7CisKKyAgICBBdWRpb05vZGU6OnVuaW5pdGlhbGl6ZSgpOworfQorCit2b2lkIERlZmF1bHRB
dWRpb0Rlc3RpbmF0aW9uTm9kZTo6c3RhcnRSZW5kZXJpbmcoKQoreworICAgIEFTU0VSVChpc0lu
aXRpYWxpemVkKCkpOworICAgIGlmIChpc0luaXRpYWxpemVkKCkpCisgICAgICAgIG1fZGVzdGlu
YXRpb24tPnN0YXJ0KCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8v
IEVOQUJMRShXRUJfQVVESU8pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9EZWZhdWx0
QXVkaW9EZXN0aW5hdGlvbk5vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS93ZWJh
dWRpby9EZWZhdWx0QXVkaW9EZXN0aW5hdGlvbk5vZGUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9XZWJDb3JlL3dlYmF1ZGlvL0RlZmF1bHRBdWRpb0Rlc3RpbmF0aW9uTm9kZS5oCShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDYxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExLCBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBEZWZhdWx0QXVkaW9E
ZXN0aW5hdGlvbk5vZGVfaAorI2RlZmluZSBEZWZhdWx0QXVkaW9EZXN0aW5hdGlvbk5vZGVfaAor
CisjaW5jbHVkZSAiQXVkaW9EZXN0aW5hdGlvbi5oIgorI2luY2x1ZGUgIkF1ZGlvRGVzdGluYXRp
b25Ob2RlLmgiCisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK2NsYXNzIEF1ZGlvQ29udGV4dDsKKyAgICAKK2NsYXNzIERlZmF1bHRBdWRpb0Rlc3RpbmF0
aW9uTm9kZSA6IHB1YmxpYyBBdWRpb0Rlc3RpbmF0aW9uTm9kZSB7CitwdWJsaWM6CisgICAgc3Rh
dGljIFBhc3NSZWZQdHI8RGVmYXVsdEF1ZGlvRGVzdGluYXRpb25Ob2RlPiBjcmVhdGUoQXVkaW9D
b250ZXh0KiBjb250ZXh0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBEZWZh
dWx0QXVkaW9EZXN0aW5hdGlvbk5vZGUoY29udGV4dCkpOyAgICAgCisgICAgfQorCisgICAgdmly
dHVhbCB+RGVmYXVsdEF1ZGlvRGVzdGluYXRpb25Ob2RlKCk7CisgICAgCisgICAgLy8gQXVkaW9O
b2RlICAgCisgICAgdmlydHVhbCB2b2lkIGluaXRpYWxpemUoKTsKKyAgICB2aXJ0dWFsIHZvaWQg
dW5pbml0aWFsaXplKCk7CisgICAgCisgICAgZG91YmxlIHNhbXBsZVJhdGUoKSBjb25zdCB7IHJl
dHVybiBtX2Rlc3RpbmF0aW9uLT5zYW1wbGVSYXRlKCk7IH0KKworICAgIHZpcnR1YWwgdm9pZCBz
dGFydFJlbmRlcmluZygpOworICAgIAorcHJpdmF0ZToKKyAgICBEZWZhdWx0QXVkaW9EZXN0aW5h
dGlvbk5vZGUoQXVkaW9Db250ZXh0Kik7CisKKyAgICBPd25QdHI8QXVkaW9EZXN0aW5hdGlvbj4g
bV9kZXN0aW5hdGlvbjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8v
IERlZmF1bHRBdWRpb0Rlc3RpbmF0aW9uTm9kZV9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS93ZWJh
dWRpby9PZmZsaW5lQXVkaW9Db21wbGV0aW9uRXZlbnQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3dlYmF1ZGlvL09mZmxpbmVBdWRpb0NvbXBsZXRpb25FdmVudC5jcHAJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9PZmZsaW5lQXVkaW9Db21wbGV0aW9u
RXZlbnQuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDU4IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDExLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
CisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKFdFQl9BVURJTykKKworI2luY2x1ZGUgIk9m
ZmxpbmVBdWRpb0NvbXBsZXRpb25FdmVudC5oIgorCisjaW5jbHVkZSAiQXVkaW9CdWZmZXIuaCIK
KyNpbmNsdWRlICJFdmVudE5hbWVzLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUGFzc1Jl
ZlB0cjxPZmZsaW5lQXVkaW9Db21wbGV0aW9uRXZlbnQ+IE9mZmxpbmVBdWRpb0NvbXBsZXRpb25F
dmVudDo6Y3JlYXRlKFBhc3NSZWZQdHI8QXVkaW9CdWZmZXI+IHJlbmRlcmVkQnVmZmVyKQorewor
ICAgIHJldHVybiBhZG9wdFJlZihuZXcgT2ZmbGluZUF1ZGlvQ29tcGxldGlvbkV2ZW50KHJlbmRl
cmVkQnVmZmVyKSk7Cit9CisKK09mZmxpbmVBdWRpb0NvbXBsZXRpb25FdmVudDo6T2ZmbGluZUF1
ZGlvQ29tcGxldGlvbkV2ZW50KFBhc3NSZWZQdHI8QXVkaW9CdWZmZXI+IHJlbmRlcmVkQnVmZmVy
KQorICAgIDogRXZlbnQoZXZlbnROYW1lcygpLmNvbXBsZXRlRXZlbnQsIHRydWUsIGZhbHNlKQor
ICAgICwgbV9yZW5kZXJlZEJ1ZmZlcihyZW5kZXJlZEJ1ZmZlcikKK3sKK30KKworT2ZmbGluZUF1
ZGlvQ29tcGxldGlvbkV2ZW50Ojp+T2ZmbGluZUF1ZGlvQ29tcGxldGlvbkV2ZW50KCkKK3sKK30K
KworYm9vbCBPZmZsaW5lQXVkaW9Db21wbGV0aW9uRXZlbnQ6OmlzT2ZmbGluZUF1ZGlvQ29tcGxl
dGlvbkV2ZW50KCkgY29uc3QKK3sKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQl9BVURJTykKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3dlYmF1ZGlvL09mZmxpbmVBdWRpb0NvbXBsZXRpb25FdmVudC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL09mZmxpbmVBdWRpb0NvbXBsZXRpb25FdmVudC5o
CShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vT2ZmbGluZUF1ZGlvQ29t
cGxldGlvbkV2ZW50LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTUgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTEsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAq
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgor
ICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaWZuZGVmIE9mZmxpbmVBdWRpb0NvbXBsZXRpb25FdmVudF9oCisjZGVmaW5lIE9mZmxpbmVB
dWRpb0NvbXBsZXRpb25FdmVudF9oCisKKyNpbmNsdWRlICJBdWRpb0J1ZmZlci5oIgorI2luY2x1
ZGUgIkV2ZW50LmgiCisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYv
UmVmUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQXVkaW9CdWZmZXI7Cisg
ICAgCitjbGFzcyBPZmZsaW5lQXVkaW9Db21wbGV0aW9uRXZlbnQgOiBwdWJsaWMgRXZlbnQgewor
cHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPE9mZmxpbmVBdWRpb0NvbXBsZXRpb25FdmVu
dD4gY3JlYXRlKFBhc3NSZWZQdHI8QXVkaW9CdWZmZXI+IHJlbmRlcmVkQnVmZmVyKTsKKyAgICAK
KyAgICB2aXJ0dWFsIH5PZmZsaW5lQXVkaW9Db21wbGV0aW9uRXZlbnQoKTsKKworICAgIHZpcnR1
YWwgYm9vbCBpc09mZmxpbmVBdWRpb0NvbXBsZXRpb25FdmVudCgpIGNvbnN0OworCisgICAgQXVk
aW9CdWZmZXIqIHJlbmRlcmVkQnVmZmVyKCkgeyByZXR1cm4gbV9yZW5kZXJlZEJ1ZmZlci5nZXQo
KTsgfQorCitwcml2YXRlOgorICAgIE9mZmxpbmVBdWRpb0NvbXBsZXRpb25FdmVudChQYXNzUmVm
UHRyPEF1ZGlvQnVmZmVyPiByZW5kZXJlZEJ1ZmZlcik7CisKKyAgICBSZWZQdHI8QXVkaW9CdWZm
ZXI+IG1fcmVuZGVyZWRCdWZmZXI7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNl
bmRpZiAvLyBPZmZsaW5lQXVkaW9Db21wbGV0aW9uRXZlbnRfaApJbmRleDogU291cmNlL1dlYkNv
cmUvd2ViYXVkaW8vT2ZmbGluZUF1ZGlvQ29tcGxldGlvbkV2ZW50LmlkbAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9PZmZsaW5lQXVkaW9Db21wbGV0aW9uRXZlbnQuaWRs
CShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vT2ZmbGluZUF1ZGlvQ29t
cGxldGlvbkV2ZW50LmlkbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzMiBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMSwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAor
ICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
CisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKK21vZHVsZSBhdWRpbyB7CisgICAgaW50ZXJmYWNlIFsKKyAgICAgICAgQ29uZGl0aW9uYWw9
V0VCX0FVRElPLAorICAgICAgICBHZW5lcmF0ZVRvSlMKKyAgICBdIE9mZmxpbmVBdWRpb0NvbXBs
ZXRpb25FdmVudCA6IEV2ZW50IHsKKyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIEF1ZGlvQnVm
ZmVyIHJlbmRlcmVkQnVmZmVyOworICAgIH07Cit9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS93ZWJh
dWRpby9PZmZsaW5lQXVkaW9EZXN0aW5hdGlvbk5vZGUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3dlYmF1ZGlvL09mZmxpbmVBdWRpb0Rlc3RpbmF0aW9uTm9kZS5jcHAJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9PZmZsaW5lQXVkaW9EZXN0aW5hdGlv
bk5vZGUuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE2NiBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMSwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShXRUJfQVVESU8pCisKKyNpbmNsdWRlICJP
ZmZsaW5lQXVkaW9EZXN0aW5hdGlvbk5vZGUuaCIKKworI2luY2x1ZGUgIkF1ZGlvQnVzLmgiCisj
aW5jbHVkZSAiQXVkaW9Db250ZXh0LmgiCisjaW5jbHVkZSAiSFJURkRhdGFiYXNlTG9hZGVyLmgi
CisjaW5jbHVkZSA8YWxnb3JpdGhtPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KKwordXNp
bmcgbmFtZXNwYWNlIHN0ZDsKKyAKK25hbWVzcGFjZSBXZWJDb3JlIHsKKyAgICAKK2NvbnN0IHNp
emVfdCByZW5kZXJRdWFudHVtU2l6ZSA9IDEyODsgICAgCisKK09mZmxpbmVBdWRpb0Rlc3RpbmF0
aW9uTm9kZTo6T2ZmbGluZUF1ZGlvRGVzdGluYXRpb25Ob2RlKEF1ZGlvQ29udGV4dCogY29udGV4
dCwgQXVkaW9CdWZmZXIqIHJlbmRlclRhcmdldCkKKyAgICA6IEF1ZGlvRGVzdGluYXRpb25Ob2Rl
KGNvbnRleHQsIHJlbmRlclRhcmdldC0+c2FtcGxlUmF0ZSgpKQorICAgICwgbV9yZW5kZXJUYXJn
ZXQocmVuZGVyVGFyZ2V0KQorICAgICwgbV9zdGFydGVkUmVuZGVyaW5nKGZhbHNlKQoreworICAg
IG1fcmVuZGVyQnVzID0gYWRvcHRQdHIobmV3IEF1ZGlvQnVzKHJlbmRlclRhcmdldC0+bnVtYmVy
T2ZDaGFubmVscygpLCByZW5kZXJRdWFudHVtU2l6ZSkpOworICAgIAorICAgIGluaXRpYWxpemUo
KTsKK30KKworT2ZmbGluZUF1ZGlvRGVzdGluYXRpb25Ob2RlOjp+T2ZmbGluZUF1ZGlvRGVzdGlu
YXRpb25Ob2RlKCkKK3sKKyAgICB1bmluaXRpYWxpemUoKTsKK30KKwordm9pZCBPZmZsaW5lQXVk
aW9EZXN0aW5hdGlvbk5vZGU6OmluaXRpYWxpemUoKQoreworICAgIGlmIChpc0luaXRpYWxpemVk
KCkpCisgICAgICAgIHJldHVybjsKKworICAgIEF1ZGlvTm9kZTo6aW5pdGlhbGl6ZSgpOworfQor
Cit2b2lkIE9mZmxpbmVBdWRpb0Rlc3RpbmF0aW9uTm9kZTo6dW5pbml0aWFsaXplKCkKK3sKKyAg
ICBpZiAoIWlzSW5pdGlhbGl6ZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgQXVkaW9Ob2Rl
Ojp1bmluaXRpYWxpemUoKTsKK30KKwordm9pZCBPZmZsaW5lQXVkaW9EZXN0aW5hdGlvbk5vZGU6
OnN0YXJ0UmVuZGVyaW5nKCkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIEFT
U0VSVChtX3JlbmRlclRhcmdldC5nZXQoKSk7CisgICAgaWYgKCFtX3JlbmRlclRhcmdldC5nZXQo
KSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIGlmICghbV9zdGFydGVkUmVuZGVyaW5nKSB7
CisgICAgICAgIG1fc3RhcnRlZFJlbmRlcmluZyA9IHRydWU7CisgICAgICAgIG1fcmVuZGVyVGhy
ZWFkID0gY3JlYXRlVGhyZWFkKE9mZmxpbmVBdWRpb0Rlc3RpbmF0aW9uTm9kZTo6cmVuZGVyRW50
cnksIHRoaXMsICJvZmZsaW5lIHJlbmRlcmVyIik7CisgICAgfQorfQorCisvLyBEbyBvZmZsaW5l
IHJlbmRlcmluZyBpbiB0aGlzIHRocmVhZC4KK3ZvaWQqIE9mZmxpbmVBdWRpb0Rlc3RpbmF0aW9u
Tm9kZTo6cmVuZGVyRW50cnkodm9pZCogdGhyZWFkRGF0YSkKK3sKKyAgICBPZmZsaW5lQXVkaW9E
ZXN0aW5hdGlvbk5vZGUqIGRlc3RpbmF0aW9uTm9kZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8T2ZmbGlu
ZUF1ZGlvRGVzdGluYXRpb25Ob2RlKj4odGhyZWFkRGF0YSk7CisgICAgQVNTRVJUKGRlc3RpbmF0
aW9uTm9kZSk7CisgICAgZGVzdGluYXRpb25Ob2RlLT5yZW5kZXIoKTsKKyAgICAKKyAgICByZXR1
cm4gMDsKK30KKwordm9pZCBPZmZsaW5lQXVkaW9EZXN0aW5hdGlvbk5vZGU6OnJlbmRlcigpCit7
CisgICAgQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7CisgICAgQVNTRVJUKG1fcmVuZGVyQnVzLmdl
dCgpKTsKKyAgICBpZiAoIW1fcmVuZGVyQnVzLmdldCgpKQorICAgICAgICByZXR1cm47CisgICAg
CisgICAgYm9vbCBjaGFubmVsc01hdGNoID0gbV9yZW5kZXJCdXMtPm51bWJlck9mQ2hhbm5lbHMo
KSA9PSBtX3JlbmRlclRhcmdldC0+bnVtYmVyT2ZDaGFubmVscygpOworICAgIEFTU0VSVChjaGFu
bmVsc01hdGNoKTsKKyAgICBpZiAoIWNoYW5uZWxzTWF0Y2gpCisgICAgICAgIHJldHVybjsKKyAg
ICAgICAgCisgICAgYm9vbCBpc1JlbmRlckJ1c0FsbG9jYXRlZCA9IG1fcmVuZGVyQnVzLT5sZW5n
dGgoKSA+PSByZW5kZXJRdWFudHVtU2l6ZTsKKyAgICBBU1NFUlQoaXNSZW5kZXJCdXNBbGxvY2F0
ZWQpOworICAgIGlmICghaXNSZW5kZXJCdXNBbGxvY2F0ZWQpCisgICAgICAgIHJldHVybjsKKyAg
ICAgICAgCisgICAgLy8gU3luY2hyb25pemUgd2l0aCBIUlRGRGF0YWJhc2VMb2FkZXIuCisgICAg
Ly8gVGhlIGRhdGFiYXNlIG11c3QgYmUgbG9hZGVkIGJlZm9yZSB3ZSBjYW4gcHJvY2VlZC4KKyAg
ICBIUlRGRGF0YWJhc2VMb2FkZXIqIGxvYWRlciA9IEhSVEZEYXRhYmFzZUxvYWRlcjo6bG9hZGVy
KCk7CisgICAgQVNTRVJUKGxvYWRlcik7CisgICAgaWYgKCFsb2FkZXIpCisgICAgICAgIHJldHVy
bjsKKyAgICAKKyAgICBsb2FkZXItPndhaXRGb3JMb2FkZXJUaHJlYWRDb21wbGV0aW9uKCk7Cisg
ICAgICAgIAorICAgIC8vIEJyZWFrIHVwIHRoZSByZW5kZXIgdGFyZ2V0IGludG8gc21hbGxlciAi
cmVuZGVyIHF1YW50aXplIiBzaXplZCBwaWVjZXMuCisgICAgLy8gUmVuZGVyIHVudGlsIHdlJ3Jl
IGZpbmlzaGVkLgorICAgIHNpemVfdCBmcmFtZXNUb1Byb2Nlc3MgPSBtX3JlbmRlclRhcmdldC0+
bGVuZ3RoKCk7CisgICAgdW5zaWduZWQgbnVtYmVyT2ZDaGFubmVscyA9IG1fcmVuZGVyVGFyZ2V0
LT5udW1iZXJPZkNoYW5uZWxzKCk7CisKKyAgICB1bnNpZ25lZCBuID0gMDsKKyAgICB3aGlsZSAo
ZnJhbWVzVG9Qcm9jZXNzID4gMCkgeworICAgICAgICAvLyBSZW5kZXIgb25lIHJlbmRlciBxdWFu
dHVtLgorICAgICAgICBwcm92aWRlSW5wdXQobV9yZW5kZXJCdXMuZ2V0KCksIHJlbmRlclF1YW50
dW1TaXplKTsKKyAgICAgICAgCisgICAgICAgIHNpemVfdCBmcmFtZXNBdmFpbGFibGVUb0NvcHkg
PSBtaW4oZnJhbWVzVG9Qcm9jZXNzLCByZW5kZXJRdWFudHVtU2l6ZSk7CisgICAgICAgIAorICAg
ICAgICBmb3IgKHVuc2lnbmVkIGNoYW5uZWxJbmRleCA9IDA7IGNoYW5uZWxJbmRleCA8IG51bWJl
ck9mQ2hhbm5lbHM7ICsrY2hhbm5lbEluZGV4KSB7CisgICAgICAgICAgICBmbG9hdCogc291cmNl
ID0gbV9yZW5kZXJCdXMtPmNoYW5uZWwoY2hhbm5lbEluZGV4KS0+ZGF0YSgpOworICAgICAgICAg
ICAgZmxvYXQqIGRlc3RpbmF0aW9uID0gbV9yZW5kZXJUYXJnZXQtPmdldENoYW5uZWxEYXRhKGNo
YW5uZWxJbmRleCktPmRhdGEoKTsKKyAgICAgICAgICAgIG1lbWNweShkZXN0aW5hdGlvbiArIG4s
IHNvdXJjZSwgc2l6ZW9mKGZsb2F0KSAqIGZyYW1lc0F2YWlsYWJsZVRvQ29weSk7CisgICAgICAg
IH0KKyAgICAgICAgCisgICAgICAgIG4gKz0gZnJhbWVzQXZhaWxhYmxlVG9Db3B5OworICAgICAg
ICBmcmFtZXNUb1Byb2Nlc3MgLT0gZnJhbWVzQXZhaWxhYmxlVG9Db3B5OworICAgIH0KKyAgICAK
KyAgICAvLyBPdXIgd29yayBpcyBkb25lLiBMZXQgdGhlIEF1ZGlvQ29udGV4dCBrbm93LgorICAg
IGNhbGxPbk1haW5UaHJlYWQobm90aWZ5Q29tcGxldGVEaXNwYXRjaCwgdGhpcyk7Cit9CisKK3Zv
aWQgT2ZmbGluZUF1ZGlvRGVzdGluYXRpb25Ob2RlOjpub3RpZnlDb21wbGV0ZURpc3BhdGNoKHZv
aWQqIHVzZXJEYXRhKQoreworICAgIE9mZmxpbmVBdWRpb0Rlc3RpbmF0aW9uTm9kZSogZGVzdGlu
YXRpb25Ob2RlID0gc3RhdGljX2Nhc3Q8T2ZmbGluZUF1ZGlvRGVzdGluYXRpb25Ob2RlKj4odXNl
ckRhdGEpOworICAgIEFTU0VSVChkZXN0aW5hdGlvbk5vZGUpOworICAgIGlmICghZGVzdGluYXRp
b25Ob2RlKQorICAgICAgICByZXR1cm47CisKKyAgICBkZXN0aW5hdGlvbk5vZGUtPm5vdGlmeUNv
bXBsZXRlKCk7Cit9CisKK3ZvaWQgT2ZmbGluZUF1ZGlvRGVzdGluYXRpb25Ob2RlOjpub3RpZnlD
b21wbGV0ZSgpCit7CisgICAgY29udGV4dCgpLT5maXJlQ29tcGxldGlvbkV2ZW50KCk7Cit9CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShXRUJfQVVESU8pCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9PZmZsaW5lQXVkaW9EZXN0aW5hdGlvbk5vZGUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9PZmZsaW5lQXVkaW9EZXN0
aW5hdGlvbk5vZGUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL09m
ZmxpbmVBdWRpb0Rlc3RpbmF0aW9uTm9kZS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDc4IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDExLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAq
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUwor
ICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2lmbmRlZiBPZmZsaW5lQXVkaW9EZXN0aW5hdGlvbk5vZGVfaAorI2Rl
ZmluZSBPZmZsaW5lQXVkaW9EZXN0aW5hdGlvbk5vZGVfaAorCisjaW5jbHVkZSAiQXVkaW9CdWZm
ZXIuaCIKKyNpbmNsdWRlICJBdWRpb0Rlc3RpbmF0aW9uTm9kZS5oIgorI2luY2x1ZGUgPHd0Zi9Q
YXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9UaHJl
YWRpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBBdWRpb0J1czsKK2NsYXNz
IEF1ZGlvQ29udGV4dDsKKyAgICAKK2NsYXNzIE9mZmxpbmVBdWRpb0Rlc3RpbmF0aW9uTm9kZSA6
IHB1YmxpYyBBdWRpb0Rlc3RpbmF0aW9uTm9kZSB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NS
ZWZQdHI8T2ZmbGluZUF1ZGlvRGVzdGluYXRpb25Ob2RlPiBjcmVhdGUoQXVkaW9Db250ZXh0KiBj
b250ZXh0LCBBdWRpb0J1ZmZlciogcmVuZGVyVGFyZ2V0KQorICAgIHsKKyAgICAgICAgcmV0dXJu
IGFkb3B0UmVmKG5ldyBPZmZsaW5lQXVkaW9EZXN0aW5hdGlvbk5vZGUoY29udGV4dCwgcmVuZGVy
VGFyZ2V0KSk7ICAgICAKKyAgICB9CisKKyAgICB2aXJ0dWFsIH5PZmZsaW5lQXVkaW9EZXN0aW5h
dGlvbk5vZGUoKTsKKyAgICAKKyAgICAvLyBBdWRpb05vZGUgICAKKyAgICB2aXJ0dWFsIHZvaWQg
aW5pdGlhbGl6ZSgpOworICAgIHZpcnR1YWwgdm9pZCB1bmluaXRpYWxpemUoKTsKKyAgICAKKyAg
ICBkb3VibGUgc2FtcGxlUmF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVuZGVyVGFyZ2V0LT5zYW1w
bGVSYXRlKCk7IH0KKworICAgIHZvaWQgc3RhcnRSZW5kZXJpbmcoKTsKKyAgICAKK3ByaXZhdGU6
CisgICAgT2ZmbGluZUF1ZGlvRGVzdGluYXRpb25Ob2RlKEF1ZGlvQ29udGV4dCosIEF1ZGlvQnVm
ZmVyKiByZW5kZXJUYXJnZXQpOworCisgICAgLy8gVGhpcyBBdWRpb05vZGUgcmVuZGVycyBpbnRv
IHRoaXMgQXVkaW9CdWZmZXIuCisgICAgUmVmUHRyPEF1ZGlvQnVmZmVyPiBtX3JlbmRlclRhcmdl
dDsKKyAgICAKKyAgICAvLyBUZW1wb3JhcnkgQXVkaW9CdXMgZm9yIGVhY2ggcmVuZGVyIHF1YW50
dW0uCisgICAgT3duUHRyPEF1ZGlvQnVzPiBtX3JlbmRlckJ1czsKKyAgICAKKyAgICAvLyBSZW5k
ZXJpbmcgdGhyZWFkLgorICAgIFRocmVhZElkZW50aWZpZXIgbV9yZW5kZXJUaHJlYWQ7CisgICAg
Ym9vbCBtX3N0YXJ0ZWRSZW5kZXJpbmc7CisgICAgc3RhdGljIHZvaWQqIHJlbmRlckVudHJ5KHZv
aWQqIHRocmVhZERhdGEpOworICAgIHZvaWQgcmVuZGVyKCk7CisgICAgCisgICAgLy8gRm9yIGNv
bXBsZXRpb24gY2FsbGJhY2sgb24gbWFpbiB0aHJlYWQuCisgICAgc3RhdGljIHZvaWQgbm90aWZ5
Q29tcGxldGVEaXNwYXRjaCh2b2lkKiB1c2VyRGF0YSk7CisgICAgdm9pZCBub3RpZnlDb21wbGV0
ZSgpOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gT2ZmbGluZUF1
ZGlvRGVzdGluYXRpb25Ob2RlX2gK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>88104</attachid>
            <date>2011-04-04 12:49:40 -0700</date>
            <delta_ts>2011-04-04 16:10:14 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-57676-20110404124939.patch</filename>
            <type>text/plain</type>
            <size>63366</size>
            <attacher name="Chris Rogers">crogers</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDgyNzMzKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNTcgQEAKKzIwMTEtMDQtMDEgIENocmlzIFJv
Z2VycyAgPGNyb2dlcnNAZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBBZGQgc3VwcG9ydCBmb3Igb2ZmbGluZSBhdWRpbyByZW5kZXJp
bmcgdG8gQXVkaW9Db250ZXh0IEFQSQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9NTc2NzYKKworICAgICAgICBObyBuZXcgdGVzdHMgc2luY2UgYXVkaW8g
QVBJIGlzIG5vdCB5ZXQgaW1wbGVtZW50ZWQuCisKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6Cisg
ICAgICAgICogYmluZGluZ3MvanMvSlNFdmVudEN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3Jl
Ojp0b0pTKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0V2ZW50VGFyZ2V0LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OnRvSlMpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4RE9NV3JhcHBlci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpWOERPTVdyYXBwZXI6OmNvbnZlcnRFdmVudFRhcmdldFRv
VjhPYmplY3QpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOEF1ZGlvQ29udGV4dEN1
c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpWOEF1ZGlvQ29udGV4dDo6Y29uc3RydWN0b3JD
YWxsYmFjayk6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4RXZlbnRDdXN0b20uY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6dG9WOCk6CisgICAgICAgICogZG9tL0V2ZW50LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkV2ZW50Ojppc09mZmxpbmVBdWRpb0NvbXBsZXRpb25FdmVudCk6Cisg
ICAgICAgICogZG9tL0V2ZW50Lmg6CisgICAgICAgICogZG9tL0V2ZW50VGFyZ2V0LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkV2ZW50VGFyZ2V0Ojp0b0F1ZGlvQ29udGV4dCk6CisgICAgICAgICog
ZG9tL0V2ZW50VGFyZ2V0Lmg6CisgICAgICAgICogcGxhdGZvcm0vYXVkaW8vSFJURkRhdGFiYXNl
TG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhSVEZEYXRhYmFzZUxvYWRlcjo6d2FpdEZv
ckxvYWRlclRocmVhZENvbXBsZXRpb24pOgorICAgICAgICAqIHBsYXRmb3JtL2F1ZGlvL0hSVEZE
YXRhYmFzZUxvYWRlci5oOgorICAgICAgICAoV2ViQ29yZTo6SFJURkRhdGFiYXNlTG9hZGVyOjps
b2FkZXIpOgorICAgICAgICAqIHdlYmF1ZGlvL0F1ZGlvQ29udGV4dC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpBdWRpb0NvbnRleHQ6OmNyZWF0ZU9mZmxpbmVDb250ZXh0KToKKyAgICAgICAgKFdl
YkNvcmU6OkF1ZGlvQ29udGV4dDo6QXVkaW9Db250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkF1
ZGlvQ29udGV4dDo6Y29uc3RydWN0Q29tbW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvQ29u
dGV4dDo6ZG9jdW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9Db250ZXh0OjpzY3JpcHRF
eGVjdXRpb25Db250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvQ29udGV4dDo6dG9BdWRp
b0NvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9Db250ZXh0OjpzdGFydFJlbmRlcmlu
Zyk6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb0NvbnRleHQ6OmZpcmVDb21wbGV0aW9uRXZlbnQp
OgorICAgICAgICAqIHdlYmF1ZGlvL0F1ZGlvQ29udGV4dC5oOgorICAgICAgICAoV2ViQ29yZTo6
QXVkaW9Db250ZXh0Ojppc09mZmxpbmVDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlv
Q29udGV4dDo6ZXZlbnRUYXJnZXREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvQ29udGV4
dDo6ZW5zdXJlRXZlbnRUYXJnZXREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvQ29udGV4
dDo6cmVmRXZlbnRUYXJnZXQpOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9Db250ZXh0OjpkZXJl
ZkV2ZW50VGFyZ2V0KToKKyAgICAgICAgKiB3ZWJhdWRpby9BdWRpb0NvbnRleHQuaWRsOgorICAg
ICAgICAqIHdlYmF1ZGlvL0F1ZGlvRGVzdGluYXRpb25Ob2RlLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkF1ZGlvRGVzdGluYXRpb25Ob2RlOjpBdWRpb0Rlc3RpbmF0aW9uTm9kZSk6CisgICAgICAg
ICogd2ViYXVkaW8vQXVkaW9EZXN0aW5hdGlvbk5vZGUuaDoKKyAgICAgICAgKFdlYkNvcmU6OkF1
ZGlvRGVzdGluYXRpb25Ob2RlOjpyZXNldCk6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb0Rlc3Rp
bmF0aW9uTm9kZTo6bnVtYmVyT2ZDaGFubmVscyk6CisgICAgICAgICogd2ViYXVkaW8vQ29udm9s
dmVyTm9kZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb252b2x2ZXJOb2RlOjpzZXRCdWZmZXIp
OgorCiAyMDExLTA0LTAxICBKZXIgTm9ibGUgIDxqZXIubm9ibGVAYXBwbGUuY29tPgogCiAgICAg
ICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgpJbmRleDogU291cmNlL1dlYkNvcmUvRGVyaXZl
ZFNvdXJjZXMubWFrZQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9EZXJpdmVkU291cmNl
cy5tYWtlCShyZXZpc2lvbiA4MjQ3NikKKysrIFNvdXJjZS9XZWJDb3JlL0Rlcml2ZWRTb3VyY2Vz
Lm1ha2UJKHdvcmtpbmcgY29weSkKQEAgLTczLDYgKzczLDcgQEAgRE9NX0NMQVNTRVMgPSBcCiAg
ICAgSGlnaFBhc3MyRmlsdGVyTm9kZSBcCiAgICAgSmF2YVNjcmlwdEF1ZGlvTm9kZSBcCiAgICAg
TG93UGFzczJGaWx0ZXJOb2RlIFwKKyAgICBPZmZsaW5lQXVkaW9Db21wbGV0aW9uRXZlbnQgXAog
ICAgIFJlYWx0aW1lQW5hbHlzZXJOb2RlIFwKICAgICBCYXJJbmZvIFwKICAgICBCZWZvcmVMb2Fk
RXZlbnQgXApJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQkocmV2aXNpb24gODI0NzYpCisrKyBTb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLmd5cGkJKHdvcmtpbmcgY29weSkKQEAgLTEzODcsNiArMTM4Nyw3IEBA
CiAgICAgICAgICAgICAnd2ViYXVkaW8vSGlnaFBhc3MyRmlsdGVyTm9kZS5pZGwnLAogICAgICAg
ICAgICAgJ3dlYmF1ZGlvL0phdmFTY3JpcHRBdWRpb05vZGUuaWRsJywKICAgICAgICAgICAgICd3
ZWJhdWRpby9Mb3dQYXNzMkZpbHRlck5vZGUuaWRsJywKKyAgICAgICAgICAgICd3ZWJhdWRpby9P
ZmZsaW5lQXVkaW9Db21wbGV0aW9uRXZlbnQuaWRsJywKICAgICAgICAgICAgICd3ZWJhdWRpby9S
ZWFsdGltZUFuYWx5c2VyTm9kZS5pZGwnLAogICAgICAgICAgICAgJ3dlYnNvY2tldHMvV2ViU29j
a2V0LmlkbCcsCiAgICAgICAgICAgICAnd29ya2Vycy9BYnN0cmFjdFdvcmtlci5pZGwnLApAQCAt
NTg3OCw2ICs1ODc5LDggQEAKICAgICAgICAgICAgICd3ZWJhdWRpby9CaXF1YWRQcm9jZXNzb3Iu
aCcsCiAgICAgICAgICAgICAnd2ViYXVkaW8vQ29udm9sdmVyTm9kZS5jcHAnLAogICAgICAgICAg
ICAgJ3dlYmF1ZGlvL0NvbnZvbHZlck5vZGUuaCcsCisgICAgICAgICAgICAnd2ViYXVkaW8vRGVm
YXVsdEF1ZGlvRGVzdGluYXRpb25Ob2RlLmNwcCcsCisgICAgICAgICAgICAnd2ViYXVkaW8vRGVm
YXVsdEF1ZGlvRGVzdGluYXRpb25Ob2RlLmgnLAogICAgICAgICAgICAgJ3dlYmF1ZGlvL0RlbGF5
RFNQS2VybmVsLmNwcCcsCiAgICAgICAgICAgICAnd2ViYXVkaW8vRGVsYXlEU1BLZXJuZWwuaCcs
CiAgICAgICAgICAgICAnd2ViYXVkaW8vRGVsYXlOb2RlLmNwcCcsCkBAIC01ODkwLDYgKzU4OTMs
MTAgQEAKICAgICAgICAgICAgICd3ZWJhdWRpby9KYXZhU2NyaXB0QXVkaW9Ob2RlLmgnLAogICAg
ICAgICAgICAgJ3dlYmF1ZGlvL0xvd1Bhc3MyRmlsdGVyTm9kZS5jcHAnLAogICAgICAgICAgICAg
J3dlYmF1ZGlvL0xvd1Bhc3MyRmlsdGVyTm9kZS5oJywKKyAgICAgICAgICAgICd3ZWJhdWRpby9P
ZmZsaW5lQXVkaW9Db21wbGV0aW9uRXZlbnQuY3BwJywKKyAgICAgICAgICAgICd3ZWJhdWRpby9P
ZmZsaW5lQXVkaW9Db21wbGV0aW9uRXZlbnQuaCcsCisgICAgICAgICAgICAnd2ViYXVkaW8vT2Zm
bGluZUF1ZGlvRGVzdGluYXRpb25Ob2RlLmNwcCcsCisgICAgICAgICAgICAnd2ViYXVkaW8vT2Zm
bGluZUF1ZGlvRGVzdGluYXRpb25Ob2RlLmgnLAogICAgICAgICAgICAgJ3dlYmF1ZGlvL1JlYWx0
aW1lQW5hbHlzZXIuY3BwJywKICAgICAgICAgICAgICd3ZWJhdWRpby9SZWFsdGltZUFuYWx5c2Vy
LmgnLAogICAgICAgICAgICAgJ3dlYmF1ZGlvL1JlYWx0aW1lQW5hbHlzZXJOb2RlLmNwcCcsCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCShyZXZpc2lvbiA4MjQ3NikKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNTc1NSw2ICs1NzU1LDggQEAKIAkJ
RkFCRTcyRkQxMDU5QzIxMTAwRDk5OUREIC8qIE1hdGhNTEVsZW1lbnRGYWN0b3J5LmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZBQkU3MkZCMTA1OUMy
MTEwMEQ5OTlERCAvKiBNYXRoTUxFbGVtZW50RmFjdG9yeS5jcHAgKi87IH07CiAJCUZBQkU3MkZF
MTA1OUMyMTEwMEQ5OTlERCAvKiBNYXRoTUxOYW1lcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGQUJFNzJGQzEwNTlDMjExMDBEOTk5REQgLyogTWF0
aE1MTmFtZXMuY3BwICovOyB9OwogCQlGQkMyMjBERjEyMzdGQkVCMDBCQ0Y3ODggLyogR3JhcGhp
Y3NDb250ZXh0M0RPcGVuR0wuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRkJDMjIwREUxMjM3RkJFQjAwQkNGNzg4IC8qIEdyYXBoaWNzQ29udGV4dDNE
T3BlbkdMLmNwcCAqLzsgfTsKKwkJRkQwNkRGQTUxMzRBNERFRjAwNkY1RDdEIC8qIERlZmF1bHRB
dWRpb0Rlc3RpbmF0aW9uTm9kZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBGRDA2REZBMzEzNEE0REVGMDA2RjVEN0QgLyogRGVmYXVsdEF1ZGlvRGVz
dGluYXRpb25Ob2RlLmNwcCAqLzsgfTsKKwkJRkQwNkRGQTYxMzRBNERFRjAwNkY1RDdEIC8qIERl
ZmF1bHRBdWRpb0Rlc3RpbmF0aW9uTm9kZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gRkQwNkRGQTQxMzRBNERFRjAwNkY1RDdEIC8qIERlZmF1bHRBdWRp
b0Rlc3RpbmF0aW9uTm9kZS5oICovOyB9OwogCQlGRDJEQkYxMjEyQjA0OEEzMDBFRDk4QzYgLyog
QWNjZWxlcmF0ZS5mcmFtZXdvcmsgaW4gRnJhbWV3b3JrcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBGRDJEQkYwRTEyQjA0OEEzMDBFRDk4QzYgLyogQWNjZWxlcmF0ZS5mcmFt
ZXdvcmsgKi87IH07CiAJCUZEMkRCRjEzMTJCMDQ4QTMwMEVEOThDNiAvKiBBdWRpb1Rvb2xib3gu
ZnJhbWV3b3JrIGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gRkQyREJGMEYxMkIwNDhBMzAwRUQ5OEM2IC8qIEF1ZGlvVG9vbGJveC5mcmFtZXdvcmsgKi87
IH07CiAJCUZEMkRCRjE0MTJCMDQ4QTMwMEVEOThDNiAvKiBBdWRpb1VuaXQuZnJhbWV3b3JrIGlu
IEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkQyREJGMTAx
MkIwNDhBMzAwRUQ5OEM2IC8qIEF1ZGlvVW5pdC5mcmFtZXdvcmsgKi87IH07CkBAIC01OTEzLDEx
ICs1OTE1LDE3IEBACiAJCUZEQTE1RUNFMTJCMDNGNjEwMDNBNTgzQSAvKiBKU0phdmFTY3JpcHRB
dWRpb05vZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEZEQTE1RUNDMTJCMDNGNjEwMDNBNTgzQSAvKiBKU0phdmFTY3JpcHRBdWRpb05vZGUuaCAqLzsg
fTsKIAkJRkRBMTVFRDExMkIwM0Y5NDAwM0E1ODNBIC8qIEpTRGVsYXlOb2RlLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZEQTE1RUNGMTJCMDNGOTQw
MDNBNTgzQSAvKiBKU0RlbGF5Tm9kZS5jcHAgKi87IH07CiAJCUZEQTE1RUQyMTJCMDNGOTQwMDNB
NTgzQSAvKiBKU0RlbGF5Tm9kZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRkRBMTVFRDAxMkIwM0Y5NDAwM0E1ODNBIC8qIEpTRGVsYXlOb2RlLmggKi87
IH07CisJCUZEQTNFOTU5MTM0QTQ5RUYwMDhENEI1QSAvKiBPZmZsaW5lQXVkaW9Db21wbGV0aW9u
RXZlbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RkRBM0U5NTUxMzRBNDlFRjAwOEQ0QjVBIC8qIE9mZmxpbmVBdWRpb0NvbXBsZXRpb25FdmVudC5j
cHAgKi87IH07CisJCUZEQTNFOTVBMTM0QTQ5RUYwMDhENEI1QSAvKiBPZmZsaW5lQXVkaW9Db21w
bGV0aW9uRXZlbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEZEQTNFOTU2MTM0QTQ5RUYwMDhENEI1QSAvKiBPZmZsaW5lQXVkaW9Db21wbGV0aW9uRXZl
bnQuaCAqLzsgfTsKKwkJRkRBM0U5NUIxMzRBNDlFRjAwOEQ0QjVBIC8qIE9mZmxpbmVBdWRpb0Rl
c3RpbmF0aW9uTm9kZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBGREEzRTk1NzEzNEE0OUVGMDA4RDRCNUEgLyogT2ZmbGluZUF1ZGlvRGVzdGluYXRp
b25Ob2RlLmNwcCAqLzsgfTsKKwkJRkRBM0U5NUMxMzRBNDlFRjAwOEQ0QjVBIC8qIE9mZmxpbmVB
dWRpb0Rlc3RpbmF0aW9uTm9kZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRkRBM0U5NTgxMzRBNDlFRjAwOEQ0QjVBIC8qIE9mZmxpbmVBdWRpb0Rlc3Rp
bmF0aW9uTm9kZS5oICovOyB9OwogCQlGREVBQUFGMzEyQjAyRUU0MDBEQ0YzM0IgLyogSlNBdWRp
b0J1ZmZlclNvdXJjZU5vZGVDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gRkRFQUFBRUYxMkIwMkVFNDAwRENGMzNCIC8qIEpTQXVkaW9CdWZm
ZXJTb3VyY2VOb2RlQ3VzdG9tLmNwcCAqLzsgfTsKIAkJRkRFQUFBRjQxMkIwMkVFNDAwRENGMzNC
IC8qIEpTQXVkaW9Db250ZXh0Q3VzdG9tLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEZERUFBQUYwMTJCMDJFRTQwMERDRjMzQiAvKiBKU0F1ZGlvQ29u
dGV4dEN1c3RvbS5jcHAgKi87IH07CiAJCUZERUFBQUY1MTJCMDJFRTQwMERDRjMzQiAvKiBKU0F1
ZGlvTm9kZUN1c3RvbS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBGREVBQUFGMTEyQjAyRUU0MDBEQ0YzM0IgLyogSlNBdWRpb05vZGVDdXN0b20uY3Bw
ICovOyB9OwogCQlGREVBQUFGNjEyQjAyRUU0MDBEQ0YzM0IgLyogSlNDb252b2x2ZXJOb2RlQ3Vz
dG9tLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZE
RUFBQUYyMTJCMDJFRTQwMERDRjMzQiAvKiBKU0NvbnZvbHZlck5vZGVDdXN0b20uY3BwICovOyB9
OwogCQlGREVBQUFGRTEyQjAyRjQ5MDBEQ0YzM0IgLyogSlNKYXZhU2NyaXB0QXVkaW9Ob2RlQ3Vz
dG9tLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZE
RUFBQUZEMTJCMDJGNDkwMERDRjMzQiAvKiBKU0phdmFTY3JpcHRBdWRpb05vZGVDdXN0b20uY3Bw
ICovOyB9OworCQlGREY2QkFGODEzNEE0Qzk4MDA4MjI5MjAgLyogSlNPZmZsaW5lQXVkaW9Db21w
bGV0aW9uRXZlbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gRkRGNkJBRjYxMzRBNEM5ODAwODIyOTIwIC8qIEpTT2ZmbGluZUF1ZGlvQ29tcGxldGlv
bkV2ZW50LmNwcCAqLzsgfTsKKwkJRkRGNkJBRjkxMzRBNEM5ODAwODIyOTIwIC8qIEpTT2ZmbGlu
ZUF1ZGlvQ29tcGxldGlvbkV2ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBGREY2QkFGNzEzNEE0Qzk4MDA4MjI5MjAgLyogSlNPZmZsaW5lQXVkaW9D
b21wbGV0aW9uRXZlbnQuaCAqLzsgfTsKIAkJRkU2RkQ0ODgwRjY3NkU1NzAwMDkyODczIC8qIENv
b3JkaW5hdGVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBGRTZGRDQ4NTBGNjc2RTU3MDAwOTI4NzMgLyogQ29vcmRpbmF0ZXMuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlGRTZGRDQ4RDBGNjc2RTkzMDAw
OTI4NzMgLyogSlNDb29yZGluYXRlcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBGRTZGRDQ4QjBGNjc2RTkzMDAwOTI4NzMgLyogSlNDb29yZGluYXRl
cy5jcHAgKi87IH07CiAJCUZFNkZENDhFMEY2NzZFOTMwMDA5Mjg3MyAvKiBKU0Nvb3JkaW5hdGVz
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTZGRDQ4
QzBGNjc2RTkzMDAwOTI4NzMgLyogSlNDb29yZGluYXRlcy5oICovOyB9OwpAQCAtMTIyNjQsNiAr
MTIyNzIsOCBAQAogCQlGQUJFNzJGQjEwNTlDMjExMDBEOTk5REQgLyogTWF0aE1MRWxlbWVudEZh
Y3RvcnkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTWF0aE1MRWxl
bWVudEZhY3RvcnkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGQUJFNzJGQzEw
NTlDMjExMDBEOTk5REQgLyogTWF0aE1MTmFtZXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gTWF0aE1MTmFtZXMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlGQkMyMjBERTEyMzdGQkVCMDBCQ0Y3ODggLyogR3JhcGhpY3NDb250ZXh0M0RPcGVuR0wu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gR3JhcGhpY3NDb250ZXh0
M0RPcGVuR0wuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRDA2REZBMzEzNEE0
REVGMDA2RjVEN0QgLyogRGVmYXVsdEF1ZGlvRGVzdGluYXRpb25Ob2RlLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERlZmF1bHRBdWRpb0Rlc3RpbmF0aW9uTm9kZS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZEMDZERkE0MTM0QTRERUYwMDZGNUQ3
RCAvKiBEZWZhdWx0QXVkaW9EZXN0aW5hdGlvbk5vZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gRGVmYXVsdEF1ZGlvRGVzdGluYXRpb25Ob2RlLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUZEMkRCRjBFMTJCMDQ4QTMwMEVEOThDNiAvKiBBY2NlbGVyYXRlLmZy
YW1ld29yayAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHdyYXBwZXIuZnJhbWV3b3JrOyBuYW1lID0gQWNjZWxlcmF0ZS5mcmFtZXdvcms7IHBhdGggPSAv
U3lzdGVtL0xpYnJhcnkvRnJhbWV3b3Jrcy9BY2NlbGVyYXRlLmZyYW1ld29yazsgc291cmNlVHJl
ZSA9ICI8YWJzb2x1dGU+IjsgfTsKIAkJRkQyREJGMEYxMkIwNDhBMzAwRUQ5OEM2IC8qIEF1ZGlv
VG9vbGJveC5mcmFtZXdvcmsgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSB3cmFwcGVyLmZyYW1ld29yazsgbmFtZSA9IEF1ZGlvVG9vbGJveC5mcmFtZXdv
cms7IHBhdGggPSAvU3lzdGVtL0xpYnJhcnkvRnJhbWV3b3Jrcy9BdWRpb1Rvb2xib3guZnJhbWV3
b3JrOyBzb3VyY2VUcmVlID0gIjxhYnNvbHV0ZT4iOyB9OwogCQlGRDJEQkYxMDEyQjA0OEEzMDBF
RDk4QzYgLyogQXVkaW9Vbml0LmZyYW1ld29yayAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHdyYXBwZXIuZnJhbWV3b3JrOyBuYW1lID0gQXVkaW9Vbml0
LmZyYW1ld29yazsgcGF0aCA9IC9TeXN0ZW0vTGlicmFyeS9GcmFtZXdvcmtzL0F1ZGlvVW5pdC5m
cmFtZXdvcms7IHNvdXJjZVRyZWUgPSAiPGFic29sdXRlPiI7IH07CkBAIC0xMjQ0MiwxMSArMTI0
NTIsMTggQEAKIAkJRkRBMTVFQ0MxMkIwM0Y2MTAwM0E1ODNBIC8qIEpTSmF2YVNjcmlwdEF1ZGlv
Tm9kZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0phdmFTY3JpcHRBdWRp
b05vZGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkRBMTVFQ0YxMkIwM0Y5NDAw
M0E1ODNBIC8qIEpTRGVsYXlOb2RlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IEpTRGVsYXlOb2RlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkRB
MTVFRDAxMkIwM0Y5NDAwM0E1ODNBIC8qIEpTRGVsYXlOb2RlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEpTRGVsYXlOb2RlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCUZEQTNFOTU1MTM0QTQ5RUYwMDhENEI1QSAvKiBPZmZsaW5lQXVkaW9Db21wbGV0aW9uRXZl
bnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gT2ZmbGluZUF1ZGlv
Q29tcGxldGlvbkV2ZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkRBM0U5
NTYxMzRBNDlFRjAwOEQ0QjVBIC8qIE9mZmxpbmVBdWRpb0NvbXBsZXRpb25FdmVudC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBPZmZsaW5lQXVkaW9Db21wbGV0aW9uRXZlbnQu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkRBM0U5NTcxMzRBNDlFRjAwOEQ0QjVB
IC8qIE9mZmxpbmVBdWRpb0Rlc3RpbmF0aW9uTm9kZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBPZmZsaW5lQXVkaW9EZXN0aW5hdGlvbk5vZGUuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQlGREEzRTk1ODEzNEE0OUVGMDA4RDRCNUEgLyogT2ZmbGlu
ZUF1ZGlvRGVzdGluYXRpb25Ob2RlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IE9mZmxpbmVBdWRpb0Rlc3RpbmF0aW9uTm9kZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQlGREEzRTk1RDEzNEE0OUZGMDA4RDRCNUEgLyogT2ZmbGluZUF1ZGlvQ29tcGxldGlvbkV2
ZW50LmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBPZmZsaW5lQXVkaW9Db21wbGV0aW9uRXZl
bnQuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGREVBQUFFRjEyQjAyRUU0MDBE
Q0YzM0IgLyogSlNBdWRpb0J1ZmZlclNvdXJjZU5vZGVDdXN0b20uY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNBdWRpb0J1ZmZlclNvdXJjZU5vZGVDdXN0b20uY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGREVBQUFGMDEyQjAyRUU0MDBEQ0YzM0Ig
LyogSlNBdWRpb0NvbnRleHRDdXN0b20uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gSlNBdWRpb0NvbnRleHRDdXN0b20uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlGREVBQUFGMTEyQjAyRUU0MDBEQ0YzM0IgLyogSlNBdWRpb05vZGVDdXN0b20uY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNBdWRpb05vZGVDdXN0b20u
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGREVBQUFGMjEyQjAyRUU0MDBEQ0Yz
M0IgLyogSlNDb252b2x2ZXJOb2RlQ3VzdG9tLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IEpTQ29udm9sdmVyTm9kZUN1c3RvbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUZERUFBQUZEMTJCMDJGNDkwMERDRjMzQiAvKiBKU0phdmFTY3JpcHRBdWRp
b05vZGVDdXN0b20uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNK
YXZhU2NyaXB0QXVkaW9Ob2RlQ3VzdG9tLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJRkRGNkJBRjYxMzRBNEM5ODAwODIyOTIwIC8qIEpTT2ZmbGluZUF1ZGlvQ29tcGxldGlvbkV2
ZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTT2ZmbGluZUF1
ZGlvQ29tcGxldGlvbkV2ZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkRG
NkJBRjcxMzRBNEM5ODAwODIyOTIwIC8qIEpTT2ZmbGluZUF1ZGlvQ29tcGxldGlvbkV2ZW50Lmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTT2ZmbGluZUF1ZGlvQ29tcGxldGlv
bkV2ZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFNDlFRjk3MERDNTE0NjIw
MDQyNjZFMSAvKiBEYXNoYm9hcmRTdXBwb3J0Q1NTUHJvcGVydHlOYW1lcy5pbiAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHRleHQ7IHBhdGggPSBEYXNoYm9hcmRTdXBwb3J0Q1NTUHJvcGVydHlOYW1lcy5pbjsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkU2RkQ0ODUwRjY3NkU1NzAwMDkyODczIC8qIENvb3Jk
aW5hdGVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvb3JkaW5hdGVzLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFNkZENDg2MEY2NzZFNTcwMDA5Mjg3MyAv
KiBDb29yZGluYXRlcy5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gQ29vcmRpbmF0ZXMuaWRs
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTk1MzksNiArMTk1NTYsOCBAQAogCQkJ
CUZEMzE1RkRFMTJCMDI2NzYwMEMxQTM1OSAvKiBDb252b2x2ZXJOb2RlLmNwcCAqLywKIAkJCQlG
RDMxNUZERjEyQjAyNjc2MDBDMUEzNTkgLyogQ29udm9sdmVyTm9kZS5oICovLAogCQkJCUZEMzE1
RkUwMTJCMDI2NzYwMEMxQTM1OSAvKiBDb252b2x2ZXJOb2RlLmlkbCAqLywKKwkJCQlGRDA2REZB
MzEzNEE0REVGMDA2RjVEN0QgLyogRGVmYXVsdEF1ZGlvRGVzdGluYXRpb25Ob2RlLmNwcCAqLywK
KwkJCQlGRDA2REZBNDEzNEE0REVGMDA2RjVEN0QgLyogRGVmYXVsdEF1ZGlvRGVzdGluYXRpb25O
b2RlLmggKi8sCiAJCQkJRkQzMTVGRTExMkIwMjY3NjAwQzFBMzU5IC8qIERlbGF5RFNQS2VybmVs
LmNwcCAqLywKIAkJCQlGRDMxNUZFMjEyQjAyNjc2MDBDMUEzNTkgLyogRGVsYXlEU1BLZXJuZWwu
aCAqLywKIAkJCQlGRDMxNUZFMzEyQjAyNjc2MDBDMUEzNTkgLyogRGVsYXlOb2RlLmNwcCAqLywK
QEAgLTE5NTU1LDYgKzE5NTc0LDExIEBACiAJCQkJRkQzMTVGRUUxMkIwMjY3NjAwQzFBMzU5IC8q
IExvd1Bhc3MyRmlsdGVyTm9kZS5jcHAgKi8sCiAJCQkJRkQzMTVGRUYxMkIwMjY3NjAwQzFBMzU5
IC8qIExvd1Bhc3MyRmlsdGVyTm9kZS5oICovLAogCQkJCUZEMzE1RkYwMTJCMDI2NzYwMEMxQTM1
OSAvKiBMb3dQYXNzMkZpbHRlck5vZGUuaWRsICovLAorCQkJCUZEQTNFOTU1MTM0QTQ5RUYwMDhE
NEI1QSAvKiBPZmZsaW5lQXVkaW9Db21wbGV0aW9uRXZlbnQuY3BwICovLAorCQkJCUZEQTNFOTU2
MTM0QTQ5RUYwMDhENEI1QSAvKiBPZmZsaW5lQXVkaW9Db21wbGV0aW9uRXZlbnQuaCAqLywKKwkJ
CQlGREEzRTk1RDEzNEE0OUZGMDA4RDRCNUEgLyogT2ZmbGluZUF1ZGlvQ29tcGxldGlvbkV2ZW50
LmlkbCAqLywKKwkJCQlGREEzRTk1NzEzNEE0OUVGMDA4RDRCNUEgLyogT2ZmbGluZUF1ZGlvRGVz
dGluYXRpb25Ob2RlLmNwcCAqLywKKwkJCQlGREEzRTk1ODEzNEE0OUVGMDA4RDRCNUEgLyogT2Zm
bGluZUF1ZGlvRGVzdGluYXRpb25Ob2RlLmggKi8sCiAJCQkJRkQzMTVGRjExMkIwMjY3NjAwQzFB
MzU5IC8qIFJlYWx0aW1lQW5hbHlzZXIuY3BwICovLAogCQkJCUZEMzE1RkYyMTJCMDI2NzYwMEMx
QTM1OSAvKiBSZWFsdGltZUFuYWx5c2VyLmggKi8sCiAJCQkJRkQzMTVGRjMxMkIwMjY3NjAwQzFB
MzU5IC8qIFJlYWx0aW1lQW5hbHlzZXJOb2RlLmNwcCAqLywKQEAgLTE5NjgwLDYgKzE5NzA0LDgg
QEAKIAkJCQlGREExNUVDQzEyQjAzRjYxMDAzQTU4M0EgLyogSlNKYXZhU2NyaXB0QXVkaW9Ob2Rl
LmggKi8sCiAJCQkJRkRBMTVFQzMxMkIwM0YzQjAwM0E1ODNBIC8qIEpTTG93UGFzczJGaWx0ZXJO
b2RlLmNwcCAqLywKIAkJCQlGREExNUVDNDEyQjAzRjNCMDAzQTU4M0EgLyogSlNMb3dQYXNzMkZp
bHRlck5vZGUuaCAqLywKKwkJCQlGREY2QkFGNjEzNEE0Qzk4MDA4MjI5MjAgLyogSlNPZmZsaW5l
QXVkaW9Db21wbGV0aW9uRXZlbnQuY3BwICovLAorCQkJCUZERjZCQUY3MTM0QTRDOTgwMDgyMjky
MCAvKiBKU09mZmxpbmVBdWRpb0NvbXBsZXRpb25FdmVudC5oICovLAogCQkJCUZEQTE1RUM3MTJC
MDNGNTAwMDNBNTgzQSAvKiBKU1JlYWx0aW1lQW5hbHlzZXJOb2RlLmNwcCAqLywKIAkJCQlGREEx
NUVDODEyQjAzRjUwMDAzQTU4M0EgLyogSlNSZWFsdGltZUFuYWx5c2VyTm9kZS5oICovLAogCQkJ
KTsKQEAgLTIyNzYwLDYgKzIyNzg2LDEwIEBACiAJCQkJRjM0NzQyRTExMzQzNjMxRjAwNTMxQkMy
IC8qIFdvcmtlckRlYnVnZ2VyQWdlbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUYzNDc0MkU1MTM0
MzYzM0MwMDUzMUJDMiAvKiBQYWdlU2NyaXB0RGVidWdTZXJ2ZXIuaCBpbiBIZWFkZXJzICovLAog
CQkJCUYzNDc0MkU5MTM0MzYzNTAwMDUzMUJDMiAvKiBXb3JrZXJTY3JpcHREZWJ1Z1NlcnZlci5o
IGluIEhlYWRlcnMgKi8sCisJCQkJRkRBM0U5NUExMzRBNDlFRjAwOEQ0QjVBIC8qIE9mZmxpbmVB
dWRpb0NvbXBsZXRpb25FdmVudC5oIGluIEhlYWRlcnMgKi8sCisJCQkJRkRBM0U5NUMxMzRBNDlF
RjAwOEQ0QjVBIC8qIE9mZmxpbmVBdWRpb0Rlc3RpbmF0aW9uTm9kZS5oIGluIEhlYWRlcnMgKi8s
CisJCQkJRkRGNkJBRjkxMzRBNEM5ODAwODIyOTIwIC8qIEpTT2ZmbGluZUF1ZGlvQ29tcGxldGlv
bkV2ZW50LmggaW4gSGVhZGVycyAqLywKKwkJCQlGRDA2REZBNjEzNEE0REVGMDA2RjVEN0QgLyog
RGVmYXVsdEF1ZGlvRGVzdGluYXRpb25Ob2RlLmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQly
dW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKQEAgLTI1NDM4LDYg
KzI1NDY4LDEwIEBACiAJCQkJRjM0NzQyRTAxMzQzNjMxRjAwNTMxQkMyIC8qIFdvcmtlckRlYnVn
Z2VyQWdlbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRjM0NzQyRTQxMzQzNjMzQzAwNTMxQkMy
IC8qIFBhZ2VTY3JpcHREZWJ1Z1NlcnZlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlGMzQ3NDJF
ODEzNDM2MzUwMDA1MzFCQzIgLyogV29ya2VyU2NyaXB0RGVidWdTZXJ2ZXIuY3BwIGluIFNvdXJj
ZXMgKi8sCisJCQkJRkRBM0U5NTkxMzRBNDlFRjAwOEQ0QjVBIC8qIE9mZmxpbmVBdWRpb0NvbXBs
ZXRpb25FdmVudC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlGREEzRTk1QjEzNEE0OUVGMDA4RDRC
NUEgLyogT2ZmbGluZUF1ZGlvRGVzdGluYXRpb25Ob2RlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJ
CUZERjZCQUY4MTM0QTRDOTgwMDgyMjkyMCAvKiBKU09mZmxpbmVBdWRpb0NvbXBsZXRpb25FdmVu
dC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlGRDA2REZBNTEzNEE0REVGMDA2RjVEN0QgLyogRGVm
YXVsdEF1ZGlvRGVzdGluYXRpb25Ob2RlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1
bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpJbmRleDogU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNBdWRpb0NvbnRleHRDdXN0b20uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQXVkaW9Db250ZXh0Q3VzdG9tLmNwcAko
cmV2aXNpb24gODI0NzYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0F1ZGlvQ29u
dGV4dEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU0LDggKzU0LDI4IEBAIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgSlNBdWRpb0NvbnQKIAogICAgIERvY3VtZW50KiBkb2N1bWVu
dCA9IHN0YXRpY19jYXN0PERvY3VtZW50Kj4oc2NyaXB0RXhlY3V0aW9uQ29udGV4dCk7CiAKLSAg
ICBSZWZQdHI8QXVkaW9Db250ZXh0PiBjb250ZXh0ID0gQXVkaW9Db250ZXh0OjpjcmVhdGUoZG9j
dW1lbnQpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoYXNPYmplY3QodG9KUyhleGVjLCBq
c0NvbnN0cnVjdG9yLT5nbG9iYWxPYmplY3QoKSwgY29udGV4dC5nZXQoKSkpKTsKKyAgICBSZWZQ
dHI8QXVkaW9Db250ZXh0PiBhdWRpb0NvbnRleHQ7CisgICAgCisgICAgaWYgKCFleGVjLT5hcmd1
bWVudENvdW50KCkpIHsKKyAgICAgICAgLy8gQ29uc3RydWN0b3IgZm9yIGRlZmF1bHQgQXVkaW9D
b250ZXh0IHdoaWNoIHRhbGtzIHRvIGF1ZGlvIGhhcmR3YXJlLgorICAgICAgICBhdWRpb0NvbnRl
eHQgPSBBdWRpb0NvbnRleHQ6OmNyZWF0ZShkb2N1bWVudCk7CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgLy8gQ29uc3RydWN0b3IgZm9yIG9mZmxpbmUgKHJlbmRlci10YXJnZXQpIEF1ZGlvQ29udGV4
dCB3aGljaCByZW5kZXJzIGludG8gYW4gQXVkaW9CdWZmZXIuCisgICAgICAgIC8vIG5ldyBBdWRp
b0NvbnRleHQoaW4gdW5zaWduZWQgbG9uZyBudW1iZXJPZkNoYW5uZWxzLCBpbiB1bnNpZ25lZCBs
b25nIG51bWJlck9mRnJhbWVzLCBpbiBmbG9hdCBzYW1wbGVSYXRlKTsKKyAgICAgICAgaWYgKGV4
ZWMtPmFyZ3VtZW50Q291bnQoKSA8IDMpCisgICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihl
eGVjLCBjcmVhdGVTeW50YXhFcnJvcihleGVjLCAiTm90IGVub3VnaCBhcmd1bWVudHMiKSk7CisK
KyAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZDaGFubmVscyA9IGV4ZWMtPmFyZ3VtZW50KDApLnRv
SW50MzIoZXhlYyk7CisgICAgICAgIHVuc2lnbmVkIG51bWJlck9mRnJhbWVzID0gZXhlYy0+YXJn
dW1lbnQoMSkudG9JbnQzMihleGVjKTsKKyAgICAgICAgZmxvYXQgc2FtcGxlUmF0ZSA9IGV4ZWMt
PmFyZ3VtZW50KDIpLnRvRmxvYXQoZXhlYyk7CisKKyAgICAgICAgYXVkaW9Db250ZXh0ID0gQXVk
aW9Db250ZXh0OjpjcmVhdGVPZmZsaW5lQ29udGV4dChkb2N1bWVudCwgbnVtYmVyT2ZDaGFubmVs
cywgbnVtYmVyT2ZGcmFtZXMsIHNhbXBsZVJhdGUpOworICAgIH0KKworICAgIGlmICghYXVkaW9D
b250ZXh0LmdldCgpKQorICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBjcmVhdGVSZWZl
cmVuY2VFcnJvcihleGVjLCAiRXJyb3IgY3JlYXRpbmcgQXVkaW9Db250ZXh0IikpOworCisgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShhc09iamVjdCh0b0pTKGV4ZWMsIGpzQ29uc3RydWN0b3It
Pmdsb2JhbE9iamVjdCgpLCBhdWRpb0NvbnRleHQuZ2V0KCkpKSk7CiB9CiAKIEpTVmFsdWUgSlNB
dWRpb0NvbnRleHQ6OmNyZWF0ZUJ1ZmZlcihFeGVjU3RhdGUqIGV4ZWMpCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50Q3VzdG9tLmNwcAkocmV2aXNpb24gODI0NzYp
CisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50Q3VzdG9tLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTAxLDYgKzEwMSw4IEBACiAjaWYgRU5BQkxFKFdFQl9BVURJTykKICNpbmNs
dWRlICJBdWRpb1Byb2Nlc3NpbmdFdmVudC5oIgogI2luY2x1ZGUgIkpTQXVkaW9Qcm9jZXNzaW5n
RXZlbnQuaCIKKyNpbmNsdWRlICJKU09mZmxpbmVBdWRpb0NvbXBsZXRpb25FdmVudC5oIgorI2lu
Y2x1ZGUgIk9mZmxpbmVBdWRpb0NvbXBsZXRpb25FdmVudC5oIgogI2VuZGlmCiAKIHVzaW5nIG5h
bWVzcGFjZSBKU0M7CkBAIC0xOTAsNiArMTkyLDggQEAgSlNWYWx1ZSB0b0pTKEV4ZWNTdGF0ZSog
ZXhlYywgSlNET01HbG9iYQogI2lmIEVOQUJMRShXRUJfQVVESU8pCiAgICAgZWxzZSBpZiAoZXZl
bnQtPmlzQXVkaW9Qcm9jZXNzaW5nRXZlbnQoKSkKICAgICAgICAgd3JhcHBlciA9IENSRUFURV9E
T01fT0JKRUNUX1dSQVBQRVIoZXhlYywgZ2xvYmFsT2JqZWN0LCBBdWRpb1Byb2Nlc3NpbmdFdmVu
dCwgZXZlbnQpOworICAgIGVsc2UgaWYgKGV2ZW50LT5pc09mZmxpbmVBdWRpb0NvbXBsZXRpb25F
dmVudCgpKQorICAgICAgICB3cmFwcGVyID0gQ1JFQVRFX0RPTV9PQkpFQ1RfV1JBUFBFUihleGVj
LCBnbG9iYWxPYmplY3QsIE9mZmxpbmVBdWRpb0NvbXBsZXRpb25FdmVudCwgZXZlbnQpOwogI2Vu
ZGlmCiAjaWYgRU5BQkxFKElOUFVUX1NQRUVDSCkKICAgICBlbHNlIGlmIChldmVudC0+aXNTcGVl
Y2hJbnB1dEV2ZW50KCkpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50
VGFyZ2V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2
ZW50VGFyZ2V0LmNwcAkocmV2aXNpb24gODI0NzYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0V2ZW50VGFyZ2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODQsNiArODQsOCBAQAog
I2VuZGlmCiAKICNpZiBFTkFCTEUoV0VCX0FVRElPKQorI2luY2x1ZGUgIkF1ZGlvQ29udGV4dC5o
IgorI2luY2x1ZGUgIkpTQXVkaW9Db250ZXh0LmgiCiAjaW5jbHVkZSAiSlNKYXZhU2NyaXB0QXVk
aW9Ob2RlLmgiCiAjaW5jbHVkZSAiSmF2YVNjcmlwdEF1ZGlvTm9kZS5oIgogI2VuZGlmCkBAIC0x
NzMsNiArMTc1LDggQEAgSlNWYWx1ZSB0b0pTKEV4ZWNTdGF0ZSogZXhlYywgSlNET01HbG9iYQog
I2lmIEVOQUJMRShXRUJfQVVESU8pCiAgICAgaWYgKEphdmFTY3JpcHRBdWRpb05vZGUqIGpzQXVk
aW9Ob2RlID0gdGFyZ2V0LT50b0phdmFTY3JpcHRBdWRpb05vZGUoKSkKICAgICAgICAgcmV0dXJu
IHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBqc0F1ZGlvTm9kZSk7CisgICAgaWYgKEF1ZGlvQ29u
dGV4dCogYXVkaW9Db250ZXh0ID0gdGFyZ2V0LT50b0F1ZGlvQ29udGV4dCgpKQorICAgICAgICBy
ZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIGF1ZGlvQ29udGV4dCk7CiAjZW5kaWYKIAog
I2lmIEVOQUJMRShXRUJfU09DS0VUUykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4
L1Y4RE9NV3JhcHBlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
djgvVjhET01XcmFwcGVyLmNwcAkocmV2aXNpb24gODI0NzYpCisrKyBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy92OC9WOERPTVdyYXBwZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NCw2ICs4NCw3
IEBACiAjZW5kaWYKIAogI2lmIEVOQUJMRShXRUJfQVVESU8pCisjaW5jbHVkZSAiVjhBdWRpb0Nv
bnRleHQuaCIKICNpbmNsdWRlICJWOEphdmFTY3JpcHRBdWRpb05vZGUuaCIKICNlbmRpZgogCkBA
IC00NDQsNiArNDQ1LDggQEAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4RE9NV3JhcHBlcjo6Y29u
dgogI2lmIEVOQUJMRShXRUJfQVVESU8pCiAgICAgaWYgKEphdmFTY3JpcHRBdWRpb05vZGUqIGpz
QXVkaW9Ob2RlID0gdGFyZ2V0LT50b0phdmFTY3JpcHRBdWRpb05vZGUoKSkKICAgICAgICAgcmV0
dXJuIHRvVjgoanNBdWRpb05vZGUpOworICAgIGlmIChBdWRpb0NvbnRleHQqIGF1ZGlvQ29udGV4
dCA9IHRhcmdldC0+dG9BdWRpb0NvbnRleHQoKSkKKyAgICAgICAgcmV0dXJuIHRvVjgoYXVkaW9D
b250ZXh0KTsKICNlbmRpZiAgICAKIAogICAgIEFTU0VSVCgwKTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEF1ZGlvQ29udGV4dEN1c3RvbS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4QXVkaW9Db250ZXh0Q3Vz
dG9tLmNwcAkocmV2aXNpb24gODI0NzYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9j
dXN0b20vVjhBdWRpb0NvbnRleHRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MSw3ICs1
MSwzNCBAQCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhBdWRpb0NvbnRleHQ6OmNvCiAgICAgaWYg
KCFkb2N1bWVudCkKICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoIkF1ZGlvQ29udGV4dCBjb25z
dHJ1Y3RvciBhc3NvY2lhdGVkIGRvY3VtZW50IGlzIHVuYXZhaWxhYmxlIiwgVjhQcm94eTo6UmVm
ZXJlbmNlRXJyb3IpOwogCi0gICAgUmVmUHRyPEF1ZGlvQ29udGV4dD4gYXVkaW9Db250ZXh0ID0g
QXVkaW9Db250ZXh0OjpjcmVhdGUoZG9jdW1lbnQpOworICAgIFJlZlB0cjxBdWRpb0NvbnRleHQ+
IGF1ZGlvQ29udGV4dDsKKyAgICAKKyAgICBpZiAoIWFyZ3MuTGVuZ3RoKCkpIHsKKyAgICAgICAg
Ly8gQ29uc3RydWN0b3IgZm9yIGRlZmF1bHQgQXVkaW9Db250ZXh0IHdoaWNoIHRhbGtzIHRvIGF1
ZGlvIGhhcmR3YXJlLgorICAgICAgICBhdWRpb0NvbnRleHQgPSBBdWRpb0NvbnRleHQ6OmNyZWF0
ZShkb2N1bWVudCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gQ29uc3RydWN0b3IgZm9yIG9m
ZmxpbmUgKHJlbmRlci10YXJnZXQpIEF1ZGlvQ29udGV4dCB3aGljaCByZW5kZXJzIGludG8gYW4g
QXVkaW9CdWZmZXIuCisgICAgICAgIC8vIG5ldyBBdWRpb0NvbnRleHQoaW4gdW5zaWduZWQgbG9u
ZyBudW1iZXJPZkNoYW5uZWxzLCBpbiB1bnNpZ25lZCBsb25nIG51bWJlck9mRnJhbWVzLCBpbiBm
bG9hdCBzYW1wbGVSYXRlKTsKKyAgICAgICAgaWYgKGFyZ3MuTGVuZ3RoKCkgPCAzKQorICAgICAg
ICAgICAgcmV0dXJuIHRocm93RXJyb3IoIk5vdCBlbm91Z2ggYXJndW1lbnRzIiwgVjhQcm94eTo6
U3ludGF4RXJyb3IpOworCisgICAgICAgIGJvb2wgb2sgPSBmYWxzZTsKKworICAgICAgICB1bnNp
Z25lZCBudW1iZXJPZkNoYW5uZWxzID0gdG9JbnQzMihhcmdzWzBdLCBvayk7CisgICAgICAgIGlm
ICghb2spCisgICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigiSW52YWxpZCBudW1iZXIgb2Yg
Y2hhbm5lbHMiLCBWOFByb3h5OjpTeW50YXhFcnJvcik7CisKKyAgICAgICAgdW5zaWduZWQgbnVt
YmVyT2ZGcmFtZXMgPSB0b0ludDMyKGFyZ3NbMV0sIG9rKTsKKyAgICAgICAgaWYgKCFvaykKKyAg
ICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCJJbnZhbGlkIG51bWJlciBvZiBmcmFtZXMiLCBW
OFByb3h5OjpTeW50YXhFcnJvcik7CisKKyAgICAgICAgZmxvYXQgc2FtcGxlUmF0ZSA9IHRvRmxv
YXQoYXJnc1syXSk7CisKKyAgICAgICAgYXVkaW9Db250ZXh0ID0gQXVkaW9Db250ZXh0OjpjcmVh
dGVPZmZsaW5lQ29udGV4dChkb2N1bWVudCwgbnVtYmVyT2ZDaGFubmVscywgbnVtYmVyT2ZGcmFt
ZXMsIHNhbXBsZVJhdGUpOworICAgIH0KKworICAgIGlmICghYXVkaW9Db250ZXh0LmdldCgpKQor
ICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigiRXJyb3IgY3JlYXRpbmcgQXVkaW9Db250ZXh0Iiwg
VjhQcm94eTo6U3ludGF4RXJyb3IpOwogICAgIAogICAgIC8vIFRyYW5zZm9ybSB0aGUgaG9sZGVy
IGludG8gYSB3cmFwcGVyIG9iamVjdCBmb3IgdGhlIGF1ZGlvIGNvbnRleHQuCiAgICAgVjhET01X
cmFwcGVyOjpzZXRET01XcmFwcGVyKGFyZ3MuSG9sZGVyKCksICZpbmZvLCBhdWRpb0NvbnRleHQu
Z2V0KCkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4RXZlbnRD
dXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3Rv
bS9WOEV2ZW50Q3VzdG9tLmNwcAkocmV2aXNpb24gODI0NzYpCisrKyBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy92OC9jdXN0b20vVjhFdmVudEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcw
LDYgKzcwLDcgQEAKIAogI2lmIEVOQUJMRShXRUJfQVVESU8pCiAjaW5jbHVkZSAiVjhBdWRpb1By
b2Nlc3NpbmdFdmVudC5oIgorI2luY2x1ZGUgIlY4T2ZmbGluZUF1ZGlvQ29tcGxldGlvbkV2ZW50
LmgiCiAjZW5kaWYKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMTY5LDYgKzE3MCw4IEBAIHY4
OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4KEV2ZW50KiBpbXBsKQogI2lmIEVOQUJMRShXRUJfQVVE
SU8pCiAgICAgaWYgKGltcGwtPmlzQXVkaW9Qcm9jZXNzaW5nRXZlbnQoKSkKICAgICAgICAgcmV0
dXJuIHRvVjgoc3RhdGljX2Nhc3Q8QXVkaW9Qcm9jZXNzaW5nRXZlbnQqPihpbXBsKSk7CisgICAg
aWYgKGltcGwtPmlzT2ZmbGluZUF1ZGlvQ29tcGxldGlvbkV2ZW50KCkpCisgICAgICAgIHJldHVy
biB0b1Y4KHN0YXRpY19jYXN0PE9mZmxpbmVBdWRpb0NvbXBsZXRpb25FdmVudCo+KGltcGwpKTsK
ICNlbmRpZgogI2lmIEVOQUJMRShJTlBVVF9TUEVFQ0gpCiAgICAgaWYgKGltcGwtPmlzU3BlZWNo
SW5wdXRFdmVudCgpKQpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRXZlbnQuY3BwCShyZXZpc2lvbiA4MjQ3NikKKysr
IFNvdXJjZS9XZWJDb3JlL2RvbS9FdmVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyOSw2ICsy
MjksMTEgQEAgYm9vbCBFdmVudDo6aXNBdWRpb1Byb2Nlc3NpbmdFdmVudCgpIGNvbgogewogICAg
IHJldHVybiBmYWxzZTsKIH0KKworYm9vbCBFdmVudDo6aXNPZmZsaW5lQXVkaW9Db21wbGV0aW9u
RXZlbnQoKSBjb25zdAoreworICAgIHJldHVybiBmYWxzZTsKK30KICNlbmRpZgogCiAjaWYgRU5B
QkxFKElOUFVUX1NQRUVDSCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9FdmVudC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9FdmVudC5oCShyZXZpc2lvbiA4MjQ3NikKKysr
IFNvdXJjZS9XZWJDb3JlL2RvbS9FdmVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzEsNiArMTMx
LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogI2VuZGlmCiAjaWYgRU5BQkxFKFdFQl9BVURJTykK
ICAgICAgICAgdmlydHVhbCBib29sIGlzQXVkaW9Qcm9jZXNzaW5nRXZlbnQoKSBjb25zdDsKKyAg
ICAgICAgdmlydHVhbCBib29sIGlzT2ZmbGluZUF1ZGlvQ29tcGxldGlvbkV2ZW50KCkgY29uc3Q7
CiAjZW5kaWYKICAgICAgICAgdmlydHVhbCBib29sIGlzRXJyb3JFdmVudCgpIGNvbnN0OwogI2lm
IEVOQUJMRShUT1VDSF9FVkVOVFMpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRUYXJn
ZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9FdmVudFRhcmdldC5jcHAJ
KHJldmlzaW9uIDgyNDc2KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50VGFyZ2V0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTE5LDYgKzExOSwxMSBAQCBTVkdFbGVtZW50SW5zdGFuY2UqIEV2
ZW50VGFyZ2V0Ojp0b1NWR0VsCiAjZW5kaWYKIAogI2lmIEVOQUJMRShXRUJfQVVESU8pCitBdWRp
b0NvbnRleHQqIEV2ZW50VGFyZ2V0Ojp0b0F1ZGlvQ29udGV4dCgpCit7CisgICAgcmV0dXJuIDA7
Cit9CisKIEphdmFTY3JpcHRBdWRpb05vZGUqIEV2ZW50VGFyZ2V0Ojp0b0phdmFTY3JpcHRBdWRp
b05vZGUoKQogewogICAgIHJldHVybiAwOwpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50
VGFyZ2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50VGFyZ2V0LmgJ
KHJldmlzaW9uIDgyNDc2KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50VGFyZ2V0LmgJKHdv
cmtpbmcgY29weSkKQEAgLTQwLDYgKzQwLDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCisg
ICAgY2xhc3MgQXVkaW9Db250ZXh0OwogICAgIGNsYXNzIEFic3RyYWN0V29ya2VyOwogICAgIGNs
YXNzIERlZGljYXRlZFdvcmtlckNvbnRleHQ7CiAgICAgY2xhc3MgRE9NQXBwbGljYXRpb25DYWNo
ZTsKQEAgLTEyMiw2ICsxMjMsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAjZW5kaWYKIAogI2lm
IEVOQUJMRShXRUJfQVVESU8pCisgICAgICAgIHZpcnR1YWwgQXVkaW9Db250ZXh0KiB0b0F1ZGlv
Q29udGV4dCgpOwogICAgICAgICB2aXJ0dWFsIEphdmFTY3JpcHRBdWRpb05vZGUqIHRvSmF2YVNj
cmlwdEF1ZGlvTm9kZSgpOwogI2VuZGlmCiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2F1ZGlvL0hSVEZEYXRhYmFzZUxvYWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vYXVkaW8vSFJURkRhdGFiYXNlTG9hZGVyLmNwcAkocmV2aXNpb24gODI0NzYp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9IUlRGRGF0YWJhc2VMb2FkZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xMjAsNiArMTIwLDE0IEBAIGJvb2wgSFJURkRhdGFiYXNlTG9h
ZGVyOjppc0xvYWRlZCgpIGNvbnMKICAgICByZXR1cm4gbV9ocnRmRGF0YWJhc2UuZ2V0KCk7CiB9
CiAKKwordm9pZCBIUlRGRGF0YWJhc2VMb2FkZXI6OndhaXRGb3JMb2FkZXJUaHJlYWRDb21wbGV0
aW9uKCkKK3sKKyAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKKyAgICBBU1NFUlQobV9kYXRh
YmFzZUxvYWRlclRocmVhZCk7CisgICAgd2FpdEZvclRocmVhZENvbXBsZXRpb24obV9kYXRhYmFz
ZUxvYWRlclRocmVhZCwgMCk7ICAgIAorfQorCiBIUlRGRGF0YWJhc2UqIEhSVEZEYXRhYmFzZUxv
YWRlcjo6ZGVmYXVsdEhSVEZEYXRhYmFzZSgpCiB7CiAgICAgaWYgKCFzX2xvYWRlcikKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0hSVEZEYXRhYmFzZUxvYWRlci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0hSVEZEYXRhYmFzZUxvYWRl
ci5oCShyZXZpc2lvbiA4MjQ3NikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0hS
VEZEYXRhYmFzZUxvYWRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC00NiwxMSArNDYsMTggQEAgcHVi
bGljOgogICAgIC8vIE11c3QgYmUgY2FsbGVkIGZyb20gdGhlIG1haW4gdGhyZWFkLgogICAgIHN0
YXRpYyBQYXNzUmVmUHRyPEhSVEZEYXRhYmFzZUxvYWRlcj4gY3JlYXRlQW5kTG9hZEFzeW5jaHJv
bm91c2x5SWZOZWNlc3NhcnkoZG91YmxlIHNhbXBsZVJhdGUpOwogCisgICAgLy8gUmV0dXJucyB0
aGUgc2luZ2xldG9uIEhSVEZEYXRhYmFzZUxvYWRlci4KKyAgICBzdGF0aWMgSFJURkRhdGFiYXNl
TG9hZGVyKiBsb2FkZXIoKSB7IHJldHVybiBzX2xvYWRlcjsgfQorICAgIAogICAgIC8vIEJvdGgg
Y29uc3RydWN0b3IgYW5kIGRlc3RydWN0b3IgbXVzdCBiZSBjYWxsZWQgZnJvbSB0aGUgbWFpbiB0
aHJlYWQuCiAgICAgfkhSVEZEYXRhYmFzZUxvYWRlcigpOwogICAgIAogICAgIC8vIFJldHVybnMg
dHJ1ZSBvbmNlIHRoZSBkZWZhdWx0IGRhdGFiYXNlIGhhcyBiZWVuIGNvbXBsZXRlbHkgbG9hZGVk
LgogICAgIGJvb2wgaXNMb2FkZWQoKSBjb25zdDsKKworICAgIC8vIE1heSBub3QgYmUgY2FsbGVk
IG9uIHRoZSBtYWluIHRocmVhZC4KKyAgICAvLyBUaGlzIGlzIHNvIGEgZGlmZmVyZW50IGJhY2tn
cm91bmQgdGhyZWFkIG1heSBzeW5jaHJvbml6ZSB3aXRoIHRoZSBsb2FkZXIgdGhyZWFkLgorICAg
IHZvaWQgd2FpdEZvckxvYWRlclRocmVhZENvbXBsZXRpb24oKTsKICAgICAKICAgICBIUlRGRGF0
YWJhc2UqIGRhdGFiYXNlKCkgeyByZXR1cm4gbV9ocnRmRGF0YWJhc2UuZ2V0KCk7IH0KICAgICAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvQ29udGV4dC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9Db250ZXh0LmNwcAkocmV2aXNpb24g
ODI0NzYpCisrKyBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb0NvbnRleHQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zOSw2ICszOSw3IEBACiAjaW5jbHVkZSAiQXVkaW9Ob2RlT3V0cHV0Lmgi
CiAjaW5jbHVkZSAiQXVkaW9QYW5uZXJOb2RlLmgiCiAjaW5jbHVkZSAiQ29udm9sdmVyTm9kZS5o
IgorI2luY2x1ZGUgIkRlZmF1bHRBdWRpb0Rlc3RpbmF0aW9uTm9kZS5oIgogI2luY2x1ZGUgIkRl
bGF5Tm9kZS5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiRkZURnJhbWUuaCIK
QEAgLTQ3LDYgKzQ4LDggQEAKICNpbmNsdWRlICJIaWdoUGFzczJGaWx0ZXJOb2RlLmgiCiAjaW5j
bHVkZSAiSmF2YVNjcmlwdEF1ZGlvTm9kZS5oIgogI2luY2x1ZGUgIkxvd1Bhc3MyRmlsdGVyTm9k
ZS5oIgorI2luY2x1ZGUgIk9mZmxpbmVBdWRpb0NvbXBsZXRpb25FdmVudC5oIgorI2luY2x1ZGUg
Ik9mZmxpbmVBdWRpb0Rlc3RpbmF0aW9uTm9kZS5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5n
LmgiCiAjaW5jbHVkZSAiUmVhbHRpbWVBbmFseXNlck5vZGUuaCIKIApAQCAtNjYsNiArNjksMTIg
QEAgUGFzc1JlZlB0cjxBdWRpb0NvbnRleHQ+IEF1ZGlvQ29udGV4dDo6YwogICAgIHJldHVybiBh
ZG9wdFJlZihuZXcgQXVkaW9Db250ZXh0KGRvY3VtZW50KSk7CiB9CiAKK1Bhc3NSZWZQdHI8QXVk
aW9Db250ZXh0PiBBdWRpb0NvbnRleHQ6OmNyZWF0ZU9mZmxpbmVDb250ZXh0KERvY3VtZW50KiBk
b2N1bWVudCwgdW5zaWduZWQgbnVtYmVyT2ZDaGFubmVscywgc2l6ZV90IG51bWJlck9mRnJhbWVz
LCBkb3VibGUgc2FtcGxlUmF0ZSkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IEF1ZGlvQ29u
dGV4dChkb2N1bWVudCwgbnVtYmVyT2ZDaGFubmVscywgbnVtYmVyT2ZGcmFtZXMsIHNhbXBsZVJh
dGUpKTsKK30KKworLy8gQ29uc3RydWN0b3IgZm9yIHJlbmRlcmluZyB0byB0aGUgYXVkaW8gaGFy
ZHdhcmUuCiBBdWRpb0NvbnRleHQ6OkF1ZGlvQ29udGV4dChEb2N1bWVudCogZG9jdW1lbnQpCiAg
ICAgOiBBY3RpdmVET01PYmplY3QoZG9jdW1lbnQsIHRoaXMpCiAgICAgLCBtX2lzSW5pdGlhbGl6
ZWQoZmFsc2UpCkBAIC03NSw2ICs4NCw0NiBAQCBBdWRpb0NvbnRleHQ6OkF1ZGlvQ29udGV4dChE
b2N1bWVudCogZG9jCiAgICAgLCBtX2Nvbm5lY3Rpb25Db3VudCgwKQogICAgICwgbV9hdWRpb1Ro
cmVhZCgwKQogICAgICwgbV9ncmFwaE93bmVyVGhyZWFkKFVuZGVmaW5lZFRocmVhZElkZW50aWZp
ZXIpCisgICAgLCBtX2lzT2ZmbGluZUNvbnRleHQoZmFsc2UpCit7CisgICAgY29uc3RydWN0Q29t
bW9uKCk7CisKKyAgICBtX2Rlc3RpbmF0aW9uTm9kZSA9IERlZmF1bHRBdWRpb0Rlc3RpbmF0aW9u
Tm9kZTo6Y3JlYXRlKHRoaXMpOworCisgICAgLy8gVGhpcyBzZXRzIGluIG1vdGlvbiBhbiBhc3lu
Y2hyb25vdXMgbG9hZGluZyBtZWNoYW5pc20gb24gYW5vdGhlciB0aHJlYWQuCisgICAgLy8gV2Ug
Y2FuIGNoZWNrIG1faHJ0ZkRhdGFiYXNlTG9hZGVyLT5pc0xvYWRlZCgpIHRvIGZpbmQgb3V0IHdo
ZXRoZXIgb3Igbm90IGl0IGhhcyBiZWVuIGZ1bGx5IGxvYWRlZC4KKyAgICAvLyBJdCdzIG5vdCB0
aGF0IHVzZWZ1bCB0byBoYXZlIGEgY2FsbGJhY2sgZnVuY3Rpb24gZm9yIHRoaXMgc2luY2UgdGhl
IGF1ZGlvIHRocmVhZCBhdXRvbWF0aWNhbGx5IHN0YXJ0cyByZW5kZXJpbmcgb24gdGhlIGdyYXBo
CisgICAgLy8gd2hlbiB0aGlzIGhhcyBmaW5pc2hlZCAoc2VlIEF1ZGlvRGVzdGluYXRpb25Ob2Rl
KS4KKyAgICBtX2hydGZEYXRhYmFzZUxvYWRlciA9IEhSVEZEYXRhYmFzZUxvYWRlcjo6Y3JlYXRl
QW5kTG9hZEFzeW5jaHJvbm91c2x5SWZOZWNlc3Nhcnkoc2FtcGxlUmF0ZSgpKTsKKworICAgIC8v
IEZJWE1FOiBmb3Igbm93IGRlZmF1bHQgQXVkaW9Db250ZXh0IGRvZXMgbm90IG5lZWQgYW4gZXhw
bGljaXQgc3RhcnRSZW5kZXJpbmcoKSBjYWxsLgorICAgIC8vIFdlIG1heSB3YW50IHRvIGNvbnNp
ZGVyIHJlcXVpcmluZyBpdCBmb3Igc3ltbWV0cnkgd2l0aCBPZmZsaW5lQXVkaW9Db250ZXh0Cisg
ICAgbV9kZXN0aW5hdGlvbk5vZGUtPnN0YXJ0UmVuZGVyaW5nKCk7Cit9CisKKy8vIENvbnN0cnVj
dG9yIGZvciBvZmZsaW5lIChub24tcmVhbHRpbWUpIHJlbmRlcmluZy4KK0F1ZGlvQ29udGV4dDo6
QXVkaW9Db250ZXh0KERvY3VtZW50KiBkb2N1bWVudCwgdW5zaWduZWQgbnVtYmVyT2ZDaGFubmVs
cywgc2l6ZV90IG51bWJlck9mRnJhbWVzLCBkb3VibGUgc2FtcGxlUmF0ZSkKKyAgICA6IEFjdGl2
ZURPTU9iamVjdChkb2N1bWVudCwgdGhpcykKKyAgICAsIG1faXNJbml0aWFsaXplZChmYWxzZSkK
KyAgICAsIG1faXNBdWRpb1RocmVhZEZpbmlzaGVkKGZhbHNlKQorICAgICwgbV9kb2N1bWVudChk
b2N1bWVudCkKKyAgICAsIG1fZGVzdGluYXRpb25Ob2RlKDApCisgICAgLCBtX2Nvbm5lY3Rpb25D
b3VudCgwKQorICAgICwgbV9hdWRpb1RocmVhZCgwKQorICAgICwgbV9ncmFwaE93bmVyVGhyZWFk
KFVuZGVmaW5lZFRocmVhZElkZW50aWZpZXIpCisgICAgLCBtX2lzT2ZmbGluZUNvbnRleHQodHJ1
ZSkKK3sKKyAgICBjb25zdHJ1Y3RDb21tb24oKTsKKworICAgIC8vIEZJWE1FOiB0aGUgcGFzc2Vk
IGluIHNhbXBsZVJhdGUgTVVTVCBtYXRjaCB0aGUgaGFyZHdhcmUgc2FtcGxlLXJhdGUgc2luY2Ug
SFJURkRhdGFiYXNlTG9hZGVyIGlzIGEgc2luZ2xldG9uLgorICAgIG1faHJ0ZkRhdGFiYXNlTG9h
ZGVyID0gSFJURkRhdGFiYXNlTG9hZGVyOjpjcmVhdGVBbmRMb2FkQXN5bmNocm9ub3VzbHlJZk5l
Y2Vzc2FyeShzYW1wbGVSYXRlKTsKKworICAgIC8vIENyZWF0ZSBhIG5ldyBkZXN0aW5hdGlvbiBm
b3Igb2ZmbGluZSByZW5kZXJpbmcuCisgICAgbV9yZW5kZXJUYXJnZXQgPSBBdWRpb0J1ZmZlcjo6
Y3JlYXRlKG51bWJlck9mQ2hhbm5lbHMsIG51bWJlck9mRnJhbWVzLCBzYW1wbGVSYXRlKTsKKyAg
ICBtX2Rlc3RpbmF0aW9uTm9kZSA9IE9mZmxpbmVBdWRpb0Rlc3RpbmF0aW9uTm9kZTo6Y3JlYXRl
KHRoaXMsIG1fcmVuZGVyVGFyZ2V0LmdldCgpKTsKK30KKwordm9pZCBBdWRpb0NvbnRleHQ6OmNv
bnN0cnVjdENvbW1vbigpCiB7CiAgICAgLy8gTm90ZTogYmVjYXVzZSBhZG9wdFJlZigpIHdvbid0
IGJlIGNhbGxlZCB1bnRpbCB3ZSBsZWF2ZSB0aGlzIGNvbnN0cnVjdG9yLCBidXQgY29kZSBpbiB0
aGlzIGNvbnN0cnVjdG9yIG5lZWRzIHRvIHJlZmVyZW5jZSB0aGlzIGNvbnRleHQsCiAgICAgLy8g
cmVsYXggdGhlIGNoZWNrLgpAQCAtODIsMTYgKzEzMSw5IEBAIEF1ZGlvQ29udGV4dDo6QXVkaW9D
b250ZXh0KERvY3VtZW50KiBkb2MKICAgICAKICAgICBGRlRGcmFtZTo6aW5pdGlhbGl6ZSgpOwog
ICAgIAotICAgIG1fZGVzdGluYXRpb25Ob2RlID0gQXVkaW9EZXN0aW5hdGlvbk5vZGU6OmNyZWF0
ZSh0aGlzKTsKICAgICBtX2xpc3RlbmVyID0gQXVkaW9MaXN0ZW5lcjo6Y3JlYXRlKCk7CiAgICAg
bV90ZW1wb3JhcnlNb25vQnVzID0gYWRvcHRQdHIobmV3IEF1ZGlvQnVzKDEsIEF1ZGlvTm9kZTo6
UHJvY2Vzc2luZ1NpemVJbkZyYW1lcykpOwogICAgIG1fdGVtcG9yYXJ5U3RlcmVvQnVzID0gYWRv
cHRQdHIobmV3IEF1ZGlvQnVzKDIsIEF1ZGlvTm9kZTo6UHJvY2Vzc2luZ1NpemVJbkZyYW1lcykp
OwotCi0gICAgLy8gVGhpcyBzZXRzIGluIG1vdGlvbiBhbiBhc3luY2hyb25vdXMgbG9hZGluZyBt
ZWNoYW5pc20gb24gYW5vdGhlciB0aHJlYWQuCi0gICAgLy8gV2UgY2FuIGNoZWNrIG1faHJ0ZkRh
dGFiYXNlTG9hZGVyLT5pc0xvYWRlZCgpIHRvIGZpbmQgb3V0IHdoZXRoZXIgb3Igbm90IGl0IGhh
cyBiZWVuIGZ1bGx5IGxvYWRlZC4KLSAgICAvLyBJdCdzIG5vdCB0aGF0IHVzZWZ1bCB0byBoYXZl
IGEgY2FsbGJhY2sgZnVuY3Rpb24gZm9yIHRoaXMgc2luY2UgdGhlIGF1ZGlvIHRocmVhZCBhdXRv
bWF0aWNhbGx5IHN0YXJ0cyByZW5kZXJpbmcgb24gdGhlIGdyYXBoCi0gICAgLy8gd2hlbiB0aGlz
IGhhcyBmaW5pc2hlZCAoc2VlIEF1ZGlvRGVzdGluYXRpb25Ob2RlKS4KLSAgICBtX2hydGZEYXRh
YmFzZUxvYWRlciA9IEhSVEZEYXRhYmFzZUxvYWRlcjo6Y3JlYXRlQW5kTG9hZEFzeW5jaHJvbm91
c2x5SWZOZWNlc3Nhcnkoc2FtcGxlUmF0ZSgpKTsKIH0KIAogQXVkaW9Db250ZXh0Ojp+QXVkaW9D
b250ZXh0KCkKQEAgLTE2Nyw3ICsyMDksNyBAQCB2b2lkIEF1ZGlvQ29udGV4dDo6c3RvcCgpCiAg
ICAgdW5pbml0aWFsaXplKCk7CiB9CiAKLURvY3VtZW50KiBBdWRpb0NvbnRleHQ6OmRvY3VtZW50
KCkKK0RvY3VtZW50KiBBdWRpb0NvbnRleHQ6OmRvY3VtZW50KCkgY29uc3QKIHsKICAgICBBU1NF
UlQobV9kb2N1bWVudCk7CiAgICAgcmV0dXJuIG1fZG9jdW1lbnQ7CkBAIC01MjYsNiArNTY4LDM5
IEBAIHZvaWQgQXVkaW9Db250ZXh0OjpoYW5kbGVEaXJ0eUF1ZGlvTm9kZU8KICAgICBtX2RpcnR5
QXVkaW9Ob2RlT3V0cHV0cy5jbGVhcigpOwogfQogCitTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBB
dWRpb0NvbnRleHQ6OnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBjb25zdAoreworICAgIHJldHVy
biBkb2N1bWVudCgpOworfQorCitBdWRpb0NvbnRleHQqIEF1ZGlvQ29udGV4dDo6dG9BdWRpb0Nv
bnRleHQoKQoreworICAgIHJldHVybiB0aGlzOworfQorCit2b2lkIEF1ZGlvQ29udGV4dDo6c3Rh
cnRSZW5kZXJpbmcoKQoreworICAgIGRlc3RpbmF0aW9uKCktPnN0YXJ0UmVuZGVyaW5nKCk7Cit9
CisKK3ZvaWQgQXVkaW9Db250ZXh0OjpmaXJlQ29tcGxldGlvbkV2ZW50KCkKK3sKKyAgICBBU1NF
UlQoaXNNYWluVGhyZWFkKCkpOworICAgIGlmICghaXNNYWluVGhyZWFkKCkpCisgICAgICAgIHJl
dHVybjsKKyAgICAgICAgCisgICAgQXVkaW9CdWZmZXIqIHJlbmRlcmVkQnVmZmVyID0gbV9yZW5k
ZXJUYXJnZXQuZ2V0KCk7CisKKyAgICBBU1NFUlQocmVuZGVyZWRCdWZmZXIpOworICAgIGlmICgh
cmVuZGVyZWRCdWZmZXIpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIEF2b2lkIGZpcmluZyB0
aGUgZXZlbnQgaWYgdGhlIGRvY3VtZW50IGhhcyBhbHJlYWR5IGdvbmUgYXdheS4KKyAgICBpZiAo
aGFzRG9jdW1lbnQoKSkgeworICAgICAgICAvLyBDYWxsIHRoZSBvZmZsaW5lIHJlbmRlcmluZyBj
b21wbGV0aW9uIGV2ZW50IGxpc3RlbmVyLgorICAgICAgICBkaXNwYXRjaEV2ZW50KE9mZmxpbmVB
dWRpb0NvbXBsZXRpb25FdmVudDo6Y3JlYXRlKHJlbmRlcmVkQnVmZmVyKSk7CisgICAgfQorfQog
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlv
L0F1ZGlvQ29udGV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1
ZGlvQ29udGV4dC5oCShyZXZpc2lvbiA4MjQ3NikKKysrIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlv
L0F1ZGlvQ29udGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw4IEBACiAjaW5jbHVk
ZSAiQWN0aXZlRE9NT2JqZWN0LmgiCiAjaW5jbHVkZSAiQXVkaW9CdXMuaCIKICNpbmNsdWRlICJB
dWRpb0Rlc3RpbmF0aW9uTm9kZS5oIgorI2luY2x1ZGUgIkV2ZW50TGlzdGVuZXIuaCIKKyNpbmNs
dWRlICJFdmVudFRhcmdldC5oIgogI2luY2x1ZGUgIkhSVEZEYXRhYmFzZUxvYWRlci5oIgogI2lu
Y2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL093blB0ci5oPgpAQCAtNTksMTMg
KzYxLDE5IEBAIGNsYXNzIEphdmFTY3JpcHRBdWRpb05vZGU7CiAvLyBBdWRpb0NvbnRleHQgaXMg
dGhlIGNvcm5lcnN0b25lIG9mIHRoZSB3ZWIgYXVkaW8gQVBJIGFuZCBhbGwgQXVkaW9Ob2RlcyBh
cmUgY3JlYXRlZCBmcm9tIGl0LgogLy8gRm9yIHRocmVhZCBzYWZldHkgYmV0d2VlbiB0aGUgYXVk
aW8gdGhyZWFkIGFuZCB0aGUgbWFpbiB0aHJlYWQsIGl0IGhhcyBhIHJlbmRlcmluZyBncmFwaCBs
b2NraW5nIG1lY2hhbmlzbS4gCiAKLWNsYXNzIEF1ZGlvQ29udGV4dCA6IHB1YmxpYyBBY3RpdmVE
T01PYmplY3QsIHB1YmxpYyBSZWZDb3VudGVkPEF1ZGlvQ29udGV4dD4geworY2xhc3MgQXVkaW9D
b250ZXh0IDogcHVibGljIEFjdGl2ZURPTU9iamVjdCwgcHVibGljIFJlZkNvdW50ZWQ8QXVkaW9D
b250ZXh0PiwgcHVibGljIEV2ZW50VGFyZ2V0IHsKIHB1YmxpYzoKKyAgICAvLyBDcmVhdGUgYW4g
QXVkaW9Db250ZXh0IGZvciByZW5kZXJpbmcgdG8gdGhlIGF1ZGlvIGhhcmR3YXJlLgogICAgIHN0
YXRpYyBQYXNzUmVmUHRyPEF1ZGlvQ29udGV4dD4gY3JlYXRlKERvY3VtZW50Kik7CiAKKyAgICAv
LyBDcmVhdGUgYW4gQXVkaW9Db250ZXh0IGZvciBvZmZsaW5lIChub24tcmVhbHRpbWUpIHJlbmRl
cmluZy4KKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxBdWRpb0NvbnRleHQ+IGNyZWF0ZU9mZmxpbmVD
b250ZXh0KERvY3VtZW50KiwgdW5zaWduZWQgbnVtYmVyT2ZDaGFubmVscywgc2l6ZV90IG51bWJl
ck9mRnJhbWVzLCBkb3VibGUgc2FtcGxlUmF0ZSk7CisKICAgICB2aXJ0dWFsIH5BdWRpb0NvbnRl
eHQoKTsKIAogICAgIGJvb2wgaXNJbml0aWFsaXplZCgpIGNvbnN0OworICAgIAorICAgIGJvb2wg
aXNPZmZsaW5lQ29udGV4dCgpIHsgcmV0dXJuIG1faXNPZmZsaW5lQ29udGV4dDsgfQogCiAgICAg
Ly8gUmV0dXJucyB0cnVlIHdoZW4gaW5pdGlhbGl6ZSgpIHdhcyBjYWxsZWQgQU5EIGFsbCBhc3lu
Y2hyb25vdXMgaW5pdGlhbGl6YXRpb24gaGFzIGNvbXBsZXRlZC4KICAgICBib29sIGlzUnVubmFi
bGUoKSBjb25zdDsKQEAgLTczLDcgKzgxLDcgQEAgcHVibGljOgogICAgIC8vIERvY3VtZW50IG5v
dGlmaWNhdGlvbgogICAgIHZpcnR1YWwgdm9pZCBzdG9wKCk7CiAKLSAgICBEb2N1bWVudCogZG9j
dW1lbnQoKTsgLy8gQVNTRVJUcyBpZiBkb2N1bWVudCBubyBsb25nZXIgZXhpc3RzLgorICAgIERv
Y3VtZW50KiBkb2N1bWVudCgpIGNvbnN0OyAvLyBBU1NFUlRzIGlmIGRvY3VtZW50IG5vIGxvbmdl
ciBleGlzdHMuCiAgICAgYm9vbCBoYXNEb2N1bWVudCgpOwogCiAgICAgQXVkaW9EZXN0aW5hdGlv
bk5vZGUqIGRlc3RpbmF0aW9uKCkgeyByZXR1cm4gbV9kZXN0aW5hdGlvbk5vZGUuZ2V0KCk7IH0K
QEAgLTE4MCw5ICsxODgsMjcgQEAgcHVibGljOgogICAgIC8vIE9ubHkgYWNjZXNzZWQgd2hlbiB0
aGUgZ3JhcGggbG9jayBpcyBoZWxkLgogICAgIHZvaWQgbWFya0F1ZGlvTm9kZUlucHV0RGlydHko
QXVkaW9Ob2RlSW5wdXQqKTsKICAgICB2b2lkIG1hcmtBdWRpb05vZGVPdXRwdXREaXJ0eShBdWRp
b05vZGVPdXRwdXQqKTsKKworICAgIC8vIEV2ZW50VGFyZ2V0CisgICAgdmlydHVhbCBTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgY29uc3Q7CisgICAgdmly
dHVhbCBBdWRpb0NvbnRleHQqIHRvQXVkaW9Db250ZXh0KCk7CisgICAgdmlydHVhbCBFdmVudFRh
cmdldERhdGEqIGV2ZW50VGFyZ2V0RGF0YSgpIHsgcmV0dXJuICZtX2V2ZW50VGFyZ2V0RGF0YTsg
fQorICAgIHZpcnR1YWwgRXZlbnRUYXJnZXREYXRhKiBlbnN1cmVFdmVudFRhcmdldERhdGEoKSB7
IHJldHVybiAmbV9ldmVudFRhcmdldERhdGE7IH0KKworICAgIERFRklORV9BVFRSSUJVVEVfRVZF
TlRfTElTVEVORVIoY29tcGxldGUpOworCisgICAgLy8gUmVjb25jaWxlIHJlZi9kZXJlZiB3aGlj
aCBhcmUgZGVmaW5lZCBib3RoIGluIEF1ZGlvTm9kZSBhbmQgRXZlbnRUYXJnZXQuCisgICAgdXNp
bmcgUmVmQ291bnRlZDxBdWRpb0NvbnRleHQ+OjpyZWY7CisgICAgdXNpbmcgUmVmQ291bnRlZDxB
dWRpb0NvbnRleHQ+OjpkZXJlZjsKKworICAgIHZvaWQgc3RhcnRSZW5kZXJpbmcoKTsKKyAgICB2
b2lkIGZpcmVDb21wbGV0aW9uRXZlbnQoKTsKICAgICAKIHByaXZhdGU6CiAgICAgQXVkaW9Db250
ZXh0KERvY3VtZW50Kik7CisgICAgQXVkaW9Db250ZXh0KERvY3VtZW50KiwgdW5zaWduZWQgbnVt
YmVyT2ZDaGFubmVscywgc2l6ZV90IG51bWJlck9mRnJhbWVzLCBkb3VibGUgc2FtcGxlUmF0ZSk7
CisgICAgdm9pZCBjb25zdHJ1Y3RDb21tb24oKTsKKwogICAgIHZvaWQgbGF6eUluaXRpYWxpemUo
KTsKICAgICB2b2lkIHVuaW5pdGlhbGl6ZSgpOwogICAgIApAQCAtMjUyLDYgKzI3OCwxNSBAQCBw
cml2YXRlOgogICAgIAogICAgIC8vIEhSVEYgRGF0YWJhc2UgbG9hZGVyCiAgICAgUmVmUHRyPEhS
VEZEYXRhYmFzZUxvYWRlcj4gbV9ocnRmRGF0YWJhc2VMb2FkZXI7CisKKyAgICAvLyBFdmVudFRh
cmdldAorICAgIHZpcnR1YWwgdm9pZCByZWZFdmVudFRhcmdldCgpIHsgcmVmKCk7IH0KKyAgICB2
aXJ0dWFsIHZvaWQgZGVyZWZFdmVudFRhcmdldCgpIHsgZGVyZWYoKTsgfQorICAgIEV2ZW50VGFy
Z2V0RGF0YSBtX2V2ZW50VGFyZ2V0RGF0YTsKKworICAgIFJlZlB0cjxBdWRpb0J1ZmZlcj4gbV9y
ZW5kZXJUYXJnZXQ7CisgICAgCisgICAgYm9vbCBtX2lzT2ZmbGluZUNvbnRleHQ7CiB9OwogCiB9
IC8vIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvQ29udGV4dC5p
ZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9Db250ZXh0Lmlk
bAkocmV2aXNpb24gODI0NzYpCisrKyBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb0NvbnRl
eHQuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw3ICsyNywxMCBAQCBtb2R1bGUgd2ViYXVkaW8g
ewogICAgICAgICBDb25kaXRpb25hbD1XRUJfQVVESU8sCiAgICAgICAgIENhbkJlQ29uc3RydWN0
ZWQsCiAgICAgICAgIEN1c3RvbUNvbnN0cnVjdEZ1bmN0aW9uLAotICAgICAgICBWOEN1c3RvbUNv
bnN0cnVjdG9yCisgICAgICAgIFY4Q3VzdG9tQ29uc3RydWN0b3IsCisjaWYgZGVmaW5lZChWOF9C
SU5ESU5HKSAmJiBWOF9CSU5ESU5HCisgICAgICAgIEV2ZW50VGFyZ2V0CisjZW5kaWYgICAgICAg
IAogICAgIF0gQXVkaW9Db250ZXh0IHsKICAgICAgICAgLy8gQWxsIHJlbmRlcmVkIGF1ZGlvIHVs
dGltYXRlbHkgY29ubmVjdHMgdG8gZGVzdGluYXRpb24sIHdoaWNoIHJlcHJlc2VudHMgdGhlIGF1
ZGlvIGhhcmR3YXJlLgogICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgQXVkaW9EZXN0aW5hdGlv
bk5vZGUgZGVzdGluYXRpb247CkBAIC02Miw1ICs2NSwxMSBAQCBtb2R1bGUgd2ViYXVkaW8gewog
ICAgICAgICAvLyBDaGFubmVsIHNwbGl0dGluZyBhbmQgbWVyZ2luZwogICAgICAgICBBdWRpb0No
YW5uZWxTcGxpdHRlciBjcmVhdGVDaGFubmVsU3BsaXR0ZXIoKTsKICAgICAgICAgQXVkaW9DaGFu
bmVsTWVyZ2VyIGNyZWF0ZUNoYW5uZWxNZXJnZXIoKTsKKyAgICAgICAgCisgICAgICAgIC8vIE9m
ZmxpbmUgcmVuZGVyaW5nCisgICAgICAgIC8vIHZvaWQgcHJlcGFyZU9mZmxpbmVCdWZmZXJSZW5k
ZXJpbmcoaW4gdW5zaWduZWQgbG9uZyBudW1iZXJPZkNoYW5uZWxzLCBpbiB1bnNpZ25lZCBsb25n
IG51bWJlck9mRnJhbWVzLCBpbiBmbG9hdCBzYW1wbGVSYXRlKTsKKyAgICAgICAgYXR0cmlidXRl
IEV2ZW50TGlzdGVuZXIgb25jb21wbGV0ZTsKKyAgICAgICAgdm9pZCBzdGFydFJlbmRlcmluZygp
OworICAgICAgICAKICAgICB9OwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVk
aW9EZXN0aW5hdGlvbk5vZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3dlYmF1
ZGlvL0F1ZGlvRGVzdGluYXRpb25Ob2RlLmNwcAkocmV2aXNpb24gODI0NzYpCisrKyBTb3VyY2Uv
V2ViQ29yZS93ZWJhdWRpby9BdWRpb0Rlc3RpbmF0aW9uTm9kZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTMyLDE5ICszMiwxNiBAQAogI2luY2x1ZGUgIkF1ZGlvQ29udGV4dC5oIgogI2luY2x1ZGUg
IkF1ZGlvTm9kZUlucHV0LmgiCiAjaW5jbHVkZSAiQXVkaW9Ob2RlT3V0cHV0LmgiCi0jaW5jbHVk
ZSA8d3RmL1RocmVhZGluZy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLUF1ZGlvRGVzdGlu
YXRpb25Ob2RlOjpBdWRpb0Rlc3RpbmF0aW9uTm9kZShBdWRpb0NvbnRleHQqIGNvbnRleHQpCi0g
ICAgOiBBdWRpb05vZGUoY29udGV4dCwgQXVkaW9EZXN0aW5hdGlvbjo6aGFyZHdhcmVTYW1wbGVS
YXRlKCkpCisgICAgCitBdWRpb0Rlc3RpbmF0aW9uTm9kZTo6QXVkaW9EZXN0aW5hdGlvbk5vZGUo
QXVkaW9Db250ZXh0KiBjb250ZXh0LCBkb3VibGUgc2FtcGxlUmF0ZSkKKyAgICA6IEF1ZGlvTm9k
ZShjb250ZXh0LCBzYW1wbGVSYXRlKQogICAgICwgbV9jdXJyZW50VGltZSgwLjApCiB7CiAgICAg
YWRkSW5wdXQoYWRvcHRQdHIobmV3IEF1ZGlvTm9kZUlucHV0KHRoaXMpKSk7CiAgICAgCiAgICAg
c2V0VHlwZShOb2RlVHlwZURlc3RpbmF0aW9uKTsKLSAgICAKLSAgICBpbml0aWFsaXplKCk7CiB9
CiAKIEF1ZGlvRGVzdGluYXRpb25Ob2RlOjp+QXVkaW9EZXN0aW5hdGlvbk5vZGUoKQpAQCAtNTIs
MzIgKzQ5LDYgQEAgQXVkaW9EZXN0aW5hdGlvbk5vZGU6On5BdWRpb0Rlc3RpbmF0aW9uTgogICAg
IHVuaW5pdGlhbGl6ZSgpOwogfQogCi12b2lkIEF1ZGlvRGVzdGluYXRpb25Ob2RlOjppbml0aWFs
aXplKCkKLXsKLSAgICBpZiAoaXNJbml0aWFsaXplZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBkb3VibGUgaGFyZHdhcmVTYW1wbGVSYXRlID0gQXVkaW9EZXN0aW5hdGlvbjo6aGFyZHdhcmVT
YW1wbGVSYXRlKCk7Ci0jaWZuZGVmIE5ERUJVRyAgICAKLSAgICBmcHJpbnRmKHN0ZGVyciwgIj4+
Pj4gaGFyZHdhcmVTYW1wbGVSYXRlID0gJWZcbiIsIGhhcmR3YXJlU2FtcGxlUmF0ZSk7Ci0jZW5k
aWYKLSAgICAKLSAgICBtX2Rlc3RpbmF0aW9uID0gQXVkaW9EZXN0aW5hdGlvbjo6Y3JlYXRlKCp0
aGlzLCBoYXJkd2FyZVNhbXBsZVJhdGUpOwotICAgIG1fZGVzdGluYXRpb24tPnN0YXJ0KCk7Ci0g
ICAgCi0gICAgQXVkaW9Ob2RlOjppbml0aWFsaXplKCk7Ci19Ci0KLXZvaWQgQXVkaW9EZXN0aW5h
dGlvbk5vZGU6OnVuaW5pdGlhbGl6ZSgpCi17Ci0gICAgaWYgKCFpc0luaXRpYWxpemVkKCkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIG1fZGVzdGluYXRpb24tPnN0b3AoKTsKLQotICAgIEF1ZGlv
Tm9kZTo6dW5pbml0aWFsaXplKCk7Ci19Ci0KIC8vIFRoZSBhdWRpbyBoYXJkd2FyZSBjYWxscyB1
cyBiYWNrIGhlcmUgdG8gZ2V0cyBpdHMgaW5wdXQgc3RyZWFtLgogdm9pZCBBdWRpb0Rlc3RpbmF0
aW9uTm9kZTo6cHJvdmlkZUlucHV0KEF1ZGlvQnVzKiBkZXN0aW5hdGlvbkJ1cywgc2l6ZV90IG51
bWJlck9mRnJhbWVzKQogewpJbmRleDogU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9EZXN0
aW5hdGlvbk5vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRp
b0Rlc3RpbmF0aW9uTm9kZS5oCShyZXZpc2lvbiA4MjQ3NikKKysrIFNvdXJjZS9XZWJDb3JlL3dl
YmF1ZGlvL0F1ZGlvRGVzdGluYXRpb25Ob2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI1LDExICsy
NSw5IEBACiAjaWZuZGVmIEF1ZGlvRGVzdGluYXRpb25Ob2RlX2gKICNkZWZpbmUgQXVkaW9EZXN0
aW5hdGlvbk5vZGVfaAogCi0jaW5jbHVkZSAiQXVkaW9EZXN0aW5hdGlvbi5oIgorI2luY2x1ZGUg
IkF1ZGlvQnVmZmVyLmgiCiAjaW5jbHVkZSAiQXVkaW9Ob2RlLmgiCiAjaW5jbHVkZSAiQXVkaW9T
b3VyY2VQcm92aWRlci5oIgotI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KLSNpbmNsdWRlIDx3dGYv
UGFzc1JlZlB0ci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTM4LDMyICszNiwyNSBA
QCBjbGFzcyBBdWRpb0NvbnRleHQ7CiAgICAgCiBjbGFzcyBBdWRpb0Rlc3RpbmF0aW9uTm9kZSA6
IHB1YmxpYyBBdWRpb05vZGUsIHB1YmxpYyBBdWRpb1NvdXJjZVByb3ZpZGVyIHsKIHB1YmxpYzoK
LSAgICBzdGF0aWMgUGFzc1JlZlB0cjxBdWRpb0Rlc3RpbmF0aW9uTm9kZT4gY3JlYXRlKEF1ZGlv
Q29udGV4dCogY29udGV4dCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQXVk
aW9EZXN0aW5hdGlvbk5vZGUoY29udGV4dCkpOyAgICAgICAgCi0gICAgfQotCisgICAgQXVkaW9E
ZXN0aW5hdGlvbk5vZGUoQXVkaW9Db250ZXh0KiwgZG91YmxlIHNhbXBsZVJhdGUpOwogICAgIHZp
cnR1YWwgfkF1ZGlvRGVzdGluYXRpb25Ob2RlKCk7CiAgICAgCiAgICAgLy8gQXVkaW9Ob2RlICAg
CiAgICAgdmlydHVhbCB2b2lkIHByb2Nlc3Moc2l6ZV90KSB7IH07IC8vIHdlJ3JlIHB1bGxlZCBi
eSBoYXJkd2FyZSBzbyB0aGlzIGlzIG5ldmVyIGNhbGxlZAogICAgIHZpcnR1YWwgdm9pZCByZXNl
dCgpIHsgbV9jdXJyZW50VGltZSA9IDAuMDsgfTsKLSAgICB2aXJ0dWFsIHZvaWQgaW5pdGlhbGl6
ZSgpOwotICAgIHZpcnR1YWwgdm9pZCB1bmluaXRpYWxpemUoKTsKICAgICAKICAgICAvLyBUaGUg
YXVkaW8gaGFyZHdhcmUgY2FsbHMgaGVyZSBwZXJpb2RpY2FsbHkgdG8gZ2V0cyBpdHMgaW5wdXQg
c3RyZWFtLgogICAgIHZpcnR1YWwgdm9pZCBwcm92aWRlSW5wdXQoQXVkaW9CdXMqLCBzaXplX3Qg
bnVtYmVyT2ZGcmFtZXMpOwogCiAgICAgZG91YmxlIGN1cnJlbnRUaW1lKCkgeyByZXR1cm4gbV9j
dXJyZW50VGltZTsgfQogCi0gICAgZG91YmxlIHNhbXBsZVJhdGUoKSBjb25zdCB7IHJldHVybiBt
X2Rlc3RpbmF0aW9uLT5zYW1wbGVSYXRlKCk7IH0KKyAgICB2aXJ0dWFsIGRvdWJsZSBzYW1wbGVS
YXRlKCkgY29uc3QgPSAwOwogCi0gICAgdW5zaWduZWQgbnVtYmVyT2ZDaGFubmVscygpIGNvbnN0
IHsgcmV0dXJuIDI7IH0gLy8gRklYTUU6IHVwZGF0ZSB3aGVuIG11bHRpLWNoYW5uZWwgKG1vcmUg
dGhhbiBzdGVyZW8pIGlzIHN1cHBvcnRlZAotICAgIAotcHJpdmF0ZToKLSAgICBBdWRpb0Rlc3Rp
bmF0aW9uTm9kZShBdWRpb0NvbnRleHQqKTsKKyAgICB2aXJ0dWFsIHVuc2lnbmVkIG51bWJlck9m
Q2hhbm5lbHMoKSBjb25zdCB7IHJldHVybiAyOyB9IC8vIEZJWE1FOiB1cGRhdGUgd2hlbiBtdWx0
aS1jaGFubmVsIChtb3JlIHRoYW4gc3RlcmVvKSBpcyBzdXBwb3J0ZWQKIAotICAgIE93blB0cjxB
dWRpb0Rlc3RpbmF0aW9uPiBtX2Rlc3RpbmF0aW9uOworICAgIHZpcnR1YWwgdm9pZCBzdGFydFJl
bmRlcmluZygpID0gMDsKKyAgICAKK3Byb3RlY3RlZDoKICAgICBkb3VibGUgbV9jdXJyZW50VGlt
ZTsKIH07CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0NvbnZvbHZlck5vZGUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0NvbnZvbHZlck5vZGUuY3Bw
CShyZXZpc2lvbiA4MjQ3NikKKysrIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0NvbnZvbHZlck5v
ZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAiQ29udm9s
dmVyTm9kZS5oIgogCiAjaW5jbHVkZSAiQXVkaW9CdWZmZXIuaCIKKyNpbmNsdWRlICJBdWRpb0Nv
bnRleHQuaCIKICNpbmNsdWRlICJBdWRpb05vZGVJbnB1dC5oIgogI2luY2x1ZGUgIkF1ZGlvTm9k
ZU91dHB1dC5oIgogI2luY2x1ZGUgIlJldmVyYi5oIgpAQCAtMTMxLDcgKzEzMiw4IEBAIHZvaWQg
Q29udm9sdmVyTm9kZTo6c2V0QnVmZmVyKEF1ZGlvQnVmZmUKICAgICAgICAgYnVmZmVyQnVzLnNl
dENoYW5uZWxNZW1vcnkoaSwgYnVmZmVyLT5nZXRDaGFubmVsRGF0YShpKS0+ZGF0YSgpLCBidWZm
ZXJMZW5ndGgpOwogICAgIAogICAgIC8vIENyZWF0ZSB0aGUgcmV2ZXJiIHdpdGggdGhlIGdpdmVu
IGltcHVsc2UgcmVzcG9uc2UuCi0gICAgT3duUHRyPFJldmVyYj4gcmV2ZXJiID0gYWRvcHRQdHIo
bmV3IFJldmVyYigmYnVmZmVyQnVzLCBBdWRpb05vZGU6OlByb2Nlc3NpbmdTaXplSW5GcmFtZXMs
IE1heEZGVFNpemUsIDIsIHRydWUpKTsKKyAgICBib29sIHVzZUJhY2tncm91bmRUaHJlYWRzID0g
IWNvbnRleHQoKS0+aXNPZmZsaW5lQ29udGV4dCgpOworICAgIE93blB0cjxSZXZlcmI+IHJldmVy
YiA9IGFkb3B0UHRyKG5ldyBSZXZlcmIoJmJ1ZmZlckJ1cywgQXVkaW9Ob2RlOjpQcm9jZXNzaW5n
U2l6ZUluRnJhbWVzLCBNYXhGRlRTaXplLCAyLCB1c2VCYWNrZ3JvdW5kVGhyZWFkcykpOwogCiAg
ICAgewogICAgICAgICAvLyBTeW5jaHJvbml6ZSB3aXRoIHByb2Nlc3MoKS4KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3dlYmF1ZGlvL0RlZmF1bHRBdWRpb0Rlc3RpbmF0aW9uTm9kZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vRGVmYXVsdEF1ZGlvRGVzdGluYXRpb25O
b2RlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0RlZmF1bHRB
dWRpb0Rlc3RpbmF0aW9uTm9kZS5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNzggQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElN
UExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoV0VCX0FVRElPKQor
CisjaW5jbHVkZSAiRGVmYXVsdEF1ZGlvRGVzdGluYXRpb25Ob2RlLmgiCisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKyAgICAKK0RlZmF1bHRBdWRpb0Rlc3RpbmF0aW9uTm9kZTo6RGVmYXVsdEF1ZGlv
RGVzdGluYXRpb25Ob2RlKEF1ZGlvQ29udGV4dCogY29udGV4dCkKKyAgICA6IEF1ZGlvRGVzdGlu
YXRpb25Ob2RlKGNvbnRleHQsIEF1ZGlvRGVzdGluYXRpb246OmhhcmR3YXJlU2FtcGxlUmF0ZSgp
KQoreworICAgIGluaXRpYWxpemUoKTsKK30KKworRGVmYXVsdEF1ZGlvRGVzdGluYXRpb25Ob2Rl
Ojp+RGVmYXVsdEF1ZGlvRGVzdGluYXRpb25Ob2RlKCkKK3sKKyAgICB1bmluaXRpYWxpemUoKTsK
K30KKwordm9pZCBEZWZhdWx0QXVkaW9EZXN0aW5hdGlvbk5vZGU6OmluaXRpYWxpemUoKQorewor
ICAgIGlmIChpc0luaXRpYWxpemVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGRvdWJsZSBo
YXJkd2FyZVNhbXBsZVJhdGUgPSBBdWRpb0Rlc3RpbmF0aW9uOjpoYXJkd2FyZVNhbXBsZVJhdGUo
KTsKKyNpZm5kZWYgTkRFQlVHICAgIAorICAgIGZwcmludGYoc3RkZXJyLCAiPj4+PiBoYXJkd2Fy
ZVNhbXBsZVJhdGUgPSAlZlxuIiwgaGFyZHdhcmVTYW1wbGVSYXRlKTsKKyNlbmRpZgorICAgIAor
ICAgIG1fZGVzdGluYXRpb24gPSBBdWRpb0Rlc3RpbmF0aW9uOjpjcmVhdGUoKnRoaXMsIGhhcmR3
YXJlU2FtcGxlUmF0ZSk7CisgICAgCisgICAgQXVkaW9Ob2RlOjppbml0aWFsaXplKCk7Cit9CisK
K3ZvaWQgRGVmYXVsdEF1ZGlvRGVzdGluYXRpb25Ob2RlOjp1bmluaXRpYWxpemUoKQoreworICAg
IGlmICghaXNJbml0aWFsaXplZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2Rlc3RpbmF0
aW9uLT5zdG9wKCk7CisKKyAgICBBdWRpb05vZGU6OnVuaW5pdGlhbGl6ZSgpOworfQorCit2b2lk
IERlZmF1bHRBdWRpb0Rlc3RpbmF0aW9uTm9kZTo6c3RhcnRSZW5kZXJpbmcoKQoreworICAgIEFT
U0VSVChpc0luaXRpYWxpemVkKCkpOworICAgIGlmIChpc0luaXRpYWxpemVkKCkpCisgICAgICAg
IG1fZGVzdGluYXRpb24tPnN0YXJ0KCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwor
I2VuZGlmIC8vIEVOQUJMRShXRUJfQVVESU8pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS93ZWJhdWRp
by9EZWZhdWx0QXVkaW9EZXN0aW5hdGlvbk5vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS93ZWJhdWRpby9EZWZhdWx0QXVkaW9EZXN0aW5hdGlvbk5vZGUuaAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0RlZmF1bHRBdWRpb0Rlc3RpbmF0aW9uTm9kZS5o
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDYxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEx
LCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAg
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
CisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBEZWZh
dWx0QXVkaW9EZXN0aW5hdGlvbk5vZGVfaAorI2RlZmluZSBEZWZhdWx0QXVkaW9EZXN0aW5hdGlv
bk5vZGVfaAorCisjaW5jbHVkZSAiQXVkaW9EZXN0aW5hdGlvbi5oIgorI2luY2x1ZGUgIkF1ZGlv
RGVzdGluYXRpb25Ob2RlLmgiCisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK2NsYXNzIEF1ZGlvQ29udGV4dDsKKyAgICAKK2NsYXNzIERlZmF1bHRBdWRp
b0Rlc3RpbmF0aW9uTm9kZSA6IHB1YmxpYyBBdWRpb0Rlc3RpbmF0aW9uTm9kZSB7CitwdWJsaWM6
CisgICAgc3RhdGljIFBhc3NSZWZQdHI8RGVmYXVsdEF1ZGlvRGVzdGluYXRpb25Ob2RlPiBjcmVh
dGUoQXVkaW9Db250ZXh0KiBjb250ZXh0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVm
KG5ldyBEZWZhdWx0QXVkaW9EZXN0aW5hdGlvbk5vZGUoY29udGV4dCkpOyAgICAgCisgICAgfQor
CisgICAgdmlydHVhbCB+RGVmYXVsdEF1ZGlvRGVzdGluYXRpb25Ob2RlKCk7CisgICAgCisgICAg
Ly8gQXVkaW9Ob2RlICAgCisgICAgdmlydHVhbCB2b2lkIGluaXRpYWxpemUoKTsKKyAgICB2aXJ0
dWFsIHZvaWQgdW5pbml0aWFsaXplKCk7CisgICAgCisgICAgZG91YmxlIHNhbXBsZVJhdGUoKSBj
b25zdCB7IHJldHVybiBtX2Rlc3RpbmF0aW9uLT5zYW1wbGVSYXRlKCk7IH0KKworICAgIHZpcnR1
YWwgdm9pZCBzdGFydFJlbmRlcmluZygpOworICAgIAorcHJpdmF0ZToKKyAgICBEZWZhdWx0QXVk
aW9EZXN0aW5hdGlvbk5vZGUoQXVkaW9Db250ZXh0Kik7CisKKyAgICBPd25QdHI8QXVkaW9EZXN0
aW5hdGlvbj4gbV9kZXN0aW5hdGlvbjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwor
I2VuZGlmIC8vIERlZmF1bHRBdWRpb0Rlc3RpbmF0aW9uTm9kZV9oCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS93ZWJhdWRpby9PZmZsaW5lQXVkaW9Db21wbGV0aW9uRXZlbnQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL09mZmxpbmVBdWRpb0NvbXBsZXRpb25FdmVudC5j
cHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9PZmZsaW5lQXVkaW9D
b21wbGV0aW9uRXZlbnQuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDU4IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDExLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
CisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKFdFQl9BVURJTykKKworI2lu
Y2x1ZGUgIk9mZmxpbmVBdWRpb0NvbXBsZXRpb25FdmVudC5oIgorCisjaW5jbHVkZSAiQXVkaW9C
dWZmZXIuaCIKKyNpbmNsdWRlICJFdmVudE5hbWVzLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworUGFzc1JlZlB0cjxPZmZsaW5lQXVkaW9Db21wbGV0aW9uRXZlbnQ+IE9mZmxpbmVBdWRpb0Nv
bXBsZXRpb25FdmVudDo6Y3JlYXRlKFBhc3NSZWZQdHI8QXVkaW9CdWZmZXI+IHJlbmRlcmVkQnVm
ZmVyKQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgT2ZmbGluZUF1ZGlvQ29tcGxldGlvbkV2
ZW50KHJlbmRlcmVkQnVmZmVyKSk7Cit9CisKK09mZmxpbmVBdWRpb0NvbXBsZXRpb25FdmVudDo6
T2ZmbGluZUF1ZGlvQ29tcGxldGlvbkV2ZW50KFBhc3NSZWZQdHI8QXVkaW9CdWZmZXI+IHJlbmRl
cmVkQnVmZmVyKQorICAgIDogRXZlbnQoZXZlbnROYW1lcygpLmNvbXBsZXRlRXZlbnQsIHRydWUs
IGZhbHNlKQorICAgICwgbV9yZW5kZXJlZEJ1ZmZlcihyZW5kZXJlZEJ1ZmZlcikKK3sKK30KKwor
T2ZmbGluZUF1ZGlvQ29tcGxldGlvbkV2ZW50Ojp+T2ZmbGluZUF1ZGlvQ29tcGxldGlvbkV2ZW50
KCkKK3sKK30KKworYm9vbCBPZmZsaW5lQXVkaW9Db21wbGV0aW9uRXZlbnQ6OmlzT2ZmbGluZUF1
ZGlvQ29tcGxldGlvbkV2ZW50KCkgY29uc3QKK3sKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQl9BVURJTykKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL09mZmxpbmVBdWRpb0NvbXBsZXRpb25FdmVudC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL09mZmxpbmVBdWRpb0NvbXBsZXRp
b25FdmVudC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vT2ZmbGlu
ZUF1ZGlvQ29tcGxldGlvbkV2ZW50LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTUgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElN
UExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaWZuZGVmIE9mZmxpbmVBdWRpb0NvbXBsZXRpb25FdmVudF9oCisjZGVmaW5l
IE9mZmxpbmVBdWRpb0NvbXBsZXRpb25FdmVudF9oCisKKyNpbmNsdWRlICJBdWRpb0J1ZmZlci5o
IgorI2luY2x1ZGUgIkV2ZW50LmgiCisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNs
dWRlIDx3dGYvUmVmUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQXVkaW9C
dWZmZXI7CisgICAgCitjbGFzcyBPZmZsaW5lQXVkaW9Db21wbGV0aW9uRXZlbnQgOiBwdWJsaWMg
RXZlbnQgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPE9mZmxpbmVBdWRpb0NvbXBs
ZXRpb25FdmVudD4gY3JlYXRlKFBhc3NSZWZQdHI8QXVkaW9CdWZmZXI+IHJlbmRlcmVkQnVmZmVy
KTsKKyAgICAKKyAgICB2aXJ0dWFsIH5PZmZsaW5lQXVkaW9Db21wbGV0aW9uRXZlbnQoKTsKKwor
ICAgIHZpcnR1YWwgYm9vbCBpc09mZmxpbmVBdWRpb0NvbXBsZXRpb25FdmVudCgpIGNvbnN0Owor
CisgICAgQXVkaW9CdWZmZXIqIHJlbmRlcmVkQnVmZmVyKCkgeyByZXR1cm4gbV9yZW5kZXJlZEJ1
ZmZlci5nZXQoKTsgfQorCitwcml2YXRlOgorICAgIE9mZmxpbmVBdWRpb0NvbXBsZXRpb25FdmVu
dChQYXNzUmVmUHRyPEF1ZGlvQnVmZmVyPiByZW5kZXJlZEJ1ZmZlcik7CisKKyAgICBSZWZQdHI8
QXVkaW9CdWZmZXI+IG1fcmVuZGVyZWRCdWZmZXI7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCisKKyNlbmRpZiAvLyBPZmZsaW5lQXVkaW9Db21wbGV0aW9uRXZlbnRfaApJbmRleDogU291
cmNlL1dlYkNvcmUvd2ViYXVkaW8vT2ZmbGluZUF1ZGlvQ29tcGxldGlvbkV2ZW50LmlkbAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9PZmZsaW5lQXVkaW9Db21wbGV0aW9u
RXZlbnQuaWRsCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vT2ZmbGlu
ZUF1ZGlvQ29tcGxldGlvbkV2ZW50LmlkbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzMiBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAq
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKK21vZHVsZSBhdWRpbyB7CisgICAgaW50ZXJmYWNlIFsKKyAgICAgICAgQ29u
ZGl0aW9uYWw9V0VCX0FVRElPLAorICAgICAgICBHZW5lcmF0ZVRvSlMKKyAgICBdIE9mZmxpbmVB
dWRpb0NvbXBsZXRpb25FdmVudCA6IEV2ZW50IHsKKyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRl
IEF1ZGlvQnVmZmVyIHJlbmRlcmVkQnVmZmVyOworICAgIH07Cit9CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS93ZWJhdWRpby9PZmZsaW5lQXVkaW9EZXN0aW5hdGlvbk5vZGUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL09mZmxpbmVBdWRpb0Rlc3RpbmF0aW9uTm9kZS5j
cHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9PZmZsaW5lQXVkaW9E
ZXN0aW5hdGlvbk5vZGUuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE2NiBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMSwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShXRUJfQVVESU8pCisKKyNp
bmNsdWRlICJPZmZsaW5lQXVkaW9EZXN0aW5hdGlvbk5vZGUuaCIKKworI2luY2x1ZGUgIkF1ZGlv
QnVzLmgiCisjaW5jbHVkZSAiQXVkaW9Db250ZXh0LmgiCisjaW5jbHVkZSAiSFJURkRhdGFiYXNl
TG9hZGVyLmgiCisjaW5jbHVkZSA8YWxnb3JpdGhtPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcu
aD4KKwordXNpbmcgbmFtZXNwYWNlIHN0ZDsKKyAKK25hbWVzcGFjZSBXZWJDb3JlIHsKKyAgICAK
K2NvbnN0IHNpemVfdCByZW5kZXJRdWFudHVtU2l6ZSA9IDEyODsgICAgCisKK09mZmxpbmVBdWRp
b0Rlc3RpbmF0aW9uTm9kZTo6T2ZmbGluZUF1ZGlvRGVzdGluYXRpb25Ob2RlKEF1ZGlvQ29udGV4
dCogY29udGV4dCwgQXVkaW9CdWZmZXIqIHJlbmRlclRhcmdldCkKKyAgICA6IEF1ZGlvRGVzdGlu
YXRpb25Ob2RlKGNvbnRleHQsIHJlbmRlclRhcmdldC0+c2FtcGxlUmF0ZSgpKQorICAgICwgbV9y
ZW5kZXJUYXJnZXQocmVuZGVyVGFyZ2V0KQorICAgICwgbV9zdGFydGVkUmVuZGVyaW5nKGZhbHNl
KQoreworICAgIG1fcmVuZGVyQnVzID0gYWRvcHRQdHIobmV3IEF1ZGlvQnVzKHJlbmRlclRhcmdl
dC0+bnVtYmVyT2ZDaGFubmVscygpLCByZW5kZXJRdWFudHVtU2l6ZSkpOworICAgIAorICAgIGlu
aXRpYWxpemUoKTsKK30KKworT2ZmbGluZUF1ZGlvRGVzdGluYXRpb25Ob2RlOjp+T2ZmbGluZUF1
ZGlvRGVzdGluYXRpb25Ob2RlKCkKK3sKKyAgICB1bmluaXRpYWxpemUoKTsKK30KKwordm9pZCBP
ZmZsaW5lQXVkaW9EZXN0aW5hdGlvbk5vZGU6OmluaXRpYWxpemUoKQoreworICAgIGlmIChpc0lu
aXRpYWxpemVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIEF1ZGlvTm9kZTo6aW5pdGlhbGl6
ZSgpOworfQorCit2b2lkIE9mZmxpbmVBdWRpb0Rlc3RpbmF0aW9uTm9kZTo6dW5pbml0aWFsaXpl
KCkKK3sKKyAgICBpZiAoIWlzSW5pdGlhbGl6ZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
QXVkaW9Ob2RlOjp1bmluaXRpYWxpemUoKTsKK30KKwordm9pZCBPZmZsaW5lQXVkaW9EZXN0aW5h
dGlvbk5vZGU6OnN0YXJ0UmVuZGVyaW5nKCkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkp
OworICAgIEFTU0VSVChtX3JlbmRlclRhcmdldC5nZXQoKSk7CisgICAgaWYgKCFtX3JlbmRlclRh
cmdldC5nZXQoKSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIGlmICghbV9zdGFydGVkUmVu
ZGVyaW5nKSB7CisgICAgICAgIG1fc3RhcnRlZFJlbmRlcmluZyA9IHRydWU7CisgICAgICAgIG1f
cmVuZGVyVGhyZWFkID0gY3JlYXRlVGhyZWFkKE9mZmxpbmVBdWRpb0Rlc3RpbmF0aW9uTm9kZTo6
cmVuZGVyRW50cnksIHRoaXMsICJvZmZsaW5lIHJlbmRlcmVyIik7CisgICAgfQorfQorCisvLyBE
byBvZmZsaW5lIHJlbmRlcmluZyBpbiB0aGlzIHRocmVhZC4KK3ZvaWQqIE9mZmxpbmVBdWRpb0Rl
c3RpbmF0aW9uTm9kZTo6cmVuZGVyRW50cnkodm9pZCogdGhyZWFkRGF0YSkKK3sKKyAgICBPZmZs
aW5lQXVkaW9EZXN0aW5hdGlvbk5vZGUqIGRlc3RpbmF0aW9uTm9kZSA9IHJlaW50ZXJwcmV0X2Nh
c3Q8T2ZmbGluZUF1ZGlvRGVzdGluYXRpb25Ob2RlKj4odGhyZWFkRGF0YSk7CisgICAgQVNTRVJU
KGRlc3RpbmF0aW9uTm9kZSk7CisgICAgZGVzdGluYXRpb25Ob2RlLT5yZW5kZXIoKTsKKyAgICAK
KyAgICByZXR1cm4gMDsKK30KKwordm9pZCBPZmZsaW5lQXVkaW9EZXN0aW5hdGlvbk5vZGU6OnJl
bmRlcigpCit7CisgICAgQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7CisgICAgQVNTRVJUKG1fcmVu
ZGVyQnVzLmdldCgpKTsKKyAgICBpZiAoIW1fcmVuZGVyQnVzLmdldCgpKQorICAgICAgICByZXR1
cm47CisgICAgCisgICAgYm9vbCBjaGFubmVsc01hdGNoID0gbV9yZW5kZXJCdXMtPm51bWJlck9m
Q2hhbm5lbHMoKSA9PSBtX3JlbmRlclRhcmdldC0+bnVtYmVyT2ZDaGFubmVscygpOworICAgIEFT
U0VSVChjaGFubmVsc01hdGNoKTsKKyAgICBpZiAoIWNoYW5uZWxzTWF0Y2gpCisgICAgICAgIHJl
dHVybjsKKyAgICAgICAgCisgICAgYm9vbCBpc1JlbmRlckJ1c0FsbG9jYXRlZCA9IG1fcmVuZGVy
QnVzLT5sZW5ndGgoKSA+PSByZW5kZXJRdWFudHVtU2l6ZTsKKyAgICBBU1NFUlQoaXNSZW5kZXJC
dXNBbGxvY2F0ZWQpOworICAgIGlmICghaXNSZW5kZXJCdXNBbGxvY2F0ZWQpCisgICAgICAgIHJl
dHVybjsKKyAgICAgICAgCisgICAgLy8gU3luY2hyb25pemUgd2l0aCBIUlRGRGF0YWJhc2VMb2Fk
ZXIuCisgICAgLy8gVGhlIGRhdGFiYXNlIG11c3QgYmUgbG9hZGVkIGJlZm9yZSB3ZSBjYW4gcHJv
Y2VlZC4KKyAgICBIUlRGRGF0YWJhc2VMb2FkZXIqIGxvYWRlciA9IEhSVEZEYXRhYmFzZUxvYWRl
cjo6bG9hZGVyKCk7CisgICAgQVNTRVJUKGxvYWRlcik7CisgICAgaWYgKCFsb2FkZXIpCisgICAg
ICAgIHJldHVybjsKKyAgICAKKyAgICBsb2FkZXItPndhaXRGb3JMb2FkZXJUaHJlYWRDb21wbGV0
aW9uKCk7CisgICAgICAgIAorICAgIC8vIEJyZWFrIHVwIHRoZSByZW5kZXIgdGFyZ2V0IGludG8g
c21hbGxlciAicmVuZGVyIHF1YW50aXplIiBzaXplZCBwaWVjZXMuCisgICAgLy8gUmVuZGVyIHVu
dGlsIHdlJ3JlIGZpbmlzaGVkLgorICAgIHNpemVfdCBmcmFtZXNUb1Byb2Nlc3MgPSBtX3JlbmRl
clRhcmdldC0+bGVuZ3RoKCk7CisgICAgdW5zaWduZWQgbnVtYmVyT2ZDaGFubmVscyA9IG1fcmVu
ZGVyVGFyZ2V0LT5udW1iZXJPZkNoYW5uZWxzKCk7CisKKyAgICB1bnNpZ25lZCBuID0gMDsKKyAg
ICB3aGlsZSAoZnJhbWVzVG9Qcm9jZXNzID4gMCkgeworICAgICAgICAvLyBSZW5kZXIgb25lIHJl
bmRlciBxdWFudHVtLgorICAgICAgICBwcm92aWRlSW5wdXQobV9yZW5kZXJCdXMuZ2V0KCksIHJl
bmRlclF1YW50dW1TaXplKTsKKyAgICAgICAgCisgICAgICAgIHNpemVfdCBmcmFtZXNBdmFpbGFi
bGVUb0NvcHkgPSBtaW4oZnJhbWVzVG9Qcm9jZXNzLCByZW5kZXJRdWFudHVtU2l6ZSk7CisgICAg
ICAgIAorICAgICAgICBmb3IgKHVuc2lnbmVkIGNoYW5uZWxJbmRleCA9IDA7IGNoYW5uZWxJbmRl
eCA8IG51bWJlck9mQ2hhbm5lbHM7ICsrY2hhbm5lbEluZGV4KSB7CisgICAgICAgICAgICBmbG9h
dCogc291cmNlID0gbV9yZW5kZXJCdXMtPmNoYW5uZWwoY2hhbm5lbEluZGV4KS0+ZGF0YSgpOwor
ICAgICAgICAgICAgZmxvYXQqIGRlc3RpbmF0aW9uID0gbV9yZW5kZXJUYXJnZXQtPmdldENoYW5u
ZWxEYXRhKGNoYW5uZWxJbmRleCktPmRhdGEoKTsKKyAgICAgICAgICAgIG1lbWNweShkZXN0aW5h
dGlvbiArIG4sIHNvdXJjZSwgc2l6ZW9mKGZsb2F0KSAqIGZyYW1lc0F2YWlsYWJsZVRvQ29weSk7
CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIG4gKz0gZnJhbWVzQXZhaWxhYmxlVG9Db3B5
OworICAgICAgICBmcmFtZXNUb1Byb2Nlc3MgLT0gZnJhbWVzQXZhaWxhYmxlVG9Db3B5OworICAg
IH0KKyAgICAKKyAgICAvLyBPdXIgd29yayBpcyBkb25lLiBMZXQgdGhlIEF1ZGlvQ29udGV4dCBr
bm93LgorICAgIGNhbGxPbk1haW5UaHJlYWQobm90aWZ5Q29tcGxldGVEaXNwYXRjaCwgdGhpcyk7
Cit9CisKK3ZvaWQgT2ZmbGluZUF1ZGlvRGVzdGluYXRpb25Ob2RlOjpub3RpZnlDb21wbGV0ZURp
c3BhdGNoKHZvaWQqIHVzZXJEYXRhKQoreworICAgIE9mZmxpbmVBdWRpb0Rlc3RpbmF0aW9uTm9k
ZSogZGVzdGluYXRpb25Ob2RlID0gc3RhdGljX2Nhc3Q8T2ZmbGluZUF1ZGlvRGVzdGluYXRpb25O
b2RlKj4odXNlckRhdGEpOworICAgIEFTU0VSVChkZXN0aW5hdGlvbk5vZGUpOworICAgIGlmICgh
ZGVzdGluYXRpb25Ob2RlKQorICAgICAgICByZXR1cm47CisKKyAgICBkZXN0aW5hdGlvbk5vZGUt
Pm5vdGlmeUNvbXBsZXRlKCk7Cit9CisKK3ZvaWQgT2ZmbGluZUF1ZGlvRGVzdGluYXRpb25Ob2Rl
Ojpub3RpZnlDb21wbGV0ZSgpCit7CisgICAgY29udGV4dCgpLT5maXJlQ29tcGxldGlvbkV2ZW50
KCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShXRUJf
QVVESU8pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9PZmZsaW5lQXVkaW9EZXN0aW5h
dGlvbk5vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9PZmZsaW5l
QXVkaW9EZXN0aW5hdGlvbk5vZGUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL3dl
YmF1ZGlvL09mZmxpbmVBdWRpb0Rlc3RpbmF0aW9uTm9kZS5oCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDc4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExLCBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBPZmZsaW5lQXVkaW9EZXN0aW5hdGlvbk5v
ZGVfaAorI2RlZmluZSBPZmZsaW5lQXVkaW9EZXN0aW5hdGlvbk5vZGVfaAorCisjaW5jbHVkZSAi
QXVkaW9CdWZmZXIuaCIKKyNpbmNsdWRlICJBdWRpb0Rlc3RpbmF0aW9uTm9kZS5oIgorI2luY2x1
ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUg
PHd0Zi9UaHJlYWRpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBBdWRpb0J1
czsKK2NsYXNzIEF1ZGlvQ29udGV4dDsKKyAgICAKK2NsYXNzIE9mZmxpbmVBdWRpb0Rlc3RpbmF0
aW9uTm9kZSA6IHB1YmxpYyBBdWRpb0Rlc3RpbmF0aW9uTm9kZSB7CitwdWJsaWM6CisgICAgc3Rh
dGljIFBhc3NSZWZQdHI8T2ZmbGluZUF1ZGlvRGVzdGluYXRpb25Ob2RlPiBjcmVhdGUoQXVkaW9D
b250ZXh0KiBjb250ZXh0LCBBdWRpb0J1ZmZlciogcmVuZGVyVGFyZ2V0KQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBPZmZsaW5lQXVkaW9EZXN0aW5hdGlvbk5vZGUoY29udGV4
dCwgcmVuZGVyVGFyZ2V0KSk7ICAgICAKKyAgICB9CisKKyAgICB2aXJ0dWFsIH5PZmZsaW5lQXVk
aW9EZXN0aW5hdGlvbk5vZGUoKTsKKyAgICAKKyAgICAvLyBBdWRpb05vZGUgICAKKyAgICB2aXJ0
dWFsIHZvaWQgaW5pdGlhbGl6ZSgpOworICAgIHZpcnR1YWwgdm9pZCB1bmluaXRpYWxpemUoKTsK
KyAgICAKKyAgICBkb3VibGUgc2FtcGxlUmF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVuZGVyVGFy
Z2V0LT5zYW1wbGVSYXRlKCk7IH0KKworICAgIHZvaWQgc3RhcnRSZW5kZXJpbmcoKTsKKyAgICAK
K3ByaXZhdGU6CisgICAgT2ZmbGluZUF1ZGlvRGVzdGluYXRpb25Ob2RlKEF1ZGlvQ29udGV4dCos
IEF1ZGlvQnVmZmVyKiByZW5kZXJUYXJnZXQpOworCisgICAgLy8gVGhpcyBBdWRpb05vZGUgcmVu
ZGVycyBpbnRvIHRoaXMgQXVkaW9CdWZmZXIuCisgICAgUmVmUHRyPEF1ZGlvQnVmZmVyPiBtX3Jl
bmRlclRhcmdldDsKKyAgICAKKyAgICAvLyBUZW1wb3JhcnkgQXVkaW9CdXMgZm9yIGVhY2ggcmVu
ZGVyIHF1YW50dW0uCisgICAgT3duUHRyPEF1ZGlvQnVzPiBtX3JlbmRlckJ1czsKKyAgICAKKyAg
ICAvLyBSZW5kZXJpbmcgdGhyZWFkLgorICAgIHZvbGF0aWxlIFRocmVhZElkZW50aWZpZXIgbV9y
ZW5kZXJUaHJlYWQ7CisgICAgYm9vbCBtX3N0YXJ0ZWRSZW5kZXJpbmc7CisgICAgc3RhdGljIHZv
aWQqIHJlbmRlckVudHJ5KHZvaWQqIHRocmVhZERhdGEpOworICAgIHZvaWQgcmVuZGVyKCk7Cisg
ICAgCisgICAgLy8gRm9yIGNvbXBsZXRpb24gY2FsbGJhY2sgb24gbWFpbiB0aHJlYWQuCisgICAg
c3RhdGljIHZvaWQgbm90aWZ5Q29tcGxldGVEaXNwYXRjaCh2b2lkKiB1c2VyRGF0YSk7CisgICAg
dm9pZCBub3RpZnlDb21wbGV0ZSgpOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisj
ZW5kaWYgLy8gT2ZmbGluZUF1ZGlvRGVzdGluYXRpb25Ob2RlX2gK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>88148</attachid>
            <date>2011-04-04 16:10:17 -0700</date>
            <delta_ts>2011-04-06 10:40:59 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-57676-20110404161015.patch</filename>
            <type>text/plain</type>
            <size>65475</size>
            <attacher name="Chris Rogers">crogers</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDgyODg2KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsOTEgQEAKKzIwMTEtMDQtMDQgIENocmlzIFJv
Z2VycyAgPGNyb2dlcnNAZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBBZGQgc3VwcG9ydCBmb3Igb2ZmbGluZSBhdWRpbyByZW5kZXJp
bmcgdG8gQXVkaW9Db250ZXh0IEFQSQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9NTc2NzYKKworICAgICAgICBObyBuZXcgdGVzdHMgc2luY2UgYXVkaW8g
QVBJIGlzIG5vdCB5ZXQgaW1wbGVtZW50ZWQuCisKKyAgICAgICAgKiBEZXJpdmVkU291cmNlcy5t
YWtlOgorICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogYmluZGluZ3MvanMvSlNBdWRpb0NvbnRleHRD
dXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNBdWRpb0NvbnRleHRDb25zdHJ1Y3Rvcjo6
Y29uc3RydWN0SlNBdWRpb0NvbnRleHQpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRXZlbnRD
dXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6dG9KUyk6CisgICAgICAgICogYmluZGluZ3Mv
anMvSlNFdmVudFRhcmdldC5jcHA6CisgICAgICAgIChXZWJDb3JlOjp0b0pTKToKKyAgICAgICAg
KiBiaW5kaW5ncy92OC9WOERPTVdyYXBwZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VjhET01X
cmFwcGVyOjpjb252ZXJ0RXZlbnRUYXJnZXRUb1Y4T2JqZWN0KToKKyAgICAgICAgKiBiaW5kaW5n
cy92OC9jdXN0b20vVjhBdWRpb0NvbnRleHRDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6
VjhBdWRpb0NvbnRleHQ6OmNvbnN0cnVjdG9yQ2FsbGJhY2spOgorICAgICAgICAqIGJpbmRpbmdz
L3Y4L2N1c3RvbS9WOEV2ZW50Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnRvVjgpOgor
ICAgICAgICAqIGRvbS9FdmVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFdmVudDo6aXNPZmZs
aW5lQXVkaW9Db21wbGV0aW9uRXZlbnQpOgorICAgICAgICAqIGRvbS9FdmVudC5oOgorICAgICAg
ICAqIGRvbS9FdmVudFRhcmdldC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFdmVudFRhcmdldDo6
dG9BdWRpb0NvbnRleHQpOgorICAgICAgICAqIGRvbS9FdmVudFRhcmdldC5oOgorICAgICAgICAq
IHBsYXRmb3JtL2F1ZGlvL0hSVEZEYXRhYmFzZUxvYWRlci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpIUlRGRGF0YWJhc2VMb2FkZXI6OndhaXRGb3JMb2FkZXJUaHJlYWRDb21wbGV0aW9uKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9hdWRpby9IUlRGRGF0YWJhc2VMb2FkZXIuaDoKKyAgICAgICAgKFdl
YkNvcmU6OkhSVEZEYXRhYmFzZUxvYWRlcjo6bG9hZGVyKToKKyAgICAgICAgKiB3ZWJhdWRpby9B
dWRpb0NvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9Db250ZXh0OjpjcmVhdGVP
ZmZsaW5lQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb0NvbnRleHQ6OkF1ZGlvQ29u
dGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb0NvbnRleHQ6OmNvbnN0cnVjdENvbW1vbik6
CisgICAgICAgIChXZWJDb3JlOjpBdWRpb0NvbnRleHQ6OmRvY3VtZW50KToKKyAgICAgICAgKFdl
YkNvcmU6OkF1ZGlvQ29udGV4dDo6c2NyaXB0RXhlY3V0aW9uQ29udGV4dCk6CisgICAgICAgIChX
ZWJDb3JlOjpBdWRpb0NvbnRleHQ6OnRvQXVkaW9Db250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6
OkF1ZGlvQ29udGV4dDo6c3RhcnRSZW5kZXJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9D
b250ZXh0OjpmaXJlQ29tcGxldGlvbkV2ZW50KToKKyAgICAgICAgKiB3ZWJhdWRpby9BdWRpb0Nv
bnRleHQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvQ29udGV4dDo6aXNPZmZsaW5lQ29udGV4
dCk6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb0NvbnRleHQ6OmV2ZW50VGFyZ2V0RGF0YSk6Cisg
ICAgICAgIChXZWJDb3JlOjpBdWRpb0NvbnRleHQ6OmVuc3VyZUV2ZW50VGFyZ2V0RGF0YSk6Cisg
ICAgICAgIChXZWJDb3JlOjpBdWRpb0NvbnRleHQ6OnJlZkV2ZW50VGFyZ2V0KToKKyAgICAgICAg
KFdlYkNvcmU6OkF1ZGlvQ29udGV4dDo6ZGVyZWZFdmVudFRhcmdldCk6CisgICAgICAgICogd2Vi
YXVkaW8vQXVkaW9Db250ZXh0LmlkbDoKKyAgICAgICAgKiB3ZWJhdWRpby9BdWRpb0Rlc3RpbmF0
aW9uTm9kZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb0Rlc3RpbmF0aW9uTm9kZTo6QXVk
aW9EZXN0aW5hdGlvbk5vZGUpOgorICAgICAgICAqIHdlYmF1ZGlvL0F1ZGlvRGVzdGluYXRpb25O
b2RlLmg6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb0Rlc3RpbmF0aW9uTm9kZTo6cmVzZXQpOgor
ICAgICAgICAoV2ViQ29yZTo6QXVkaW9EZXN0aW5hdGlvbk5vZGU6Om51bWJlck9mQ2hhbm5lbHMp
OgorICAgICAgICAqIHdlYmF1ZGlvL0NvbnZvbHZlck5vZGUuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6Q29udm9sdmVyTm9kZTo6c2V0QnVmZmVyKToKKyAgICAgICAgKiB3ZWJhdWRpby9EZWZhdWx0
QXVkaW9EZXN0aW5hdGlvbk5vZGUuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRlZmF1
bHRBdWRpb0Rlc3RpbmF0aW9uTm9kZTo6RGVmYXVsdEF1ZGlvRGVzdGluYXRpb25Ob2RlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkRlZmF1bHRBdWRpb0Rlc3RpbmF0aW9uTm9kZTo6fkRlZmF1bHRBdWRp
b0Rlc3RpbmF0aW9uTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpEZWZhdWx0QXVkaW9EZXN0aW5h
dGlvbk5vZGU6OmluaXRpYWxpemUpOgorICAgICAgICAoV2ViQ29yZTo6RGVmYXVsdEF1ZGlvRGVz
dGluYXRpb25Ob2RlOjp1bmluaXRpYWxpemUpOgorICAgICAgICAoV2ViQ29yZTo6RGVmYXVsdEF1
ZGlvRGVzdGluYXRpb25Ob2RlOjpzdGFydFJlbmRlcmluZyk6CisgICAgICAgICogd2ViYXVkaW8v
RGVmYXVsdEF1ZGlvRGVzdGluYXRpb25Ob2RlLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6
RGVmYXVsdEF1ZGlvRGVzdGluYXRpb25Ob2RlOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6
RGVmYXVsdEF1ZGlvRGVzdGluYXRpb25Ob2RlOjpzYW1wbGVSYXRlKToKKyAgICAgICAgKiB3ZWJh
dWRpby9PZmZsaW5lQXVkaW9Db21wbGV0aW9uRXZlbnQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdl
YkNvcmU6Ok9mZmxpbmVBdWRpb0NvbXBsZXRpb25FdmVudDo6Y3JlYXRlKToKKyAgICAgICAgKFdl
YkNvcmU6Ok9mZmxpbmVBdWRpb0NvbXBsZXRpb25FdmVudDo6T2ZmbGluZUF1ZGlvQ29tcGxldGlv
bkV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6Ok9mZmxpbmVBdWRpb0NvbXBsZXRpb25FdmVudDo6
fk9mZmxpbmVBdWRpb0NvbXBsZXRpb25FdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpPZmZsaW5l
QXVkaW9Db21wbGV0aW9uRXZlbnQ6OmlzT2ZmbGluZUF1ZGlvQ29tcGxldGlvbkV2ZW50KToKKyAg
ICAgICAgKiB3ZWJhdWRpby9PZmZsaW5lQXVkaW9Db21wbGV0aW9uRXZlbnQuaDogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlOjpPZmZsaW5lQXVkaW9Db21wbGV0aW9uRXZlbnQ6OnJlbmRlcmVkQnVm
ZmVyKToKKyAgICAgICAgKiB3ZWJhdWRpby9PZmZsaW5lQXVkaW9Db21wbGV0aW9uRXZlbnQuaWRs
OiBBZGRlZC4KKyAgICAgICAgKiB3ZWJhdWRpby9PZmZsaW5lQXVkaW9EZXN0aW5hdGlvbk5vZGUu
Y3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6Ok9mZmxpbmVBdWRpb0Rlc3RpbmF0aW9uTm9k
ZTo6T2ZmbGluZUF1ZGlvRGVzdGluYXRpb25Ob2RlKToKKyAgICAgICAgKFdlYkNvcmU6Ok9mZmxp
bmVBdWRpb0Rlc3RpbmF0aW9uTm9kZTo6fk9mZmxpbmVBdWRpb0Rlc3RpbmF0aW9uTm9kZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpPZmZsaW5lQXVkaW9EZXN0aW5hdGlvbk5vZGU6OmluaXRpYWxpemUp
OgorICAgICAgICAoV2ViQ29yZTo6T2ZmbGluZUF1ZGlvRGVzdGluYXRpb25Ob2RlOjp1bmluaXRp
YWxpemUpOgorICAgICAgICAoV2ViQ29yZTo6T2ZmbGluZUF1ZGlvRGVzdGluYXRpb25Ob2RlOjpz
dGFydFJlbmRlcmluZyk6CisgICAgICAgIChXZWJDb3JlOjpPZmZsaW5lQXVkaW9EZXN0aW5hdGlv
bk5vZGU6OnJlbmRlckVudHJ5KToKKyAgICAgICAgKFdlYkNvcmU6Ok9mZmxpbmVBdWRpb0Rlc3Rp
bmF0aW9uTm9kZTo6cmVuZGVyKToKKyAgICAgICAgKFdlYkNvcmU6Ok9mZmxpbmVBdWRpb0Rlc3Rp
bmF0aW9uTm9kZTo6bm90aWZ5Q29tcGxldGVEaXNwYXRjaCk6CisgICAgICAgIChXZWJDb3JlOjpP
ZmZsaW5lQXVkaW9EZXN0aW5hdGlvbk5vZGU6Om5vdGlmeUNvbXBsZXRlKToKKyAgICAgICAgKiB3
ZWJhdWRpby9PZmZsaW5lQXVkaW9EZXN0aW5hdGlvbk5vZGUuaDogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlOjpPZmZsaW5lQXVkaW9EZXN0aW5hdGlvbk5vZGU6OmNyZWF0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpPZmZsaW5lQXVkaW9EZXN0aW5hdGlvbk5vZGU6OnNhbXBsZVJhdGUpOgorCiAyMDEx
LTA0LTA0ICBDaGFuZyBTaHUgIDxjc2h1QHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQg
YnkgUnlvc3VrZSBOaXdhLgpJbmRleDogU291cmNlL1dlYkNvcmUvRGVyaXZlZFNvdXJjZXMubWFr
ZQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9EZXJpdmVkU291cmNlcy5tYWtlCShyZXZp
c2lvbiA4Mjg4NikKKysrIFNvdXJjZS9XZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UJKHdvcmtp
bmcgY29weSkKQEAgLTczLDYgKzczLDcgQEAgRE9NX0NMQVNTRVMgPSBcCiAgICAgSGlnaFBhc3My
RmlsdGVyTm9kZSBcCiAgICAgSmF2YVNjcmlwdEF1ZGlvTm9kZSBcCiAgICAgTG93UGFzczJGaWx0
ZXJOb2RlIFwKKyAgICBPZmZsaW5lQXVkaW9Db21wbGV0aW9uRXZlbnQgXAogICAgIFJlYWx0aW1l
QW5hbHlzZXJOb2RlIFwKICAgICBCYXJJbmZvIFwKICAgICBCZWZvcmVMb2FkRXZlbnQgXApJbmRl
eDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL1dlYkNvcmUuZ3lwaQkocmV2aXNpb24gODI4ODYpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLmd5cGkJKHdvcmtpbmcgY29weSkKQEAgLTEzODgsNiArMTM4OCw3IEBACiAgICAgICAgICAg
ICAnd2ViYXVkaW8vSGlnaFBhc3MyRmlsdGVyTm9kZS5pZGwnLAogICAgICAgICAgICAgJ3dlYmF1
ZGlvL0phdmFTY3JpcHRBdWRpb05vZGUuaWRsJywKICAgICAgICAgICAgICd3ZWJhdWRpby9Mb3dQ
YXNzMkZpbHRlck5vZGUuaWRsJywKKyAgICAgICAgICAgICd3ZWJhdWRpby9PZmZsaW5lQXVkaW9D
b21wbGV0aW9uRXZlbnQuaWRsJywKICAgICAgICAgICAgICd3ZWJhdWRpby9SZWFsdGltZUFuYWx5
c2VyTm9kZS5pZGwnLAogICAgICAgICAgICAgJ3dlYnNvY2tldHMvV2ViU29ja2V0LmlkbCcsCiAg
ICAgICAgICAgICAnd29ya2Vycy9BYnN0cmFjdFdvcmtlci5pZGwnLApAQCAtNTg4Nyw2ICs1ODg4
LDggQEAKICAgICAgICAgICAgICd3ZWJhdWRpby9CaXF1YWRQcm9jZXNzb3IuaCcsCiAgICAgICAg
ICAgICAnd2ViYXVkaW8vQ29udm9sdmVyTm9kZS5jcHAnLAogICAgICAgICAgICAgJ3dlYmF1ZGlv
L0NvbnZvbHZlck5vZGUuaCcsCisgICAgICAgICAgICAnd2ViYXVkaW8vRGVmYXVsdEF1ZGlvRGVz
dGluYXRpb25Ob2RlLmNwcCcsCisgICAgICAgICAgICAnd2ViYXVkaW8vRGVmYXVsdEF1ZGlvRGVz
dGluYXRpb25Ob2RlLmgnLAogICAgICAgICAgICAgJ3dlYmF1ZGlvL0RlbGF5RFNQS2VybmVsLmNw
cCcsCiAgICAgICAgICAgICAnd2ViYXVkaW8vRGVsYXlEU1BLZXJuZWwuaCcsCiAgICAgICAgICAg
ICAnd2ViYXVkaW8vRGVsYXlOb2RlLmNwcCcsCkBAIC01ODk5LDYgKzU5MDIsMTAgQEAKICAgICAg
ICAgICAgICd3ZWJhdWRpby9KYXZhU2NyaXB0QXVkaW9Ob2RlLmgnLAogICAgICAgICAgICAgJ3dl
YmF1ZGlvL0xvd1Bhc3MyRmlsdGVyTm9kZS5jcHAnLAogICAgICAgICAgICAgJ3dlYmF1ZGlvL0xv
d1Bhc3MyRmlsdGVyTm9kZS5oJywKKyAgICAgICAgICAgICd3ZWJhdWRpby9PZmZsaW5lQXVkaW9D
b21wbGV0aW9uRXZlbnQuY3BwJywKKyAgICAgICAgICAgICd3ZWJhdWRpby9PZmZsaW5lQXVkaW9D
b21wbGV0aW9uRXZlbnQuaCcsCisgICAgICAgICAgICAnd2ViYXVkaW8vT2ZmbGluZUF1ZGlvRGVz
dGluYXRpb25Ob2RlLmNwcCcsCisgICAgICAgICAgICAnd2ViYXVkaW8vT2ZmbGluZUF1ZGlvRGVz
dGluYXRpb25Ob2RlLmgnLAogICAgICAgICAgICAgJ3dlYmF1ZGlvL1JlYWx0aW1lQW5hbHlzZXIu
Y3BwJywKICAgICAgICAgICAgICd3ZWJhdWRpby9SZWFsdGltZUFuYWx5c2VyLmgnLAogICAgICAg
ICAgICAgJ3dlYmF1ZGlvL1JlYWx0aW1lQW5hbHlzZXJOb2RlLmNwcCcsCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lv
biA4Mjg4NikKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtNTc2Miw2ICs1NzYyLDggQEAKIAkJRkFCRTcyRkQxMDU5
QzIxMTAwRDk5OUREIC8qIE1hdGhNTEVsZW1lbnRGYWN0b3J5LmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZBQkU3MkZCMTA1OUMyMTEwMEQ5OTlERCAv
KiBNYXRoTUxFbGVtZW50RmFjdG9yeS5jcHAgKi87IH07CiAJCUZBQkU3MkZFMTA1OUMyMTEwMEQ5
OTlERCAvKiBNYXRoTUxOYW1lcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBGQUJFNzJGQzEwNTlDMjExMDBEOTk5REQgLyogTWF0aE1MTmFtZXMuY3Bw
ICovOyB9OwogCQlGQkMyMjBERjEyMzdGQkVCMDBCQ0Y3ODggLyogR3JhcGhpY3NDb250ZXh0M0RP
cGVuR0wuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RkJDMjIwREUxMjM3RkJFQjAwQkNGNzg4IC8qIEdyYXBoaWNzQ29udGV4dDNET3BlbkdMLmNwcCAq
LzsgfTsKKwkJRkQwNkRGQTUxMzRBNERFRjAwNkY1RDdEIC8qIERlZmF1bHRBdWRpb0Rlc3RpbmF0
aW9uTm9kZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBGRDA2REZBMzEzNEE0REVGMDA2RjVEN0QgLyogRGVmYXVsdEF1ZGlvRGVzdGluYXRpb25Ob2Rl
LmNwcCAqLzsgfTsKKwkJRkQwNkRGQTYxMzRBNERFRjAwNkY1RDdEIC8qIERlZmF1bHRBdWRpb0Rl
c3RpbmF0aW9uTm9kZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gRkQwNkRGQTQxMzRBNERFRjAwNkY1RDdEIC8qIERlZmF1bHRBdWRpb0Rlc3RpbmF0aW9u
Tm9kZS5oICovOyB9OwogCQlGRDJEQkYxMjEyQjA0OEEzMDBFRDk4QzYgLyogQWNjZWxlcmF0ZS5m
cmFtZXdvcmsgaW4gRnJhbWV3b3JrcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBGRDJEQkYwRTEyQjA0OEEzMDBFRDk4QzYgLyogQWNjZWxlcmF0ZS5mcmFtZXdvcmsgKi87IH07
CiAJCUZEMkRCRjEzMTJCMDQ4QTMwMEVEOThDNiAvKiBBdWRpb1Rvb2xib3guZnJhbWV3b3JrIGlu
IEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkQyREJGMEYx
MkIwNDhBMzAwRUQ5OEM2IC8qIEF1ZGlvVG9vbGJveC5mcmFtZXdvcmsgKi87IH07CiAJCUZEMkRC
RjE0MTJCMDQ4QTMwMEVEOThDNiAvKiBBdWRpb1VuaXQuZnJhbWV3b3JrIGluIEZyYW1ld29ya3Mg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkQyREJGMTAxMkIwNDhBMzAwRUQ5
OEM2IC8qIEF1ZGlvVW5pdC5mcmFtZXdvcmsgKi87IH07CkBAIC01OTIwLDExICs1OTIyLDE3IEBA
CiAJCUZEQTE1RUNFMTJCMDNGNjEwMDNBNTgzQSAvKiBKU0phdmFTY3JpcHRBdWRpb05vZGUuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZEQTE1RUNDMTJC
MDNGNjEwMDNBNTgzQSAvKiBKU0phdmFTY3JpcHRBdWRpb05vZGUuaCAqLzsgfTsKIAkJRkRBMTVF
RDExMkIwM0Y5NDAwM0E1ODNBIC8qIEpTRGVsYXlOb2RlLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZEQTE1RUNGMTJCMDNGOTQwMDNBNTgzQSAvKiBK
U0RlbGF5Tm9kZS5jcHAgKi87IH07CiAJCUZEQTE1RUQyMTJCMDNGOTQwMDNBNTgzQSAvKiBKU0Rl
bGF5Tm9kZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RkRBMTVFRDAxMkIwM0Y5NDAwM0E1ODNBIC8qIEpTRGVsYXlOb2RlLmggKi87IH07CisJCUZEQTNF
OTU5MTM0QTQ5RUYwMDhENEI1QSAvKiBPZmZsaW5lQXVkaW9Db21wbGV0aW9uRXZlbnQuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkRBM0U5NTUxMzRB
NDlFRjAwOEQ0QjVBIC8qIE9mZmxpbmVBdWRpb0NvbXBsZXRpb25FdmVudC5jcHAgKi87IH07CisJ
CUZEQTNFOTVBMTM0QTQ5RUYwMDhENEI1QSAvKiBPZmZsaW5lQXVkaW9Db21wbGV0aW9uRXZlbnQu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZEQTNFOTU2
MTM0QTQ5RUYwMDhENEI1QSAvKiBPZmZsaW5lQXVkaW9Db21wbGV0aW9uRXZlbnQuaCAqLzsgfTsK
KwkJRkRBM0U5NUIxMzRBNDlFRjAwOEQ0QjVBIC8qIE9mZmxpbmVBdWRpb0Rlc3RpbmF0aW9uTm9k
ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGREEz
RTk1NzEzNEE0OUVGMDA4RDRCNUEgLyogT2ZmbGluZUF1ZGlvRGVzdGluYXRpb25Ob2RlLmNwcCAq
LzsgfTsKKwkJRkRBM0U5NUMxMzRBNDlFRjAwOEQ0QjVBIC8qIE9mZmxpbmVBdWRpb0Rlc3RpbmF0
aW9uTm9kZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RkRBM0U5NTgxMzRBNDlFRjAwOEQ0QjVBIC8qIE9mZmxpbmVBdWRpb0Rlc3RpbmF0aW9uTm9kZS5o
ICovOyB9OwogCQlGREVBQUFGMzEyQjAyRUU0MDBEQ0YzM0IgLyogSlNBdWRpb0J1ZmZlclNvdXJj
ZU5vZGVDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gRkRFQUFBRUYxMkIwMkVFNDAwRENGMzNCIC8qIEpTQXVkaW9CdWZmZXJTb3VyY2VOb2Rl
Q3VzdG9tLmNwcCAqLzsgfTsKIAkJRkRFQUFBRjQxMkIwMkVFNDAwRENGMzNCIC8qIEpTQXVkaW9D
b250ZXh0Q3VzdG9tLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEZERUFBQUYwMTJCMDJFRTQwMERDRjMzQiAvKiBKU0F1ZGlvQ29udGV4dEN1c3RvbS5j
cHAgKi87IH07CiAJCUZERUFBQUY1MTJCMDJFRTQwMERDRjMzQiAvKiBKU0F1ZGlvTm9kZUN1c3Rv
bS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGREVB
QUFGMTEyQjAyRUU0MDBEQ0YzM0IgLyogSlNBdWRpb05vZGVDdXN0b20uY3BwICovOyB9OwogCQlG
REVBQUFGNjEyQjAyRUU0MDBEQ0YzM0IgLyogSlNDb252b2x2ZXJOb2RlQ3VzdG9tLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZERUFBQUYyMTJCMDJF
RTQwMERDRjMzQiAvKiBKU0NvbnZvbHZlck5vZGVDdXN0b20uY3BwICovOyB9OwogCQlGREVBQUFG
RTEyQjAyRjQ5MDBEQ0YzM0IgLyogSlNKYXZhU2NyaXB0QXVkaW9Ob2RlQ3VzdG9tLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZERUFBQUZEMTJCMDJG
NDkwMERDRjMzQiAvKiBKU0phdmFTY3JpcHRBdWRpb05vZGVDdXN0b20uY3BwICovOyB9OworCQlG
REY2QkFGODEzNEE0Qzk4MDA4MjI5MjAgLyogSlNPZmZsaW5lQXVkaW9Db21wbGV0aW9uRXZlbnQu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkRGNkJB
RjYxMzRBNEM5ODAwODIyOTIwIC8qIEpTT2ZmbGluZUF1ZGlvQ29tcGxldGlvbkV2ZW50LmNwcCAq
LzsgfTsKKwkJRkRGNkJBRjkxMzRBNEM5ODAwODIyOTIwIC8qIEpTT2ZmbGluZUF1ZGlvQ29tcGxl
dGlvbkV2ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBGREY2QkFGNzEzNEE0Qzk4MDA4MjI5MjAgLyogSlNPZmZsaW5lQXVkaW9Db21wbGV0aW9uRXZl
bnQuaCAqLzsgfTsKIAkJRkU2RkQ0ODgwRjY3NkU1NzAwMDkyODczIC8qIENvb3JkaW5hdGVzLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTZGRDQ4NTBG
Njc2RTU3MDAwOTI4NzMgLyogQ29vcmRpbmF0ZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlGRTZGRDQ4RDBGNjc2RTkzMDAwOTI4NzMgLyogSlND
b29yZGluYXRlcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBGRTZGRDQ4QjBGNjc2RTkzMDAwOTI4NzMgLyogSlNDb29yZGluYXRlcy5jcHAgKi87IH07
CiAJCUZFNkZENDhFMEY2NzZFOTMwMDA5Mjg3MyAvKiBKU0Nvb3JkaW5hdGVzLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTZGRDQ4QzBGNjc2RTkzMDAw
OTI4NzMgLyogSlNDb29yZGluYXRlcy5oICovOyB9OwpAQCAtMTIyNzksNiArMTIyODcsOCBAQAog
CQlGQUJFNzJGQjEwNTlDMjExMDBEOTk5REQgLyogTWF0aE1MRWxlbWVudEZhY3RvcnkuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTWF0aE1MRWxlbWVudEZhY3Rvcnku
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGQUJFNzJGQzEwNTlDMjExMDBEOTk5
REQgLyogTWF0aE1MTmFtZXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gTWF0aE1MTmFtZXMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGQkMyMjBE
RTEyMzdGQkVCMDBCQ0Y3ODggLyogR3JhcGhpY3NDb250ZXh0M0RPcGVuR0wuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gR3JhcGhpY3NDb250ZXh0M0RPcGVuR0wuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRDA2REZBMzEzNEE0REVGMDA2RjVEN0Qg
LyogRGVmYXVsdEF1ZGlvRGVzdGluYXRpb25Ob2RlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IERlZmF1bHRBdWRpb0Rlc3RpbmF0aW9uTm9kZS5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCUZEMDZERkE0MTM0QTRERUYwMDZGNUQ3RCAvKiBEZWZhdWx0
QXVkaW9EZXN0aW5hdGlvbk5vZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
RGVmYXVsdEF1ZGlvRGVzdGluYXRpb25Ob2RlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUZEMkRCRjBFMTJCMDQ4QTMwMEVEOThDNiAvKiBBY2NlbGVyYXRlLmZyYW1ld29yayAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHdyYXBwZXIuZnJh
bWV3b3JrOyBuYW1lID0gQWNjZWxlcmF0ZS5mcmFtZXdvcms7IHBhdGggPSAvU3lzdGVtL0xpYnJh
cnkvRnJhbWV3b3Jrcy9BY2NlbGVyYXRlLmZyYW1ld29yazsgc291cmNlVHJlZSA9ICI8YWJzb2x1
dGU+IjsgfTsKIAkJRkQyREJGMEYxMkIwNDhBMzAwRUQ5OEM2IC8qIEF1ZGlvVG9vbGJveC5mcmFt
ZXdvcmsgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB3
cmFwcGVyLmZyYW1ld29yazsgbmFtZSA9IEF1ZGlvVG9vbGJveC5mcmFtZXdvcms7IHBhdGggPSAv
U3lzdGVtL0xpYnJhcnkvRnJhbWV3b3Jrcy9BdWRpb1Rvb2xib3guZnJhbWV3b3JrOyBzb3VyY2VU
cmVlID0gIjxhYnNvbHV0ZT4iOyB9OwogCQlGRDJEQkYxMDEyQjA0OEEzMDBFRDk4QzYgLyogQXVk
aW9Vbml0LmZyYW1ld29yayAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHdyYXBwZXIuZnJhbWV3b3JrOyBuYW1lID0gQXVkaW9Vbml0LmZyYW1ld29yazsg
cGF0aCA9IC9TeXN0ZW0vTGlicmFyeS9GcmFtZXdvcmtzL0F1ZGlvVW5pdC5mcmFtZXdvcms7IHNv
dXJjZVRyZWUgPSAiPGFic29sdXRlPiI7IH07CkBAIC0xMjQ1NywxMSArMTI0NjcsMTggQEAKIAkJ
RkRBMTVFQ0MxMkIwM0Y2MTAwM0E1ODNBIC8qIEpTSmF2YVNjcmlwdEF1ZGlvTm9kZS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0phdmFTY3JpcHRBdWRpb05vZGUuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkRBMTVFQ0YxMkIwM0Y5NDAwM0E1ODNBIC8qIEpT
RGVsYXlOb2RlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTRGVs
YXlOb2RlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkRBMTVFRDAxMkIwM0Y5
NDAwM0E1ODNBIC8qIEpTRGVsYXlOb2RlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEpTRGVsYXlOb2RlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUZEQTNFOTU1
MTM0QTQ5RUYwMDhENEI1QSAvKiBPZmZsaW5lQXVkaW9Db21wbGV0aW9uRXZlbnQuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gT2ZmbGluZUF1ZGlvQ29tcGxldGlvbkV2
ZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkRBM0U5NTYxMzRBNDlFRjAw
OEQ0QjVBIC8qIE9mZmxpbmVBdWRpb0NvbXBsZXRpb25FdmVudC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBPZmZsaW5lQXVkaW9Db21wbGV0aW9uRXZlbnQuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkRBM0U5NTcxMzRBNDlFRjAwOEQ0QjVBIC8qIE9mZmxpbmVB
dWRpb0Rlc3RpbmF0aW9uTm9kZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBPZmZsaW5lQXVkaW9EZXN0aW5hdGlvbk5vZGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQlGREEzRTk1ODEzNEE0OUVGMDA4RDRCNUEgLyogT2ZmbGluZUF1ZGlvRGVzdGlu
YXRpb25Ob2RlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE9mZmxpbmVBdWRp
b0Rlc3RpbmF0aW9uTm9kZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGREEzRTk1
RDEzNEE0OUZGMDA4RDRCNUEgLyogT2ZmbGluZUF1ZGlvQ29tcGxldGlvbkV2ZW50LmlkbCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHRleHQ7IHBhdGggPSBPZmZsaW5lQXVkaW9Db21wbGV0aW9uRXZlbnQuaWRsOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGREVBQUFFRjEyQjAyRUU0MDBEQ0YzM0IgLyogSlNB
dWRpb0J1ZmZlclNvdXJjZU5vZGVDdXN0b20uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gSlNBdWRpb0J1ZmZlclNvdXJjZU5vZGVDdXN0b20uY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlGREVBQUFGMDEyQjAyRUU0MDBEQ0YzM0IgLyogSlNBdWRpb0Nv
bnRleHRDdXN0b20uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNB
dWRpb0NvbnRleHRDdXN0b20uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGREVB
QUFGMTEyQjAyRUU0MDBEQ0YzM0IgLyogSlNBdWRpb05vZGVDdXN0b20uY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNBdWRpb05vZGVDdXN0b20uY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlGREVBQUFGMjEyQjAyRUU0MDBEQ0YzM0IgLyogSlNDb252
b2x2ZXJOb2RlQ3VzdG9tLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IEpTQ29udm9sdmVyTm9kZUN1c3RvbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUZERUFBQUZEMTJCMDJGNDkwMERDRjMzQiAvKiBKU0phdmFTY3JpcHRBdWRpb05vZGVDdXN0b20u
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNKYXZhU2NyaXB0QXVk
aW9Ob2RlQ3VzdG9tLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkRGNkJBRjYx
MzRBNEM5ODAwODIyOTIwIC8qIEpTT2ZmbGluZUF1ZGlvQ29tcGxldGlvbkV2ZW50LmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTT2ZmbGluZUF1ZGlvQ29tcGxldGlv
bkV2ZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkRGNkJBRjcxMzRBNEM5
ODAwODIyOTIwIC8qIEpTT2ZmbGluZUF1ZGlvQ29tcGxldGlvbkV2ZW50LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTT2ZmbGluZUF1ZGlvQ29tcGxldGlvbkV2ZW50Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFNDlFRjk3MERDNTE0NjIwMDQyNjZFMSAvKiBE
YXNoYm9hcmRTdXBwb3J0Q1NTUHJvcGVydHlOYW1lcy5pbiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGgg
PSBEYXNoYm9hcmRTdXBwb3J0Q1NTUHJvcGVydHlOYW1lcy5pbjsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJRkU2RkQ0ODUwRjY3NkU1NzAwMDkyODczIC8qIENvb3JkaW5hdGVzLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvb3JkaW5hdGVzLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUZFNkZENDg2MEY2NzZFNTcwMDA5Mjg3MyAvKiBDb29yZGluYXRl
cy5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gQ29vcmRpbmF0ZXMuaWRsOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwpAQCAtMTk1NjIsNiArMTk1NzksOCBAQAogCQkJCUZEMzE1RkRFMTJC
MDI2NzYwMEMxQTM1OSAvKiBDb252b2x2ZXJOb2RlLmNwcCAqLywKIAkJCQlGRDMxNUZERjEyQjAy
Njc2MDBDMUEzNTkgLyogQ29udm9sdmVyTm9kZS5oICovLAogCQkJCUZEMzE1RkUwMTJCMDI2NzYw
MEMxQTM1OSAvKiBDb252b2x2ZXJOb2RlLmlkbCAqLywKKwkJCQlGRDA2REZBMzEzNEE0REVGMDA2
RjVEN0QgLyogRGVmYXVsdEF1ZGlvRGVzdGluYXRpb25Ob2RlLmNwcCAqLywKKwkJCQlGRDA2REZB
NDEzNEE0REVGMDA2RjVEN0QgLyogRGVmYXVsdEF1ZGlvRGVzdGluYXRpb25Ob2RlLmggKi8sCiAJ
CQkJRkQzMTVGRTExMkIwMjY3NjAwQzFBMzU5IC8qIERlbGF5RFNQS2VybmVsLmNwcCAqLywKIAkJ
CQlGRDMxNUZFMjEyQjAyNjc2MDBDMUEzNTkgLyogRGVsYXlEU1BLZXJuZWwuaCAqLywKIAkJCQlG
RDMxNUZFMzEyQjAyNjc2MDBDMUEzNTkgLyogRGVsYXlOb2RlLmNwcCAqLywKQEAgLTE5NTc4LDYg
KzE5NTk3LDExIEBACiAJCQkJRkQzMTVGRUUxMkIwMjY3NjAwQzFBMzU5IC8qIExvd1Bhc3MyRmls
dGVyTm9kZS5jcHAgKi8sCiAJCQkJRkQzMTVGRUYxMkIwMjY3NjAwQzFBMzU5IC8qIExvd1Bhc3My
RmlsdGVyTm9kZS5oICovLAogCQkJCUZEMzE1RkYwMTJCMDI2NzYwMEMxQTM1OSAvKiBMb3dQYXNz
MkZpbHRlck5vZGUuaWRsICovLAorCQkJCUZEQTNFOTU1MTM0QTQ5RUYwMDhENEI1QSAvKiBPZmZs
aW5lQXVkaW9Db21wbGV0aW9uRXZlbnQuY3BwICovLAorCQkJCUZEQTNFOTU2MTM0QTQ5RUYwMDhE
NEI1QSAvKiBPZmZsaW5lQXVkaW9Db21wbGV0aW9uRXZlbnQuaCAqLywKKwkJCQlGREEzRTk1RDEz
NEE0OUZGMDA4RDRCNUEgLyogT2ZmbGluZUF1ZGlvQ29tcGxldGlvbkV2ZW50LmlkbCAqLywKKwkJ
CQlGREEzRTk1NzEzNEE0OUVGMDA4RDRCNUEgLyogT2ZmbGluZUF1ZGlvRGVzdGluYXRpb25Ob2Rl
LmNwcCAqLywKKwkJCQlGREEzRTk1ODEzNEE0OUVGMDA4RDRCNUEgLyogT2ZmbGluZUF1ZGlvRGVz
dGluYXRpb25Ob2RlLmggKi8sCiAJCQkJRkQzMTVGRjExMkIwMjY3NjAwQzFBMzU5IC8qIFJlYWx0
aW1lQW5hbHlzZXIuY3BwICovLAogCQkJCUZEMzE1RkYyMTJCMDI2NzYwMEMxQTM1OSAvKiBSZWFs
dGltZUFuYWx5c2VyLmggKi8sCiAJCQkJRkQzMTVGRjMxMkIwMjY3NjAwQzFBMzU5IC8qIFJlYWx0
aW1lQW5hbHlzZXJOb2RlLmNwcCAqLywKQEAgLTE5NzAzLDYgKzE5NzI3LDggQEAKIAkJCQlGREEx
NUVDQzEyQjAzRjYxMDAzQTU4M0EgLyogSlNKYXZhU2NyaXB0QXVkaW9Ob2RlLmggKi8sCiAJCQkJ
RkRBMTVFQzMxMkIwM0YzQjAwM0E1ODNBIC8qIEpTTG93UGFzczJGaWx0ZXJOb2RlLmNwcCAqLywK
IAkJCQlGREExNUVDNDEyQjAzRjNCMDAzQTU4M0EgLyogSlNMb3dQYXNzMkZpbHRlck5vZGUuaCAq
LywKKwkJCQlGREY2QkFGNjEzNEE0Qzk4MDA4MjI5MjAgLyogSlNPZmZsaW5lQXVkaW9Db21wbGV0
aW9uRXZlbnQuY3BwICovLAorCQkJCUZERjZCQUY3MTM0QTRDOTgwMDgyMjkyMCAvKiBKU09mZmxp
bmVBdWRpb0NvbXBsZXRpb25FdmVudC5oICovLAogCQkJCUZEQTE1RUM3MTJCMDNGNTAwMDNBNTgz
QSAvKiBKU1JlYWx0aW1lQW5hbHlzZXJOb2RlLmNwcCAqLywKIAkJCQlGREExNUVDODEyQjAzRjUw
MDAzQTU4M0EgLyogSlNSZWFsdGltZUFuYWx5c2VyTm9kZS5oICovLAogCQkJKTsKQEAgLTIyNzg4
LDYgKzIyODE0LDEwIEBACiAJCQkJOTNGMTk5RUQwODI0NUU1OTAwMUU5QUJDIC8qIFhTTFRQcm9j
ZXNzb3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUUxQkU1MTJFMENGNkM1MTIwMDJFQTk1OSAvKiBY
U0xUVW5pY29kZVNvcnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTk3N0UyRTBGMTJGMEZDOUMwMEMx
MzM3OSAvKiBYU1NGaWx0ZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCUZEQTNFOTVBMTM0QTQ5RUYw
MDhENEI1QSAvKiBPZmZsaW5lQXVkaW9Db21wbGV0aW9uRXZlbnQuaCBpbiBIZWFkZXJzICovLAor
CQkJCUZEQTNFOTVDMTM0QTQ5RUYwMDhENEI1QSAvKiBPZmZsaW5lQXVkaW9EZXN0aW5hdGlvbk5v
ZGUuaCBpbiBIZWFkZXJzICovLAorCQkJCUZERjZCQUY5MTM0QTRDOTgwMDgyMjkyMCAvKiBKU09m
ZmxpbmVBdWRpb0NvbXBsZXRpb25FdmVudC5oIGluIEhlYWRlcnMgKi8sCisJCQkJRkQwNkRGQTYx
MzRBNERFRjAwNkY1RDdEIC8qIERlZmF1bHRBdWRpb0Rlc3RpbmF0aW9uTm9kZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7
CiAJCX07CkBAIC0yNTQ2OCw2ICsyNTQ5OCwxMCBAQAogCQkJCTkzRjE5QjA1MDgyNDVFNTkwMDFF
OUFCQyAvKiBYU0xUUHJvY2Vzc29yTGlieHNsdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlFMUJF
NTEyRDBDRjZDNTEyMDAyRUE5NTkgLyogWFNMVFVuaWNvZGVTb3J0LmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTk3N0UyRTBFMTJGMEZDOUMwMEMxMzM3OSAvKiBYU1NGaWx0ZXIuY3BwIGluIFNvdXJj
ZXMgKi8sCisJCQkJRkRBM0U5NTkxMzRBNDlFRjAwOEQ0QjVBIC8qIE9mZmxpbmVBdWRpb0NvbXBs
ZXRpb25FdmVudC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlGREEzRTk1QjEzNEE0OUVGMDA4RDRC
NUEgLyogT2ZmbGluZUF1ZGlvRGVzdGluYXRpb25Ob2RlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJ
CUZERjZCQUY4MTM0QTRDOTgwMDgyMjkyMCAvKiBKU09mZmxpbmVBdWRpb0NvbXBsZXRpb25FdmVu
dC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlGRDA2REZBNTEzNEE0REVGMDA2RjVEN0QgLyogRGVm
YXVsdEF1ZGlvRGVzdGluYXRpb25Ob2RlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1
bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpJbmRleDogU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNBdWRpb0NvbnRleHRDdXN0b20uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQXVkaW9Db250ZXh0Q3VzdG9tLmNwcAko
cmV2aXNpb24gODI4ODYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0F1ZGlvQ29u
dGV4dEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU0LDggKzU0LDI4IEBAIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgSlNBdWRpb0NvbnQKIAogICAgIERvY3VtZW50KiBkb2N1bWVu
dCA9IHN0YXRpY19jYXN0PERvY3VtZW50Kj4oc2NyaXB0RXhlY3V0aW9uQ29udGV4dCk7CiAKLSAg
ICBSZWZQdHI8QXVkaW9Db250ZXh0PiBjb250ZXh0ID0gQXVkaW9Db250ZXh0OjpjcmVhdGUoZG9j
dW1lbnQpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoYXNPYmplY3QodG9KUyhleGVjLCBq
c0NvbnN0cnVjdG9yLT5nbG9iYWxPYmplY3QoKSwgY29udGV4dC5nZXQoKSkpKTsKKyAgICBSZWZQ
dHI8QXVkaW9Db250ZXh0PiBhdWRpb0NvbnRleHQ7CisgICAgCisgICAgaWYgKCFleGVjLT5hcmd1
bWVudENvdW50KCkpIHsKKyAgICAgICAgLy8gQ29uc3RydWN0b3IgZm9yIGRlZmF1bHQgQXVkaW9D
b250ZXh0IHdoaWNoIHRhbGtzIHRvIGF1ZGlvIGhhcmR3YXJlLgorICAgICAgICBhdWRpb0NvbnRl
eHQgPSBBdWRpb0NvbnRleHQ6OmNyZWF0ZShkb2N1bWVudCk7CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgLy8gQ29uc3RydWN0b3IgZm9yIG9mZmxpbmUgKHJlbmRlci10YXJnZXQpIEF1ZGlvQ29udGV4
dCB3aGljaCByZW5kZXJzIGludG8gYW4gQXVkaW9CdWZmZXIuCisgICAgICAgIC8vIG5ldyBBdWRp
b0NvbnRleHQoaW4gdW5zaWduZWQgbG9uZyBudW1iZXJPZkNoYW5uZWxzLCBpbiB1bnNpZ25lZCBs
b25nIG51bWJlck9mRnJhbWVzLCBpbiBmbG9hdCBzYW1wbGVSYXRlKTsKKyAgICAgICAgaWYgKGV4
ZWMtPmFyZ3VtZW50Q291bnQoKSA8IDMpCisgICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihl
eGVjLCBjcmVhdGVTeW50YXhFcnJvcihleGVjLCAiTm90IGVub3VnaCBhcmd1bWVudHMiKSk7CisK
KyAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZDaGFubmVscyA9IGV4ZWMtPmFyZ3VtZW50KDApLnRv
SW50MzIoZXhlYyk7CisgICAgICAgIHVuc2lnbmVkIG51bWJlck9mRnJhbWVzID0gZXhlYy0+YXJn
dW1lbnQoMSkudG9JbnQzMihleGVjKTsKKyAgICAgICAgZmxvYXQgc2FtcGxlUmF0ZSA9IGV4ZWMt
PmFyZ3VtZW50KDIpLnRvRmxvYXQoZXhlYyk7CisKKyAgICAgICAgYXVkaW9Db250ZXh0ID0gQXVk
aW9Db250ZXh0OjpjcmVhdGVPZmZsaW5lQ29udGV4dChkb2N1bWVudCwgbnVtYmVyT2ZDaGFubmVs
cywgbnVtYmVyT2ZGcmFtZXMsIHNhbXBsZVJhdGUpOworICAgIH0KKworICAgIGlmICghYXVkaW9D
b250ZXh0LmdldCgpKQorICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBjcmVhdGVSZWZl
cmVuY2VFcnJvcihleGVjLCAiRXJyb3IgY3JlYXRpbmcgQXVkaW9Db250ZXh0IikpOworCisgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShhc09iamVjdCh0b0pTKGV4ZWMsIGpzQ29uc3RydWN0b3It
Pmdsb2JhbE9iamVjdCgpLCBhdWRpb0NvbnRleHQuZ2V0KCkpKSk7CiB9CiAKIEpTVmFsdWUgSlNB
dWRpb0NvbnRleHQ6OmNyZWF0ZUJ1ZmZlcihFeGVjU3RhdGUqIGV4ZWMpCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50Q3VzdG9tLmNwcAkocmV2aXNpb24gODI4ODYp
CisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50Q3VzdG9tLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTAxLDYgKzEwMSw4IEBACiAjaWYgRU5BQkxFKFdFQl9BVURJTykKICNpbmNs
dWRlICJBdWRpb1Byb2Nlc3NpbmdFdmVudC5oIgogI2luY2x1ZGUgIkpTQXVkaW9Qcm9jZXNzaW5n
RXZlbnQuaCIKKyNpbmNsdWRlICJKU09mZmxpbmVBdWRpb0NvbXBsZXRpb25FdmVudC5oIgorI2lu
Y2x1ZGUgIk9mZmxpbmVBdWRpb0NvbXBsZXRpb25FdmVudC5oIgogI2VuZGlmCiAKIHVzaW5nIG5h
bWVzcGFjZSBKU0M7CkBAIC0xOTAsNiArMTkyLDggQEAgSlNWYWx1ZSB0b0pTKEV4ZWNTdGF0ZSog
ZXhlYywgSlNET01HbG9iYQogI2lmIEVOQUJMRShXRUJfQVVESU8pCiAgICAgZWxzZSBpZiAoZXZl
bnQtPmlzQXVkaW9Qcm9jZXNzaW5nRXZlbnQoKSkKICAgICAgICAgd3JhcHBlciA9IENSRUFURV9E
T01fT0JKRUNUX1dSQVBQRVIoZXhlYywgZ2xvYmFsT2JqZWN0LCBBdWRpb1Byb2Nlc3NpbmdFdmVu
dCwgZXZlbnQpOworICAgIGVsc2UgaWYgKGV2ZW50LT5pc09mZmxpbmVBdWRpb0NvbXBsZXRpb25F
dmVudCgpKQorICAgICAgICB3cmFwcGVyID0gQ1JFQVRFX0RPTV9PQkpFQ1RfV1JBUFBFUihleGVj
LCBnbG9iYWxPYmplY3QsIE9mZmxpbmVBdWRpb0NvbXBsZXRpb25FdmVudCwgZXZlbnQpOwogI2Vu
ZGlmCiAjaWYgRU5BQkxFKElOUFVUX1NQRUVDSCkKICAgICBlbHNlIGlmIChldmVudC0+aXNTcGVl
Y2hJbnB1dEV2ZW50KCkpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50
VGFyZ2V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2
ZW50VGFyZ2V0LmNwcAkocmV2aXNpb24gODI4ODYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0V2ZW50VGFyZ2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODQsNiArODQsOCBAQAog
I2VuZGlmCiAKICNpZiBFTkFCTEUoV0VCX0FVRElPKQorI2luY2x1ZGUgIkF1ZGlvQ29udGV4dC5o
IgorI2luY2x1ZGUgIkpTQXVkaW9Db250ZXh0LmgiCiAjaW5jbHVkZSAiSlNKYXZhU2NyaXB0QXVk
aW9Ob2RlLmgiCiAjaW5jbHVkZSAiSmF2YVNjcmlwdEF1ZGlvTm9kZS5oIgogI2VuZGlmCkBAIC0x
NzMsNiArMTc1LDggQEAgSlNWYWx1ZSB0b0pTKEV4ZWNTdGF0ZSogZXhlYywgSlNET01HbG9iYQog
I2lmIEVOQUJMRShXRUJfQVVESU8pCiAgICAgaWYgKEphdmFTY3JpcHRBdWRpb05vZGUqIGpzQXVk
aW9Ob2RlID0gdGFyZ2V0LT50b0phdmFTY3JpcHRBdWRpb05vZGUoKSkKICAgICAgICAgcmV0dXJu
IHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBqc0F1ZGlvTm9kZSk7CisgICAgaWYgKEF1ZGlvQ29u
dGV4dCogYXVkaW9Db250ZXh0ID0gdGFyZ2V0LT50b0F1ZGlvQ29udGV4dCgpKQorICAgICAgICBy
ZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIGF1ZGlvQ29udGV4dCk7CiAjZW5kaWYKIAog
I2lmIEVOQUJMRShXRUJfU09DS0VUUykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4
L1Y4RE9NV3JhcHBlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
djgvVjhET01XcmFwcGVyLmNwcAkocmV2aXNpb24gODI4ODYpCisrKyBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy92OC9WOERPTVdyYXBwZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NCw2ICs4NCw3
IEBACiAjZW5kaWYKIAogI2lmIEVOQUJMRShXRUJfQVVESU8pCisjaW5jbHVkZSAiVjhBdWRpb0Nv
bnRleHQuaCIKICNpbmNsdWRlICJWOEphdmFTY3JpcHRBdWRpb05vZGUuaCIKICNlbmRpZgogCkBA
IC00NDQsNiArNDQ1LDggQEAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4RE9NV3JhcHBlcjo6Y29u
dgogI2lmIEVOQUJMRShXRUJfQVVESU8pCiAgICAgaWYgKEphdmFTY3JpcHRBdWRpb05vZGUqIGpz
QXVkaW9Ob2RlID0gdGFyZ2V0LT50b0phdmFTY3JpcHRBdWRpb05vZGUoKSkKICAgICAgICAgcmV0
dXJuIHRvVjgoanNBdWRpb05vZGUpOworICAgIGlmIChBdWRpb0NvbnRleHQqIGF1ZGlvQ29udGV4
dCA9IHRhcmdldC0+dG9BdWRpb0NvbnRleHQoKSkKKyAgICAgICAgcmV0dXJuIHRvVjgoYXVkaW9D
b250ZXh0KTsKICNlbmRpZiAgICAKIAogICAgIEFTU0VSVCgwKTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEF1ZGlvQ29udGV4dEN1c3RvbS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4QXVkaW9Db250ZXh0Q3Vz
dG9tLmNwcAkocmV2aXNpb24gODI4ODYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9j
dXN0b20vVjhBdWRpb0NvbnRleHRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MSw3ICs1
MSwzNCBAQCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhBdWRpb0NvbnRleHQ6OmNvCiAgICAgaWYg
KCFkb2N1bWVudCkKICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoIkF1ZGlvQ29udGV4dCBjb25z
dHJ1Y3RvciBhc3NvY2lhdGVkIGRvY3VtZW50IGlzIHVuYXZhaWxhYmxlIiwgVjhQcm94eTo6UmVm
ZXJlbmNlRXJyb3IpOwogCi0gICAgUmVmUHRyPEF1ZGlvQ29udGV4dD4gYXVkaW9Db250ZXh0ID0g
QXVkaW9Db250ZXh0OjpjcmVhdGUoZG9jdW1lbnQpOworICAgIFJlZlB0cjxBdWRpb0NvbnRleHQ+
IGF1ZGlvQ29udGV4dDsKKyAgICAKKyAgICBpZiAoIWFyZ3MuTGVuZ3RoKCkpIHsKKyAgICAgICAg
Ly8gQ29uc3RydWN0b3IgZm9yIGRlZmF1bHQgQXVkaW9Db250ZXh0IHdoaWNoIHRhbGtzIHRvIGF1
ZGlvIGhhcmR3YXJlLgorICAgICAgICBhdWRpb0NvbnRleHQgPSBBdWRpb0NvbnRleHQ6OmNyZWF0
ZShkb2N1bWVudCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gQ29uc3RydWN0b3IgZm9yIG9m
ZmxpbmUgKHJlbmRlci10YXJnZXQpIEF1ZGlvQ29udGV4dCB3aGljaCByZW5kZXJzIGludG8gYW4g
QXVkaW9CdWZmZXIuCisgICAgICAgIC8vIG5ldyBBdWRpb0NvbnRleHQoaW4gdW5zaWduZWQgbG9u
ZyBudW1iZXJPZkNoYW5uZWxzLCBpbiB1bnNpZ25lZCBsb25nIG51bWJlck9mRnJhbWVzLCBpbiBm
bG9hdCBzYW1wbGVSYXRlKTsKKyAgICAgICAgaWYgKGFyZ3MuTGVuZ3RoKCkgPCAzKQorICAgICAg
ICAgICAgcmV0dXJuIHRocm93RXJyb3IoIk5vdCBlbm91Z2ggYXJndW1lbnRzIiwgVjhQcm94eTo6
U3ludGF4RXJyb3IpOworCisgICAgICAgIGJvb2wgb2sgPSBmYWxzZTsKKworICAgICAgICB1bnNp
Z25lZCBudW1iZXJPZkNoYW5uZWxzID0gdG9JbnQzMihhcmdzWzBdLCBvayk7CisgICAgICAgIGlm
ICghb2spCisgICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigiSW52YWxpZCBudW1iZXIgb2Yg
Y2hhbm5lbHMiLCBWOFByb3h5OjpTeW50YXhFcnJvcik7CisKKyAgICAgICAgdW5zaWduZWQgbnVt
YmVyT2ZGcmFtZXMgPSB0b0ludDMyKGFyZ3NbMV0sIG9rKTsKKyAgICAgICAgaWYgKCFvaykKKyAg
ICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCJJbnZhbGlkIG51bWJlciBvZiBmcmFtZXMiLCBW
OFByb3h5OjpTeW50YXhFcnJvcik7CisKKyAgICAgICAgZmxvYXQgc2FtcGxlUmF0ZSA9IHRvRmxv
YXQoYXJnc1syXSk7CisKKyAgICAgICAgYXVkaW9Db250ZXh0ID0gQXVkaW9Db250ZXh0OjpjcmVh
dGVPZmZsaW5lQ29udGV4dChkb2N1bWVudCwgbnVtYmVyT2ZDaGFubmVscywgbnVtYmVyT2ZGcmFt
ZXMsIHNhbXBsZVJhdGUpOworICAgIH0KKworICAgIGlmICghYXVkaW9Db250ZXh0LmdldCgpKQor
ICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigiRXJyb3IgY3JlYXRpbmcgQXVkaW9Db250ZXh0Iiwg
VjhQcm94eTo6U3ludGF4RXJyb3IpOwogICAgIAogICAgIC8vIFRyYW5zZm9ybSB0aGUgaG9sZGVy
IGludG8gYSB3cmFwcGVyIG9iamVjdCBmb3IgdGhlIGF1ZGlvIGNvbnRleHQuCiAgICAgVjhET01X
cmFwcGVyOjpzZXRET01XcmFwcGVyKGFyZ3MuSG9sZGVyKCksICZpbmZvLCBhdWRpb0NvbnRleHQu
Z2V0KCkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4RXZlbnRD
dXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3Rv
bS9WOEV2ZW50Q3VzdG9tLmNwcAkocmV2aXNpb24gODI4ODYpCisrKyBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy92OC9jdXN0b20vVjhFdmVudEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcw
LDYgKzcwLDcgQEAKIAogI2lmIEVOQUJMRShXRUJfQVVESU8pCiAjaW5jbHVkZSAiVjhBdWRpb1By
b2Nlc3NpbmdFdmVudC5oIgorI2luY2x1ZGUgIlY4T2ZmbGluZUF1ZGlvQ29tcGxldGlvbkV2ZW50
LmgiCiAjZW5kaWYKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMTY5LDYgKzE3MCw4IEBAIHY4
OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4KEV2ZW50KiBpbXBsKQogI2lmIEVOQUJMRShXRUJfQVVE
SU8pCiAgICAgaWYgKGltcGwtPmlzQXVkaW9Qcm9jZXNzaW5nRXZlbnQoKSkKICAgICAgICAgcmV0
dXJuIHRvVjgoc3RhdGljX2Nhc3Q8QXVkaW9Qcm9jZXNzaW5nRXZlbnQqPihpbXBsKSk7CisgICAg
aWYgKGltcGwtPmlzT2ZmbGluZUF1ZGlvQ29tcGxldGlvbkV2ZW50KCkpCisgICAgICAgIHJldHVy
biB0b1Y4KHN0YXRpY19jYXN0PE9mZmxpbmVBdWRpb0NvbXBsZXRpb25FdmVudCo+KGltcGwpKTsK
ICNlbmRpZgogI2lmIEVOQUJMRShJTlBVVF9TUEVFQ0gpCiAgICAgaWYgKGltcGwtPmlzU3BlZWNo
SW5wdXRFdmVudCgpKQpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRXZlbnQuY3BwCShyZXZpc2lvbiA4Mjg4NikKKysr
IFNvdXJjZS9XZWJDb3JlL2RvbS9FdmVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyOSw2ICsy
MjksMTEgQEAgYm9vbCBFdmVudDo6aXNBdWRpb1Byb2Nlc3NpbmdFdmVudCgpIGNvbgogewogICAg
IHJldHVybiBmYWxzZTsKIH0KKworYm9vbCBFdmVudDo6aXNPZmZsaW5lQXVkaW9Db21wbGV0aW9u
RXZlbnQoKSBjb25zdAoreworICAgIHJldHVybiBmYWxzZTsKK30KICNlbmRpZgogCiAjaWYgRU5B
QkxFKElOUFVUX1NQRUVDSCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9FdmVudC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9FdmVudC5oCShyZXZpc2lvbiA4Mjg4NikKKysr
IFNvdXJjZS9XZWJDb3JlL2RvbS9FdmVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzEsNiArMTMx
LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogI2VuZGlmCiAjaWYgRU5BQkxFKFdFQl9BVURJTykK
ICAgICAgICAgdmlydHVhbCBib29sIGlzQXVkaW9Qcm9jZXNzaW5nRXZlbnQoKSBjb25zdDsKKyAg
ICAgICAgdmlydHVhbCBib29sIGlzT2ZmbGluZUF1ZGlvQ29tcGxldGlvbkV2ZW50KCkgY29uc3Q7
CiAjZW5kaWYKICAgICAgICAgdmlydHVhbCBib29sIGlzRXJyb3JFdmVudCgpIGNvbnN0OwogI2lm
IEVOQUJMRShUT1VDSF9FVkVOVFMpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRUYXJn
ZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9FdmVudFRhcmdldC5jcHAJ
KHJldmlzaW9uIDgyODg2KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50VGFyZ2V0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTE5LDYgKzExOSwxMSBAQCBTVkdFbGVtZW50SW5zdGFuY2UqIEV2
ZW50VGFyZ2V0Ojp0b1NWR0VsCiAjZW5kaWYKIAogI2lmIEVOQUJMRShXRUJfQVVESU8pCitBdWRp
b0NvbnRleHQqIEV2ZW50VGFyZ2V0Ojp0b0F1ZGlvQ29udGV4dCgpCit7CisgICAgcmV0dXJuIDA7
Cit9CisKIEphdmFTY3JpcHRBdWRpb05vZGUqIEV2ZW50VGFyZ2V0Ojp0b0phdmFTY3JpcHRBdWRp
b05vZGUoKQogewogICAgIHJldHVybiAwOwpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50
VGFyZ2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50VGFyZ2V0LmgJ
KHJldmlzaW9uIDgyODg2KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50VGFyZ2V0LmgJKHdv
cmtpbmcgY29weSkKQEAgLTQwLDYgKzQwLDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCisg
ICAgY2xhc3MgQXVkaW9Db250ZXh0OwogICAgIGNsYXNzIEFic3RyYWN0V29ya2VyOwogICAgIGNs
YXNzIERlZGljYXRlZFdvcmtlckNvbnRleHQ7CiAgICAgY2xhc3MgRE9NQXBwbGljYXRpb25DYWNo
ZTsKQEAgLTEyMiw2ICsxMjMsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAjZW5kaWYKIAogI2lm
IEVOQUJMRShXRUJfQVVESU8pCisgICAgICAgIHZpcnR1YWwgQXVkaW9Db250ZXh0KiB0b0F1ZGlv
Q29udGV4dCgpOwogICAgICAgICB2aXJ0dWFsIEphdmFTY3JpcHRBdWRpb05vZGUqIHRvSmF2YVNj
cmlwdEF1ZGlvTm9kZSgpOwogI2VuZGlmCiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2F1ZGlvL0hSVEZEYXRhYmFzZUxvYWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vYXVkaW8vSFJURkRhdGFiYXNlTG9hZGVyLmNwcAkocmV2aXNpb24gODI4ODYp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9IUlRGRGF0YWJhc2VMb2FkZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xMjAsNiArMTIwLDE0IEBAIGJvb2wgSFJURkRhdGFiYXNlTG9h
ZGVyOjppc0xvYWRlZCgpIGNvbnMKICAgICByZXR1cm4gbV9ocnRmRGF0YWJhc2UuZ2V0KCk7CiB9
CiAKKwordm9pZCBIUlRGRGF0YWJhc2VMb2FkZXI6OndhaXRGb3JMb2FkZXJUaHJlYWRDb21wbGV0
aW9uKCkKK3sKKyAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKKyAgICBBU1NFUlQobV9kYXRh
YmFzZUxvYWRlclRocmVhZCk7CisgICAgd2FpdEZvclRocmVhZENvbXBsZXRpb24obV9kYXRhYmFz
ZUxvYWRlclRocmVhZCwgMCk7ICAgIAorfQorCiBIUlRGRGF0YWJhc2UqIEhSVEZEYXRhYmFzZUxv
YWRlcjo6ZGVmYXVsdEhSVEZEYXRhYmFzZSgpCiB7CiAgICAgaWYgKCFzX2xvYWRlcikKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0hSVEZEYXRhYmFzZUxvYWRlci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0hSVEZEYXRhYmFzZUxvYWRl
ci5oCShyZXZpc2lvbiA4Mjg4NikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0hS
VEZEYXRhYmFzZUxvYWRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC00NiwxMSArNDYsMTggQEAgcHVi
bGljOgogICAgIC8vIE11c3QgYmUgY2FsbGVkIGZyb20gdGhlIG1haW4gdGhyZWFkLgogICAgIHN0
YXRpYyBQYXNzUmVmUHRyPEhSVEZEYXRhYmFzZUxvYWRlcj4gY3JlYXRlQW5kTG9hZEFzeW5jaHJv
bm91c2x5SWZOZWNlc3NhcnkoZG91YmxlIHNhbXBsZVJhdGUpOwogCisgICAgLy8gUmV0dXJucyB0
aGUgc2luZ2xldG9uIEhSVEZEYXRhYmFzZUxvYWRlci4KKyAgICBzdGF0aWMgSFJURkRhdGFiYXNl
TG9hZGVyKiBsb2FkZXIoKSB7IHJldHVybiBzX2xvYWRlcjsgfQorICAgIAogICAgIC8vIEJvdGgg
Y29uc3RydWN0b3IgYW5kIGRlc3RydWN0b3IgbXVzdCBiZSBjYWxsZWQgZnJvbSB0aGUgbWFpbiB0
aHJlYWQuCiAgICAgfkhSVEZEYXRhYmFzZUxvYWRlcigpOwogICAgIAogICAgIC8vIFJldHVybnMg
dHJ1ZSBvbmNlIHRoZSBkZWZhdWx0IGRhdGFiYXNlIGhhcyBiZWVuIGNvbXBsZXRlbHkgbG9hZGVk
LgogICAgIGJvb2wgaXNMb2FkZWQoKSBjb25zdDsKKworICAgIC8vIE1heSBub3QgYmUgY2FsbGVk
IG9uIHRoZSBtYWluIHRocmVhZC4KKyAgICAvLyBUaGlzIGlzIHNvIGEgZGlmZmVyZW50IGJhY2tn
cm91bmQgdGhyZWFkIG1heSBzeW5jaHJvbml6ZSB3aXRoIHRoZSBsb2FkZXIgdGhyZWFkLgorICAg
IHZvaWQgd2FpdEZvckxvYWRlclRocmVhZENvbXBsZXRpb24oKTsKICAgICAKICAgICBIUlRGRGF0
YWJhc2UqIGRhdGFiYXNlKCkgeyByZXR1cm4gbV9ocnRmRGF0YWJhc2UuZ2V0KCk7IH0KICAgICAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvQ29udGV4dC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9Db250ZXh0LmNwcAkocmV2aXNpb24g
ODI4ODYpCisrKyBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb0NvbnRleHQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zOSw2ICszOSw3IEBACiAjaW5jbHVkZSAiQXVkaW9Ob2RlT3V0cHV0Lmgi
CiAjaW5jbHVkZSAiQXVkaW9QYW5uZXJOb2RlLmgiCiAjaW5jbHVkZSAiQ29udm9sdmVyTm9kZS5o
IgorI2luY2x1ZGUgIkRlZmF1bHRBdWRpb0Rlc3RpbmF0aW9uTm9kZS5oIgogI2luY2x1ZGUgIkRl
bGF5Tm9kZS5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiRkZURnJhbWUuaCIK
QEAgLTQ3LDYgKzQ4LDggQEAKICNpbmNsdWRlICJIaWdoUGFzczJGaWx0ZXJOb2RlLmgiCiAjaW5j
bHVkZSAiSmF2YVNjcmlwdEF1ZGlvTm9kZS5oIgogI2luY2x1ZGUgIkxvd1Bhc3MyRmlsdGVyTm9k
ZS5oIgorI2luY2x1ZGUgIk9mZmxpbmVBdWRpb0NvbXBsZXRpb25FdmVudC5oIgorI2luY2x1ZGUg
Ik9mZmxpbmVBdWRpb0Rlc3RpbmF0aW9uTm9kZS5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5n
LmgiCiAjaW5jbHVkZSAiUmVhbHRpbWVBbmFseXNlck5vZGUuaCIKIApAQCAtNjYsNiArNjksMTIg
QEAgUGFzc1JlZlB0cjxBdWRpb0NvbnRleHQ+IEF1ZGlvQ29udGV4dDo6YwogICAgIHJldHVybiBh
ZG9wdFJlZihuZXcgQXVkaW9Db250ZXh0KGRvY3VtZW50KSk7CiB9CiAKK1Bhc3NSZWZQdHI8QXVk
aW9Db250ZXh0PiBBdWRpb0NvbnRleHQ6OmNyZWF0ZU9mZmxpbmVDb250ZXh0KERvY3VtZW50KiBk
b2N1bWVudCwgdW5zaWduZWQgbnVtYmVyT2ZDaGFubmVscywgc2l6ZV90IG51bWJlck9mRnJhbWVz
LCBkb3VibGUgc2FtcGxlUmF0ZSkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IEF1ZGlvQ29u
dGV4dChkb2N1bWVudCwgbnVtYmVyT2ZDaGFubmVscywgbnVtYmVyT2ZGcmFtZXMsIHNhbXBsZVJh
dGUpKTsKK30KKworLy8gQ29uc3RydWN0b3IgZm9yIHJlbmRlcmluZyB0byB0aGUgYXVkaW8gaGFy
ZHdhcmUuCiBBdWRpb0NvbnRleHQ6OkF1ZGlvQ29udGV4dChEb2N1bWVudCogZG9jdW1lbnQpCiAg
ICAgOiBBY3RpdmVET01PYmplY3QoZG9jdW1lbnQsIHRoaXMpCiAgICAgLCBtX2lzSW5pdGlhbGl6
ZWQoZmFsc2UpCkBAIC03NSw2ICs4NCw0NiBAQCBBdWRpb0NvbnRleHQ6OkF1ZGlvQ29udGV4dChE
b2N1bWVudCogZG9jCiAgICAgLCBtX2Nvbm5lY3Rpb25Db3VudCgwKQogICAgICwgbV9hdWRpb1Ro
cmVhZCgwKQogICAgICwgbV9ncmFwaE93bmVyVGhyZWFkKFVuZGVmaW5lZFRocmVhZElkZW50aWZp
ZXIpCisgICAgLCBtX2lzT2ZmbGluZUNvbnRleHQoZmFsc2UpCit7CisgICAgY29uc3RydWN0Q29t
bW9uKCk7CisKKyAgICBtX2Rlc3RpbmF0aW9uTm9kZSA9IERlZmF1bHRBdWRpb0Rlc3RpbmF0aW9u
Tm9kZTo6Y3JlYXRlKHRoaXMpOworCisgICAgLy8gVGhpcyBzZXRzIGluIG1vdGlvbiBhbiBhc3lu
Y2hyb25vdXMgbG9hZGluZyBtZWNoYW5pc20gb24gYW5vdGhlciB0aHJlYWQuCisgICAgLy8gV2Ug
Y2FuIGNoZWNrIG1faHJ0ZkRhdGFiYXNlTG9hZGVyLT5pc0xvYWRlZCgpIHRvIGZpbmQgb3V0IHdo
ZXRoZXIgb3Igbm90IGl0IGhhcyBiZWVuIGZ1bGx5IGxvYWRlZC4KKyAgICAvLyBJdCdzIG5vdCB0
aGF0IHVzZWZ1bCB0byBoYXZlIGEgY2FsbGJhY2sgZnVuY3Rpb24gZm9yIHRoaXMgc2luY2UgdGhl
IGF1ZGlvIHRocmVhZCBhdXRvbWF0aWNhbGx5IHN0YXJ0cyByZW5kZXJpbmcgb24gdGhlIGdyYXBo
CisgICAgLy8gd2hlbiB0aGlzIGhhcyBmaW5pc2hlZCAoc2VlIEF1ZGlvRGVzdGluYXRpb25Ob2Rl
KS4KKyAgICBtX2hydGZEYXRhYmFzZUxvYWRlciA9IEhSVEZEYXRhYmFzZUxvYWRlcjo6Y3JlYXRl
QW5kTG9hZEFzeW5jaHJvbm91c2x5SWZOZWNlc3Nhcnkoc2FtcGxlUmF0ZSgpKTsKKworICAgIC8v
IEZJWE1FOiBmb3Igbm93IGRlZmF1bHQgQXVkaW9Db250ZXh0IGRvZXMgbm90IG5lZWQgYW4gZXhw
bGljaXQgc3RhcnRSZW5kZXJpbmcoKSBjYWxsLgorICAgIC8vIFdlIG1heSB3YW50IHRvIGNvbnNp
ZGVyIHJlcXVpcmluZyBpdCBmb3Igc3ltbWV0cnkgd2l0aCBPZmZsaW5lQXVkaW9Db250ZXh0Cisg
ICAgbV9kZXN0aW5hdGlvbk5vZGUtPnN0YXJ0UmVuZGVyaW5nKCk7Cit9CisKKy8vIENvbnN0cnVj
dG9yIGZvciBvZmZsaW5lIChub24tcmVhbHRpbWUpIHJlbmRlcmluZy4KK0F1ZGlvQ29udGV4dDo6
QXVkaW9Db250ZXh0KERvY3VtZW50KiBkb2N1bWVudCwgdW5zaWduZWQgbnVtYmVyT2ZDaGFubmVs
cywgc2l6ZV90IG51bWJlck9mRnJhbWVzLCBkb3VibGUgc2FtcGxlUmF0ZSkKKyAgICA6IEFjdGl2
ZURPTU9iamVjdChkb2N1bWVudCwgdGhpcykKKyAgICAsIG1faXNJbml0aWFsaXplZChmYWxzZSkK
KyAgICAsIG1faXNBdWRpb1RocmVhZEZpbmlzaGVkKGZhbHNlKQorICAgICwgbV9kb2N1bWVudChk
b2N1bWVudCkKKyAgICAsIG1fZGVzdGluYXRpb25Ob2RlKDApCisgICAgLCBtX2Nvbm5lY3Rpb25D
b3VudCgwKQorICAgICwgbV9hdWRpb1RocmVhZCgwKQorICAgICwgbV9ncmFwaE93bmVyVGhyZWFk
KFVuZGVmaW5lZFRocmVhZElkZW50aWZpZXIpCisgICAgLCBtX2lzT2ZmbGluZUNvbnRleHQodHJ1
ZSkKK3sKKyAgICBjb25zdHJ1Y3RDb21tb24oKTsKKworICAgIC8vIEZJWE1FOiB0aGUgcGFzc2Vk
IGluIHNhbXBsZVJhdGUgTVVTVCBtYXRjaCB0aGUgaGFyZHdhcmUgc2FtcGxlLXJhdGUgc2luY2Ug
SFJURkRhdGFiYXNlTG9hZGVyIGlzIGEgc2luZ2xldG9uLgorICAgIG1faHJ0ZkRhdGFiYXNlTG9h
ZGVyID0gSFJURkRhdGFiYXNlTG9hZGVyOjpjcmVhdGVBbmRMb2FkQXN5bmNocm9ub3VzbHlJZk5l
Y2Vzc2FyeShzYW1wbGVSYXRlKTsKKworICAgIC8vIENyZWF0ZSBhIG5ldyBkZXN0aW5hdGlvbiBm
b3Igb2ZmbGluZSByZW5kZXJpbmcuCisgICAgbV9yZW5kZXJUYXJnZXQgPSBBdWRpb0J1ZmZlcjo6
Y3JlYXRlKG51bWJlck9mQ2hhbm5lbHMsIG51bWJlck9mRnJhbWVzLCBzYW1wbGVSYXRlKTsKKyAg
ICBtX2Rlc3RpbmF0aW9uTm9kZSA9IE9mZmxpbmVBdWRpb0Rlc3RpbmF0aW9uTm9kZTo6Y3JlYXRl
KHRoaXMsIG1fcmVuZGVyVGFyZ2V0LmdldCgpKTsKK30KKwordm9pZCBBdWRpb0NvbnRleHQ6OmNv
bnN0cnVjdENvbW1vbigpCiB7CiAgICAgLy8gTm90ZTogYmVjYXVzZSBhZG9wdFJlZigpIHdvbid0
IGJlIGNhbGxlZCB1bnRpbCB3ZSBsZWF2ZSB0aGlzIGNvbnN0cnVjdG9yLCBidXQgY29kZSBpbiB0
aGlzIGNvbnN0cnVjdG9yIG5lZWRzIHRvIHJlZmVyZW5jZSB0aGlzIGNvbnRleHQsCiAgICAgLy8g
cmVsYXggdGhlIGNoZWNrLgpAQCAtODIsMTYgKzEzMSw5IEBAIEF1ZGlvQ29udGV4dDo6QXVkaW9D
b250ZXh0KERvY3VtZW50KiBkb2MKICAgICAKICAgICBGRlRGcmFtZTo6aW5pdGlhbGl6ZSgpOwog
ICAgIAotICAgIG1fZGVzdGluYXRpb25Ob2RlID0gQXVkaW9EZXN0aW5hdGlvbk5vZGU6OmNyZWF0
ZSh0aGlzKTsKICAgICBtX2xpc3RlbmVyID0gQXVkaW9MaXN0ZW5lcjo6Y3JlYXRlKCk7CiAgICAg
bV90ZW1wb3JhcnlNb25vQnVzID0gYWRvcHRQdHIobmV3IEF1ZGlvQnVzKDEsIEF1ZGlvTm9kZTo6
UHJvY2Vzc2luZ1NpemVJbkZyYW1lcykpOwogICAgIG1fdGVtcG9yYXJ5U3RlcmVvQnVzID0gYWRv
cHRQdHIobmV3IEF1ZGlvQnVzKDIsIEF1ZGlvTm9kZTo6UHJvY2Vzc2luZ1NpemVJbkZyYW1lcykp
OwotCi0gICAgLy8gVGhpcyBzZXRzIGluIG1vdGlvbiBhbiBhc3luY2hyb25vdXMgbG9hZGluZyBt
ZWNoYW5pc20gb24gYW5vdGhlciB0aHJlYWQuCi0gICAgLy8gV2UgY2FuIGNoZWNrIG1faHJ0ZkRh
dGFiYXNlTG9hZGVyLT5pc0xvYWRlZCgpIHRvIGZpbmQgb3V0IHdoZXRoZXIgb3Igbm90IGl0IGhh
cyBiZWVuIGZ1bGx5IGxvYWRlZC4KLSAgICAvLyBJdCdzIG5vdCB0aGF0IHVzZWZ1bCB0byBoYXZl
IGEgY2FsbGJhY2sgZnVuY3Rpb24gZm9yIHRoaXMgc2luY2UgdGhlIGF1ZGlvIHRocmVhZCBhdXRv
bWF0aWNhbGx5IHN0YXJ0cyByZW5kZXJpbmcgb24gdGhlIGdyYXBoCi0gICAgLy8gd2hlbiB0aGlz
IGhhcyBmaW5pc2hlZCAoc2VlIEF1ZGlvRGVzdGluYXRpb25Ob2RlKS4KLSAgICBtX2hydGZEYXRh
YmFzZUxvYWRlciA9IEhSVEZEYXRhYmFzZUxvYWRlcjo6Y3JlYXRlQW5kTG9hZEFzeW5jaHJvbm91
c2x5SWZOZWNlc3Nhcnkoc2FtcGxlUmF0ZSgpKTsKIH0KIAogQXVkaW9Db250ZXh0Ojp+QXVkaW9D
b250ZXh0KCkKQEAgLTE2Nyw3ICsyMDksNyBAQCB2b2lkIEF1ZGlvQ29udGV4dDo6c3RvcCgpCiAg
ICAgdW5pbml0aWFsaXplKCk7CiB9CiAKLURvY3VtZW50KiBBdWRpb0NvbnRleHQ6OmRvY3VtZW50
KCkKK0RvY3VtZW50KiBBdWRpb0NvbnRleHQ6OmRvY3VtZW50KCkgY29uc3QKIHsKICAgICBBU1NF
UlQobV9kb2N1bWVudCk7CiAgICAgcmV0dXJuIG1fZG9jdW1lbnQ7CkBAIC01MjYsNiArNTY4LDM5
IEBAIHZvaWQgQXVkaW9Db250ZXh0OjpoYW5kbGVEaXJ0eUF1ZGlvTm9kZU8KICAgICBtX2RpcnR5
QXVkaW9Ob2RlT3V0cHV0cy5jbGVhcigpOwogfQogCitTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBB
dWRpb0NvbnRleHQ6OnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBjb25zdAoreworICAgIHJldHVy
biBkb2N1bWVudCgpOworfQorCitBdWRpb0NvbnRleHQqIEF1ZGlvQ29udGV4dDo6dG9BdWRpb0Nv
bnRleHQoKQoreworICAgIHJldHVybiB0aGlzOworfQorCit2b2lkIEF1ZGlvQ29udGV4dDo6c3Rh
cnRSZW5kZXJpbmcoKQoreworICAgIGRlc3RpbmF0aW9uKCktPnN0YXJ0UmVuZGVyaW5nKCk7Cit9
CisKK3ZvaWQgQXVkaW9Db250ZXh0OjpmaXJlQ29tcGxldGlvbkV2ZW50KCkKK3sKKyAgICBBU1NF
UlQoaXNNYWluVGhyZWFkKCkpOworICAgIGlmICghaXNNYWluVGhyZWFkKCkpCisgICAgICAgIHJl
dHVybjsKKyAgICAgICAgCisgICAgQXVkaW9CdWZmZXIqIHJlbmRlcmVkQnVmZmVyID0gbV9yZW5k
ZXJUYXJnZXQuZ2V0KCk7CisKKyAgICBBU1NFUlQocmVuZGVyZWRCdWZmZXIpOworICAgIGlmICgh
cmVuZGVyZWRCdWZmZXIpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIEF2b2lkIGZpcmluZyB0
aGUgZXZlbnQgaWYgdGhlIGRvY3VtZW50IGhhcyBhbHJlYWR5IGdvbmUgYXdheS4KKyAgICBpZiAo
aGFzRG9jdW1lbnQoKSkgeworICAgICAgICAvLyBDYWxsIHRoZSBvZmZsaW5lIHJlbmRlcmluZyBj
b21wbGV0aW9uIGV2ZW50IGxpc3RlbmVyLgorICAgICAgICBkaXNwYXRjaEV2ZW50KE9mZmxpbmVB
dWRpb0NvbXBsZXRpb25FdmVudDo6Y3JlYXRlKHJlbmRlcmVkQnVmZmVyKSk7CisgICAgfQorfQog
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlv
L0F1ZGlvQ29udGV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1
ZGlvQ29udGV4dC5oCShyZXZpc2lvbiA4Mjg4NikKKysrIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlv
L0F1ZGlvQ29udGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw4IEBACiAjaW5jbHVk
ZSAiQWN0aXZlRE9NT2JqZWN0LmgiCiAjaW5jbHVkZSAiQXVkaW9CdXMuaCIKICNpbmNsdWRlICJB
dWRpb0Rlc3RpbmF0aW9uTm9kZS5oIgorI2luY2x1ZGUgIkV2ZW50TGlzdGVuZXIuaCIKKyNpbmNs
dWRlICJFdmVudFRhcmdldC5oIgogI2luY2x1ZGUgIkhSVEZEYXRhYmFzZUxvYWRlci5oIgogI2lu
Y2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL093blB0ci5oPgpAQCAtNTksMTMg
KzYxLDE5IEBAIGNsYXNzIEphdmFTY3JpcHRBdWRpb05vZGU7CiAvLyBBdWRpb0NvbnRleHQgaXMg
dGhlIGNvcm5lcnN0b25lIG9mIHRoZSB3ZWIgYXVkaW8gQVBJIGFuZCBhbGwgQXVkaW9Ob2RlcyBh
cmUgY3JlYXRlZCBmcm9tIGl0LgogLy8gRm9yIHRocmVhZCBzYWZldHkgYmV0d2VlbiB0aGUgYXVk
aW8gdGhyZWFkIGFuZCB0aGUgbWFpbiB0aHJlYWQsIGl0IGhhcyBhIHJlbmRlcmluZyBncmFwaCBs
b2NraW5nIG1lY2hhbmlzbS4gCiAKLWNsYXNzIEF1ZGlvQ29udGV4dCA6IHB1YmxpYyBBY3RpdmVE
T01PYmplY3QsIHB1YmxpYyBSZWZDb3VudGVkPEF1ZGlvQ29udGV4dD4geworY2xhc3MgQXVkaW9D
b250ZXh0IDogcHVibGljIEFjdGl2ZURPTU9iamVjdCwgcHVibGljIFJlZkNvdW50ZWQ8QXVkaW9D
b250ZXh0PiwgcHVibGljIEV2ZW50VGFyZ2V0IHsKIHB1YmxpYzoKKyAgICAvLyBDcmVhdGUgYW4g
QXVkaW9Db250ZXh0IGZvciByZW5kZXJpbmcgdG8gdGhlIGF1ZGlvIGhhcmR3YXJlLgogICAgIHN0
YXRpYyBQYXNzUmVmUHRyPEF1ZGlvQ29udGV4dD4gY3JlYXRlKERvY3VtZW50Kik7CiAKKyAgICAv
LyBDcmVhdGUgYW4gQXVkaW9Db250ZXh0IGZvciBvZmZsaW5lIChub24tcmVhbHRpbWUpIHJlbmRl
cmluZy4KKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxBdWRpb0NvbnRleHQ+IGNyZWF0ZU9mZmxpbmVD
b250ZXh0KERvY3VtZW50KiwgdW5zaWduZWQgbnVtYmVyT2ZDaGFubmVscywgc2l6ZV90IG51bWJl
ck9mRnJhbWVzLCBkb3VibGUgc2FtcGxlUmF0ZSk7CisKICAgICB2aXJ0dWFsIH5BdWRpb0NvbnRl
eHQoKTsKIAogICAgIGJvb2wgaXNJbml0aWFsaXplZCgpIGNvbnN0OworICAgIAorICAgIGJvb2wg
aXNPZmZsaW5lQ29udGV4dCgpIHsgcmV0dXJuIG1faXNPZmZsaW5lQ29udGV4dDsgfQogCiAgICAg
Ly8gUmV0dXJucyB0cnVlIHdoZW4gaW5pdGlhbGl6ZSgpIHdhcyBjYWxsZWQgQU5EIGFsbCBhc3lu
Y2hyb25vdXMgaW5pdGlhbGl6YXRpb24gaGFzIGNvbXBsZXRlZC4KICAgICBib29sIGlzUnVubmFi
bGUoKSBjb25zdDsKQEAgLTczLDcgKzgxLDcgQEAgcHVibGljOgogICAgIC8vIERvY3VtZW50IG5v
dGlmaWNhdGlvbgogICAgIHZpcnR1YWwgdm9pZCBzdG9wKCk7CiAKLSAgICBEb2N1bWVudCogZG9j
dW1lbnQoKTsgLy8gQVNTRVJUcyBpZiBkb2N1bWVudCBubyBsb25nZXIgZXhpc3RzLgorICAgIERv
Y3VtZW50KiBkb2N1bWVudCgpIGNvbnN0OyAvLyBBU1NFUlRzIGlmIGRvY3VtZW50IG5vIGxvbmdl
ciBleGlzdHMuCiAgICAgYm9vbCBoYXNEb2N1bWVudCgpOwogCiAgICAgQXVkaW9EZXN0aW5hdGlv
bk5vZGUqIGRlc3RpbmF0aW9uKCkgeyByZXR1cm4gbV9kZXN0aW5hdGlvbk5vZGUuZ2V0KCk7IH0K
QEAgLTE4MCw5ICsxODgsMjcgQEAgcHVibGljOgogICAgIC8vIE9ubHkgYWNjZXNzZWQgd2hlbiB0
aGUgZ3JhcGggbG9jayBpcyBoZWxkLgogICAgIHZvaWQgbWFya0F1ZGlvTm9kZUlucHV0RGlydHko
QXVkaW9Ob2RlSW5wdXQqKTsKICAgICB2b2lkIG1hcmtBdWRpb05vZGVPdXRwdXREaXJ0eShBdWRp
b05vZGVPdXRwdXQqKTsKKworICAgIC8vIEV2ZW50VGFyZ2V0CisgICAgdmlydHVhbCBTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgY29uc3Q7CisgICAgdmly
dHVhbCBBdWRpb0NvbnRleHQqIHRvQXVkaW9Db250ZXh0KCk7CisgICAgdmlydHVhbCBFdmVudFRh
cmdldERhdGEqIGV2ZW50VGFyZ2V0RGF0YSgpIHsgcmV0dXJuICZtX2V2ZW50VGFyZ2V0RGF0YTsg
fQorICAgIHZpcnR1YWwgRXZlbnRUYXJnZXREYXRhKiBlbnN1cmVFdmVudFRhcmdldERhdGEoKSB7
IHJldHVybiAmbV9ldmVudFRhcmdldERhdGE7IH0KKworICAgIERFRklORV9BVFRSSUJVVEVfRVZF
TlRfTElTVEVORVIoY29tcGxldGUpOworCisgICAgLy8gUmVjb25jaWxlIHJlZi9kZXJlZiB3aGlj
aCBhcmUgZGVmaW5lZCBib3RoIGluIEF1ZGlvTm9kZSBhbmQgRXZlbnRUYXJnZXQuCisgICAgdXNp
bmcgUmVmQ291bnRlZDxBdWRpb0NvbnRleHQ+OjpyZWY7CisgICAgdXNpbmcgUmVmQ291bnRlZDxB
dWRpb0NvbnRleHQ+OjpkZXJlZjsKKworICAgIHZvaWQgc3RhcnRSZW5kZXJpbmcoKTsKKyAgICB2
b2lkIGZpcmVDb21wbGV0aW9uRXZlbnQoKTsKICAgICAKIHByaXZhdGU6CiAgICAgQXVkaW9Db250
ZXh0KERvY3VtZW50Kik7CisgICAgQXVkaW9Db250ZXh0KERvY3VtZW50KiwgdW5zaWduZWQgbnVt
YmVyT2ZDaGFubmVscywgc2l6ZV90IG51bWJlck9mRnJhbWVzLCBkb3VibGUgc2FtcGxlUmF0ZSk7
CisgICAgdm9pZCBjb25zdHJ1Y3RDb21tb24oKTsKKwogICAgIHZvaWQgbGF6eUluaXRpYWxpemUo
KTsKICAgICB2b2lkIHVuaW5pdGlhbGl6ZSgpOwogICAgIApAQCAtMjUyLDYgKzI3OCwxNSBAQCBw
cml2YXRlOgogICAgIAogICAgIC8vIEhSVEYgRGF0YWJhc2UgbG9hZGVyCiAgICAgUmVmUHRyPEhS
VEZEYXRhYmFzZUxvYWRlcj4gbV9ocnRmRGF0YWJhc2VMb2FkZXI7CisKKyAgICAvLyBFdmVudFRh
cmdldAorICAgIHZpcnR1YWwgdm9pZCByZWZFdmVudFRhcmdldCgpIHsgcmVmKCk7IH0KKyAgICB2
aXJ0dWFsIHZvaWQgZGVyZWZFdmVudFRhcmdldCgpIHsgZGVyZWYoKTsgfQorICAgIEV2ZW50VGFy
Z2V0RGF0YSBtX2V2ZW50VGFyZ2V0RGF0YTsKKworICAgIFJlZlB0cjxBdWRpb0J1ZmZlcj4gbV9y
ZW5kZXJUYXJnZXQ7CisgICAgCisgICAgYm9vbCBtX2lzT2ZmbGluZUNvbnRleHQ7CiB9OwogCiB9
IC8vIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvQ29udGV4dC5p
ZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9Db250ZXh0Lmlk
bAkocmV2aXNpb24gODI4ODYpCisrKyBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb0NvbnRl
eHQuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw3ICsyNywxMCBAQCBtb2R1bGUgd2ViYXVkaW8g
ewogICAgICAgICBDb25kaXRpb25hbD1XRUJfQVVESU8sCiAgICAgICAgIENhbkJlQ29uc3RydWN0
ZWQsCiAgICAgICAgIEN1c3RvbUNvbnN0cnVjdEZ1bmN0aW9uLAotICAgICAgICBWOEN1c3RvbUNv
bnN0cnVjdG9yCisgICAgICAgIFY4Q3VzdG9tQ29uc3RydWN0b3IsCisjaWYgZGVmaW5lZChWOF9C
SU5ESU5HKSAmJiBWOF9CSU5ESU5HCisgICAgICAgIEV2ZW50VGFyZ2V0CisjZW5kaWYgICAgICAg
IAogICAgIF0gQXVkaW9Db250ZXh0IHsKICAgICAgICAgLy8gQWxsIHJlbmRlcmVkIGF1ZGlvIHVs
dGltYXRlbHkgY29ubmVjdHMgdG8gZGVzdGluYXRpb24sIHdoaWNoIHJlcHJlc2VudHMgdGhlIGF1
ZGlvIGhhcmR3YXJlLgogICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgQXVkaW9EZXN0aW5hdGlv
bk5vZGUgZGVzdGluYXRpb247CkBAIC02Miw1ICs2NSwxMSBAQCBtb2R1bGUgd2ViYXVkaW8gewog
ICAgICAgICAvLyBDaGFubmVsIHNwbGl0dGluZyBhbmQgbWVyZ2luZwogICAgICAgICBBdWRpb0No
YW5uZWxTcGxpdHRlciBjcmVhdGVDaGFubmVsU3BsaXR0ZXIoKTsKICAgICAgICAgQXVkaW9DaGFu
bmVsTWVyZ2VyIGNyZWF0ZUNoYW5uZWxNZXJnZXIoKTsKKyAgICAgICAgCisgICAgICAgIC8vIE9m
ZmxpbmUgcmVuZGVyaW5nCisgICAgICAgIC8vIHZvaWQgcHJlcGFyZU9mZmxpbmVCdWZmZXJSZW5k
ZXJpbmcoaW4gdW5zaWduZWQgbG9uZyBudW1iZXJPZkNoYW5uZWxzLCBpbiB1bnNpZ25lZCBsb25n
IG51bWJlck9mRnJhbWVzLCBpbiBmbG9hdCBzYW1wbGVSYXRlKTsKKyAgICAgICAgYXR0cmlidXRl
IEV2ZW50TGlzdGVuZXIgb25jb21wbGV0ZTsKKyAgICAgICAgdm9pZCBzdGFydFJlbmRlcmluZygp
OworICAgICAgICAKICAgICB9OwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVk
aW9EZXN0aW5hdGlvbk5vZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3dlYmF1
ZGlvL0F1ZGlvRGVzdGluYXRpb25Ob2RlLmNwcAkocmV2aXNpb24gODI4ODYpCisrKyBTb3VyY2Uv
V2ViQ29yZS93ZWJhdWRpby9BdWRpb0Rlc3RpbmF0aW9uTm9kZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTMyLDE5ICszMiwxNiBAQAogI2luY2x1ZGUgIkF1ZGlvQ29udGV4dC5oIgogI2luY2x1ZGUg
IkF1ZGlvTm9kZUlucHV0LmgiCiAjaW5jbHVkZSAiQXVkaW9Ob2RlT3V0cHV0LmgiCi0jaW5jbHVk
ZSA8d3RmL1RocmVhZGluZy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLUF1ZGlvRGVzdGlu
YXRpb25Ob2RlOjpBdWRpb0Rlc3RpbmF0aW9uTm9kZShBdWRpb0NvbnRleHQqIGNvbnRleHQpCi0g
ICAgOiBBdWRpb05vZGUoY29udGV4dCwgQXVkaW9EZXN0aW5hdGlvbjo6aGFyZHdhcmVTYW1wbGVS
YXRlKCkpCisgICAgCitBdWRpb0Rlc3RpbmF0aW9uTm9kZTo6QXVkaW9EZXN0aW5hdGlvbk5vZGUo
QXVkaW9Db250ZXh0KiBjb250ZXh0LCBkb3VibGUgc2FtcGxlUmF0ZSkKKyAgICA6IEF1ZGlvTm9k
ZShjb250ZXh0LCBzYW1wbGVSYXRlKQogICAgICwgbV9jdXJyZW50VGltZSgwLjApCiB7CiAgICAg
YWRkSW5wdXQoYWRvcHRQdHIobmV3IEF1ZGlvTm9kZUlucHV0KHRoaXMpKSk7CiAgICAgCiAgICAg
c2V0VHlwZShOb2RlVHlwZURlc3RpbmF0aW9uKTsKLSAgICAKLSAgICBpbml0aWFsaXplKCk7CiB9
CiAKIEF1ZGlvRGVzdGluYXRpb25Ob2RlOjp+QXVkaW9EZXN0aW5hdGlvbk5vZGUoKQpAQCAtNTIs
MzIgKzQ5LDYgQEAgQXVkaW9EZXN0aW5hdGlvbk5vZGU6On5BdWRpb0Rlc3RpbmF0aW9uTgogICAg
IHVuaW5pdGlhbGl6ZSgpOwogfQogCi12b2lkIEF1ZGlvRGVzdGluYXRpb25Ob2RlOjppbml0aWFs
aXplKCkKLXsKLSAgICBpZiAoaXNJbml0aWFsaXplZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBkb3VibGUgaGFyZHdhcmVTYW1wbGVSYXRlID0gQXVkaW9EZXN0aW5hdGlvbjo6aGFyZHdhcmVT
YW1wbGVSYXRlKCk7Ci0jaWZuZGVmIE5ERUJVRyAgICAKLSAgICBmcHJpbnRmKHN0ZGVyciwgIj4+
Pj4gaGFyZHdhcmVTYW1wbGVSYXRlID0gJWZcbiIsIGhhcmR3YXJlU2FtcGxlUmF0ZSk7Ci0jZW5k
aWYKLSAgICAKLSAgICBtX2Rlc3RpbmF0aW9uID0gQXVkaW9EZXN0aW5hdGlvbjo6Y3JlYXRlKCp0
aGlzLCBoYXJkd2FyZVNhbXBsZVJhdGUpOwotICAgIG1fZGVzdGluYXRpb24tPnN0YXJ0KCk7Ci0g
ICAgCi0gICAgQXVkaW9Ob2RlOjppbml0aWFsaXplKCk7Ci19Ci0KLXZvaWQgQXVkaW9EZXN0aW5h
dGlvbk5vZGU6OnVuaW5pdGlhbGl6ZSgpCi17Ci0gICAgaWYgKCFpc0luaXRpYWxpemVkKCkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIG1fZGVzdGluYXRpb24tPnN0b3AoKTsKLQotICAgIEF1ZGlv
Tm9kZTo6dW5pbml0aWFsaXplKCk7Ci19Ci0KIC8vIFRoZSBhdWRpbyBoYXJkd2FyZSBjYWxscyB1
cyBiYWNrIGhlcmUgdG8gZ2V0cyBpdHMgaW5wdXQgc3RyZWFtLgogdm9pZCBBdWRpb0Rlc3RpbmF0
aW9uTm9kZTo6cHJvdmlkZUlucHV0KEF1ZGlvQnVzKiBkZXN0aW5hdGlvbkJ1cywgc2l6ZV90IG51
bWJlck9mRnJhbWVzKQogewpJbmRleDogU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9EZXN0
aW5hdGlvbk5vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRp
b0Rlc3RpbmF0aW9uTm9kZS5oCShyZXZpc2lvbiA4Mjg4NikKKysrIFNvdXJjZS9XZWJDb3JlL3dl
YmF1ZGlvL0F1ZGlvRGVzdGluYXRpb25Ob2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI1LDExICsy
NSw5IEBACiAjaWZuZGVmIEF1ZGlvRGVzdGluYXRpb25Ob2RlX2gKICNkZWZpbmUgQXVkaW9EZXN0
aW5hdGlvbk5vZGVfaAogCi0jaW5jbHVkZSAiQXVkaW9EZXN0aW5hdGlvbi5oIgorI2luY2x1ZGUg
IkF1ZGlvQnVmZmVyLmgiCiAjaW5jbHVkZSAiQXVkaW9Ob2RlLmgiCiAjaW5jbHVkZSAiQXVkaW9T
b3VyY2VQcm92aWRlci5oIgotI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KLSNpbmNsdWRlIDx3dGYv
UGFzc1JlZlB0ci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTM4LDMyICszNiwyNSBA
QCBjbGFzcyBBdWRpb0NvbnRleHQ7CiAgICAgCiBjbGFzcyBBdWRpb0Rlc3RpbmF0aW9uTm9kZSA6
IHB1YmxpYyBBdWRpb05vZGUsIHB1YmxpYyBBdWRpb1NvdXJjZVByb3ZpZGVyIHsKIHB1YmxpYzoK
LSAgICBzdGF0aWMgUGFzc1JlZlB0cjxBdWRpb0Rlc3RpbmF0aW9uTm9kZT4gY3JlYXRlKEF1ZGlv
Q29udGV4dCogY29udGV4dCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQXVk
aW9EZXN0aW5hdGlvbk5vZGUoY29udGV4dCkpOyAgICAgICAgCi0gICAgfQotCisgICAgQXVkaW9E
ZXN0aW5hdGlvbk5vZGUoQXVkaW9Db250ZXh0KiwgZG91YmxlIHNhbXBsZVJhdGUpOwogICAgIHZp
cnR1YWwgfkF1ZGlvRGVzdGluYXRpb25Ob2RlKCk7CiAgICAgCiAgICAgLy8gQXVkaW9Ob2RlICAg
CiAgICAgdmlydHVhbCB2b2lkIHByb2Nlc3Moc2l6ZV90KSB7IH07IC8vIHdlJ3JlIHB1bGxlZCBi
eSBoYXJkd2FyZSBzbyB0aGlzIGlzIG5ldmVyIGNhbGxlZAogICAgIHZpcnR1YWwgdm9pZCByZXNl
dCgpIHsgbV9jdXJyZW50VGltZSA9IDAuMDsgfTsKLSAgICB2aXJ0dWFsIHZvaWQgaW5pdGlhbGl6
ZSgpOwotICAgIHZpcnR1YWwgdm9pZCB1bmluaXRpYWxpemUoKTsKICAgICAKICAgICAvLyBUaGUg
YXVkaW8gaGFyZHdhcmUgY2FsbHMgaGVyZSBwZXJpb2RpY2FsbHkgdG8gZ2V0cyBpdHMgaW5wdXQg
c3RyZWFtLgogICAgIHZpcnR1YWwgdm9pZCBwcm92aWRlSW5wdXQoQXVkaW9CdXMqLCBzaXplX3Qg
bnVtYmVyT2ZGcmFtZXMpOwogCiAgICAgZG91YmxlIGN1cnJlbnRUaW1lKCkgeyByZXR1cm4gbV9j
dXJyZW50VGltZTsgfQogCi0gICAgZG91YmxlIHNhbXBsZVJhdGUoKSBjb25zdCB7IHJldHVybiBt
X2Rlc3RpbmF0aW9uLT5zYW1wbGVSYXRlKCk7IH0KKyAgICB2aXJ0dWFsIGRvdWJsZSBzYW1wbGVS
YXRlKCkgY29uc3QgPSAwOwogCi0gICAgdW5zaWduZWQgbnVtYmVyT2ZDaGFubmVscygpIGNvbnN0
IHsgcmV0dXJuIDI7IH0gLy8gRklYTUU6IHVwZGF0ZSB3aGVuIG11bHRpLWNoYW5uZWwgKG1vcmUg
dGhhbiBzdGVyZW8pIGlzIHN1cHBvcnRlZAotICAgIAotcHJpdmF0ZToKLSAgICBBdWRpb0Rlc3Rp
bmF0aW9uTm9kZShBdWRpb0NvbnRleHQqKTsKKyAgICB2aXJ0dWFsIHVuc2lnbmVkIG51bWJlck9m
Q2hhbm5lbHMoKSBjb25zdCB7IHJldHVybiAyOyB9IC8vIEZJWE1FOiB1cGRhdGUgd2hlbiBtdWx0
aS1jaGFubmVsIChtb3JlIHRoYW4gc3RlcmVvKSBpcyBzdXBwb3J0ZWQKIAotICAgIE93blB0cjxB
dWRpb0Rlc3RpbmF0aW9uPiBtX2Rlc3RpbmF0aW9uOworICAgIHZpcnR1YWwgdm9pZCBzdGFydFJl
bmRlcmluZygpID0gMDsKKyAgICAKK3Byb3RlY3RlZDoKICAgICBkb3VibGUgbV9jdXJyZW50VGlt
ZTsKIH07CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0NvbnZvbHZlck5vZGUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0NvbnZvbHZlck5vZGUuY3Bw
CShyZXZpc2lvbiA4Mjg4NikKKysrIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0NvbnZvbHZlck5v
ZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAiQ29udm9s
dmVyTm9kZS5oIgogCiAjaW5jbHVkZSAiQXVkaW9CdWZmZXIuaCIKKyNpbmNsdWRlICJBdWRpb0Nv
bnRleHQuaCIKICNpbmNsdWRlICJBdWRpb05vZGVJbnB1dC5oIgogI2luY2x1ZGUgIkF1ZGlvTm9k
ZU91dHB1dC5oIgogI2luY2x1ZGUgIlJldmVyYi5oIgpAQCAtMTMxLDcgKzEzMiw4IEBAIHZvaWQg
Q29udm9sdmVyTm9kZTo6c2V0QnVmZmVyKEF1ZGlvQnVmZmUKICAgICAgICAgYnVmZmVyQnVzLnNl
dENoYW5uZWxNZW1vcnkoaSwgYnVmZmVyLT5nZXRDaGFubmVsRGF0YShpKS0+ZGF0YSgpLCBidWZm
ZXJMZW5ndGgpOwogICAgIAogICAgIC8vIENyZWF0ZSB0aGUgcmV2ZXJiIHdpdGggdGhlIGdpdmVu
IGltcHVsc2UgcmVzcG9uc2UuCi0gICAgT3duUHRyPFJldmVyYj4gcmV2ZXJiID0gYWRvcHRQdHIo
bmV3IFJldmVyYigmYnVmZmVyQnVzLCBBdWRpb05vZGU6OlByb2Nlc3NpbmdTaXplSW5GcmFtZXMs
IE1heEZGVFNpemUsIDIsIHRydWUpKTsKKyAgICBib29sIHVzZUJhY2tncm91bmRUaHJlYWRzID0g
IWNvbnRleHQoKS0+aXNPZmZsaW5lQ29udGV4dCgpOworICAgIE93blB0cjxSZXZlcmI+IHJldmVy
YiA9IGFkb3B0UHRyKG5ldyBSZXZlcmIoJmJ1ZmZlckJ1cywgQXVkaW9Ob2RlOjpQcm9jZXNzaW5n
U2l6ZUluRnJhbWVzLCBNYXhGRlRTaXplLCAyLCB1c2VCYWNrZ3JvdW5kVGhyZWFkcykpOwogCiAg
ICAgewogICAgICAgICAvLyBTeW5jaHJvbml6ZSB3aXRoIHByb2Nlc3MoKS4KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3dlYmF1ZGlvL0RlZmF1bHRBdWRpb0Rlc3RpbmF0aW9uTm9kZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vRGVmYXVsdEF1ZGlvRGVzdGluYXRpb25O
b2RlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0RlZmF1bHRB
dWRpb0Rlc3RpbmF0aW9uTm9kZS5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNzggQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElN
UExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoV0VCX0FVRElPKQor
CisjaW5jbHVkZSAiRGVmYXVsdEF1ZGlvRGVzdGluYXRpb25Ob2RlLmgiCisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKyAgICAKK0RlZmF1bHRBdWRpb0Rlc3RpbmF0aW9uTm9kZTo6RGVmYXVsdEF1ZGlv
RGVzdGluYXRpb25Ob2RlKEF1ZGlvQ29udGV4dCogY29udGV4dCkKKyAgICA6IEF1ZGlvRGVzdGlu
YXRpb25Ob2RlKGNvbnRleHQsIEF1ZGlvRGVzdGluYXRpb246OmhhcmR3YXJlU2FtcGxlUmF0ZSgp
KQoreworICAgIGluaXRpYWxpemUoKTsKK30KKworRGVmYXVsdEF1ZGlvRGVzdGluYXRpb25Ob2Rl
Ojp+RGVmYXVsdEF1ZGlvRGVzdGluYXRpb25Ob2RlKCkKK3sKKyAgICB1bmluaXRpYWxpemUoKTsK
K30KKwordm9pZCBEZWZhdWx0QXVkaW9EZXN0aW5hdGlvbk5vZGU6OmluaXRpYWxpemUoKQorewor
ICAgIGlmIChpc0luaXRpYWxpemVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGRvdWJsZSBo
YXJkd2FyZVNhbXBsZVJhdGUgPSBBdWRpb0Rlc3RpbmF0aW9uOjpoYXJkd2FyZVNhbXBsZVJhdGUo
KTsKKyNpZm5kZWYgTkRFQlVHICAgIAorICAgIGZwcmludGYoc3RkZXJyLCAiPj4+PiBoYXJkd2Fy
ZVNhbXBsZVJhdGUgPSAlZlxuIiwgaGFyZHdhcmVTYW1wbGVSYXRlKTsKKyNlbmRpZgorICAgIAor
ICAgIG1fZGVzdGluYXRpb24gPSBBdWRpb0Rlc3RpbmF0aW9uOjpjcmVhdGUoKnRoaXMsIGhhcmR3
YXJlU2FtcGxlUmF0ZSk7CisgICAgCisgICAgQXVkaW9Ob2RlOjppbml0aWFsaXplKCk7Cit9CisK
K3ZvaWQgRGVmYXVsdEF1ZGlvRGVzdGluYXRpb25Ob2RlOjp1bmluaXRpYWxpemUoKQoreworICAg
IGlmICghaXNJbml0aWFsaXplZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2Rlc3RpbmF0
aW9uLT5zdG9wKCk7CisKKyAgICBBdWRpb05vZGU6OnVuaW5pdGlhbGl6ZSgpOworfQorCit2b2lk
IERlZmF1bHRBdWRpb0Rlc3RpbmF0aW9uTm9kZTo6c3RhcnRSZW5kZXJpbmcoKQoreworICAgIEFT
U0VSVChpc0luaXRpYWxpemVkKCkpOworICAgIGlmIChpc0luaXRpYWxpemVkKCkpCisgICAgICAg
IG1fZGVzdGluYXRpb24tPnN0YXJ0KCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwor
I2VuZGlmIC8vIEVOQUJMRShXRUJfQVVESU8pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS93ZWJhdWRp
by9EZWZhdWx0QXVkaW9EZXN0aW5hdGlvbk5vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS93ZWJhdWRpby9EZWZhdWx0QXVkaW9EZXN0aW5hdGlvbk5vZGUuaAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0RlZmF1bHRBdWRpb0Rlc3RpbmF0aW9uTm9kZS5o
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDYxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEx
LCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAg
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
CisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBEZWZh
dWx0QXVkaW9EZXN0aW5hdGlvbk5vZGVfaAorI2RlZmluZSBEZWZhdWx0QXVkaW9EZXN0aW5hdGlv
bk5vZGVfaAorCisjaW5jbHVkZSAiQXVkaW9EZXN0aW5hdGlvbi5oIgorI2luY2x1ZGUgIkF1ZGlv
RGVzdGluYXRpb25Ob2RlLmgiCisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK2NsYXNzIEF1ZGlvQ29udGV4dDsKKyAgICAKK2NsYXNzIERlZmF1bHRBdWRp
b0Rlc3RpbmF0aW9uTm9kZSA6IHB1YmxpYyBBdWRpb0Rlc3RpbmF0aW9uTm9kZSB7CitwdWJsaWM6
CisgICAgc3RhdGljIFBhc3NSZWZQdHI8RGVmYXVsdEF1ZGlvRGVzdGluYXRpb25Ob2RlPiBjcmVh
dGUoQXVkaW9Db250ZXh0KiBjb250ZXh0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVm
KG5ldyBEZWZhdWx0QXVkaW9EZXN0aW5hdGlvbk5vZGUoY29udGV4dCkpOyAgICAgCisgICAgfQor
CisgICAgdmlydHVhbCB+RGVmYXVsdEF1ZGlvRGVzdGluYXRpb25Ob2RlKCk7CisgICAgCisgICAg
Ly8gQXVkaW9Ob2RlICAgCisgICAgdmlydHVhbCB2b2lkIGluaXRpYWxpemUoKTsKKyAgICB2aXJ0
dWFsIHZvaWQgdW5pbml0aWFsaXplKCk7CisgICAgCisgICAgZG91YmxlIHNhbXBsZVJhdGUoKSBj
b25zdCB7IHJldHVybiBtX2Rlc3RpbmF0aW9uLT5zYW1wbGVSYXRlKCk7IH0KKworICAgIHZpcnR1
YWwgdm9pZCBzdGFydFJlbmRlcmluZygpOworICAgIAorcHJpdmF0ZToKKyAgICBEZWZhdWx0QXVk
aW9EZXN0aW5hdGlvbk5vZGUoQXVkaW9Db250ZXh0Kik7CisKKyAgICBPd25QdHI8QXVkaW9EZXN0
aW5hdGlvbj4gbV9kZXN0aW5hdGlvbjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwor
I2VuZGlmIC8vIERlZmF1bHRBdWRpb0Rlc3RpbmF0aW9uTm9kZV9oCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS93ZWJhdWRpby9PZmZsaW5lQXVkaW9Db21wbGV0aW9uRXZlbnQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL09mZmxpbmVBdWRpb0NvbXBsZXRpb25FdmVudC5j
cHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9PZmZsaW5lQXVkaW9D
b21wbGV0aW9uRXZlbnQuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDU4IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDExLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
CisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKFdFQl9BVURJTykKKworI2lu
Y2x1ZGUgIk9mZmxpbmVBdWRpb0NvbXBsZXRpb25FdmVudC5oIgorCisjaW5jbHVkZSAiQXVkaW9C
dWZmZXIuaCIKKyNpbmNsdWRlICJFdmVudE5hbWVzLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworUGFzc1JlZlB0cjxPZmZsaW5lQXVkaW9Db21wbGV0aW9uRXZlbnQ+IE9mZmxpbmVBdWRpb0Nv
bXBsZXRpb25FdmVudDo6Y3JlYXRlKFBhc3NSZWZQdHI8QXVkaW9CdWZmZXI+IHJlbmRlcmVkQnVm
ZmVyKQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgT2ZmbGluZUF1ZGlvQ29tcGxldGlvbkV2
ZW50KHJlbmRlcmVkQnVmZmVyKSk7Cit9CisKK09mZmxpbmVBdWRpb0NvbXBsZXRpb25FdmVudDo6
T2ZmbGluZUF1ZGlvQ29tcGxldGlvbkV2ZW50KFBhc3NSZWZQdHI8QXVkaW9CdWZmZXI+IHJlbmRl
cmVkQnVmZmVyKQorICAgIDogRXZlbnQoZXZlbnROYW1lcygpLmNvbXBsZXRlRXZlbnQsIHRydWUs
IGZhbHNlKQorICAgICwgbV9yZW5kZXJlZEJ1ZmZlcihyZW5kZXJlZEJ1ZmZlcikKK3sKK30KKwor
T2ZmbGluZUF1ZGlvQ29tcGxldGlvbkV2ZW50Ojp+T2ZmbGluZUF1ZGlvQ29tcGxldGlvbkV2ZW50
KCkKK3sKK30KKworYm9vbCBPZmZsaW5lQXVkaW9Db21wbGV0aW9uRXZlbnQ6OmlzT2ZmbGluZUF1
ZGlvQ29tcGxldGlvbkV2ZW50KCkgY29uc3QKK3sKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQl9BVURJTykKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL09mZmxpbmVBdWRpb0NvbXBsZXRpb25FdmVudC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL09mZmxpbmVBdWRpb0NvbXBsZXRp
b25FdmVudC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vT2ZmbGlu
ZUF1ZGlvQ29tcGxldGlvbkV2ZW50LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTUgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElN
UExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaWZuZGVmIE9mZmxpbmVBdWRpb0NvbXBsZXRpb25FdmVudF9oCisjZGVmaW5l
IE9mZmxpbmVBdWRpb0NvbXBsZXRpb25FdmVudF9oCisKKyNpbmNsdWRlICJBdWRpb0J1ZmZlci5o
IgorI2luY2x1ZGUgIkV2ZW50LmgiCisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNs
dWRlIDx3dGYvUmVmUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQXVkaW9C
dWZmZXI7CisgICAgCitjbGFzcyBPZmZsaW5lQXVkaW9Db21wbGV0aW9uRXZlbnQgOiBwdWJsaWMg
RXZlbnQgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPE9mZmxpbmVBdWRpb0NvbXBs
ZXRpb25FdmVudD4gY3JlYXRlKFBhc3NSZWZQdHI8QXVkaW9CdWZmZXI+IHJlbmRlcmVkQnVmZmVy
KTsKKyAgICAKKyAgICB2aXJ0dWFsIH5PZmZsaW5lQXVkaW9Db21wbGV0aW9uRXZlbnQoKTsKKwor
ICAgIHZpcnR1YWwgYm9vbCBpc09mZmxpbmVBdWRpb0NvbXBsZXRpb25FdmVudCgpIGNvbnN0Owor
CisgICAgQXVkaW9CdWZmZXIqIHJlbmRlcmVkQnVmZmVyKCkgeyByZXR1cm4gbV9yZW5kZXJlZEJ1
ZmZlci5nZXQoKTsgfQorCitwcml2YXRlOgorICAgIE9mZmxpbmVBdWRpb0NvbXBsZXRpb25FdmVu
dChQYXNzUmVmUHRyPEF1ZGlvQnVmZmVyPiByZW5kZXJlZEJ1ZmZlcik7CisKKyAgICBSZWZQdHI8
QXVkaW9CdWZmZXI+IG1fcmVuZGVyZWRCdWZmZXI7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCisKKyNlbmRpZiAvLyBPZmZsaW5lQXVkaW9Db21wbGV0aW9uRXZlbnRfaApJbmRleDogU291
cmNlL1dlYkNvcmUvd2ViYXVkaW8vT2ZmbGluZUF1ZGlvQ29tcGxldGlvbkV2ZW50LmlkbAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9PZmZsaW5lQXVkaW9Db21wbGV0aW9u
RXZlbnQuaWRsCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vT2ZmbGlu
ZUF1ZGlvQ29tcGxldGlvbkV2ZW50LmlkbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzMiBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAq
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKK21vZHVsZSBhdWRpbyB7CisgICAgaW50ZXJmYWNlIFsKKyAgICAgICAgQ29u
ZGl0aW9uYWw9V0VCX0FVRElPLAorICAgICAgICBHZW5lcmF0ZVRvSlMKKyAgICBdIE9mZmxpbmVB
dWRpb0NvbXBsZXRpb25FdmVudCA6IEV2ZW50IHsKKyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRl
IEF1ZGlvQnVmZmVyIHJlbmRlcmVkQnVmZmVyOworICAgIH07Cit9CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS93ZWJhdWRpby9PZmZsaW5lQXVkaW9EZXN0aW5hdGlvbk5vZGUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL09mZmxpbmVBdWRpb0Rlc3RpbmF0aW9uTm9kZS5j
cHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9PZmZsaW5lQXVkaW9E
ZXN0aW5hdGlvbk5vZGUuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE2NiBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMSwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShXRUJfQVVESU8pCisKKyNp
bmNsdWRlICJPZmZsaW5lQXVkaW9EZXN0aW5hdGlvbk5vZGUuaCIKKworI2luY2x1ZGUgIkF1ZGlv
QnVzLmgiCisjaW5jbHVkZSAiQXVkaW9Db250ZXh0LmgiCisjaW5jbHVkZSAiSFJURkRhdGFiYXNl
TG9hZGVyLmgiCisjaW5jbHVkZSA8YWxnb3JpdGhtPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcu
aD4KKwordXNpbmcgbmFtZXNwYWNlIHN0ZDsKKyAKK25hbWVzcGFjZSBXZWJDb3JlIHsKKyAgICAK
K2NvbnN0IHNpemVfdCByZW5kZXJRdWFudHVtU2l6ZSA9IDEyODsgICAgCisKK09mZmxpbmVBdWRp
b0Rlc3RpbmF0aW9uTm9kZTo6T2ZmbGluZUF1ZGlvRGVzdGluYXRpb25Ob2RlKEF1ZGlvQ29udGV4
dCogY29udGV4dCwgQXVkaW9CdWZmZXIqIHJlbmRlclRhcmdldCkKKyAgICA6IEF1ZGlvRGVzdGlu
YXRpb25Ob2RlKGNvbnRleHQsIHJlbmRlclRhcmdldC0+c2FtcGxlUmF0ZSgpKQorICAgICwgbV9y
ZW5kZXJUYXJnZXQocmVuZGVyVGFyZ2V0KQorICAgICwgbV9zdGFydGVkUmVuZGVyaW5nKGZhbHNl
KQoreworICAgIG1fcmVuZGVyQnVzID0gYWRvcHRQdHIobmV3IEF1ZGlvQnVzKHJlbmRlclRhcmdl
dC0+bnVtYmVyT2ZDaGFubmVscygpLCByZW5kZXJRdWFudHVtU2l6ZSkpOworICAgIAorICAgIGlu
aXRpYWxpemUoKTsKK30KKworT2ZmbGluZUF1ZGlvRGVzdGluYXRpb25Ob2RlOjp+T2ZmbGluZUF1
ZGlvRGVzdGluYXRpb25Ob2RlKCkKK3sKKyAgICB1bmluaXRpYWxpemUoKTsKK30KKwordm9pZCBP
ZmZsaW5lQXVkaW9EZXN0aW5hdGlvbk5vZGU6OmluaXRpYWxpemUoKQoreworICAgIGlmIChpc0lu
aXRpYWxpemVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIEF1ZGlvTm9kZTo6aW5pdGlhbGl6
ZSgpOworfQorCit2b2lkIE9mZmxpbmVBdWRpb0Rlc3RpbmF0aW9uTm9kZTo6dW5pbml0aWFsaXpl
KCkKK3sKKyAgICBpZiAoIWlzSW5pdGlhbGl6ZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
QXVkaW9Ob2RlOjp1bmluaXRpYWxpemUoKTsKK30KKwordm9pZCBPZmZsaW5lQXVkaW9EZXN0aW5h
dGlvbk5vZGU6OnN0YXJ0UmVuZGVyaW5nKCkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkp
OworICAgIEFTU0VSVChtX3JlbmRlclRhcmdldC5nZXQoKSk7CisgICAgaWYgKCFtX3JlbmRlclRh
cmdldC5nZXQoKSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIGlmICghbV9zdGFydGVkUmVu
ZGVyaW5nKSB7CisgICAgICAgIG1fc3RhcnRlZFJlbmRlcmluZyA9IHRydWU7CisgICAgICAgIG1f
cmVuZGVyVGhyZWFkID0gY3JlYXRlVGhyZWFkKE9mZmxpbmVBdWRpb0Rlc3RpbmF0aW9uTm9kZTo6
cmVuZGVyRW50cnksIHRoaXMsICJvZmZsaW5lIHJlbmRlcmVyIik7CisgICAgfQorfQorCisvLyBE
byBvZmZsaW5lIHJlbmRlcmluZyBpbiB0aGlzIHRocmVhZC4KK3ZvaWQqIE9mZmxpbmVBdWRpb0Rl
c3RpbmF0aW9uTm9kZTo6cmVuZGVyRW50cnkodm9pZCogdGhyZWFkRGF0YSkKK3sKKyAgICBPZmZs
aW5lQXVkaW9EZXN0aW5hdGlvbk5vZGUqIGRlc3RpbmF0aW9uTm9kZSA9IHJlaW50ZXJwcmV0X2Nh
c3Q8T2ZmbGluZUF1ZGlvRGVzdGluYXRpb25Ob2RlKj4odGhyZWFkRGF0YSk7CisgICAgQVNTRVJU
KGRlc3RpbmF0aW9uTm9kZSk7CisgICAgZGVzdGluYXRpb25Ob2RlLT5yZW5kZXIoKTsKKyAgICAK
KyAgICByZXR1cm4gMDsKK30KKwordm9pZCBPZmZsaW5lQXVkaW9EZXN0aW5hdGlvbk5vZGU6OnJl
bmRlcigpCit7CisgICAgQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7CisgICAgQVNTRVJUKG1fcmVu
ZGVyQnVzLmdldCgpKTsKKyAgICBpZiAoIW1fcmVuZGVyQnVzLmdldCgpKQorICAgICAgICByZXR1
cm47CisgICAgCisgICAgYm9vbCBjaGFubmVsc01hdGNoID0gbV9yZW5kZXJCdXMtPm51bWJlck9m
Q2hhbm5lbHMoKSA9PSBtX3JlbmRlclRhcmdldC0+bnVtYmVyT2ZDaGFubmVscygpOworICAgIEFT
U0VSVChjaGFubmVsc01hdGNoKTsKKyAgICBpZiAoIWNoYW5uZWxzTWF0Y2gpCisgICAgICAgIHJl
dHVybjsKKyAgICAgICAgCisgICAgYm9vbCBpc1JlbmRlckJ1c0FsbG9jYXRlZCA9IG1fcmVuZGVy
QnVzLT5sZW5ndGgoKSA+PSByZW5kZXJRdWFudHVtU2l6ZTsKKyAgICBBU1NFUlQoaXNSZW5kZXJC
dXNBbGxvY2F0ZWQpOworICAgIGlmICghaXNSZW5kZXJCdXNBbGxvY2F0ZWQpCisgICAgICAgIHJl
dHVybjsKKyAgICAgICAgCisgICAgLy8gU3luY2hyb25pemUgd2l0aCBIUlRGRGF0YWJhc2VMb2Fk
ZXIuCisgICAgLy8gVGhlIGRhdGFiYXNlIG11c3QgYmUgbG9hZGVkIGJlZm9yZSB3ZSBjYW4gcHJv
Y2VlZC4KKyAgICBIUlRGRGF0YWJhc2VMb2FkZXIqIGxvYWRlciA9IEhSVEZEYXRhYmFzZUxvYWRl
cjo6bG9hZGVyKCk7CisgICAgQVNTRVJUKGxvYWRlcik7CisgICAgaWYgKCFsb2FkZXIpCisgICAg
ICAgIHJldHVybjsKKyAgICAKKyAgICBsb2FkZXItPndhaXRGb3JMb2FkZXJUaHJlYWRDb21wbGV0
aW9uKCk7CisgICAgICAgIAorICAgIC8vIEJyZWFrIHVwIHRoZSByZW5kZXIgdGFyZ2V0IGludG8g
c21hbGxlciAicmVuZGVyIHF1YW50aXplIiBzaXplZCBwaWVjZXMuCisgICAgLy8gUmVuZGVyIHVu
dGlsIHdlJ3JlIGZpbmlzaGVkLgorICAgIHNpemVfdCBmcmFtZXNUb1Byb2Nlc3MgPSBtX3JlbmRl
clRhcmdldC0+bGVuZ3RoKCk7CisgICAgdW5zaWduZWQgbnVtYmVyT2ZDaGFubmVscyA9IG1fcmVu
ZGVyVGFyZ2V0LT5udW1iZXJPZkNoYW5uZWxzKCk7CisKKyAgICB1bnNpZ25lZCBuID0gMDsKKyAg
ICB3aGlsZSAoZnJhbWVzVG9Qcm9jZXNzID4gMCkgeworICAgICAgICAvLyBSZW5kZXIgb25lIHJl
bmRlciBxdWFudHVtLgorICAgICAgICBwcm92aWRlSW5wdXQobV9yZW5kZXJCdXMuZ2V0KCksIHJl
bmRlclF1YW50dW1TaXplKTsKKyAgICAgICAgCisgICAgICAgIHNpemVfdCBmcmFtZXNBdmFpbGFi
bGVUb0NvcHkgPSBtaW4oZnJhbWVzVG9Qcm9jZXNzLCByZW5kZXJRdWFudHVtU2l6ZSk7CisgICAg
ICAgIAorICAgICAgICBmb3IgKHVuc2lnbmVkIGNoYW5uZWxJbmRleCA9IDA7IGNoYW5uZWxJbmRl
eCA8IG51bWJlck9mQ2hhbm5lbHM7ICsrY2hhbm5lbEluZGV4KSB7CisgICAgICAgICAgICBmbG9h
dCogc291cmNlID0gbV9yZW5kZXJCdXMtPmNoYW5uZWwoY2hhbm5lbEluZGV4KS0+ZGF0YSgpOwor
ICAgICAgICAgICAgZmxvYXQqIGRlc3RpbmF0aW9uID0gbV9yZW5kZXJUYXJnZXQtPmdldENoYW5u
ZWxEYXRhKGNoYW5uZWxJbmRleCktPmRhdGEoKTsKKyAgICAgICAgICAgIG1lbWNweShkZXN0aW5h
dGlvbiArIG4sIHNvdXJjZSwgc2l6ZW9mKGZsb2F0KSAqIGZyYW1lc0F2YWlsYWJsZVRvQ29weSk7
CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIG4gKz0gZnJhbWVzQXZhaWxhYmxlVG9Db3B5
OworICAgICAgICBmcmFtZXNUb1Byb2Nlc3MgLT0gZnJhbWVzQXZhaWxhYmxlVG9Db3B5OworICAg
IH0KKyAgICAKKyAgICAvLyBPdXIgd29yayBpcyBkb25lLiBMZXQgdGhlIEF1ZGlvQ29udGV4dCBr
bm93LgorICAgIGNhbGxPbk1haW5UaHJlYWQobm90aWZ5Q29tcGxldGVEaXNwYXRjaCwgdGhpcyk7
Cit9CisKK3ZvaWQgT2ZmbGluZUF1ZGlvRGVzdGluYXRpb25Ob2RlOjpub3RpZnlDb21wbGV0ZURp
c3BhdGNoKHZvaWQqIHVzZXJEYXRhKQoreworICAgIE9mZmxpbmVBdWRpb0Rlc3RpbmF0aW9uTm9k
ZSogZGVzdGluYXRpb25Ob2RlID0gc3RhdGljX2Nhc3Q8T2ZmbGluZUF1ZGlvRGVzdGluYXRpb25O
b2RlKj4odXNlckRhdGEpOworICAgIEFTU0VSVChkZXN0aW5hdGlvbk5vZGUpOworICAgIGlmICgh
ZGVzdGluYXRpb25Ob2RlKQorICAgICAgICByZXR1cm47CisKKyAgICBkZXN0aW5hdGlvbk5vZGUt
Pm5vdGlmeUNvbXBsZXRlKCk7Cit9CisKK3ZvaWQgT2ZmbGluZUF1ZGlvRGVzdGluYXRpb25Ob2Rl
Ojpub3RpZnlDb21wbGV0ZSgpCit7CisgICAgY29udGV4dCgpLT5maXJlQ29tcGxldGlvbkV2ZW50
KCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShXRUJf
QVVESU8pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9PZmZsaW5lQXVkaW9EZXN0aW5h
dGlvbk5vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9PZmZsaW5l
QXVkaW9EZXN0aW5hdGlvbk5vZGUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL3dl
YmF1ZGlvL09mZmxpbmVBdWRpb0Rlc3RpbmF0aW9uTm9kZS5oCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDc4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExLCBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBPZmZsaW5lQXVkaW9EZXN0aW5hdGlvbk5v
ZGVfaAorI2RlZmluZSBPZmZsaW5lQXVkaW9EZXN0aW5hdGlvbk5vZGVfaAorCisjaW5jbHVkZSAi
QXVkaW9CdWZmZXIuaCIKKyNpbmNsdWRlICJBdWRpb0Rlc3RpbmF0aW9uTm9kZS5oIgorI2luY2x1
ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUg
PHd0Zi9UaHJlYWRpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBBdWRpb0J1
czsKK2NsYXNzIEF1ZGlvQ29udGV4dDsKKyAgICAKK2NsYXNzIE9mZmxpbmVBdWRpb0Rlc3RpbmF0
aW9uTm9kZSA6IHB1YmxpYyBBdWRpb0Rlc3RpbmF0aW9uTm9kZSB7CitwdWJsaWM6CisgICAgc3Rh
dGljIFBhc3NSZWZQdHI8T2ZmbGluZUF1ZGlvRGVzdGluYXRpb25Ob2RlPiBjcmVhdGUoQXVkaW9D
b250ZXh0KiBjb250ZXh0LCBBdWRpb0J1ZmZlciogcmVuZGVyVGFyZ2V0KQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBPZmZsaW5lQXVkaW9EZXN0aW5hdGlvbk5vZGUoY29udGV4
dCwgcmVuZGVyVGFyZ2V0KSk7ICAgICAKKyAgICB9CisKKyAgICB2aXJ0dWFsIH5PZmZsaW5lQXVk
aW9EZXN0aW5hdGlvbk5vZGUoKTsKKyAgICAKKyAgICAvLyBBdWRpb05vZGUgICAKKyAgICB2aXJ0
dWFsIHZvaWQgaW5pdGlhbGl6ZSgpOworICAgIHZpcnR1YWwgdm9pZCB1bmluaXRpYWxpemUoKTsK
KyAgICAKKyAgICBkb3VibGUgc2FtcGxlUmF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVuZGVyVGFy
Z2V0LT5zYW1wbGVSYXRlKCk7IH0KKworICAgIHZvaWQgc3RhcnRSZW5kZXJpbmcoKTsKKyAgICAK
K3ByaXZhdGU6CisgICAgT2ZmbGluZUF1ZGlvRGVzdGluYXRpb25Ob2RlKEF1ZGlvQ29udGV4dCos
IEF1ZGlvQnVmZmVyKiByZW5kZXJUYXJnZXQpOworCisgICAgLy8gVGhpcyBBdWRpb05vZGUgcmVu
ZGVycyBpbnRvIHRoaXMgQXVkaW9CdWZmZXIuCisgICAgUmVmUHRyPEF1ZGlvQnVmZmVyPiBtX3Jl
bmRlclRhcmdldDsKKyAgICAKKyAgICAvLyBUZW1wb3JhcnkgQXVkaW9CdXMgZm9yIGVhY2ggcmVu
ZGVyIHF1YW50dW0uCisgICAgT3duUHRyPEF1ZGlvQnVzPiBtX3JlbmRlckJ1czsKKyAgICAKKyAg
ICAvLyBSZW5kZXJpbmcgdGhyZWFkLgorICAgIHZvbGF0aWxlIFRocmVhZElkZW50aWZpZXIgbV9y
ZW5kZXJUaHJlYWQ7CisgICAgYm9vbCBtX3N0YXJ0ZWRSZW5kZXJpbmc7CisgICAgc3RhdGljIHZv
aWQqIHJlbmRlckVudHJ5KHZvaWQqIHRocmVhZERhdGEpOworICAgIHZvaWQgcmVuZGVyKCk7Cisg
ICAgCisgICAgLy8gRm9yIGNvbXBsZXRpb24gY2FsbGJhY2sgb24gbWFpbiB0aHJlYWQuCisgICAg
c3RhdGljIHZvaWQgbm90aWZ5Q29tcGxldGVEaXNwYXRjaCh2b2lkKiB1c2VyRGF0YSk7CisgICAg
dm9pZCBub3RpZnlDb21wbGV0ZSgpOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisj
ZW5kaWYgLy8gT2ZmbGluZUF1ZGlvRGVzdGluYXRpb25Ob2RlX2gK
</data>

          </attachment>
      

    </bug>

</bugzilla>