<?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>22066</bug_id>
          
          <creation_ts>2008-11-04 11:05:17 -0800</creation_ts>
          <short_desc>Implement Worker global object</short_desc>
          <delta_ts>2008-11-05 23:07:04 -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>WebCore JavaScript</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac</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>1</everconfirmed>
          <reporter name="Alexey Proskuryakov">ap</reporter>
          <assigned_to name="Alexey Proskuryakov">ap</assigned_to>
          <cc>darin</cc>
    
    <cc>ggaren</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>97584</commentid>
    <comment_count>0</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2008-11-04 11:05:17 -0800</bug_when>
    <thetext>Patch with an initial implementation of WorkerGlobalScope is forthcoming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>97590</commentid>
    <comment_count>1</comment_count>
      <attachid>24889</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2008-11-04 11:18:20 -0800</bug_when>
    <thetext>Created attachment 24889
proposed patch

Some of this code is far from being final, but I&apos;d like to get it landed to simplify logistics of working on code that is executed in Workers.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>97594</commentid>
    <comment_count>2</comment_count>
      <attachid>24890</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2008-11-04 11:21:18 -0800</bug_when>
    <thetext>Created attachment 24890
proposed patch

Removed a change that I do not intend to check in yet.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>97695</commentid>
    <comment_count>3</comment_count>
      <attachid>24890</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-11-05 09:38:46 -0800</bug_when>
    <thetext>Comment on attachment 24890
proposed patch

&gt; +    JSWorkerContext.lut.h \

I was really hoping we could avoid adding more of these. I&apos;ve been trying to eliminate them for a long time. Could we find some way to get the bindings-generation script to do this work instead? We can still do custom implementations but I&apos;d really like to phase out use of the create_hash_table script ASAP. I think the IDL syntax is much better than the @begin syntax.

&gt; +        return static_cast&lt;WorkerContext*&gt;(scriptExecutionContext)-&gt;script()-&gt;jsWorkerContext();

Given that this is on the ScriptController, could we omit the &quot;js&quot; prefix? The &quot;script&quot; in ScriptController already means JavaScript.

&gt; +    : JSDOMGlobalObject(JSWorkerContext::createStructureID(new (Heap::heap(this)-&gt;globalData()) JSWorkerContextPrototype(JSWorkerContextPrototype::createStructureID(jsNull()))), new JSDOMGlobalObjectData, this)

Maybe you could use a helper function (inline with internal linkage) to make this long line a little shorter?

&gt; +ScriptExecutionContext* JSWorkerContext::scriptExecutionContext() const
&gt; +{
&gt; +    return m_impl.get();
&gt; +}

Should be inline and defined in the header?

&gt; +WorkerScriptController::~WorkerScriptController()
&gt; +{
&gt; +    m_jsWorkerContext = 0;
&gt; +
&gt; +    ASSERT(!m_globalData-&gt;heap.protectedObjectCount());
&gt; +    ASSERT(!m_globalData-&gt;heap.isBusy());
&gt; +    m_globalData-&gt;heap.destroy();
&gt; +}

Might want a comment explaining why setting m_jsWorkerContext to 0 is needed.

&gt; +    if (comp.complType() == Throw)
&gt; +        fprintf(stderr, &quot;%s\n&quot;, comp.value()-&gt;toString(exec).ascii());

I think we want utf8() here, not ascii(). But also, do we really want to do an fprintf to stderr here? That seems wrong long-term and cross-platform, especially unconditionally.

&gt; +    class WorkerScriptController {

This class looks noncopyable, but it has no noncopyable members. I think it should inherit from Noncopyable.

&gt; +        JSWorkerContext* jsWorkerContext()

I don&apos;t think this needs a &quot;js&quot; prefix. Except that now I see that you&apos;re using this to distinguish two objects, m_workerContext and m_jsWorkerContext. Maybe the latter should be called m_workerContextWrapper? I think I like that better than the JS prefix.

&gt; +    // The document may have been destroyed already.
&gt; +    if (!document())
&gt; +        return;

Are there other conditions where the document is &quot;done&quot; other than &quot;destroyed&quot;? Maybe this is not just about the document having been destroyed, but more about when it is done. Since the document is a garbage-collected object I don&apos;t think that destruction time is a well-defined event. Maybe you mean something subtly different?

&gt; +    // FIXME: Should we change the KURL constructor to have this behavior?
&gt; +    if (url.isNull())
&gt; +        return KURL();
&gt; +    // FIXME: does this need to provide a charset, like Document::completeURL does?
&gt; +    return KURL(m_location-&gt;url(), url);

Good FIXMEs. I don&apos;t have the answer for either at the moment.

&gt; +        WorkerLocation(const KURL&amp; url) : m_url(url) {}

We should get consistent about whether we use a space between the parentheses in places like this; maybe put it in the style guidelines. I personally like it slightly better with the space.

&gt; +        String m_scriptURL;

It seems strange to take a KURL argument and then store it as a String. That makes it more expensive to create a new URL. Is this the right tradeoff? Are we trying to save space?

r=me, this seems like it&apos;s in a good state to land</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>97696</commentid>
    <comment_count>4</comment_count>
      <attachid>24890</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-11-05 09:40:44 -0800</bug_when>
    <thetext>Comment on attachment 24890
proposed patch

One more comment.

~WorkerContext should be marked virtual, because it&apos;s going to be virtual anyway due to the inheritance from ScriptExecutionContext.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>97778</commentid>
    <comment_count>5</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2008-11-05 22:45:59 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 24890 [edit])
&gt; &gt; +    JSWorkerContext.lut.h \
&gt; 
&gt; I was really hoping we could avoid adding more of these. I&apos;ve been trying to
&gt; eliminate them for a long time. Could we find some way to get the
&gt; bindings-generation script to do this work instead? 

I did try, but couldn&apos;t make it work - I think the code generator will need to be improved to handle JSDOMWindowBase and JSWorkerContext.

&gt; &gt; +ScriptExecutionContext* JSWorkerContext::scriptExecutionContext() const
&gt; &gt; +{
&gt; &gt; +    return m_impl.get();
&gt; &gt; +}
&gt; 
&gt; Should be inline and defined in the header?

No, because it&apos;s virtual. Maybe we&apos;ll need to add a non-virtual variant of it in the future.

&gt; &gt; +    if (comp.complType() == Throw)
&gt; &gt; +        fprintf(stderr, &quot;%s\n&quot;, comp.value()-&gt;toString(exec).ascii());
&gt; 
&gt; I think we want utf8() here, not ascii(). But also, do we really want to do an
&gt; fprintf to stderr here? That seems wrong long-term and cross-platform,
&gt; especially unconditionally.

Oops, forgot to write up a FIXME here. Yes, this needs to be channeled via Frame to console.

&gt; I don&apos;t think this needs a &quot;js&quot; prefix. Except that now I see that you&apos;re using
&gt; this to distinguish two objects, m_workerContext and m_jsWorkerContext. Maybe
&gt; the latter should be called m_workerContextWrapper? I think I like that better
&gt; than the JS prefix.

I don&apos;t really think of the global object as a wrapper, but OK.

&gt; &gt; +    // The document may have been destroyed already.
&gt; &gt; +    if (!document())
&gt; &gt; +        return;
&gt; 
&gt; Are there other conditions where the document is &quot;done&quot; other than &quot;destroyed&quot;?
&gt; Maybe this is not just about the document having been destroyed, but more about
&gt; when it is done. Since the document is a garbage-collected object I don&apos;t think
&gt; that destruction time is a well-defined event. Maybe you mean something subtly
&gt; different?

This check is about the document having been destroyed, but you are right, it should bail out if the document was detached, too. I&apos;m not quite sure how to best do it (tie to FrameLoader::stopLoading() somehow?), added a FIXME.

&gt; &gt; +        String m_scriptURL;
&gt; 
&gt; It seems strange to take a KURL argument and then store it as a String. That
&gt; makes it more expensive to create a new URL. Is this the right tradeoff? Are we
&gt; trying to save space?

We need to deep copy the string to pass it to another thread. It doesn&apos;t really matter when to re-parse it, but I prefer to only pass strings between threads for simplicity. I guess we could add a deep copy method to KURL to avoid re-parsing, but I don&apos;t think it would help all that much.

Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>97780</commentid>
    <comment_count>6</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2008-11-05 23:07:04 -0800</bug_when>
    <thetext>Committed revision 38150.

</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>24889</attachid>
            <date>2008-11-04 11:18:20 -0800</date>
            <delta_ts>2008-11-04 11:21:18 -0800</delta_ts>
            <desc>proposed patch</desc>
            <filename>WorkerContext.txt</filename>
            <type>text/plain</type>
            <size>57524</size>
            <attacher name="Alexey Proskuryakov">ap</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzODEwNikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDcgQEAKKzIwMDgtMTEtMDQgIEFsZXhleSBQcm9za3VyeWFrb3YgIDxhcEB3ZWJr
aXQub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjA2NgorICAgICAgICBJ
bXBsZW1lbnQgV29ya2VyIGdsb2JhbCBvYmplY3QKKworICAgICAgICAqIERlcml2ZWRTb3VyY2Vz
Lm1ha2U6IEFkZGVkIFdvcmtlckxvY2F0aW9uIElETCBhbmQgSlNXb3JrZXJDb250ZXh0IGxvb2t1
cCB0YWJsZS4KKworICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajog
T25seSBhZGRpbmcgZmlsZXMgdG8gTWFjIHByb2plY3QgZm9yIG5vdywgYXMgV29ya2VyCisgICAg
ICAgIHN1cHBvcnQgaXMgc3RpbGwgZGlzYWJsZWQgYnkgZGVmYXVsdC4KKworICAgICAgICAqIGJp
bmRpbmdzL2pzL0pTRE9NR2xvYmFsT2JqZWN0LmNwcDogKFdlYkNvcmU6OnRvSlNET01HbG9iYWxP
YmplY3QpOiBJbXBsZW1lbnRlZCBXb3JrZXIgY2FzZS4KKworICAgICAgICAqIGJpbmRpbmdzL2pz
L0pTTWVzc2FnZUNoYW5uZWxDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU01l
c3NhZ2VDaGFubmVsQ29uc3RydWN0b3I6OkpTTWVzc2FnZUNoYW5uZWxDb25zdHJ1Y3Rvcik6IERp
dHRvLgorCisgICAgICAgICogYmluZGluZ3MvanMvSlNXb3JrZXJDb250ZXh0LmNwcDogQWRkZWQu
CisgICAgICAgICogYmluZGluZ3MvanMvSlNXb3JrZXJDb250ZXh0Lmg6IEFkZGVkLgorICAgICAg
ICAqIGJpbmRpbmdzL2pzL1dvcmtlclNjcmlwdENvbnRyb2xsZXIuY3BwOiBBZGRlZC4KKyAgICAg
ICAgKiBiaW5kaW5ncy9qcy9Xb3JrZXJTY3JpcHRDb250cm9sbGVyLmg6IEFkZGVkLgorICAgICAg
ICAqIGRvbS9Xb3JrZXJDb250ZXh0LmNwcDogQWRkZWQuCisgICAgICAgICogZG9tL1dvcmtlckNv
bnRleHQuaDogQWRkZWQuCisgICAgICAgIEFkZGVkIGFuIGltcGxlbWVudGF0aW9uIG9mIHdvcmtl
ciBjb250ZXh0cy4KKworICAgICAgICAqIGRvbS9EZWRpY2F0ZWRXb3JrZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6RGVkaWNhdGVkV29ya2VyOjpzdGFydExvYWQpOiBGaXhlZCBhIGxpZmV0aW1l
IGJ1ZyBJIHNhdyBvbiBteSB0ZXN0cy4KKyAgICAgICAgKFdlYkNvcmU6OkRlZGljYXRlZFdvcmtl
cjo6bm90aWZ5RmluaXNoZWQpOiBDcmVhdGUgYSB0aHJlYWQuIEN1cnJlbnRseSwgb2JqZWN0IG93
bmVyc2hpcAorICAgICAgICBhbmQgbGlmZXRpbWUgaXMgbm90IGNsZWFyIGF0IGFsbC4KKworICAg
ICAgICAqIGRvbS9Xb3JrZXJMb2NhdGlvbi5jcHA6IEFkZGVkLgorICAgICAgICAqIGRvbS9Xb3Jr
ZXJMb2NhdGlvbi5oOiBBZGRlZC4KKyAgICAgICAgKiBkb20vV29ya2VyTG9jYXRpb24uaWRsOiBB
ZGRlZC4KKyAgICAgICAgQWRkZWQgV29ya2VyTG9jYXRpb24sIHdoaWNoIGlzIG9uZSBvZiB0aGUg
b2JqZWN0cyBhdmFpbGFibGUgdG8gd29ya2Vycy4KKworICAgICAgICAqIGRvbS9Xb3JrZXJUaHJl
YWQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OldvcmtlclRocmVhZDo6V29ya2VyVGhy
ZWFkKToKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlclRocmVhZDo6c3RhcnQpOgorICAgICAgICAo
V2ViQ29yZTo6V29ya2VyVGhyZWFkOjp3b3JrZXJUaHJlYWRTdGFydCk6CisgICAgICAgIChXZWJD
b3JlOjpXb3JrZXJUaHJlYWQ6OndvcmtlclRocmVhZCk6CisgICAgICAgICogZG9tL1dvcmtlclRo
cmVhZC5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OldvcmtlclRocmVhZDo6Y3JlYXRlKToK
KyAgICAgICAgUnVuIHNvbWUgY29kZSBpbiBhIHdvcmtlciB0aHJlYWQgKG5vIG1lc3NhZ2UgbG9v
cCB5ZXQpLgorCiAyMDA4LTExLTA0ICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KIAog
ICAgICAgICBSZXZpZXdlZCBieSBUaW0gSGF0Y2hlci4KSW5kZXg6IFdlYkNvcmUvRGVyaXZlZFNv
dXJjZXMubWFrZQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UJKHJl
dmlzaW9uIDM4MDkyKQorKysgV2ViQ29yZS9EZXJpdmVkU291cmNlcy5tYWtlCSh3b3JraW5nIGNv
cHkpCkBAIC0zNTksNiArMzU5LDcgQEAgRE9NX0NMQVNTRVMgPSBcCiAgICAgV2ViS2l0Q1NTVHJh
bnNmb3JtVmFsdWUgXAogICAgIFdlYktpdFRyYW5zaXRpb25FdmVudCBcCiAgICAgV2hlZWxFdmVu
dCBcCisgICAgV29ya2VyTG9jYXRpb24gXAogICAgIFhNTEh0dHBSZXF1ZXN0IFwKICAgICBYTUxI
dHRwUmVxdWVzdEV4Y2VwdGlvbiBcCiAgICAgWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50IFwK
QEAgLTM3OSw2ICszODAsNyBAQCBhbGwgOiBcCiAgICAgXAogICAgIEpTRE9NV2luZG93QmFzZS5s
dXQuaCBcCiAgICAgSlNSR0JDb2xvci5sdXQuaCBcCisgICAgSlNXb3JrZXJDb250ZXh0Lmx1dC5o
IFwKICAgICBcCiAgICAgSlNKYXZhU2NyaXB0Q2FsbEZyYW1lLmggXAogICAgIFwKSW5kZXg6IFdl
YkNvcmUvQ29uZmlndXJhdGlvbnMvV2ViQ29yZS54Y2NvbmZpZwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL0NvbmZpZ3VyYXRpb25zL1dlYkNvcmUueGNjb25maWcJKHJldmlzaW9uIDM4MDkyKQorKysg
V2ViQ29yZS9Db25maWd1cmF0aW9ucy9XZWJDb3JlLnhjY29uZmlnCSh3b3JraW5nIGNvcHkpCkBA
IC0xNSw3ICsxNSw3IEBAIFBST0RVQ1RfTkFNRSA9IFdlYkNvcmU7CiBPVEhFUl9MREZMQUdTID0g
LWwkKFNRTElURTNfTElCUkFSWSkgLWxvYmpjIC1zdWJfbGlicmFyeSBsaWJvYmpjIC11bWJyZWxs
YSBXZWJLaXQ7CiAKIC8vIFRoaXMgbmVlZHMgdG8gYmUga2VwdCBzb3J0ZWQsIGFuZCBpbiBzeW5j
IHdpdGggRkVBVFVSRV9ERUZJTkVTIGluIEphdmFTY3JpcHRDb3JlLnhjY29uZmlnLCBXZWJLaXQu
eGNjb25maWcgYW5kIHRoZSBkZWZhdWx0IHNldHRpbmdzIG9mIGJ1aWxkLXdlYmtpdC4KLUZFQVRV
UkVfREVGSU5FUyA9IEVOQUJMRV9EQVRBQkFTRSBFTkFCTEVfRE9NX1NUT1JBR0UgRU5BQkxFX0lD
T05EQVRBQkFTRSBFTkFCTEVfT0ZGTElORV9XRUJfQVBQTElDQVRJT05TIEVOQUJMRV9TVkcgRU5B
QkxFX1NWR19BTklNQVRJT04gRU5BQkxFX1NWR19BU19JTUFHRSBFTkFCTEVfU1ZHX0ZPTlRTIEVO
QUJMRV9TVkdfRk9SRUlHTl9PQkpFQ1QgRU5BQkxFX1NWR19VU0UgRU5BQkxFX1ZJREVPIEVOQUJM
RV9YUEFUSCBFTkFCTEVfWFNMVDsKK0ZFQVRVUkVfREVGSU5FUyA9IEVOQUJMRV9EQVRBQkFTRSBF
TkFCTEVfRE9NX1NUT1JBR0UgRU5BQkxFX0lDT05EQVRBQkFTRSBFTkFCTEVfT0ZGTElORV9XRUJf
QVBQTElDQVRJT05TIEVOQUJMRV9TVkcgRU5BQkxFX1NWR19BTklNQVRJT04gRU5BQkxFX1NWR19B
U19JTUFHRSBFTkFCTEVfU1ZHX0ZPTlRTIEVOQUJMRV9TVkdfRk9SRUlHTl9PQkpFQ1QgRU5BQkxF
X1NWR19VU0UgRU5BQkxFX1ZJREVPIEVOQUJMRV9XT1JLRVJTIEVOQUJMRV9YUEFUSCBFTkFCTEVf
WFNMVDsKIAogU1FMSVRFM19MSUJSQVJZID0gJChTUUxJVEUzX0xJQlJBUllfJChNQUNfT1NfWF9W
RVJTSU9OX01BSk9SKSk7CiBTUUxJVEUzX0xJQlJBUllfID0gV2ViQ29yZVNRTGl0ZTM7CkluZGV4
OiBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMzgw
OTIpCisrKyBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2lu
ZyBjb3B5KQpAQCAtNDE1MSw2ICs0MTUxLDggQEAKIAkJRTFBMzAyQkMwREU4MzcwMzAwQzUyRjJD
IC8qIFN0cmluZ0J1aWxkZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEUxQTMwMkJCMERFODM3MDMwMEM1MkYyQyAvKiBTdHJpbmdCdWlsZGVyLmggKi87
IH07CiAJCUUxQTMwMkMxMERFODM3NjkwMEM1MkYyQyAvKiBTdHJpbmdCdWlsZGVyLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxQTMwMkMwMERFODM3
NjkwMEM1MkYyQyAvKiBTdHJpbmdCdWlsZGVyLmNwcCAqLzsgfTsKIAkJRTFBNUY5OUIwRTdFQUEy
NTAwQUY4NUVBIC8qIEpTTWVzc2FnZUNoYW5uZWxDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTFBNUY5OUEwRTdFQUEyNTAwQUY4NUVBIC8q
IEpTTWVzc2FnZUNoYW5uZWxDdXN0b20uY3BwICovOyB9OworCQlFMUE2NDNGMjBFQzA5NzI1MDA3
Nzk2NjggLyogV29ya2VyU2NyaXB0Q29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTFBNjQzRjEwRUMwOTcyNTAwNzc5NjY4IC8qIFdvcmtl
clNjcmlwdENvbnRyb2xsZXIuaCAqLzsgfTsKKwkJRTFBNjQzRkQwRUMwOTdBMDAwNzc5NjY4IC8q
IFdvcmtlclNjcmlwdENvbnRyb2xsZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gRTFBNjQzRkMwRUMwOTdBMDAwNzc5NjY4IC8qIFdvcmtlclNjcmlw
dENvbnRyb2xsZXIuY3BwICovOyB9OwogCQlFMUFDQUY0QzBFNzkxQUFGMDA4N0QxMkIgLyogRE9N
TWVzc2FnZVBvcnQubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBFMUFDQUY0QTBFNzkxQUFGMDA4N0QxMkIgLyogRE9NTWVzc2FnZVBvcnQubW0gKi87IH07
CiAJCUUxQUNBRjREMEU3OTFBQUYwMDg3RDEyQiAvKiBET01NZXNzYWdlUG9ydC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTFBQ0FGNEIwRTc5MUFBRjAw
ODdEMTJCIC8qIERPTU1lc3NhZ2VQb3J0LmggKi87IH07CiAJCUUxQURFQ0JGMEU3NkFDRjEwMDRB
MUE1RSAvKiBNZXNzYWdlUG9ydC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRTFBREVDQkQwRTc2QUNGMTAwNEExQTVFIC8qIE1lc3NhZ2VQb3J0LmggKi87
IH07CkBAIC00MTYzLDggKzQxNjUsMTkgQEAKIAkJRTFBREVEREIwRTc2QkQ5MzAwNEExQTVFIC8q
IEpTTWVzc2FnZVBvcnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gRTFBREVERDkwRTc2QkQ5MzAwNEExQTVFIC8qIEpTTWVzc2FnZVBvcnQuY3BwICov
OyB9OwogCQlFMUJFNTEyRDBDRjZDNTEyMDAyRUE5NTkgLyogWFNMVFVuaWNvZGVTb3J0LmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxQkU1MTJCMENG
NkM1MTIwMDJFQTk1OSAvKiBYU0xUVW5pY29kZVNvcnQuY3BwICovOyB9OwogCQlFMUJFNTEyRTBD
RjZDNTEyMDAyRUE5NTkgLyogWFNMVFVuaWNvZGVTb3J0LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMUJFNTEyQzBDRjZDNTEyMDAyRUE5NTkgLyogWFNM
VFVuaWNvZGVTb3J0LmggKi87IH07CisJCUUxQzJDNDI0MEVBQ0UwQkMwMDdFNjFGQiAvKiBXb3Jr
ZXJUaHJlYWQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEUxQzJDNDIzMEVBQ0UwQkMwMDdFNjFGQiAvKiBXb3JrZXJUaHJlYWQuaCAqLzsgfTsKKwkJRTFD
MkM0MjkwRUFDRTBFMDAwN0U2MUZCIC8qIFdvcmtlclRocmVhZC5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMUMyQzQyODBFQUNFMEUwMDA3RTYxRkIg
LyogV29ya2VyVGhyZWFkLmNwcCAqLzsgfTsKKwkJRTFDMkM0M0UwRUFEMDEzMzAwN0U2MUZCIC8q
IFdvcmtlckNvbnRleHQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEUxQzJDNDNEMEVBRDAxMzMwMDdFNjFGQiAvKiBXb3JrZXJDb250ZXh0LmggKi87IH07
CisJCUUxQzJDNDQyMEVBRDAxN0IwMDdFNjFGQiAvKiBXb3JrZXJDb250ZXh0LmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxQzJDNDQxMEVBRDAxN0Iw
MDdFNjFGQiAvKiBXb3JrZXJDb250ZXh0LmNwcCAqLzsgfTsKKwkJRTFDMzYyQkMwRUFGMjlGQjAw
NzQxMEJDIC8qIFdvcmtlckxvY2F0aW9uLmlkbCBpbiBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRTFDMzYyQkIwRUFGMjlGQjAwNzQxMEJDIC8qIFdvcmtlckxv
Y2F0aW9uLmlkbCAqLzsgfTsKKwkJRTFDMzYyRUYwRUFGMkFBOTAwNzQxMEJDIC8qIEpTV29ya2Vy
TG9jYXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEUxQzM2MkVEMEVBRjJBQTkwMDc0MTBCQyAvKiBKU1dvcmtlckxvY2F0aW9uLmggKi87IH07CisJ
CUUxQzM2MkYwMEVBRjJBQTkwMDc0MTBCQyAvKiBKU1dvcmtlckxvY2F0aW9uLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxQzM2MkVFMEVBRjJBQTkw
MDc0MTBCQyAvKiBKU1dvcmtlckxvY2F0aW9uLmNwcCAqLzsgfTsKKwkJRTFDMzYzMDEwRUFGMkND
NjAwNzQxMEJDIC8qIFdvcmtlckxvY2F0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBFMUMzNjMwMDBFQUYyQ0M2MDA3NDEwQkMgLyogV29ya2VyTG9j
YXRpb24uaCAqLzsgfTsKKwkJRTFDMzYzMDYwRUFGMkQwNzAwNzQxMEJDIC8qIFdvcmtlckxvY2F0
aW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUx
QzM2MzA1MEVBRjJEMDcwMDc0MTBCQyAvKiBXb3JrZXJMb2NhdGlvbi5jcHAgKi87IH07CiAJCUUx
QzM2QzAzMEVCMDc2RDYwMDc0MTBCQyAvKiBKU0RPTUdsb2JhbE9iamVjdC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTFDMzZDMDIwRUIwNzZENjAwNzQx
MEJDIC8qIEpTRE9NR2xvYmFsT2JqZWN0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJRTFDMzZDQkQwRUIwODA2MjAwNzQxMEJDIC8qIEpTRE9NR2xv
YmFsT2JqZWN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEUxQzM2Q0JDMEVCMDgwNjIwMDc0MTBCQyAvKiBKU0RPTUdsb2JhbE9iamVjdC5jcHAgKi87
IH07CisJCUUxQzM2RDM0MEVCMEEwOTQwMDc0MTBCQyAvKiBKU1dvcmtlckNvbnRleHQuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTFDMzZEMzIwRUIw
QTA5NDAwNzQxMEJDIC8qIEpTV29ya2VyQ29udGV4dC5jcHAgKi87IH07CisJCUUxQzM2RDM1MEVC
MEEwOTQwMDc0MTBCQyAvKiBKU1dvcmtlckNvbnRleHQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxQzM2RDMzMEVCMEEwOTQwMDc0MTBCQyAvKiBKU1dv
cmtlckNvbnRleHQuaCAqLzsgfTsKIAkJRTFDNERFNjkwRUE3NUMxRTAwMjNDQ0Q2IC8qIEFjdGl2
ZURPTU9iamVjdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gRTFDNERFNjgwRUE3NUMxRTAwMjNDQ0Q2IC8qIEFjdGl2ZURPTU9iamVjdC5oICovOyB9Owog
CQlFMUM0REU2RTBFQTc1QzY1MDAyM0NDRDYgLyogQWN0aXZlRE9NT2JqZWN0LmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxQzRERTZEMEVBNzVDNjUw
MDIzQ0NENiAvKiBBY3RpdmVET01PYmplY3QuY3BwICovOyB9OwogCQlFMUM4QkU1RDBFOEJEMTVB
MDA2NENCN0QgLyogSlNEZWRpY2F0ZWRXb3JrZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTFDOEJFNUMwRThCRDE1QTAwNjRDQjdEIC8qIEpTRGVk
aWNhdGVkV29ya2VyLmNwcCAqLzsgfTsKQEAgLTg3NjEsNiArODc3NCw4IEBACiAJCUUxQTMwMkJC
MERFODM3MDMwMEM1MkYyQyAvKiBTdHJpbmdCdWlsZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFN0cmluZ0J1aWxkZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJRTFBMzAyQzAwREU4Mzc2OTAwQzUyRjJDIC8qIFN0cmluZ0J1aWxkZXIuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3RyaW5nQnVpbGRlci5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUxQTVGOTlBMEU3RUFBMjUwMEFGODVFQSAvKiBKU01lc3Nh
Z2VDaGFubmVsQ3VzdG9tLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IEpTTWVzc2FnZUNoYW5uZWxDdXN0b20uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQlFMUE2NDNGMTBFQzA5NzI1MDA3Nzk2NjggLyogV29ya2VyU2NyaXB0Q29udHJvbGxlci5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXb3JrZXJTY3JpcHRDb250cm9sbGVyLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUUxQTY0M0ZDMEVDMDk3QTAwMDc3OTY2OCAv
KiBXb3JrZXJTY3JpcHRDb250cm9sbGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IFdvcmtlclNjcmlwdENvbnRyb2xsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlFMUFDQUY0QTBFNzkxQUFGMDA4N0QxMkIgLyogRE9NTWVzc2FnZVBvcnQubW0g
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBET01NZXNzYWdlUG9ydC5t
bTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTFBQ0FGNEIwRTc5MUFBRjAwODdEMTJC
IC8qIERPTU1lc3NhZ2VQb3J0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERP
TU1lc3NhZ2VQb3J0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUxQURFQ0JEMEU3
NkFDRjEwMDRBMUE1RSAvKiBNZXNzYWdlUG9ydC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGV4cGxpY2l0RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5oOyBmaWxlRW5jb2RpbmcgPSA0
OyBwYXRoID0gTWVzc2FnZVBvcnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTg3
NzUsOCArODc5MCwxOSBAQAogCQlFMUFERUREOTBFNzZCRDkzMDA0QTFBNUUgLyogSlNNZXNzYWdl
UG9ydC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU01lc3NhZ2VQ
b3J0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTFCRTUxMkIwQ0Y2QzUxMjAw
MkVBOTU5IC8qIFhTTFRVbmljb2RlU29ydC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBYU0xUVW5pY29kZVNvcnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlFMUJFNTEyQzBDRjZDNTEyMDAyRUE5NTkgLyogWFNMVFVuaWNvZGVTb3J0LmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFhTTFRVbmljb2RlU29ydC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQlFMUMyQzQyMzBFQUNFMEJDMDA3RTYxRkIgLyogV29ya2VyVGhy
ZWFkLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdvcmtlclRocmVhZC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFMUMyQzQyODBFQUNFMEUwMDA3RTYxRkIgLyog
V29ya2VyVGhyZWFkLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdv
cmtlclRocmVhZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUUxQzJDNDNEMEVB
RDAxMzMwMDdFNjFGQiAvKiBXb3JrZXJDb250ZXh0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFdvcmtlckNvbnRleHQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
RTFDMkM0NDEwRUFEMDE3QjAwN0U2MUZCIC8qIFdvcmtlckNvbnRleHQuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV29ya2VyQ29udGV4dC5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUUxQzM2MkJCMEVBRjI5RkIwMDc0MTBCQyAvKiBXb3JrZXJMb2Nh
dGlvbi5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gV29ya2VyTG9jYXRpb24uaWRsOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFMUMzNjJFRDBFQUYyQUE5MDA3NDEwQkMgLyogSlNX
b3JrZXJMb2NhdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1dvcmtl
ckxvY2F0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUUxQzM2MkVFMEVBRjJB
QTkwMDc0MTBCQyAvKiBKU1dvcmtlckxvY2F0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IEpTV29ya2VyTG9jYXRpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQlFMUMzNjMwMDBFQUYyQ0M2MDA3NDEwQkMgLyogV29ya2VyTG9jYXRpb24uaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV29ya2VyTG9jYXRpb24uaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTFDMzYzMDUwRUFGMkQwNzAwNzQxMEJDIC8qIFdvcmtl
ckxvY2F0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdvcmtl
ckxvY2F0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTFDMzZDMDIwRUIw
NzZENjAwNzQxMEJDIC8qIEpTRE9NR2xvYmFsT2JqZWN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEpTRE9NR2xvYmFsT2JqZWN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUUxQzM2Q0JDMEVCMDgwNjIwMDc0MTBCQyAvKiBKU0RPTUdsb2JhbE9iamVjdC5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0RPTUdsb2JhbE9iamVjdC5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUUxQzM2RDMyMEVCMEEwOTQwMDc0MTBC
QyAvKiBKU1dvcmtlckNvbnRleHQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gSlNXb3JrZXJDb250ZXh0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
RTFDMzZEMzMwRUIwQTA5NDAwNzQxMEJDIC8qIEpTV29ya2VyQ29udGV4dC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBKU1dvcmtlckNvbnRleHQuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJRTFDNERFNjgwRUE3NUMxRTAwMjNDQ0Q2IC8qIEFjdGl2ZURPTU9iamVj
dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBY3RpdmVET01PYmplY3QuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTFDNERFNkQwRUE3NUM2NTAwMjNDQ0Q2IC8q
IEFjdGl2ZURPTU9iamVjdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBBY3RpdmVET01PYmplY3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMUM4
QkU0NDBFOEJDQ0JCMDA2NENCN0QgLyogRGVkaWNhdGVkV29ya2VyLmlkbCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRl
eHQ7IHBhdGggPSBEZWRpY2F0ZWRXb3JrZXIuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwpAQCAtMTI4ODAsNiArMTI5MDYsOCBAQAogCQkJCUJDMzQ1MjQxMEQ3RTAwRUEwMDE2NTc0QSAv
KiBKU1JHQkNvbG9yLmNwcCAqLywKIAkJCQlCQzM0NTI0MjBEN0UwMEVBMDAxNjU3NEEgLyogSlNS
R0JDb2xvci5oICovLAogCQkJCUIyMTEyN0E1MEIzMTg2NzcwMDA5QkU1MyAvKiBKU1NWR1BPRFR5
cGVXcmFwcGVyLmggKi8sCisJCQkJRTFDMzZEMzIwRUIwQTA5NDAwNzQxMEJDIC8qIEpTV29ya2Vy
Q29udGV4dC5jcHAgKi8sCisJCQkJRTFDMzZEMzMwRUIwQTA5NDAwNzQxMEJDIC8qIEpTV29ya2Vy
Q29udGV4dC5oICovLAogCQkJCUJDMzQ4QkU3MERCODAzNTQwMDRBQkFCOSAvKiBKU1hNTEh0dHBS
ZXF1ZXN0Q29uc3RydWN0b3IuY3BwICovLAogCQkJCUJDMzQ4QkU4MERCODAzNTQwMDRBQkFCOSAv
KiBKU1hNTEh0dHBSZXF1ZXN0Q29uc3RydWN0b3IuaCAqLywKIAkJCQlCQ0U5OUVDMTBEQ0E2MjQx
MDAxODI2ODMgLyogSlNYU0xUUHJvY2Vzc29yQ29uc3RydWN0b3IuY3BwICovLApAQCAtMTI4OTQs
NiArMTI5MjIsOCBAQAogCQkJCTY1NDg4RDZBMERENUE4M0QwMDlEODNCMiAvKiBTdHJpbmdTb3Vy
Y2VQcm92aWRlci5oICovLAogCQkJCUJDNjA5MDFEMEU5MUI4RUMwMDBDNjhCNSAvKiBKU0V2ZW50
VGFyZ2V0LmggKi8sCiAJCQkJQkM2MDkwMUUwRTkxQjhFQzAwMEM2OEI1IC8qIEpTRXZlbnRUYXJn
ZXQuY3BwICovLAorCQkJCUUxQTY0M0YxMEVDMDk3MjUwMDc3OTY2OCAvKiBXb3JrZXJTY3JpcHRD
b250cm9sbGVyLmggKi8sCisJCQkJRTFBNjQzRkMwRUMwOTdBMDAwNzc5NjY4IC8qIFdvcmtlclNj
cmlwdENvbnRyb2xsZXIuY3BwICovLAogCQkJKTsKIAkJCXBhdGggPSBqczsKIAkJCXNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7CkBAIC0xMzM1NCw2ICsxMzM4NCw4IEBACiAJCQljaGlsZHJlbiA9ICgK
IAkJCQlFMUM4QkU1QzBFOEJEMTVBMDA2NENCN0QgLyogSlNEZWRpY2F0ZWRXb3JrZXIuY3BwICov
LAogCQkJCUUxQ0FBNUM1MEU4QkQyMzYwMEE3M0VDQSAvKiBKU0RlZGljYXRlZFdvcmtlci5oICov
LAorCQkJCUUxQzM2MkVFMEVBRjJBQTkwMDc0MTBCQyAvKiBKU1dvcmtlckxvY2F0aW9uLmNwcCAq
LywKKwkJCQlFMUMzNjJFRDBFQUYyQUE5MDA3NDEwQkMgLyogSlNXb3JrZXJMb2NhdGlvbi5oICov
LAogCQkJKTsKIAkJCW5hbWUgPSBUaHJlYWRzOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsK
QEAgLTE0MDIwLDYgKzE0MDUyLDEzIEBACiAJCQkJODUwMzFCM0EwQTQ0RUZDNzAwRjk5MkUwIC8q
IFdoZWVsRXZlbnQuY3BwICovLAogCQkJCTg1MDMxQjNCMEE0NEVGQzcwMEY5OTJFMCAvKiBXaGVl
bEV2ZW50LmggKi8sCiAJCQkJOTNFRUMxRjcwOUMyODc3NzAwQzUxNUQxIC8qIFdoZWVsRXZlbnQu
aWRsICovLAorCQkJCUUxQzJDNDQxMEVBRDAxN0IwMDdFNjFGQiAvKiBXb3JrZXJDb250ZXh0LmNw
cCAqLywKKwkJCQlFMUMyQzQzRDBFQUQwMTMzMDA3RTYxRkIgLyogV29ya2VyQ29udGV4dC5oICov
LAorCQkJCUUxQzM2MzA1MEVBRjJEMDcwMDc0MTBCQyAvKiBXb3JrZXJMb2NhdGlvbi5jcHAgKi8s
CisJCQkJRTFDMzYzMDAwRUFGMkNDNjAwNzQxMEJDIC8qIFdvcmtlckxvY2F0aW9uLmggKi8sCisJ
CQkJRTFDMzYyQkIwRUFGMjlGQjAwNzQxMEJDIC8qIFdvcmtlckxvY2F0aW9uLmlkbCAqLywKKwkJ
CQlFMUMyQzQyODBFQUNFMEUwMDA3RTYxRkIgLyogV29ya2VyVGhyZWFkLmNwcCAqLywKKwkJCQlF
MUMyQzQyMzBFQUNFMEJDMDA3RTYxRkIgLyogV29ya2VyVGhyZWFkLmggKi8sCiAJCQkJRjUyM0Qz
MDkwMkRFNDQ3NjAxODYzNUNBIC8qIFhNTFRva2VuaXplci5jcHAgKi8sCiAJCQkJRjUyM0QzMEEw
MkRFNDQ3NjAxODYzNUNBIC8qIFhNTFRva2VuaXplci5oICovLAogCQkJCTU0QzUwRjdBMEU4MDFE
RjMwMDk4MzJBMCAvKiBYTUxUb2tlbml6ZXJMaWJ4bWwyLmNwcCAqLywKQEAgLTE2MTU0LDYgKzE2
MTkzLDExIEBACiAJCQkJQkNFNjU5QTkwRUE5MjdCOTAwN0U0NTMzIC8qIFRoZW1lVHlwZXMuaCBp
biBIZWFkZXJzICovLAogCQkJCUJDRTY1OUU2MEVBOTJGQjIwMDdFNDUzMyAvKiBUaGVtZU1hYy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJRTFDNERFNjkwRUE3NUMxRTAwMjNDQ0Q2IC8qIEFjdGl2ZURP
TU9iamVjdC5oIGluIEhlYWRlcnMgKi8sCisJCQkJRTFDMkM0MjQwRUFDRTBCQzAwN0U2MUZCIC8q
IFdvcmtlclRocmVhZC5oIGluIEhlYWRlcnMgKi8sCisJCQkJRTFDMkM0M0UwRUFEMDEzMzAwN0U2
MUZCIC8qIFdvcmtlckNvbnRleHQuaCBpbiBIZWFkZXJzICovLAorCQkJCUUxQzM2MkVGMEVBRjJB
QTkwMDc0MTBCQyAvKiBKU1dvcmtlckxvY2F0aW9uLmggaW4gSGVhZGVycyAqLywKKwkJCQlFMUMz
NjMwMTBFQUYyQ0M2MDA3NDEwQkMgLyogV29ya2VyTG9jYXRpb24uaCBpbiBIZWFkZXJzICovLAor
CQkJCUUxQzM2RDM1MEVCMEEwOTQwMDc0MTBCQyAvKiBKU1dvcmtlckNvbnRleHQuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUZFQUI5MDEzMEVBNTFCOUMwMDYzNDhDMyAvKiBHZW9sb2NhdGlvblNlcnZp
Y2UuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDRTY1QkVCMEVBQ0RGMTYwMDdFNDUzMyAvKiBMZW5n
dGguaCBpbiBIZWFkZXJzICovLAogCQkJCUJDRkY2NDkxMEVBRDE1QzIwMEMxRDZGNyAvKiBMZW5n
dGhCb3guaCBpbiBIZWFkZXJzICovLApAQCAtMTYxNjEsNiArMTYyMDUsNyBAQAogCQkJCUUxQzM2
QzAzMEVCMDc2RDYwMDc0MTBCQyAvKiBKU0RPTUdsb2JhbE9iamVjdC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEZDNzA1MjEwRUIxODE1NjAwQjkwQUQ4IC8qIEF0b21pY1N0cmluZ0hhc2guaCBpbiBI
ZWFkZXJzICovLAogCQkJCUUxMUM5RDlCMEVCMzY4MTIwMEU0MDlEQiAvKiBTY3JpcHRFeGVjdXRp
b25Db250ZXh0LmggaW4gSGVhZGVycyAqLywKKwkJCQlFMUE2NDNGMjBFQzA5NzI1MDA3Nzk2Njgg
LyogV29ya2VyU2NyaXB0Q29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVu
T25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBAIC0xNjI3NCw2ICsx
NjMxOSw3IEBACiAJCQkJODUxMzZDQTgwQUVENjY1OTAwRjkwQTNEIC8qIHdlc3RSZXNpemVDdXJz
b3IucG5nIGluIFJlc291cmNlcyAqLywKIAkJCQkxQUIxQUU3QTBDMDUxRkRFMDAxMzlGNEYgLyog
em9vbUluQ3Vyc29yLnBuZyBpbiBSZXNvdXJjZXMgKi8sCiAJCQkJMUFCMUFFN0IwQzA1MUZERTAw
MTM5RjRGIC8qIHpvb21PdXRDdXJzb3IucG5nIGluIFJlc291cmNlcyAqLywKKwkJCQlFMUMzNjJC
QzBFQUYyOUZCMDA3NDEwQkMgLyogV29ya2VyTG9jYXRpb24uaWRsIGluIFJlc291cmNlcyAqLywK
IAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsK
QEAgLTE4MDQyLDExICsxODA4OCwxNyBAQAogCQkJCTkzOUIwMkVFMEVBMkRCQzQwMEM1NDU3MCAv
KiBXaWR0aEl0ZXJhdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDRTY1OUU5MEVBOTJGRkEw
MDdFNDUzMyAvKiBUaGVtZU1hYy5tbSBpbiBTb3VyY2VzICovLAogCQkJCUUxQzRERTZFMEVBNzVD
NjUwMDIzQ0NENiAvKiBBY3RpdmVET01PYmplY3QuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRTFD
MkM0MjkwRUFDRTBFMDAwN0U2MUZCIC8qIFdvcmtlclRocmVhZC5jcHAgaW4gU291cmNlcyAqLywK
KwkJCQlFMUMyQzQ0MjBFQUQwMTdCMDA3RTYxRkIgLyogV29ya2VyQ29udGV4dC5jcHAgaW4gU291
cmNlcyAqLywKKwkJCQlFMUMzNjJGMDBFQUYyQUE5MDA3NDEwQkMgLyogSlNXb3JrZXJMb2NhdGlv
bi5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlFMUMzNjMwNjBFQUYyRDA3MDA3NDEwQkMgLyogV29y
a2VyTG9jYXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRTFDMzZEMzQwRUIwQTA5NDAwNzQx
MEJDIC8qIEpTV29ya2VyQ29udGV4dC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlGRUFCOTAxMjBF
QTUxQjlDMDA2MzQ4QzMgLyogR2VvbG9jYXRpb25TZXJ2aWNlLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCUJDRTY1QkVBMEVBQ0RGMTYwMDdFNDUzMyAvKiBMZW5ndGguY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJQkNFNjVEMzIwRUFEMTIxMTAwN0U0NTMzIC8qIFRoZW1lLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCUUxQzM2Q0JEMEVCMDgwNjIwMDc0MTBCQyAvKiBKU0RPTUdsb2JhbE9iamVjdC5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlFMTFDOURCMDBFQjM2OTk1MDBFNDA5REIgLyogU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlFMUE2NDNGRDBFQzA5N0EwMDA3
Nzk2NjggLyogV29ya2VyU2NyaXB0Q29udHJvbGxlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCSk7
CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKSW5kZXg6
IFdlYkNvcmUvYmluZGluZ3MvanMvSlNET01HbG9iYWxPYmplY3QuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvYmluZGluZ3MvanMvSlNET01HbG9iYWxPYmplY3QuY3BwCShyZXZpc2lvbiAzODA5
MikKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNET01HbG9iYWxPYmplY3QuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zMCw2ICszMCw4IEBACiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRl
ICJKU0RPTVdpbmRvdy5oIgogI2luY2x1ZGUgIkpTRXZlbnRMaXN0ZW5lci5oIgorI2luY2x1ZGUg
IkpTV29ya2VyQ29udGV4dC5oIgorI2luY2x1ZGUgIldvcmtlckNvbnRleHQuaCIKIAogdXNpbmcg
bmFtZXNwYWNlIEpTQzsKIApAQCAtMTYxLDcgKzE2MywxMiBAQCBKU0RPTUdsb2JhbE9iamVjdCog
dG9KU0RPTUdsb2JhbE9iamVjdChTCiAgICAgaWYgKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPmlz
RG9jdW1lbnQoKSkKICAgICAgICAgcmV0dXJuIHRvSlNET01XaW5kb3coc3RhdGljX2Nhc3Q8RG9j
dW1lbnQqPihzY3JpcHRFeGVjdXRpb25Db250ZXh0KS0+ZnJhbWUoKSk7CiAKLSAgICAvLyBOb3Qg
aW1wbGVtZW50ZWQgeWV0LgorI2lmIEVOQUJMRShXT1JLRVJTKQorICAgIGlmIChzY3JpcHRFeGVj
dXRpb25Db250ZXh0LT5pc1dvcmtlckNvbnRleHQoKSkKKyAgICAgICAgcmV0dXJuIHN0YXRpY19j
YXN0PFdvcmtlckNvbnRleHQqPihzY3JpcHRFeGVjdXRpb25Db250ZXh0KS0+c2NyaXB0KCktPmpz
V29ya2VyQ29udGV4dCgpOworI2VuZGlmCisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAg
ICByZXR1cm4gMDsKIH0KIApJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU01lc3NhZ2VDaGFu
bmVsQ29uc3RydWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNN
ZXNzYWdlQ2hhbm5lbENvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMzgwOTIpCisrKyBXZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTTWVzc2FnZUNoYW5uZWxDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkpT
RG9jdW1lbnQuaCIKICNpbmNsdWRlICJKU01lc3NhZ2VDaGFubmVsLmgiCisjaW5jbHVkZSAiSlNX
b3JrZXJDb250ZXh0LmgiCiAjaW5jbHVkZSAiTWVzc2FnZUNoYW5uZWwuaCIKIAogdXNpbmcgbmFt
ZXNwYWNlIEpTQzsKQEAgLTQzLDggKzQ0LDEwIEBAIEpTTWVzc2FnZUNoYW5uZWxDb25zdHJ1Y3Rv
cjo6SlNNZXNzYWdlQ2gKIHsKICAgICBpZiAobV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LT5pc0Rv
Y3VtZW50KCkpCiAgICAgICAgIG1fY29udGV4dFdyYXBwZXIgPSB0b0pTKGV4ZWMsIHN0YXRpY19j
YXN0PERvY3VtZW50Kj4oc2NyaXB0RXhlY3V0aW9uQ29udGV4dCkpOworI2lmIEVOQUJMRShXT1JL
RVJTKQogICAgIGVsc2UgaWYgKG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+aXNXb3JrZXJDb250
ZXh0KCkpCi0gICAgICAgIDsgLy8gTm90IHlldCBpbXBsZW1lbnRlZC4KKyAgICAgICAgbV9jb250
ZXh0V3JhcHBlciA9IHRvSlNET01HbG9iYWxPYmplY3Qoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCk7
CisjZW5kaWYKICAgICBlbHNlCiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogCkluZGV4
OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2VyQ29udGV4dC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtlckNvbnRleHQuY3BwCShyZXZpc2lvbiAwKQorKysg
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtlckNvbnRleHQuY3BwCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDE4MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCBS
aWdodHMgUmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICoKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBF
TkFCTEUoV09SS0VSUykKKworI2luY2x1ZGUgIkpTV29ya2VyQ29udGV4dC5oIgorCisjaW5jbHVk
ZSAiSlNET01CaW5kaW5nLmgiCisjaW5jbHVkZSAiSlNNZXNzYWdlQ2hhbm5lbENvbnN0cnVjdG9y
LmgiCisjaW5jbHVkZSAiSlNNZXNzYWdlUG9ydC5oIgorI2luY2x1ZGUgIkpTV29ya2VyTG9jYXRp
b24uaCIKKyNpbmNsdWRlICJXb3JrZXJDb250ZXh0LmgiCisjaW5jbHVkZSAiV29ya2VyTG9jYXRp
b24uaCIKKwordXNpbmcgbmFtZXNwYWNlIEpTQzsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitK
U1ZhbHVlKiBqc1dvcmtlckNvbnRleHRMb2NhdGlvbihFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlm
aWVyJiwgY29uc3QgUHJvcGVydHlTbG90Jik7CitKU1ZhbHVlKiBqc1dvcmtlckNvbnRleHRNZXNz
YWdlQ2hhbm5lbChFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlT
bG90Jik7Cit2b2lkIHNldEpTV29ya2VyQ29udGV4dE1lc3NhZ2VDaGFubmVsKEV4ZWNTdGF0ZSos
IEpTT2JqZWN0KiwgSlNWYWx1ZSopOworSlNWYWx1ZSoganNXb3JrZXJDb250ZXh0TWVzc2FnZVBv
cnQoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYpOwor
dm9pZCBzZXRKU1dvcmtlckNvbnRleHRNZXNzYWdlUG9ydChFeGVjU3RhdGUqLCBKU09iamVjdCos
IEpTVmFsdWUqKTsKK0pTVmFsdWUqIGpzV29ya2VyQ29udGV4dFdvcmtlckxvY2F0aW9uKEV4ZWNT
dGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmKTsKK3ZvaWQgc2V0
SlNXb3JrZXJDb250ZXh0V29ya2VyTG9jYXRpb24oRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1Zh
bHVlKik7CisKK30KKworLyoKK0BiZWdpbiBKU1dvcmtlckNvbnRleHRQcm90b3R5cGVUYWJsZQor
IyAgY2xvc2UgICAgICAgICAgICAgICAgICAgICAgICAgIGpzV29ya2VyQ29udGV4dFByb3RvdHlw
ZUZ1bmN0aW9uQ2xvc2UgICAgICAgICAgICAgICAgICAgICAgICAgRG9udERlbGV0ZXxGdW5jdGlv
biAwCisjICBNZXNzYWdlUG9ydCBtZXRob2RzPworQGVuZAorKi8KKworLyoKK0BiZWdpbiBKU1dv
cmtlckNvbnRleHRUYWJsZQorICBsb2NhdGlvbiAgICAgICAgICAgICAgICAgICAgICBqc1dvcmtl
ckNvbnRleHRMb2NhdGlvbiAgICAgICAgICAgIERvbnREZWxldGV8UmVhZE9ubHkKKyMgIG9uY2xv
c2UgICAgICAgICAgICAgICAgICAgICAgIGpzV29ya2VyQ29udGV4dE9uY2xvc2UgICAgICAgICAg
ICAgRG9udERlbGV0ZQorIyAgb25jb25uZWN0ICAgICAgICAgICAgICAgICAgICAganNXb3JrZXJD
b250ZXh0T25jb25uZWN0ICAgICAgICAgICBEb250RGVsZXRlCisjICBvbm1lc3NhZ2UgYW5kIG90
aGVyIE1lc3NhZ2VQb3J0IGF0dHJpYnV0ZXM/CisgIE1lc3NhZ2VDaGFubmVsICAgICAgICAgICAg
ICAgIGpzV29ya2VyQ29udGV4dE1lc3NhZ2VDaGFubmVsICAgICAgICAgICAgICAgIERvbnREZWxl
dGUKKyAgTWVzc2FnZVBvcnQgICAgICAgICAgICAgICAgICAganNXb3JrZXJDb250ZXh0TWVzc2Fn
ZVBvcnQgICAgICAgICAgICAgICAgICAgRG9udERlbGV0ZQorICBXb3JrZXJMb2NhdGlvbiAgICAg
ICAgICAgICAgICBqc1dvcmtlckNvbnRleHRXb3JrZXJMb2NhdGlvbiAgICAgICAgICAgICAgICBE
b250RGVsZXRlCisjICBYTUxIdHRwUmVxdWVzdCAgICAgICAgICAgICAgICBqc1dvcmtlckNvbnRl
eHRYTUxIdHRwUmVxdWVzdCAgICAgICAgICAgICAgICBEb250RGVsZXRlCisjICBEYXRhYmFzZQor
QGVuZAorKi8KKworI2luY2x1ZGUgIkpTV29ya2VyQ29udGV4dC5sdXQuaCIKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitBU1NFUlRfQ0xBU1NfRklUU19JTl9DRUxMKEpTV29ya2VyQ29udGV4dCkK
KworSlNXb3JrZXJDb250ZXh0OjpKU1dvcmtlckNvbnRleHQoUGFzc1JlZlB0cjxXb3JrZXJDb250
ZXh0PiBpbXBsKQorICAgIDogSlNET01HbG9iYWxPYmplY3QoSlNXb3JrZXJDb250ZXh0OjpjcmVh
dGVTdHJ1Y3R1cmVJRChuZXcgKEhlYXA6OmhlYXAodGhpcyktPmdsb2JhbERhdGEoKSkgSlNXb3Jr
ZXJDb250ZXh0UHJvdG90eXBlKEpTV29ya2VyQ29udGV4dFByb3RvdHlwZTo6Y3JlYXRlU3RydWN0
dXJlSUQoanNOdWxsKCkpKSksIG5ldyBKU0RPTUdsb2JhbE9iamVjdERhdGEsIHRoaXMpCisgICAg
LCBtX2ltcGwoaW1wbCkKK3sKKyAgICBHbG9iYWxQcm9wZXJ0eUluZm8gc3RhdGljR2xvYmFsc1td
ID0geworICAgICAgICBHbG9iYWxQcm9wZXJ0eUluZm8oSWRlbnRpZmllcihnbG9iYWxFeGVjKCks
ICJzZWxmIiksIHRoaXMsIERvbnREZWxldGUgfCBSZWFkT25seSksCisgICAgfTsKKyAgICAKKyAg
ICBhZGRTdGF0aWNHbG9iYWxzKHN0YXRpY0dsb2JhbHMsIHNpemVvZihzdGF0aWNHbG9iYWxzKSAv
IHNpemVvZihHbG9iYWxQcm9wZXJ0eUluZm8pKTsKKworfQorCitKU1dvcmtlckNvbnRleHQ6On5K
U1dvcmtlckNvbnRleHQoKQoreworfQorCitTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBKU1dvcmtl
ckNvbnRleHQ6OnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBjb25zdAoreworICAgIHJldHVybiBt
X2ltcGwuZ2V0KCk7Cit9CisKK3ZvaWQgSlNXb3JrZXJDb250ZXh0OjptYXJrKCkKK3sKKyAgICBC
YXNlOjptYXJrKCk7CisKKyAgICBtYXJrQWN0aXZlT2JqZWN0c0ZvckNvbnRleHQoKmdsb2JhbERh
dGEoKSwgc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKTsKK30KKworc3RhdGljIGNvbnN0IEhhc2hU
YWJsZSogZ2V0SlNXb3JrZXJDb250ZXh0VGFibGUoRXhlY1N0YXRlKiBleGVjKQoreworICAgIHJl
dHVybiBnZXRIYXNoVGFibGVGb3JHbG9iYWxEYXRhKGV4ZWMtPmdsb2JhbERhdGEoKSwgJkpTV29y
a2VyQ29udGV4dFRhYmxlKTsKK30KKworY29uc3QgQ2xhc3NJbmZvIEpTV29ya2VyQ29udGV4dDo6
c19pbmZvID0geyAiV29ya2VyQ29udGV4dCIsIDAsIDAsIGdldEpTV29ya2VyQ29udGV4dFRhYmxl
IH07CisKK0pTT2JqZWN0KiBKU1dvcmtlckNvbnRleHQ6OmNyZWF0ZVByb3RvdHlwZShFeGVjU3Rh
dGUqIGV4ZWMpCit7CisgICAgcmV0dXJuIG5ldyAoZXhlYykgSlNXb3JrZXJDb250ZXh0UHJvdG90
eXBlKEpTV29ya2VyTG9jYXRpb25Qcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZUlEKGV4ZWMtPmxl
eGljYWxHbG9iYWxPYmplY3QoKS0+b2JqZWN0UHJvdG90eXBlKCkpKTsKK30KKworYm9vbCBKU1dv
cmtlckNvbnRleHQ6OmdldE93blByb3BlcnR5U2xvdChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElk
ZW50aWZpZXImIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQoreworICAgIHJldHVy
biBnZXRTdGF0aWNWYWx1ZVNsb3Q8SlNXb3JrZXJDb250ZXh0LCBCYXNlPihleGVjLCBnZXRKU1dv
cmtlckNvbnRleHRUYWJsZShleGVjKSwgdGhpcywgcHJvcGVydHlOYW1lLCBzbG90KTsKK30KKwor
SlNWYWx1ZSoganNXb3JrZXJDb250ZXh0TG9jYXRpb24oSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIGNv
bnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QpCit7CisgICAgV29ya2Vy
Q29udGV4dCogaW1wID0gc3RhdGljX2Nhc3Q8V29ya2VyQ29udGV4dCo+KHN0YXRpY19jYXN0PEpT
V29ya2VyQ29udGV4dCo+KGFzT2JqZWN0KHNsb3Quc2xvdEJhc2UoKSkpLT5pbXBsKCkpOworICAg
IHJldHVybiB0b0pTKGV4ZWMsIGltcC0+bG9jYXRpb24oKSk7Cit9CisKK0pTVmFsdWUqIGpzV29y
a2VyQ29udGV4dE1lc3NhZ2VDaGFubmVsKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmll
ciYsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKK3sKKyAgICByZXR1cm4gZ2V0RE9NQ29uc3Ry
dWN0b3I8SlNNZXNzYWdlQ2hhbm5lbENvbnN0cnVjdG9yPihleGVjLCBzdGF0aWNfY2FzdDxKU1dv
cmtlckNvbnRleHQqPihhc09iamVjdChzbG90LnNsb3RCYXNlKCkpKSk7Cit9CisKK0pTVmFsdWUq
IGpzV29ya2VyQ29udGV4dE1lc3NhZ2VQb3J0KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRp
ZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYpCit7CisgICAgcmV0dXJuIEpTTWVzc2FnZVBvcnQ6
OmdldENvbnN0cnVjdG9yKGV4ZWMpOworfQorCitKU1ZhbHVlKiBqc1dvcmtlckNvbnRleHRXb3Jr
ZXJMb2NhdGlvbihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9w
ZXJ0eVNsb3QmKQoreworICAgIHJldHVybiBKU1dvcmtlckxvY2F0aW9uOjpnZXRDb25zdHJ1Y3Rv
cihleGVjKTsKK30KKworc3RhdGljIGNvbnN0IEhhc2hUYWJsZSogZ2V0SlNXb3JrZXJDb250ZXh0
UHJvdG90eXBlVGFibGUoRXhlY1N0YXRlKiBleGVjKQoreworICAgIHJldHVybiBnZXRIYXNoVGFi
bGVGb3JHbG9iYWxEYXRhKGV4ZWMtPmdsb2JhbERhdGEoKSwgJkpTV29ya2VyQ29udGV4dFByb3Rv
dHlwZVRhYmxlKTsKK30KKworY29uc3QgQ2xhc3NJbmZvIEpTV29ya2VyQ29udGV4dFByb3RvdHlw
ZTo6c19pbmZvID0geyAiV29ya2VyQ29udGV4dFByb3RvdHlwZSIsIDAsIDAsIGdldEpTV29ya2Vy
Q29udGV4dFByb3RvdHlwZVRhYmxlIH07CisKK0pTT2JqZWN0KiBKU1dvcmtlckNvbnRleHRQcm90
b3R5cGU6OnNlbGYoRXhlY1N0YXRlKiBleGVjKQoreworICAgIHJldHVybiBnZXRET01Qcm90b3R5
cGU8SlNXb3JrZXJDb250ZXh0PihleGVjKTsKK30KKworYm9vbCBKU1dvcmtlckNvbnRleHRQcm90
b3R5cGU6OmdldE93blByb3BlcnR5U2xvdChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZp
ZXImIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQoreworICAgIHJldHVybiBnZXRT
dGF0aWNGdW5jdGlvblNsb3Q8SlNPYmplY3Q+KGV4ZWMsIGdldEpTV29ya2VyQ29udGV4dFByb3Rv
dHlwZVRhYmxlKGV4ZWMpLCB0aGlzLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOworfQorCit2b2lkIHNl
dEpTV29ya2VyQ29udGV4dE1lc3NhZ2VDaGFubmVsKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNW
YWx1ZSopCit7CisgICAgLy8gRklYTUU6IERvIHdlIG5lZWQgdG8gb3ZlcnJpZGUgcHV0IGZvciBn
bG9iYWwgY29uc3RydWN0b3JzLCBsaWtlIEpTRE9NV2luZG93QmFzZSBkb2VzPworICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOworfQorCit2b2lkIHNldEpTV29ya2VyQ29udGV4dE1lc3NhZ2VQb3J0
KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSopCit7CisgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7Cit9CisKK3ZvaWQgc2V0SlNXb3JrZXJDb250ZXh0V29ya2VyTG9jYXRpb24oRXhlY1N0
YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlKikKK3sKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
K30KKworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoV09SS0VS
UykKClByb3BlcnR5IGNoYW5nZXMgb246IFdlYkNvcmUvYmluZGluZ3MvanMvSlNXb3JrZXJDb250
ZXh0LmNwcApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fCk5hbWU6IHN2bjplb2wtc3R5bGUKICAgKyBuYXRpdmUKCkluZGV4
OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2VyQ29udGV4dC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvYmluZGluZ3MvanMvSlNXb3JrZXJDb250ZXh0LmgJKHJldmlzaW9uIDApCisrKyBXZWJD
b3JlL2JpbmRpbmdzL2pzL0pTV29ya2VyQ29udGV4dC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDgwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBS
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKgorICovCisKKyNpZm5kZWYgSlNXb3JrZXJDb250ZXh0X2gKKyNkZWZpbmUg
SlNXb3JrZXJDb250ZXh0X2gKKworI2lmIEVOQUJMRShXT1JLRVJTKQorCisjaW5jbHVkZSAiSlNE
T01HbG9iYWxPYmplY3QuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisgICAgY2xhc3MgV29y
a2VyQ29udGV4dDsKKworICAgIGNsYXNzIEpTV29ya2VyQ29udGV4dCA6IHB1YmxpYyBKU0RPTUds
b2JhbE9iamVjdCB7CisgICAgICAgIHR5cGVkZWYgSlNET01HbG9iYWxPYmplY3QgQmFzZTsKKyAg
ICBwdWJsaWM6CisgICAgICAgIEpTV29ya2VyQ29udGV4dChQYXNzUmVmUHRyPFdvcmtlckNvbnRl
eHQ+KTsKKyAgICAgICAgdmlydHVhbCB+SlNXb3JrZXJDb250ZXh0KCk7CisKKyAgICAgICAgc3Rh
dGljIEpTQzo6SlNPYmplY3QqIGNyZWF0ZVByb3RvdHlwZShKU0M6OkV4ZWNTdGF0ZSopOworICAg
ICAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTQzo6RXhlY1N0YXRlKiwgY29u
c3QgSlNDOjpJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIEpTQzo6UHJvcGVydHlTbG90Jik7Cisg
ICAgICAgIHZpcnR1YWwgY29uc3QgSlNDOjpDbGFzc0luZm8qIGNsYXNzSW5mbygpIGNvbnN0IHsg
cmV0dXJuICZzX2luZm87IH0KKyAgICAgICAgc3RhdGljIGNvbnN0IEpTQzo6Q2xhc3NJbmZvIHNf
aW5mbzsKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8SlNDOjpTdHJ1Y3R1cmVJRD4gY3JlYXRl
U3RydWN0dXJlSUQoSlNDOjpKU1ZhbHVlKiBwcm90b3R5cGUpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZUlEOjpjcmVhdGUocHJvdG90eXBlLCBKU0M6OlR5cGVJ
bmZvKEpTQzo6T2JqZWN0VHlwZSkpOworICAgICAgICB9CisKKyAgICAgICAgV29ya2VyQ29udGV4
dCogaW1wbCgpIGNvbnN0IHsgcmV0dXJuIG1faW1wbC5nZXQoKTsgfQorICAgICAgICB2aXJ0dWFs
IFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBjb25zdDsK
KworICAgICAgICB2aXJ0dWFsIHZvaWQgbWFyaygpOworCisgICAgcHJpdmF0ZToKKyAgICAgICAg
UmVmUHRyPFdvcmtlckNvbnRleHQ+IG1faW1wbDsKKyAgICB9OworCisgICAgY2xhc3MgSlNXb3Jr
ZXJDb250ZXh0UHJvdG90eXBlIDogcHVibGljIEpTQzo6SlNPYmplY3QgeworICAgIHB1YmxpYzoK
KyAgICAgICAgc3RhdGljIEpTQzo6SlNPYmplY3QqIHNlbGYoSlNDOjpFeGVjU3RhdGUqKTsKKyAg
ICAgICAgSlNXb3JrZXJDb250ZXh0UHJvdG90eXBlKFBhc3NSZWZQdHI8SlNDOjpTdHJ1Y3R1cmVJ
RD4gc3RydWN0dXJlKSA6IEpTQzo6SlNPYmplY3Qoc3RydWN0dXJlKSB7IH0KKworICAgICAgICB2
aXJ0dWFsIGNvbnN0IEpTQzo6Q2xhc3NJbmZvKiBjbGFzc0luZm8oKSBjb25zdCB7IHJldHVybiAm
c19pbmZvOyB9CisgICAgICAgIHN0YXRpYyBjb25zdCBKU0M6OkNsYXNzSW5mbyBzX2luZm87Cisg
ICAgICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDOjpFeGVjU3RhdGUqLCBj
b25zdCBKU0M6OklkZW50aWZpZXImLCBKU0M6OlByb3BlcnR5U2xvdCYpOworICAgICAgICBzdGF0
aWMgUGFzc1JlZlB0cjxKU0M6OlN0cnVjdHVyZUlEPiBjcmVhdGVTdHJ1Y3R1cmVJRChKU0M6OkpT
VmFsdWUqIHByb3RvdHlwZSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIEpTQzo6U3Ry
dWN0dXJlSUQ6OmNyZWF0ZShwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBl
KSk7CisgICAgICAgIH0KKyAgICB9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRp
ZiAvLyBFTkFCTEUoV09SS0VSUykKKworI2VuZGlmIC8vIEpTV29ya2VyQ29udGV4dF9oCgpQcm9w
ZXJ0eSBjaGFuZ2VzIG9uOiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2VyQ29udGV4dC5oCl9f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX18KTmFtZTogc3ZuOmVvbC1zdHlsZQogICArIG5hdGl2ZQoKSW5kZXg6IFdlYkNvcmUv
YmluZGluZ3MvanMvV29ya2VyU2NyaXB0Q29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9iaW5kaW5ncy9qcy9Xb3JrZXJTY3JpcHRDb250cm9sbGVyLmNwcAkocmV2aXNpb24gMCkK
KysrIFdlYkNvcmUvYmluZGluZ3MvanMvV29ya2VyU2NyaXB0Q29udHJvbGxlci5jcHAJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsODUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUg
SW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorCisjaWYgRU5BQkxFKFdPUktFUlMpCisKKyNpbmNsdWRlICJXb3JrZXJTY3JpcHRDb250cm9s
bGVyLmgiCisKKyNpbmNsdWRlICJKU1dvcmtlckNvbnRleHQuaCIKKyNpbmNsdWRlICJXb3JrZXJD
b250ZXh0LmgiCisjaW5jbHVkZSA8a2pzL1NvdXJjZUNvZGUuaD4KKyNpbmNsdWRlIDxranMvY29t
cGxldGlvbi5oPgorI2luY2x1ZGUgPGtqcy9pbnRlcnByZXRlci5oPgorI2luY2x1ZGUgPHJ1bnRp
bWUvSlNMb2NrLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBKU0M7CisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworV29ya2VyU2NyaXB0Q29udHJvbGxlcjo6V29ya2VyU2NyaXB0Q29udHJvbGxlcihXb3Jr
ZXJDb250ZXh0KiB3b3JrZXJDb250ZXh0KQorICAgIDogbV9nbG9iYWxEYXRhKEpTR2xvYmFsRGF0
YTo6Y3JlYXRlKCkpCisgICAgLCBtX3dvcmtlckNvbnRleHQod29ya2VyQ29udGV4dCkKK3sKK30K
KworV29ya2VyU2NyaXB0Q29udHJvbGxlcjo6fldvcmtlclNjcmlwdENvbnRyb2xsZXIoKQorewor
ICAgIG1fanNXb3JrZXJDb250ZXh0ID0gMDsKKworICAgIEFTU0VSVCghbV9nbG9iYWxEYXRhLT5o
ZWFwLnByb3RlY3RlZE9iamVjdENvdW50KCkpOworICAgIEFTU0VSVCghbV9nbG9iYWxEYXRhLT5o
ZWFwLmlzQnVzeSgpKTsKKyAgICBtX2dsb2JhbERhdGEtPmhlYXAuZGVzdHJveSgpOworfQorCit2
b2lkIFdvcmtlclNjcmlwdENvbnRyb2xsZXI6OmluaXRTY3JpcHQoKQoreworICAgIEFTU0VSVCgh
bV9qc1dvcmtlckNvbnRleHQpOworCisgICAgSlNMb2NrIGxvY2soZmFsc2UpOworCisgICAgbV9q
c1dvcmtlckNvbnRleHQgPSBuZXcgKG1fZ2xvYmFsRGF0YS5nZXQoKSkgSlNXb3JrZXJDb250ZXh0
KG1fd29ya2VyQ29udGV4dCk7Cit9CisKK0pTVmFsdWUqIFdvcmtlclNjcmlwdENvbnRyb2xsZXI6
OmV2YWx1YXRlKGNvbnN0IFN0cmluZyYgc291cmNlVVJMLCBpbnQgYmFzZUxpbmUsIGNvbnN0IFN0
cmluZyYgY29kZSkKK3sKKyAgICBFeGVjU3RhdGUqIGV4ZWMgPSBtX2pzV29ya2VyQ29udGV4dC0+
Z2xvYmFsRXhlYygpOworICAgIG1fanNXb3JrZXJDb250ZXh0LT5zdGFydFRpbWVvdXRDaGVjaygp
OworICAgIENvbXBsZXRpb24gY29tcCA9IEludGVycHJldGVyOjpldmFsdWF0ZShleGVjLCBleGVj
LT5keW5hbWljR2xvYmFsT2JqZWN0KCktPmdsb2JhbFNjb3BlQ2hhaW4oKSwgbWFrZVNvdXJjZShj
b2RlLCBzb3VyY2VVUkwsIGJhc2VMaW5lKSwgbV9qc1dvcmtlckNvbnRleHQpOworICAgIG1fanNX
b3JrZXJDb250ZXh0LT5zdG9wVGltZW91dENoZWNrKCk7CisKKyAgICBpZiAoY29tcC5jb21wbFR5
cGUoKSA9PSBOb3JtYWwgfHwgY29tcC5jb21wbFR5cGUoKSA9PSBSZXR1cm5WYWx1ZSkKKyAgICAg
ICAgcmV0dXJuIGNvbXAudmFsdWUoKTsKKworICAgIGlmIChjb21wLmNvbXBsVHlwZSgpID09IFRo
cm93KQorICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzXG4iLCBjb21wLnZhbHVlKCktPnRvU3Ry
aW5nKGV4ZWMpLmFzY2lpKCkpOworICAgIHJldHVybiBub1ZhbHVlKCk7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShXT1JLRVJTKQoKUHJvcGVydHkgY2hh
bmdlcyBvbjogV2ViQ29yZS9iaW5kaW5ncy9qcy9Xb3JrZXJTY3JpcHRDb250cm9sbGVyLmNwcApf
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fCk5hbWU6IHN2bjplb2wtc3R5bGUKICAgKyBuYXRpdmUKCkluZGV4OiBXZWJDb3Jl
L2JpbmRpbmdzL2pzL1dvcmtlclNjcmlwdENvbnRyb2xsZXIuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2JpbmRpbmdzL2pzL1dvcmtlclNjcmlwdENvbnRyb2xsZXIuaAkocmV2aXNpb24gMCkKKysr
IFdlYkNvcmUvYmluZGluZ3MvanMvV29ya2VyU2NyaXB0Q29udHJvbGxlci5oCShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDc1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4g
QWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKgorICovCisKKyNpZm5kZWYgV29ya2VyU2NyaXB0Q29u
dHJvbGxlcl9oCisjZGVmaW5lIFdvcmtlclNjcmlwdENvbnRyb2xsZXJfaAorCisjaWYgRU5BQkxF
KFdPUktFUlMpCisKKyNpbmNsdWRlIDxranMvcHJvdGVjdC5oPgorCituYW1lc3BhY2UgSlNDIHsK
KyAgICBjbGFzcyBKU0dsb2JhbERhdGE7CisgICAgY2xhc3MgSlNWYWx1ZTsKK30KKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCisgICAgY2xhc3MgSlNXb3JrZXJDb250ZXh0OworICAgIGNsYXNzIFN0
cmluZzsKKyAgICBjbGFzcyBXb3JrZXJDb250ZXh0OworCisgICAgY2xhc3MgV29ya2VyU2NyaXB0
Q29udHJvbGxlciB7CisgICAgcHVibGljOgorICAgICAgICBXb3JrZXJTY3JpcHRDb250cm9sbGVy
KFdvcmtlckNvbnRleHQqKTsKKyAgICAgICAgfldvcmtlclNjcmlwdENvbnRyb2xsZXIoKTsKKwor
ICAgICAgICBKU1dvcmtlckNvbnRleHQqIGpzV29ya2VyQ29udGV4dCgpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIGluaXRTY3JpcHRJZk5lZWRlZCgpOworICAgICAgICAgICAgcmV0dXJuIG1fanNX
b3JrZXJDb250ZXh0OworICAgICAgICB9CisKKyAgICAgICAgSlNDOjpKU1ZhbHVlKiBldmFsdWF0
ZShjb25zdCBTdHJpbmcmIHNvdXJjZVVSTCwgaW50IGJhc2VMaW5lLCBjb25zdCBTdHJpbmcmIGNv
ZGUpOworCisgICAgcHJpdmF0ZToKKyAgICAgICAgdm9pZCBpbml0U2NyaXB0SWZOZWVkZWQoKQor
ICAgICAgICB7CisgICAgICAgICAgICBpZiAoIW1fd29ya2VyQ29udGV4dCkKKyAgICAgICAgICAg
ICAgICBpbml0U2NyaXB0KCk7CisgICAgICAgIH0KKyAgICAgICAgdm9pZCBpbml0U2NyaXB0KCk7
CisKKyAgICAgICAgUmVmUHRyPEpTQzo6SlNHbG9iYWxEYXRhPiBtX2dsb2JhbERhdGE7CisgICAg
ICAgIFdvcmtlckNvbnRleHQqIG1fd29ya2VyQ29udGV4dDsKKyAgICAgICAgSlNDOjpQcm90ZWN0
ZWRQdHI8SlNXb3JrZXJDb250ZXh0PiBtX2pzV29ya2VyQ29udGV4dDsKKyAgICB9OworCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoV09SS0VSUykKKworI2VuZGlm
IC8vIFdvcmtlclNjcmlwdENvbnRyb2xsZXJfaAoKUHJvcGVydHkgY2hhbmdlcyBvbjogV2ViQ29y
ZS9iaW5kaW5ncy9qcy9Xb3JrZXJTY3JpcHRDb250cm9sbGVyLmgKX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpOYW1lOiBz
dm46ZW9sLXN0eWxlCiAgICsgbmF0aXZlCgpJbmRleDogV2ViQ29yZS9kb20vRGVkaWNhdGVkV29y
a2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9EZWRpY2F0ZWRXb3JrZXIuY3BwCShy
ZXZpc2lvbiAzODA5NCkKKysrIFdlYkNvcmUvZG9tL0RlZGljYXRlZFdvcmtlci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQ0LDYgKzQ0LDcgQEAKICNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgog
I2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKICNpbmNsdWRlICJUaW1lci5oIgor
I2luY2x1ZGUgIldvcmtlclRocmVhZC5oIgogI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTExMyw2ICsxMTQsMTAgQEAgdm9pZCBEZWRpY2F0ZWRX
b3JrZXI6OnBvc3RNZXNzYWdlKGNvbnN0IAogCiB2b2lkIERlZGljYXRlZFdvcmtlcjo6c3RhcnRM
b2FkKCkKIHsKKyAgICAvLyBUaGUgZG9jdW1lbnQgbWF5IGhhdmUgYmVlbiBkZXN0cm95ZWQgYWxy
ZWFkeS4KKyAgICBpZiAoIWRvY3VtZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIG1fY2Fj
aGVkU2NyaXB0ID0gZG9jdW1lbnQoKS0+ZG9jTG9hZGVyKCktPnJlcXVlc3RTY3JpcHQobV9zY3Jp
cHRVUkwsIGRvY3VtZW50KCktPmNoYXJzZXQoKSk7CiAKICAgICBpZiAobV9jYWNoZWRTY3JpcHQp
IHsKQEAgLTEzMSw3ICsxMzYsNyBAQCB2b2lkIERlZGljYXRlZFdvcmtlcjo6bm90aWZ5RmluaXNo
ZWQoQ2FjCiAgICAgICAgIGRpc3BhdGNoRXJyb3JFdmVudCgpOwogICAgICAgICB1bnNldFBlbmRp
bmdBY3Rpdml0eSh0aGlzKTsKICAgICB9IGVsc2UgIHsKLSAgICAgICAgLy8gU3RhcnQgdGhlIHdv
cmtlciB0aHJlYWQuCisgICAgICAgIFdvcmtlclRocmVhZDo6Y3JlYXRlKG1fc2NyaXB0VVJMLCBt
X2NhY2hlZFNjcmlwdC0+c2NyaXB0KCksIHRoaXMpLT5zdGFydCgpOwogICAgIH0KIAogICAgIG1f
Y2FjaGVkU2NyaXB0LT5yZW1vdmVDbGllbnQodGhpcyk7CkluZGV4OiBXZWJDb3JlL2RvbS9Xb3Jr
ZXJDb250ZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9Xb3JrZXJDb250ZXh0LmNw
cAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvZG9tL1dvcmtlckNvbnRleHQuY3BwCShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDY2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIElu
Yy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KworI2lmIEVOQUJMRShXT1JLRVJTKQorCisjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKKyNp
bmNsdWRlICJXb3JrZXJDb250ZXh0LmgiCisjaW5jbHVkZSAiV29ya2VyTG9jYXRpb24uaCIKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitXb3JrZXJDb250ZXh0OjpXb3JrZXJDb250ZXh0KGNvbnN0
IEtVUkwmIHVybCkKKyAgICA6IG1fdXJsKHVybCkKKyAgICAsIG1fbG9jYXRpb24oV29ya2VyTG9j
YXRpb246OmNyZWF0ZSh1cmwpKQorICAgICwgbV9zZWN1cml0eU9yaWdpbihTZWN1cml0eU9yaWdp
bjo6Y3JlYXRlKHVybCkpCisgICAgLCBtX3NjcmlwdCh0aGlzKQoreworfQorCitXb3JrZXJDb250
ZXh0Ojp+V29ya2VyQ29udGV4dCgpCit7Cit9CisKK2NvbnN0IEtVUkwmIFdvcmtlckNvbnRleHQ6
OnZpcnR1YWxVUkwoKSBjb25zdAoreworICAgIHJldHVybiBtX3VybDsKK30KKworS1VSTCBXb3Jr
ZXJDb250ZXh0Ojpjb21wbGV0ZVVSTChjb25zdCBTdHJpbmcmIHVybCkgY29uc3QKK3sKKyAgICAv
LyBBbHdheXMgcmV0dXJuIGEgbnVsbCBVUkwgd2hlbiBwYXNzZWQgYSBudWxsIHN0cmluZy4KKyAg
ICAvLyBGSVhNRTogU2hvdWxkIHdlIGNoYW5nZSB0aGUgS1VSTCBjb25zdHJ1Y3RvciB0byBoYXZl
IHRoaXMgYmVoYXZpb3I/CisgICAgaWYgKHVybC5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuIEtV
UkwoKTsKKyAgICAvLyBGSVhNRTogZG9lcyB0aGlzIG5lZWQgdG8gcHJvdmlkZSBhIGNoYXJzZXQs
IGxpa2UgRG9jdW1lbnQ6OmNvbXBsZXRlVVJMIGRvZXM/CisgICAgcmV0dXJuIEtVUkwobV9sb2Nh
dGlvbi0+dXJsKCksIHVybCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlm
IC8vIEVOQUJMRShXT1JLRVJTKQoKUHJvcGVydHkgY2hhbmdlcyBvbjogV2ViQ29yZS9kb20vV29y
a2VyQ29udGV4dC5jcHAKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fXwpOYW1lOiBzdm46ZW9sLXN0eWxlCiAgICsgbmF0aXZl
CgpJbmRleDogV2ViQ29yZS9kb20vV29ya2VyQ29udGV4dC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvZG9tL1dvcmtlckNvbnRleHQuaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvZG9tL1dvcmtl
ckNvbnRleHQuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw4NCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICoKKyAqLworCisj
aWZuZGVmIFdvcmtlckNvbnRleHRfaAorI2RlZmluZSBXb3JrZXJDb250ZXh0X2gKKworI2lmIEVO
QUJMRShXT1JLRVJTKQorCisjaW5jbHVkZSAiS1VSTC5oIgorI2luY2x1ZGUgIlNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQuaCIKKyNpbmNsdWRlICJXb3JrZXJTY3JpcHRDb250cm9sbGVyLmgiCisjaW5j
bHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2lu
Y2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisgICAgY2xhc3Mg
V29ya2VyTG9jYXRpb247CisKKyAgICBjbGFzcyBXb3JrZXJDb250ZXh0IDogcHVibGljIFJlZkNv
dW50ZWQ8V29ya2VyQ29udGV4dD4sIHB1YmxpYyBTY3JpcHRFeGVjdXRpb25Db250ZXh0IHsKKyAg
ICBwdWJsaWM6CisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdvcmtlckNvbnRleHQ+IGNyZWF0
ZShjb25zdCBLVVJMJiB1cmwpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgV29ya2VyQ29udGV4dCh1cmwpKTsKKyAgICAgICAgfQorCisgICAgICAgIH5Xb3JrZXJD
b250ZXh0KCk7CisKKyAgICAgICAgdmlydHVhbCBib29sIGlzV29ya2VyQ29udGV4dCgpIGNvbnN0
IHsgcmV0dXJuIHRydWU7IH0KKworICAgICAgICBjb25zdCBLVVJMJiB1cmwoKSBjb25zdCB7IHJl
dHVybiBtX3VybDsgfQorICAgICAgICB2aXJ0dWFsIEtVUkwgY29tcGxldGVVUkwoY29uc3QgU3Ry
aW5nJikgY29uc3Q7CisgICAgICAgIHZpcnR1YWwgU2VjdXJpdHlPcmlnaW4qIHNlY3VyaXR5T3Jp
Z2luKCkgY29uc3QgeyByZXR1cm4gbV9zZWN1cml0eU9yaWdpbi5nZXQoKTsgfQorCisgICAgICAg
IFdvcmtlckxvY2F0aW9uKiBsb2NhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fbG9jYXRpb24uZ2V0
KCk7IH0KKworICAgICAgICBXb3JrZXJTY3JpcHRDb250cm9sbGVyKiBzY3JpcHQoKSB7IHJldHVy
biAmbV9zY3JpcHQ7IH0KKworICAgICAgICB1c2luZyBSZWZDb3VudGVkPFdvcmtlckNvbnRleHQ+
OjpyZWY7CisgICAgICAgIHVzaW5nIFJlZkNvdW50ZWQ8V29ya2VyQ29udGV4dD46OmRlcmVmOwor
CisgICAgcHJpdmF0ZToKKyAgICAgICAgdmlydHVhbCB2b2lkIHJlZlNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQoKSB7IHJlZigpOyB9CisgICAgICAgIHZpcnR1YWwgdm9pZCBkZXJlZlNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQoKSB7IGRlcmVmKCk7IH0KKworICAgICAgICBXb3JrZXJDb250ZXh0KGNvbnN0
IEtVUkwmIHVybCk7CisKKyAgICAgICAgdmlydHVhbCBjb25zdCBLVVJMJiB2aXJ0dWFsVVJMKCkg
Y29uc3Q7CisKKyAgICAgICAgS1VSTCBtX3VybDsKKyAgICAgICAgUmVmUHRyPFdvcmtlckxvY2F0
aW9uPiBtX2xvY2F0aW9uOworICAgICAgICBSZWZQdHI8U2VjdXJpdHlPcmlnaW4+IG1fc2VjdXJp
dHlPcmlnaW47CisKKyAgICAgICAgV29ya2VyU2NyaXB0Q29udHJvbGxlciBtX3NjcmlwdDsKKyAg
ICB9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoV09SS0VS
UykKKworI2VuZGlmIC8vIFdvcmtlckNvbnRleHRfaAoKUHJvcGVydHkgY2hhbmdlcyBvbjogV2Vi
Q29yZS9kb20vV29ya2VyQ29udGV4dC5oCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTmFtZTogc3ZuOmVvbC1zdHlsZQog
ICArIG5hdGl2ZQoKSW5kZXg6IFdlYkNvcmUvZG9tL1dvcmtlckxvY2F0aW9uLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2RvbS9Xb3JrZXJMb2NhdGlvbi5jcHAJKHJldmlzaW9uIDApCisrKyBX
ZWJDb3JlL2RvbS9Xb3JrZXJMb2NhdGlvbi5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsODUg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
Q09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBD
T01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKFdPUktF
UlMpCisKKyNpbmNsdWRlICJXb3JrZXJMb2NhdGlvbi5oIgorCisjaW5jbHVkZSAiUGxhdGZvcm1T
dHJpbmcuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitTdHJpbmcgV29ya2VyTG9jYXRpb246
OmhyZWYoKSBjb25zdAoreworICAgIHJldHVybiBtX3VybC5oYXNQYXRoKCkgPyBtX3VybC5wcmV0
dHlVUkwoKSA6IG1fdXJsLnByZXR0eVVSTCgpICsgIi8iOworfQorCitTdHJpbmcgV29ya2VyTG9j
YXRpb246OnByb3RvY29sKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV91cmwucHJvdG9jb2woKSAr
ICI6IjsKK30KKworU3RyaW5nIFdvcmtlckxvY2F0aW9uOjpob3N0KCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gbV91cmwucG9ydCgpID8gbV91cmwuaG9zdCgpICsgIjoiICsgU3RyaW5nOjpudW1iZXIo
KHN0YXRpY19jYXN0PGludD4obV91cmwucG9ydCgpKSkpIDogbV91cmwuaG9zdCgpOworfQorCitT
dHJpbmcgV29ya2VyTG9jYXRpb246Omhvc3RuYW1lKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV91
cmwuaG9zdCgpOworfQorCitTdHJpbmcgV29ya2VyTG9jYXRpb246OnBvcnQoKSBjb25zdAorewor
ICAgIHJldHVybiBtX3VybC5wb3J0KCkgPyBTdHJpbmc6Om51bWJlcihzdGF0aWNfY2FzdDxpbnQ+
KG1fdXJsLnBvcnQoKSkpIDogIiI7Cit9CisKK1N0cmluZyBXb3JrZXJMb2NhdGlvbjo6cGF0aG5h
bWUoKSBjb25zdAoreworICAgIHJldHVybiBtX3VybC5wYXRoKCkuaXNFbXB0eSgpID8gIi8iIDog
bV91cmwucGF0aCgpOworfQorCitTdHJpbmcgV29ya2VyTG9jYXRpb246OnNlYXJjaCgpIGNvbnN0
Cit7CisgICAgcmV0dXJuIG1fdXJsLnF1ZXJ5KCk7Cit9CisKK1N0cmluZyBXb3JrZXJMb2NhdGlv
bjo6aGFzaCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fdXJsLnJlZigpLmlzTnVsbCgpID8gIiIg
OiAiIyIgKyBtX3VybC5yZWYoKTsKK30KKworU3RyaW5nIFdvcmtlckxvY2F0aW9uOjp0b1N0cmlu
ZygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fdXJsLmhhc1BhdGgoKSA/IG1fdXJsLnByZXR0eVVS
TCgpIDogbV91cmwucHJldHR5VVJMKCkgKyAiLyI7Cit9CisKKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFdPUktFUlMpCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBX
ZWJDb3JlL2RvbS9Xb3JrZXJMb2NhdGlvbi5jcHAKX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpOYW1lOiBzdm46ZW9sLXN0
eWxlCiAgICsgbmF0aXZlCgpJbmRleDogV2ViQ29yZS9kb20vV29ya2VyTG9jYXRpb24uaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9Xb3JrZXJMb2NhdGlvbi5oCShyZXZpc2lvbiAwKQorKysg
V2ViQ29yZS9kb20vV29ya2VyTG9jYXRpb24uaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3MyBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBD
T01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENP
TVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICoKKyAqLworCisjaWZuZGVmIFdvcmtlckxvY2F0aW9uX2gKKyNkZWZpbmUgV29ya2Vy
TG9jYXRpb25faAorCisjaWYgRU5BQkxFKFdPUktFUlMpCisKKyNpbmNsdWRlICJLVVJMLmgiCisj
aW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgor
I2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisgICAgY2xh
c3MgU3RyaW5nOworCisgICAgY2xhc3MgV29ya2VyTG9jYXRpb24gOiBwdWJsaWMgUmVmQ291bnRl
ZDxXb3JrZXJMb2NhdGlvbj4geworICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQ
dHI8V29ya2VyTG9jYXRpb24+IGNyZWF0ZShjb25zdCBLVVJMJiB1cmwpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgV29ya2VyTG9jYXRpb24odXJsKSk7CisgICAg
ICAgIH0KKworICAgICAgICBjb25zdCBLVVJMJiB1cmwoKSBjb25zdCB7IHJldHVybiBtX3VybDsg
fQorCisgICAgICAgIFN0cmluZyBocmVmKCkgY29uc3Q7CisKKyAgICAgICAgLy8gVVJJIGRlY29t
cG9zaXRpb24gYXR0cmlidXRlcworICAgICAgICBTdHJpbmcgcHJvdG9jb2woKSBjb25zdDsKKyAg
ICAgICAgU3RyaW5nIGhvc3QoKSBjb25zdDsKKyAgICAgICAgU3RyaW5nIGhvc3RuYW1lKCkgY29u
c3Q7CisgICAgICAgIFN0cmluZyBwb3J0KCkgY29uc3Q7CisgICAgICAgIFN0cmluZyBwYXRobmFt
ZSgpIGNvbnN0OworICAgICAgICBTdHJpbmcgc2VhcmNoKCkgY29uc3Q7CisgICAgICAgIFN0cmlu
ZyBoYXNoKCkgY29uc3Q7CisKKyAgICAgICAgU3RyaW5nIHRvU3RyaW5nKCkgY29uc3Q7CisKKyAg
ICBwcml2YXRlOgorICAgICAgICBXb3JrZXJMb2NhdGlvbihjb25zdCBLVVJMJiB1cmwpIDogbV91
cmwodXJsKSB7fQorCisgICAgICAgIEtVUkwgbV91cmw7CisgICAgfTsKKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFdPUktFUlMpCisKKyNlbmRpZiAvLyBXb3Jr
ZXJMb2NhdGlvbl9oCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBXZWJDb3JlL2RvbS9Xb3JrZXJMb2Nh
dGlvbi5oCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX18KTmFtZTogc3ZuOmVvbC1zdHlsZQogICArIG5hdGl2ZQoKSW5kZXg6
IFdlYkNvcmUvZG9tL1dvcmtlckxvY2F0aW9uLmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Rv
bS9Xb3JrZXJMb2NhdGlvbi5pZGwJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL2RvbS9Xb3JrZXJM
b2NhdGlvbi5pZGwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDggQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMDggQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuIAorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uIAorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4g
KCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJv
bSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LiAKKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09O
VFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCittb2R1bGUgdGhy
ZWFkcyB7CisKKyAgICBpbnRlcmZhY2UgWworICAgICAgICBDb25kaXRpb25hbD1XT1JLRVJTLAor
ICAgICAgICBHZW5lcmF0ZUNvbnN0cnVjdG9yLAorICAgICAgICBOb1N0YXRpY1RhYmxlcworICAg
IF0gV29ya2VyTG9jYXRpb24geworICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9NU3RyaW5n
IGhyZWY7CisgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01TdHJpbmcgcHJvdG9jb2w7Cisg
ICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01TdHJpbmcgaG9zdDsKKyAgICAgICAgcmVhZG9u
bHkgYXR0cmlidXRlIERPTVN0cmluZyBob3N0bmFtZTsKKyAgICAgICAgcmVhZG9ubHkgYXR0cmli
dXRlIERPTVN0cmluZyBwb3J0OworICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9NU3RyaW5n
IHBhdGhuYW1lOworICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9NU3RyaW5nIHNlYXJjaDsK
KyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIERPTVN0cmluZyBoYXNoOworCisgICAgICAgIFtE
b250RW51bV0gRE9NU3RyaW5nIHRvU3RyaW5nKCk7CisgICAgfTsKKworfQpJbmRleDogV2ViQ29y
ZS9kb20vV29ya2VyVGhyZWFkLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9Xb3JrZXJU
aHJlYWQuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9kb20vV29ya2VyVGhyZWFkLmNwcAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSw3OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBB
cHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICoKKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisKKyNpZiBFTkFCTEUoV09SS0VSUykKKworI2luY2x1ZGUgIldvcmtlclRocmVhZC5o
IgorCisjaW5jbHVkZSAiRGVkaWNhdGVkV29ya2VyLmgiCisjaW5jbHVkZSAiSlNXb3JrZXJDb250
ZXh0LmgiCisjaW5jbHVkZSAiV29ya2VyQ29udGV4dC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK1dvcmtlclRocmVhZDo6V29ya2VyVGhyZWFkKGNvbnN0IEtVUkwmIHNjcmlwdFVSTCwgY29u
c3QgU3RyaW5nJiBzb3VyY2VDb2RlLCBQYXNzUmVmUHRyPERlZGljYXRlZFdvcmtlcj4gd29ya2Vy
T2JqZWN0KQorICAgIDogbV90aHJlYWRJRCgwKQorICAgICwgbV9zY3JpcHRVUkwoc2NyaXB0VVJM
LnN0cmluZygpLmNvcHkoKSkKKyAgICAsIG1fc291cmNlQ29kZShzb3VyY2VDb2RlLmNvcHkoKSkK
KyAgICAsIG1fd29ya2VyT2JqZWN0KHdvcmtlck9iamVjdCkKK3sKK30KKworYm9vbCBXb3JrZXJU
aHJlYWQ6OnN0YXJ0KCkKK3sKKyAgICBpZiAobV90aHJlYWRJRCkKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisKKyAgICByZWYoKTsKKyAgICBtX3RocmVhZElEID0gY3JlYXRlVGhyZWFkKFdvcmtlclRo
cmVhZDo6d29ya2VyVGhyZWFkU3RhcnQsIHRoaXMsICJXZWJDb3JlOjpXb3JrZXIiKTsKKworICAg
IHJldHVybiBtX3RocmVhZElEOworfQorCit2b2lkKiBXb3JrZXJUaHJlYWQ6OndvcmtlclRocmVh
ZFN0YXJ0KHZvaWQqIHRocmVhZCkKK3sKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8V29ya2VyVGhy
ZWFkKj4odGhyZWFkKS0+d29ya2VyVGhyZWFkKCk7Cit9CisKK3ZvaWQqIFdvcmtlclRocmVhZDo6
d29ya2VyVGhyZWFkKCkKK3sKKyAgICBSZWZQdHI8V29ya2VyQ29udGV4dD4gd29ya2VyQ29udGV4
dCA9IFdvcmtlckNvbnRleHQ6OmNyZWF0ZShLVVJMKG1fc2NyaXB0VVJMKSk7CisgICAgV29ya2Vy
U2NyaXB0Q29udHJvbGxlciogc2NyaXB0ID0gd29ya2VyQ29udGV4dC0+c2NyaXB0KCk7CisKKyAg
ICAvLyBUaGlzIGlzIHRlbXBvcmFyeSBjb2RlIGZvciB0ZXN0aW5nLiBUaGUgdGhyZWFkIHdpbGwg
cnVuIGEgbWVzc2FnZSBsb29wLgorICAgIHNjcmlwdC0+ZXZhbHVhdGUobV9zY3JpcHRVUkwsIDEs
IG1fc291cmNlQ29kZSk7CisKKyAgICB3b3JrZXJDb250ZXh0ID0gMDsKKworICAgIGRlcmVmKCk7
CisgICAgcmV0dXJuIDA7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8v
IEVOQUJMRShXT1JLRVJTKQoKUHJvcGVydHkgY2hhbmdlcyBvbjogV2ViQ29yZS9kb20vV29ya2Vy
VGhyZWFkLmNwcApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fCk5hbWU6IHN2bjplb2wtc3R5bGUKICAgKyBuYXRpdmUKCklu
ZGV4OiBXZWJDb3JlL2RvbS9Xb3JrZXJUaHJlYWQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Rv
bS9Xb3JrZXJUaHJlYWQuaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvZG9tL1dvcmtlclRocmVh
ZC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDY3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDA4IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKgorICovCisKKyNpZm5kZWYg
V29ya2VyVGhyZWFkX2gKKyNkZWZpbmUgV29ya2VyVGhyZWFkX2gKKworI2lmIEVOQUJMRShXT1JL
RVJTKQorCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlIDx3dGYvUGFzc1Jl
ZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCisgICAgY2xhc3MgRGVkaWNhdGVkV29ya2VyOworICAgIGNsYXNzIEtVUkw7CisKKyAgICBj
bGFzcyBXb3JrZXJUaHJlYWQgOiBwdWJsaWMgVGhyZWFkU2FmZVNoYXJlZDxXb3JrZXJUaHJlYWQ+
IHsKKyAgICBwdWJsaWM6CisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdvcmtlclRocmVhZD4g
Y3JlYXRlKGNvbnN0IEtVUkwmIHNjcmlwdFVSTCwgY29uc3QgU3RyaW5nJiBzb3VyY2VDb2RlLCBQ
YXNzUmVmUHRyPERlZGljYXRlZFdvcmtlcj4gd29ya2VyT2JqZWN0KQorICAgICAgICB7CisgICAg
ICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFdvcmtlclRocmVhZChzY3JpcHRVUkwsIHNvdXJj
ZUNvZGUsIHdvcmtlck9iamVjdCkpOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBzdGFydCgp
OworCisgICAgcHJpdmF0ZToKKyAgICAgICAgV29ya2VyVGhyZWFkKGNvbnN0IEtVUkwmLCBjb25z
dCBTdHJpbmcmIHNvdXJjZUNvZGUsIFBhc3NSZWZQdHI8RGVkaWNhdGVkV29ya2VyPik7CisKKyAg
ICAgICAgc3RhdGljIHZvaWQqIHdvcmtlclRocmVhZFN0YXJ0KHZvaWQqKTsKKyAgICAgICAgdm9p
ZCogd29ya2VyVGhyZWFkKCk7CisKKyAgICAgICAgVGhyZWFkSWRlbnRpZmllciBtX3RocmVhZElE
OworCisgICAgICAgIFN0cmluZyBtX3NjcmlwdFVSTDsKKyAgICAgICAgU3RyaW5nIG1fc291cmNl
Q29kZTsKKyAgICAgICAgUmVmUHRyPERlZGljYXRlZFdvcmtlcj4gbV93b3JrZXJPYmplY3Q7Cisg
ICAgfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFdPUktF
UlMpCisKKyNlbmRpZiAvLyBXb3JrZXJUaHJlYWRfaAoKUHJvcGVydHkgY2hhbmdlcyBvbjogV2Vi
Q29yZS9kb20vV29ya2VyVGhyZWFkLmgKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpOYW1lOiBzdm46ZW9sLXN0eWxlCiAg
ICsgbmF0aXZlCgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>24890</attachid>
            <date>2008-11-04 11:21:18 -0800</date>
            <delta_ts>2008-11-05 09:38:46 -0800</delta_ts>
            <desc>proposed patch</desc>
            <filename>WorkerContext.txt</filename>
            <type>text/plain</type>
            <size>56380</size>
            <attacher name="Alexey Proskuryakov">ap</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzODEwNikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDcgQEAKKzIwMDgtMTEtMDQgIEFsZXhleSBQcm9za3VyeWFrb3YgIDxhcEB3ZWJr
aXQub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjA2NgorICAgICAgICBJ
bXBsZW1lbnQgV29ya2VyIGdsb2JhbCBvYmplY3QKKworICAgICAgICAqIERlcml2ZWRTb3VyY2Vz
Lm1ha2U6IEFkZGVkIFdvcmtlckxvY2F0aW9uIElETCBhbmQgSlNXb3JrZXJDb250ZXh0IGxvb2t1
cCB0YWJsZS4KKworICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajog
T25seSBhZGRpbmcgZmlsZXMgdG8gTWFjIHByb2plY3QgZm9yIG5vdywgYXMgV29ya2VyCisgICAg
ICAgIHN1cHBvcnQgaXMgc3RpbGwgZGlzYWJsZWQgYnkgZGVmYXVsdC4KKworICAgICAgICAqIGJp
bmRpbmdzL2pzL0pTRE9NR2xvYmFsT2JqZWN0LmNwcDogKFdlYkNvcmU6OnRvSlNET01HbG9iYWxP
YmplY3QpOiBJbXBsZW1lbnRlZCBXb3JrZXIgY2FzZS4KKworICAgICAgICAqIGJpbmRpbmdzL2pz
L0pTTWVzc2FnZUNoYW5uZWxDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU01l
c3NhZ2VDaGFubmVsQ29uc3RydWN0b3I6OkpTTWVzc2FnZUNoYW5uZWxDb25zdHJ1Y3Rvcik6IERp
dHRvLgorCisgICAgICAgICogYmluZGluZ3MvanMvSlNXb3JrZXJDb250ZXh0LmNwcDogQWRkZWQu
CisgICAgICAgICogYmluZGluZ3MvanMvSlNXb3JrZXJDb250ZXh0Lmg6IEFkZGVkLgorICAgICAg
ICAqIGJpbmRpbmdzL2pzL1dvcmtlclNjcmlwdENvbnRyb2xsZXIuY3BwOiBBZGRlZC4KKyAgICAg
ICAgKiBiaW5kaW5ncy9qcy9Xb3JrZXJTY3JpcHRDb250cm9sbGVyLmg6IEFkZGVkLgorICAgICAg
ICAqIGRvbS9Xb3JrZXJDb250ZXh0LmNwcDogQWRkZWQuCisgICAgICAgICogZG9tL1dvcmtlckNv
bnRleHQuaDogQWRkZWQuCisgICAgICAgIEFkZGVkIGFuIGltcGxlbWVudGF0aW9uIG9mIHdvcmtl
ciBjb250ZXh0cy4KKworICAgICAgICAqIGRvbS9EZWRpY2F0ZWRXb3JrZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6RGVkaWNhdGVkV29ya2VyOjpzdGFydExvYWQpOiBGaXhlZCBhIGxpZmV0aW1l
IGJ1ZyBJIHNhdyBvbiBteSB0ZXN0cy4KKyAgICAgICAgKFdlYkNvcmU6OkRlZGljYXRlZFdvcmtl
cjo6bm90aWZ5RmluaXNoZWQpOiBDcmVhdGUgYSB0aHJlYWQuIEN1cnJlbnRseSwgb2JqZWN0IG93
bmVyc2hpcAorICAgICAgICBhbmQgbGlmZXRpbWUgaXMgbm90IGNsZWFyIGF0IGFsbC4KKworICAg
ICAgICAqIGRvbS9Xb3JrZXJMb2NhdGlvbi5jcHA6IEFkZGVkLgorICAgICAgICAqIGRvbS9Xb3Jr
ZXJMb2NhdGlvbi5oOiBBZGRlZC4KKyAgICAgICAgKiBkb20vV29ya2VyTG9jYXRpb24uaWRsOiBB
ZGRlZC4KKyAgICAgICAgQWRkZWQgV29ya2VyTG9jYXRpb24sIHdoaWNoIGlzIG9uZSBvZiB0aGUg
b2JqZWN0cyBhdmFpbGFibGUgdG8gd29ya2Vycy4KKworICAgICAgICAqIGRvbS9Xb3JrZXJUaHJl
YWQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OldvcmtlclRocmVhZDo6V29ya2VyVGhy
ZWFkKToKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlclRocmVhZDo6c3RhcnQpOgorICAgICAgICAo
V2ViQ29yZTo6V29ya2VyVGhyZWFkOjp3b3JrZXJUaHJlYWRTdGFydCk6CisgICAgICAgIChXZWJD
b3JlOjpXb3JrZXJUaHJlYWQ6OndvcmtlclRocmVhZCk6CisgICAgICAgICogZG9tL1dvcmtlclRo
cmVhZC5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OldvcmtlclRocmVhZDo6Y3JlYXRlKToK
KyAgICAgICAgUnVuIHNvbWUgY29kZSBpbiBhIHdvcmtlciB0aHJlYWQgKG5vIG1lc3NhZ2UgbG9v
cCB5ZXQpLgorCiAyMDA4LTExLTA0ICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KIAog
ICAgICAgICBSZXZpZXdlZCBieSBUaW0gSGF0Y2hlci4KSW5kZXg6IFdlYkNvcmUvRGVyaXZlZFNv
dXJjZXMubWFrZQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UJKHJl
dmlzaW9uIDM4MDkyKQorKysgV2ViQ29yZS9EZXJpdmVkU291cmNlcy5tYWtlCSh3b3JraW5nIGNv
cHkpCkBAIC0zNTksNiArMzU5LDcgQEAgRE9NX0NMQVNTRVMgPSBcCiAgICAgV2ViS2l0Q1NTVHJh
bnNmb3JtVmFsdWUgXAogICAgIFdlYktpdFRyYW5zaXRpb25FdmVudCBcCiAgICAgV2hlZWxFdmVu
dCBcCisgICAgV29ya2VyTG9jYXRpb24gXAogICAgIFhNTEh0dHBSZXF1ZXN0IFwKICAgICBYTUxI
dHRwUmVxdWVzdEV4Y2VwdGlvbiBcCiAgICAgWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50IFwK
QEAgLTM3OSw2ICszODAsNyBAQCBhbGwgOiBcCiAgICAgXAogICAgIEpTRE9NV2luZG93QmFzZS5s
dXQuaCBcCiAgICAgSlNSR0JDb2xvci5sdXQuaCBcCisgICAgSlNXb3JrZXJDb250ZXh0Lmx1dC5o
IFwKICAgICBcCiAgICAgSlNKYXZhU2NyaXB0Q2FsbEZyYW1lLmggXAogICAgIFwKSW5kZXg6IFdl
YkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAzODA5MikK
KysrIFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNv
cHkpCkBAIC00MTUxLDYgKzQxNTEsOCBAQAogCQlFMUEzMDJCQzBERTgzNzAzMDBDNTJGMkMgLyog
U3RyaW5nQnVpbGRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gRTFBMzAyQkIwREU4MzcwMzAwQzUyRjJDIC8qIFN0cmluZ0J1aWxkZXIuaCAqLzsgfTsK
IAkJRTFBMzAyQzEwREU4Mzc2OTAwQzUyRjJDIC8qIFN0cmluZ0J1aWxkZXIuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTFBMzAyQzAwREU4Mzc2OTAw
QzUyRjJDIC8qIFN0cmluZ0J1aWxkZXIuY3BwICovOyB9OwogCQlFMUE1Rjk5QjBFN0VBQTI1MDBB
Rjg1RUEgLyogSlNNZXNzYWdlQ2hhbm5lbEN1c3RvbS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMUE1Rjk5QTBFN0VBQTI1MDBBRjg1RUEgLyogSlNN
ZXNzYWdlQ2hhbm5lbEN1c3RvbS5jcHAgKi87IH07CisJCUUxQTY0M0YyMEVDMDk3MjUwMDc3OTY2
OCAvKiBXb3JrZXJTY3JpcHRDb250cm9sbGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBFMUE2NDNGMTBFQzA5NzI1MDA3Nzk2NjggLyogV29ya2VyU2Ny
aXB0Q29udHJvbGxlci5oICovOyB9OworCQlFMUE2NDNGRDBFQzA5N0EwMDA3Nzk2NjggLyogV29y
a2VyU2NyaXB0Q29udHJvbGxlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBFMUE2NDNGQzBFQzA5N0EwMDA3Nzk2NjggLyogV29ya2VyU2NyaXB0Q29u
dHJvbGxlci5jcHAgKi87IH07CiAJCUUxQUNBRjRDMEU3OTFBQUYwMDg3RDEyQiAvKiBET01NZXNz
YWdlUG9ydC5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEUxQUNBRjRBMEU3OTFBQUYwMDg3RDEyQiAvKiBET01NZXNzYWdlUG9ydC5tbSAqLzsgfTsKIAkJ
RTFBQ0FGNEQwRTc5MUFBRjAwODdEMTJCIC8qIERPTU1lc3NhZ2VQb3J0LmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMUFDQUY0QjBFNzkxQUFGMDA4N0Qx
MkIgLyogRE9NTWVzc2FnZVBvcnQuaCAqLzsgfTsKIAkJRTFBREVDQkYwRTc2QUNGMTAwNEExQTVF
IC8qIE1lc3NhZ2VQb3J0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBFMUFERUNCRDBFNzZBQ0YxMDA0QTFBNUUgLyogTWVzc2FnZVBvcnQuaCAqLzsgfTsK
QEAgLTQxNjMsOCArNDE2NSwxOSBAQAogCQlFMUFERUREQjBFNzZCRDkzMDA0QTFBNUUgLyogSlNN
ZXNzYWdlUG9ydC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBFMUFERUREOTBFNzZCRDkzMDA0QTFBNUUgLyogSlNNZXNzYWdlUG9ydC5jcHAgKi87IH07
CiAJCUUxQkU1MTJEMENGNkM1MTIwMDJFQTk1OSAvKiBYU0xUVW5pY29kZVNvcnQuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTFCRTUxMkIwQ0Y2QzUx
MjAwMkVBOTU5IC8qIFhTTFRVbmljb2RlU29ydC5jcHAgKi87IH07CiAJCUUxQkU1MTJFMENGNkM1
MTIwMDJFQTk1OSAvKiBYU0xUVW5pY29kZVNvcnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxQkU1MTJDMENGNkM1MTIwMDJFQTk1OSAvKiBYU0xUVW5p
Y29kZVNvcnQuaCAqLzsgfTsKKwkJRTFDMkM0MjQwRUFDRTBCQzAwN0U2MUZCIC8qIFdvcmtlclRo
cmVhZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTFD
MkM0MjMwRUFDRTBCQzAwN0U2MUZCIC8qIFdvcmtlclRocmVhZC5oICovOyB9OworCQlFMUMyQzQy
OTBFQUNFMEUwMDA3RTYxRkIgLyogV29ya2VyVGhyZWFkLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxQzJDNDI4MEVBQ0UwRTAwMDdFNjFGQiAvKiBX
b3JrZXJUaHJlYWQuY3BwICovOyB9OworCQlFMUMyQzQzRTBFQUQwMTMzMDA3RTYxRkIgLyogV29y
a2VyQ29udGV4dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gRTFDMkM0M0QwRUFEMDEzMzAwN0U2MUZCIC8qIFdvcmtlckNvbnRleHQuaCAqLzsgfTsKKwkJ
RTFDMkM0NDIwRUFEMDE3QjAwN0U2MUZCIC8qIFdvcmtlckNvbnRleHQuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTFDMkM0NDEwRUFEMDE3QjAwN0U2
MUZCIC8qIFdvcmtlckNvbnRleHQuY3BwICovOyB9OworCQlFMUMzNjJCQzBFQUYyOUZCMDA3NDEw
QkMgLyogV29ya2VyTG9jYXRpb24uaWRsIGluIFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBFMUMzNjJCQjBFQUYyOUZCMDA3NDEwQkMgLyogV29ya2VyTG9jYXRp
b24uaWRsICovOyB9OworCQlFMUMzNjJFRjBFQUYyQUE5MDA3NDEwQkMgLyogSlNXb3JrZXJMb2Nh
dGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTFD
MzYyRUQwRUFGMkFBOTAwNzQxMEJDIC8qIEpTV29ya2VyTG9jYXRpb24uaCAqLzsgfTsKKwkJRTFD
MzYyRjAwRUFGMkFBOTAwNzQxMEJDIC8qIEpTV29ya2VyTG9jYXRpb24uY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTFDMzYyRUUwRUFGMkFBOTAwNzQx
MEJDIC8qIEpTV29ya2VyTG9jYXRpb24uY3BwICovOyB9OworCQlFMUMzNjMwMTBFQUYyQ0M2MDA3
NDEwQkMgLyogV29ya2VyTG9jYXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEUxQzM2MzAwMEVBRjJDQzYwMDc0MTBCQyAvKiBXb3JrZXJMb2NhdGlv
bi5oICovOyB9OworCQlFMUMzNjMwNjBFQUYyRDA3MDA3NDEwQkMgLyogV29ya2VyTG9jYXRpb24u
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTFDMzYz
MDUwRUFGMkQwNzAwNzQxMEJDIC8qIFdvcmtlckxvY2F0aW9uLmNwcCAqLzsgfTsKIAkJRTFDMzZD
MDMwRUIwNzZENjAwNzQxMEJDIC8qIEpTRE9NR2xvYmFsT2JqZWN0LmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMUMzNkMwMjBFQjA3NkQ2MDA3NDEwQkMg
LyogSlNET01HbG9iYWxPYmplY3QuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQlFMUMzNkNCRDBFQjA4MDYyMDA3NDEwQkMgLyogSlNET01HbG9iYWxP
YmplY3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RTFDMzZDQkMwRUIwODA2MjAwNzQxMEJDIC8qIEpTRE9NR2xvYmFsT2JqZWN0LmNwcCAqLzsgfTsK
KwkJRTFDMzZEMzQwRUIwQTA5NDAwNzQxMEJDIC8qIEpTV29ya2VyQ29udGV4dC5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMUMzNkQzMjBFQjBBMDk0
MDA3NDEwQkMgLyogSlNXb3JrZXJDb250ZXh0LmNwcCAqLzsgfTsKKwkJRTFDMzZEMzUwRUIwQTA5
NDAwNzQxMEJDIC8qIEpTV29ya2VyQ29udGV4dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRTFDMzZEMzMwRUIwQTA5NDAwNzQxMEJDIC8qIEpTV29ya2Vy
Q29udGV4dC5oICovOyB9OwogCQlFMUM0REU2OTBFQTc1QzFFMDAyM0NDRDYgLyogQWN0aXZlRE9N
T2JqZWN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBF
MUM0REU2ODBFQTc1QzFFMDAyM0NDRDYgLyogQWN0aXZlRE9NT2JqZWN0LmggKi87IH07CiAJCUUx
QzRERTZFMEVBNzVDNjUwMDIzQ0NENiAvKiBBY3RpdmVET01PYmplY3QuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTFDNERFNkQwRUE3NUM2NTAwMjND
Q0Q2IC8qIEFjdGl2ZURPTU9iamVjdC5jcHAgKi87IH07CiAJCUUxQzhCRTVEMEU4QkQxNUEwMDY0
Q0I3RCAvKiBKU0RlZGljYXRlZFdvcmtlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBFMUM4QkU1QzBFOEJEMTVBMDA2NENCN0QgLyogSlNEZWRpY2F0
ZWRXb3JrZXIuY3BwICovOyB9OwpAQCAtODc2MSw2ICs4Nzc0LDggQEAKIAkJRTFBMzAyQkIwREU4
MzcwMzAwQzUyRjJDIC8qIFN0cmluZ0J1aWxkZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gU3RyaW5nQnVpbGRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlF
MUEzMDJDMDBERTgzNzY5MDBDNTJGMkMgLyogU3RyaW5nQnVpbGRlci5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTdHJpbmdCdWlsZGVyLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJRTFBNUY5OUEwRTdFQUEyNTAwQUY4NUVBIC8qIEpTTWVzc2FnZUNo
YW5uZWxDdXN0b20uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNN
ZXNzYWdlQ2hhbm5lbEN1c3RvbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUUx
QTY0M0YxMEVDMDk3MjUwMDc3OTY2OCAvKiBXb3JrZXJTY3JpcHRDb250cm9sbGVyLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdvcmtlclNjcmlwdENvbnRyb2xsZXIuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTFBNjQzRkMwRUMwOTdBMDAwNzc5NjY4IC8qIFdv
cmtlclNjcmlwdENvbnRyb2xsZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gV29ya2VyU2NyaXB0Q29udHJvbGxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUUxQUNBRjRBMEU3OTFBQUYwMDg3RDEyQiAvKiBET01NZXNzYWdlUG9ydC5tbSAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IERPTU1lc3NhZ2VQb3J0Lm1tOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMUFDQUY0QjBFNzkxQUFGMDA4N0QxMkIgLyog
RE9NTWVzc2FnZVBvcnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRE9NTWVz
c2FnZVBvcnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTFBREVDQkQwRTc2QUNG
MTAwNEExQTVFIC8qIE1lc3NhZ2VQb3J0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZXhwbGljaXRGaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmg7IGZpbGVFbmNvZGluZyA9IDQ7IHBh
dGggPSBNZXNzYWdlUG9ydC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtODc3NSw4
ICs4NzkwLDE5IEBACiAJCUUxQURFREQ5MEU3NkJEOTMwMDRBMUE1RSAvKiBKU01lc3NhZ2VQb3J0
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTTWVzc2FnZVBvcnQu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMUJFNTEyQjBDRjZDNTEyMDAyRUE5
NTkgLyogWFNMVFVuaWNvZGVTb3J0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFhTTFRVbmljb2RlU29ydC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUUxQkU1MTJDMENGNkM1MTIwMDJFQTk1OSAvKiBYU0xUVW5pY29kZVNvcnQuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gWFNMVFVuaWNvZGVTb3J0Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCUUxQzJDNDIzMEVBQ0UwQkMwMDdFNjFGQiAvKiBXb3JrZXJUaHJlYWQu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV29ya2VyVGhyZWFkLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUUxQzJDNDI4MEVBQ0UwRTAwMDdFNjFGQiAvKiBXb3Jr
ZXJUaHJlYWQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV29ya2Vy
VGhyZWFkLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTFDMkM0M0QwRUFEMDEz
MzAwN0U2MUZCIC8qIFdvcmtlckNvbnRleHQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gV29ya2VyQ29udGV4dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFMUMy
QzQ0MTBFQUQwMTdCMDA3RTYxRkIgLyogV29ya2VyQ29udGV4dC5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXb3JrZXJDb250ZXh0LmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJRTFDMzYyQkIwRUFGMjlGQjAwNzQxMEJDIC8qIFdvcmtlckxvY2F0aW9u
LmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBXb3JrZXJMb2NhdGlvbi5pZGw7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCUUxQzM2MkVEMEVBRjJBQTkwMDc0MTBCQyAvKiBKU1dvcmtl
ckxvY2F0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTV29ya2VyTG9j
YXRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTFDMzYyRUUwRUFGMkFBOTAw
NzQxMEJDIC8qIEpTV29ya2VyTG9jYXRpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gSlNXb3JrZXJMb2NhdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCUUxQzM2MzAwMEVBRjJDQzYwMDc0MTBCQyAvKiBXb3JrZXJMb2NhdGlvbi5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXb3JrZXJMb2NhdGlvbi5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQlFMUMzNjMwNTBFQUYyRDA3MDA3NDEwQkMgLyogV29ya2VyTG9j
YXRpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV29ya2VyTG9j
YXRpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMUMzNkMwMjBFQjA3NkQ2
MDA3NDEwQkMgLyogSlNET01HbG9iYWxPYmplY3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gSlNET01HbG9iYWxPYmplY3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJRTFDMzZDQkMwRUIwODA2MjAwNzQxMEJDIC8qIEpTRE9NR2xvYmFsT2JqZWN0LmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTRE9NR2xvYmFsT2JqZWN0LmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTFDMzZEMzIwRUIwQTA5NDAwNzQxMEJDIC8q
IEpTV29ya2VyQ29udGV4dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBKU1dvcmtlckNvbnRleHQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFMUMz
NkQzMzBFQjBBMDk0MDA3NDEwQkMgLyogSlNXb3JrZXJDb250ZXh0LmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEpTV29ya2VyQ29udGV4dC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlFMUM0REU2ODBFQTc1QzFFMDAyM0NDRDYgLyogQWN0aXZlRE9NT2JqZWN0Lmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFjdGl2ZURPTU9iamVjdC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMUM0REU2RDBFQTc1QzY1MDAyM0NDRDYgLyogQWN0
aXZlRE9NT2JqZWN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEFj
dGl2ZURPTU9iamVjdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUxQzhCRTQ0
MEU4QkNDQkIwMDY0Q0I3RCAvKiBEZWRpY2F0ZWRXb3JrZXIuaWRsICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsg
cGF0aCA9IERlZGljYXRlZFdvcmtlci5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBA
IC0xMjg4MCw2ICsxMjkwNiw4IEBACiAJCQkJQkMzNDUyNDEwRDdFMDBFQTAwMTY1NzRBIC8qIEpT
UkdCQ29sb3IuY3BwICovLAogCQkJCUJDMzQ1MjQyMEQ3RTAwRUEwMDE2NTc0QSAvKiBKU1JHQkNv
bG9yLmggKi8sCiAJCQkJQjIxMTI3QTUwQjMxODY3NzAwMDlCRTUzIC8qIEpTU1ZHUE9EVHlwZVdy
YXBwZXIuaCAqLywKKwkJCQlFMUMzNkQzMjBFQjBBMDk0MDA3NDEwQkMgLyogSlNXb3JrZXJDb250
ZXh0LmNwcCAqLywKKwkJCQlFMUMzNkQzMzBFQjBBMDk0MDA3NDEwQkMgLyogSlNXb3JrZXJDb250
ZXh0LmggKi8sCiAJCQkJQkMzNDhCRTcwREI4MDM1NDAwNEFCQUI5IC8qIEpTWE1MSHR0cFJlcXVl
c3RDb25zdHJ1Y3Rvci5jcHAgKi8sCiAJCQkJQkMzNDhCRTgwREI4MDM1NDAwNEFCQUI5IC8qIEpT
WE1MSHR0cFJlcXVlc3RDb25zdHJ1Y3Rvci5oICovLAogCQkJCUJDRTk5RUMxMERDQTYyNDEwMDE4
MjY4MyAvKiBKU1hTTFRQcm9jZXNzb3JDb25zdHJ1Y3Rvci5jcHAgKi8sCkBAIC0xMjg5NCw2ICsx
MjkyMiw4IEBACiAJCQkJNjU0ODhENkEwREQ1QTgzRDAwOUQ4M0IyIC8qIFN0cmluZ1NvdXJjZVBy
b3ZpZGVyLmggKi8sCiAJCQkJQkM2MDkwMUQwRTkxQjhFQzAwMEM2OEI1IC8qIEpTRXZlbnRUYXJn
ZXQuaCAqLywKIAkJCQlCQzYwOTAxRTBFOTFCOEVDMDAwQzY4QjUgLyogSlNFdmVudFRhcmdldC5j
cHAgKi8sCisJCQkJRTFBNjQzRjEwRUMwOTcyNTAwNzc5NjY4IC8qIFdvcmtlclNjcmlwdENvbnRy
b2xsZXIuaCAqLywKKwkJCQlFMUE2NDNGQzBFQzA5N0EwMDA3Nzk2NjggLyogV29ya2VyU2NyaXB0
Q29udHJvbGxlci5jcHAgKi8sCiAJCQkpOwogCQkJcGF0aCA9IGpzOwogCQkJc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsKQEAgLTEzMzU0LDYgKzEzMzg0LDggQEAKIAkJCWNoaWxkcmVuID0gKAogCQkJ
CUUxQzhCRTVDMEU4QkQxNUEwMDY0Q0I3RCAvKiBKU0RlZGljYXRlZFdvcmtlci5jcHAgKi8sCiAJ
CQkJRTFDQUE1QzUwRThCRDIzNjAwQTczRUNBIC8qIEpTRGVkaWNhdGVkV29ya2VyLmggKi8sCisJ
CQkJRTFDMzYyRUUwRUFGMkFBOTAwNzQxMEJDIC8qIEpTV29ya2VyTG9jYXRpb24uY3BwICovLAor
CQkJCUUxQzM2MkVEMEVBRjJBQTkwMDc0MTBCQyAvKiBKU1dvcmtlckxvY2F0aW9uLmggKi8sCiAJ
CQkpOwogCQkJbmFtZSA9IFRocmVhZHM7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwpAQCAt
MTQwMjAsNiArMTQwNTIsMTMgQEAKIAkJCQk4NTAzMUIzQTBBNDRFRkM3MDBGOTkyRTAgLyogV2hl
ZWxFdmVudC5jcHAgKi8sCiAJCQkJODUwMzFCM0IwQTQ0RUZDNzAwRjk5MkUwIC8qIFdoZWVsRXZl
bnQuaCAqLywKIAkJCQk5M0VFQzFGNzA5QzI4Nzc3MDBDNTE1RDEgLyogV2hlZWxFdmVudC5pZGwg
Ki8sCisJCQkJRTFDMkM0NDEwRUFEMDE3QjAwN0U2MUZCIC8qIFdvcmtlckNvbnRleHQuY3BwICov
LAorCQkJCUUxQzJDNDNEMEVBRDAxMzMwMDdFNjFGQiAvKiBXb3JrZXJDb250ZXh0LmggKi8sCisJ
CQkJRTFDMzYzMDUwRUFGMkQwNzAwNzQxMEJDIC8qIFdvcmtlckxvY2F0aW9uLmNwcCAqLywKKwkJ
CQlFMUMzNjMwMDBFQUYyQ0M2MDA3NDEwQkMgLyogV29ya2VyTG9jYXRpb24uaCAqLywKKwkJCQlF
MUMzNjJCQjBFQUYyOUZCMDA3NDEwQkMgLyogV29ya2VyTG9jYXRpb24uaWRsICovLAorCQkJCUUx
QzJDNDI4MEVBQ0UwRTAwMDdFNjFGQiAvKiBXb3JrZXJUaHJlYWQuY3BwICovLAorCQkJCUUxQzJD
NDIzMEVBQ0UwQkMwMDdFNjFGQiAvKiBXb3JrZXJUaHJlYWQuaCAqLywKIAkJCQlGNTIzRDMwOTAy
REU0NDc2MDE4NjM1Q0EgLyogWE1MVG9rZW5pemVyLmNwcCAqLywKIAkJCQlGNTIzRDMwQTAyREU0
NDc2MDE4NjM1Q0EgLyogWE1MVG9rZW5pemVyLmggKi8sCiAJCQkJNTRDNTBGN0EwRTgwMURGMzAw
OTgzMkEwIC8qIFhNTFRva2VuaXplckxpYnhtbDIuY3BwICovLApAQCAtMTYxNTQsNiArMTYxOTMs
MTEgQEAKIAkJCQlCQ0U2NTlBOTBFQTkyN0I5MDA3RTQ1MzMgLyogVGhlbWVUeXBlcy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQkNFNjU5RTYwRUE5MkZCMjAwN0U0NTMzIC8qIFRoZW1lTWFjLmggaW4g
SGVhZGVycyAqLywKIAkJCQlFMUM0REU2OTBFQTc1QzFFMDAyM0NDRDYgLyogQWN0aXZlRE9NT2Jq
ZWN0LmggaW4gSGVhZGVycyAqLywKKwkJCQlFMUMyQzQyNDBFQUNFMEJDMDA3RTYxRkIgLyogV29y
a2VyVGhyZWFkLmggaW4gSGVhZGVycyAqLywKKwkJCQlFMUMyQzQzRTBFQUQwMTMzMDA3RTYxRkIg
LyogV29ya2VyQ29udGV4dC5oIGluIEhlYWRlcnMgKi8sCisJCQkJRTFDMzYyRUYwRUFGMkFBOTAw
NzQxMEJDIC8qIEpTV29ya2VyTG9jYXRpb24uaCBpbiBIZWFkZXJzICovLAorCQkJCUUxQzM2MzAx
MEVBRjJDQzYwMDc0MTBCQyAvKiBXb3JrZXJMb2NhdGlvbi5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
RTFDMzZEMzUwRUIwQTA5NDAwNzQxMEJDIC8qIEpTV29ya2VyQ29udGV4dC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJRkVBQjkwMTMwRUE1MUI5QzAwNjM0OEMzIC8qIEdlb2xvY2F0aW9uU2VydmljZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQkNFNjVCRUIwRUFDREYxNjAwN0U0NTMzIC8qIExlbmd0aC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQkNGRjY0OTEwRUFEMTVDMjAwQzFENkY3IC8qIExlbmd0aEJv
eC5oIGluIEhlYWRlcnMgKi8sCkBAIC0xNjE2MSw2ICsxNjIwNSw3IEBACiAJCQkJRTFDMzZDMDMw
RUIwNzZENjAwNzQxMEJDIC8qIEpTRE9NR2xvYmFsT2JqZWN0LmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRkM3MDUyMTBFQjE4MTU2MDBCOTBBRDggLyogQXRvbWljU3RyaW5nSGFzaC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJRTExQzlEOUIwRUIzNjgxMjAwRTQwOURCIC8qIFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQuaCBpbiBIZWFkZXJzICovLAorCQkJCUUxQTY0M0YyMEVDMDk3MjUwMDc3OTY2OCAvKiBX
b3JrZXJTY3JpcHRDb250cm9sbGVyLmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5
Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKQEAgLTE2Mjc0LDYgKzE2MzE5
LDcgQEAKIAkJCQk4NTEzNkNBODBBRUQ2NjU5MDBGOTBBM0QgLyogd2VzdFJlc2l6ZUN1cnNvci5w
bmcgaW4gUmVzb3VyY2VzICovLAogCQkJCTFBQjFBRTdBMEMwNTFGREUwMDEzOUY0RiAvKiB6b29t
SW5DdXJzb3IucG5nIGluIFJlc291cmNlcyAqLywKIAkJCQkxQUIxQUU3QjBDMDUxRkRFMDAxMzlG
NEYgLyogem9vbU91dEN1cnNvci5wbmcgaW4gUmVzb3VyY2VzICovLAorCQkJCUUxQzM2MkJDMEVB
RjI5RkIwMDc0MTBCQyAvKiBXb3JrZXJMb2NhdGlvbi5pZGwgaW4gUmVzb3VyY2VzICovLAogCQkJ
KTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAt
MTgwNDIsMTEgKzE4MDg4LDE3IEBACiAJCQkJOTM5QjAyRUUwRUEyREJDNDAwQzU0NTcwIC8qIFdp
ZHRoSXRlcmF0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkNFNjU5RTkwRUE5MkZGQTAwN0U0
NTMzIC8qIFRoZW1lTWFjLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJRTFDNERFNkUwRUE3NUM2NTAw
MjNDQ0Q2IC8qIEFjdGl2ZURPTU9iamVjdC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlFMUMyQzQy
OTBFQUNFMEUwMDA3RTYxRkIgLyogV29ya2VyVGhyZWFkLmNwcCBpbiBTb3VyY2VzICovLAorCQkJ
CUUxQzJDNDQyMEVBRDAxN0IwMDdFNjFGQiAvKiBXb3JrZXJDb250ZXh0LmNwcCBpbiBTb3VyY2Vz
ICovLAorCQkJCUUxQzM2MkYwMEVBRjJBQTkwMDc0MTBCQyAvKiBKU1dvcmtlckxvY2F0aW9uLmNw
cCBpbiBTb3VyY2VzICovLAorCQkJCUUxQzM2MzA2MEVBRjJEMDcwMDc0MTBCQyAvKiBXb3JrZXJM
b2NhdGlvbi5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlFMUMzNkQzNDBFQjBBMDk0MDA3NDEwQkMg
LyogSlNXb3JrZXJDb250ZXh0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUZFQUI5MDEyMEVBNTFC
OUMwMDYzNDhDMyAvKiBHZW9sb2NhdGlvblNlcnZpY2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QkNFNjVCRUEwRUFDREYxNjAwN0U0NTMzIC8qIExlbmd0aC5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQlCQ0U2NUQzMjBFQUQxMjExMDA3RTQ1MzMgLyogVGhlbWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJRTFDMzZDQkQwRUIwODA2MjAwNzQxMEJDIC8qIEpTRE9NR2xvYmFsT2JqZWN0LmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCUUxMUM5REIwMEVCMzY5OTUwMEU0MDlEQiAvKiBTY3JpcHRFeGVjdXRp
b25Db250ZXh0LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUUxQTY0M0ZEMEVDMDk3QTAwMDc3OTY2
OCAvKiBXb3JrZXJTY3JpcHRDb250cm9sbGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJ
CXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpJbmRleDogV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0RPTUdsb2JhbE9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0RPTUdsb2JhbE9iamVjdC5jcHAJKHJldmlzaW9uIDM4MDkyKQor
KysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUdsb2JhbE9iamVjdC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTMwLDYgKzMwLDggQEAKICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkpT
RE9NV2luZG93LmgiCiAjaW5jbHVkZSAiSlNFdmVudExpc3RlbmVyLmgiCisjaW5jbHVkZSAiSlNX
b3JrZXJDb250ZXh0LmgiCisjaW5jbHVkZSAiV29ya2VyQ29udGV4dC5oIgogCiB1c2luZyBuYW1l
c3BhY2UgSlNDOwogCkBAIC0xNjEsNyArMTYzLDEyIEBAIEpTRE9NR2xvYmFsT2JqZWN0KiB0b0pT
RE9NR2xvYmFsT2JqZWN0KFMKICAgICBpZiAoc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+aXNEb2N1
bWVudCgpKQogICAgICAgICByZXR1cm4gdG9KU0RPTVdpbmRvdyhzdGF0aWNfY2FzdDxEb2N1bWVu
dCo+KHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQpLT5mcmFtZSgpKTsKIAotICAgIC8vIE5vdCBpbXBs
ZW1lbnRlZCB5ZXQuCisjaWYgRU5BQkxFKFdPUktFUlMpCisgICAgaWYgKHNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQtPmlzV29ya2VyQ29udGV4dCgpKQorICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
V29ya2VyQ29udGV4dCo+KHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQpLT5zY3JpcHQoKS0+anNXb3Jr
ZXJDb250ZXh0KCk7CisjZW5kaWYKKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIHJl
dHVybiAwOwogfQogCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWVzc2FnZUNoYW5uZWxD
b25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU01lc3Nh
Z2VDaGFubmVsQ29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAzODA5MikKKysrIFdlYkNvcmUvYmlu
ZGluZ3MvanMvSlNNZXNzYWdlQ2hhbm5lbENvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiSlNEb2N1
bWVudC5oIgogI2luY2x1ZGUgIkpTTWVzc2FnZUNoYW5uZWwuaCIKKyNpbmNsdWRlICJKU1dvcmtl
ckNvbnRleHQuaCIKICNpbmNsdWRlICJNZXNzYWdlQ2hhbm5lbC5oIgogCiB1c2luZyBuYW1lc3Bh
Y2UgSlNDOwpAQCAtNDMsOCArNDQsMTAgQEAgSlNNZXNzYWdlQ2hhbm5lbENvbnN0cnVjdG9yOjpK
U01lc3NhZ2VDaAogewogICAgIGlmIChtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPmlzRG9jdW1l
bnQoKSkKICAgICAgICAgbV9jb250ZXh0V3JhcHBlciA9IHRvSlMoZXhlYywgc3RhdGljX2Nhc3Q8
RG9jdW1lbnQqPihzY3JpcHRFeGVjdXRpb25Db250ZXh0KSk7CisjaWYgRU5BQkxFKFdPUktFUlMp
CiAgICAgZWxzZSBpZiAobV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LT5pc1dvcmtlckNvbnRleHQo
KSkKLSAgICAgICAgOyAvLyBOb3QgeWV0IGltcGxlbWVudGVkLgorICAgICAgICBtX2NvbnRleHRX
cmFwcGVyID0gdG9KU0RPTUdsb2JhbE9iamVjdChzY3JpcHRFeGVjdXRpb25Db250ZXh0KTsKKyNl
bmRpZgogICAgIGVsc2UKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAKSW5kZXg6IFdl
YkNvcmUvYmluZGluZ3MvanMvSlNXb3JrZXJDb250ZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2JpbmRpbmdzL2pzL0pTV29ya2VyQ29udGV4dC5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJD
b3JlL2JpbmRpbmdzL2pzL0pTV29ya2VyQ29udGV4dC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsMTgzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4gQWxsIFJpZ2h0
cyBSZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJM
RShXT1JLRVJTKQorCisjaW5jbHVkZSAiSlNXb3JrZXJDb250ZXh0LmgiCisKKyNpbmNsdWRlICJK
U0RPTUJpbmRpbmcuaCIKKyNpbmNsdWRlICJKU01lc3NhZ2VDaGFubmVsQ29uc3RydWN0b3IuaCIK
KyNpbmNsdWRlICJKU01lc3NhZ2VQb3J0LmgiCisjaW5jbHVkZSAiSlNXb3JrZXJMb2NhdGlvbi5o
IgorI2luY2x1ZGUgIldvcmtlckNvbnRleHQuaCIKKyNpbmNsdWRlICJXb3JrZXJMb2NhdGlvbi5o
IgorCit1c2luZyBuYW1lc3BhY2UgSlNDOworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0pTVmFs
dWUqIGpzV29ya2VyQ29udGV4dExvY2F0aW9uKEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXIm
LCBjb25zdCBQcm9wZXJ0eVNsb3QmKTsKK0pTVmFsdWUqIGpzV29ya2VyQ29udGV4dE1lc3NhZ2VD
aGFubmVsKEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3Qm
KTsKK3ZvaWQgc2V0SlNXb3JrZXJDb250ZXh0TWVzc2FnZUNoYW5uZWwoRXhlY1N0YXRlKiwgSlNP
YmplY3QqLCBKU1ZhbHVlKik7CitKU1ZhbHVlKiBqc1dvcmtlckNvbnRleHRNZXNzYWdlUG9ydChF
eGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90Jik7Cit2b2lk
IHNldEpTV29ya2VyQ29udGV4dE1lc3NhZ2VQb3J0KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNW
YWx1ZSopOworSlNWYWx1ZSoganNXb3JrZXJDb250ZXh0V29ya2VyTG9jYXRpb24oRXhlY1N0YXRl
KiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYpOwordm9pZCBzZXRKU1dv
cmtlckNvbnRleHRXb3JrZXJMb2NhdGlvbihFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUq
KTsKKworfQorCisvKgorQGJlZ2luIEpTV29ya2VyQ29udGV4dFByb3RvdHlwZVRhYmxlCisjICBj
bG9zZSAgICAgICAgICAgICAgICAgICAgICAgICAganNXb3JrZXJDb250ZXh0UHJvdG90eXBlRnVu
Y3Rpb25DbG9zZSAgICAgICAgICAgICAgICAgICAgICAgICBEb250RGVsZXRlfEZ1bmN0aW9uIDAK
KyMgIE1lc3NhZ2VQb3J0IG1ldGhvZHM/CitAZW5kCisqLworCisvKgorQGJlZ2luIEpTV29ya2Vy
Q29udGV4dFRhYmxlCisgIGxvY2F0aW9uICAgICAgICAgICAgICAgICAgICAgIGpzV29ya2VyQ29u
dGV4dExvY2F0aW9uICAgICAgICAgICAgRG9udERlbGV0ZXxSZWFkT25seQorIyAgb25jbG9zZSAg
ICAgICAgICAgICAgICAgICAgICAganNXb3JrZXJDb250ZXh0T25jbG9zZSAgICAgICAgICAgICBE
b250RGVsZXRlCisjICBvbmNvbm5lY3QgICAgICAgICAgICAgICAgICAgICBqc1dvcmtlckNvbnRl
eHRPbmNvbm5lY3QgICAgICAgICAgIERvbnREZWxldGUKKyMgIG9ubWVzc2FnZSBhbmQgb3RoZXIg
TWVzc2FnZVBvcnQgYXR0cmlidXRlcz8KKyAgTWVzc2FnZUNoYW5uZWwgICAgICAgICAgICAgICAg
anNXb3JrZXJDb250ZXh0TWVzc2FnZUNoYW5uZWwgICAgICAgICAgICAgICAgRG9udERlbGV0ZQor
ICBNZXNzYWdlUG9ydCAgICAgICAgICAgICAgICAgICBqc1dvcmtlckNvbnRleHRNZXNzYWdlUG9y
dCAgICAgICAgICAgICAgICAgICBEb250RGVsZXRlCisgIFdvcmtlckxvY2F0aW9uICAgICAgICAg
ICAgICAgIGpzV29ya2VyQ29udGV4dFdvcmtlckxvY2F0aW9uICAgICAgICAgICAgICAgIERvbnRE
ZWxldGUKKyMgIFhNTEh0dHBSZXF1ZXN0ICAgICAgICAgICAgICAgIGpzV29ya2VyQ29udGV4dFhN
TEh0dHBSZXF1ZXN0ICAgICAgICAgICAgICAgIERvbnREZWxldGUKKyMgIERhdGFiYXNlCitAZW5k
CisqLworCisjaW5jbHVkZSAiSlNXb3JrZXJDb250ZXh0Lmx1dC5oIgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK0FTU0VSVF9DTEFTU19GSVRTX0lOX0NFTEwoSlNXb3JrZXJDb250ZXh0KQorCitK
U1dvcmtlckNvbnRleHQ6OkpTV29ya2VyQ29udGV4dChQYXNzUmVmUHRyPFdvcmtlckNvbnRleHQ+
IGltcGwpCisgICAgOiBKU0RPTUdsb2JhbE9iamVjdChKU1dvcmtlckNvbnRleHQ6OmNyZWF0ZVN0
cnVjdHVyZUlEKG5ldyAoSGVhcDo6aGVhcCh0aGlzKS0+Z2xvYmFsRGF0YSgpKSBKU1dvcmtlckNv
bnRleHRQcm90b3R5cGUoSlNXb3JrZXJDb250ZXh0UHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmVJ
RChqc051bGwoKSkpKSwgbmV3IEpTRE9NR2xvYmFsT2JqZWN0RGF0YSwgdGhpcykKKyAgICAsIG1f
aW1wbChpbXBsKQoreworICAgIEdsb2JhbFByb3BlcnR5SW5mbyBzdGF0aWNHbG9iYWxzW10gPSB7
CisgICAgICAgIEdsb2JhbFByb3BlcnR5SW5mbyhJZGVudGlmaWVyKGdsb2JhbEV4ZWMoKSwgInNl
bGYiKSwgdGhpcywgRG9udERlbGV0ZSB8IFJlYWRPbmx5KSwKKyAgICB9OworICAgIAorICAgIGFk
ZFN0YXRpY0dsb2JhbHMoc3RhdGljR2xvYmFscywgc2l6ZW9mKHN0YXRpY0dsb2JhbHMpIC8gc2l6
ZW9mKEdsb2JhbFByb3BlcnR5SW5mbykpOworCit9CisKK0pTV29ya2VyQ29udGV4dDo6fkpTV29y
a2VyQ29udGV4dCgpCit7Cit9CisKK1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIEpTV29ya2VyQ29u
dGV4dDo6c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1faW1w
bC5nZXQoKTsKK30KKwordm9pZCBKU1dvcmtlckNvbnRleHQ6Om1hcmsoKQoreworICAgIEJhc2U6
Om1hcmsoKTsKKworICAgIG1hcmtBY3RpdmVPYmplY3RzRm9yQ29udGV4dCgqZ2xvYmFsRGF0YSgp
LCBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpOworfQorCitzdGF0aWMgY29uc3QgSGFzaFRhYmxl
KiBnZXRKU1dvcmtlckNvbnRleHRUYWJsZShFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgcmV0dXJu
IGdldEhhc2hUYWJsZUZvckdsb2JhbERhdGEoZXhlYy0+Z2xvYmFsRGF0YSgpLCAmSlNXb3JrZXJD
b250ZXh0VGFibGUpOworfQorCitjb25zdCBDbGFzc0luZm8gSlNXb3JrZXJDb250ZXh0OjpzX2lu
Zm8gPSB7ICJXb3JrZXJDb250ZXh0IiwgMCwgMCwgZ2V0SlNXb3JrZXJDb250ZXh0VGFibGUgfTsK
KworSlNPYmplY3QqIEpTV29ya2VyQ29udGV4dDo6Y3JlYXRlUHJvdG90eXBlKEV4ZWNTdGF0ZSog
ZXhlYykKK3sKKyAgICByZXR1cm4gbmV3IChleGVjKSBKU1dvcmtlckNvbnRleHRQcm90b3R5cGUo
SlNXb3JrZXJMb2NhdGlvblByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlSUQoZXhlYy0+bGV4aWNh
bEdsb2JhbE9iamVjdCgpLT5vYmplY3RQcm90b3R5cGUoKSkpOworfQorCitib29sIEpTV29ya2Vy
Q29udGV4dDo6Z2V0T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRp
ZmllciYgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCit7CisgICAgcmV0dXJuIGdl
dFN0YXRpY1ZhbHVlU2xvdDxKU1dvcmtlckNvbnRleHQsIEJhc2U+KGV4ZWMsIGdldEpTV29ya2Vy
Q29udGV4dFRhYmxlKGV4ZWMpLCB0aGlzLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOworfQorCitKU1Zh
bHVlKiBqc1dvcmtlckNvbnRleHRMb2NhdGlvbihKU0M6OkV4ZWNTdGF0ZSogZXhlYywgY29uc3Qg
SWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCkKK3sKKyAgICBXb3JrZXJDb250
ZXh0KiBpbXAgPSBzdGF0aWNfY2FzdDxXb3JrZXJDb250ZXh0Kj4oc3RhdGljX2Nhc3Q8SlNXb3Jr
ZXJDb250ZXh0Kj4oYXNPYmplY3Qoc2xvdC5zbG90QmFzZSgpKSktPmltcGwoKSk7CisgICAgcmV0
dXJuIHRvSlMoZXhlYywgaW1wLT5sb2NhdGlvbigpKTsKK30KKworSlNWYWx1ZSoganNXb3JrZXJD
b250ZXh0TWVzc2FnZUNoYW5uZWwoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiwg
Y29uc3QgUHJvcGVydHlTbG90JiBzbG90KQoreworICAgIHJldHVybiBnZXRET01Db25zdHJ1Y3Rv
cjxKU01lc3NhZ2VDaGFubmVsQ29uc3RydWN0b3I+KGV4ZWMsIHN0YXRpY19jYXN0PEpTV29ya2Vy
Q29udGV4dCo+KGFzT2JqZWN0KHNsb3Quc2xvdEJhc2UoKSkpKTsKK30KKworSlNWYWx1ZSoganNX
b3JrZXJDb250ZXh0TWVzc2FnZVBvcnQoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVy
JiwgY29uc3QgUHJvcGVydHlTbG90JikKK3sKKyAgICByZXR1cm4gSlNNZXNzYWdlUG9ydDo6Z2V0
Q29uc3RydWN0b3IoZXhlYyk7Cit9CisKK0pTVmFsdWUqIGpzV29ya2VyQ29udGV4dFdvcmtlckxv
Y2F0aW9uKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5
U2xvdCYpCit7CisgICAgcmV0dXJuIEpTV29ya2VyTG9jYXRpb246OmdldENvbnN0cnVjdG9yKGV4
ZWMpOworfQorCitzdGF0aWMgY29uc3QgSGFzaFRhYmxlKiBnZXRKU1dvcmtlckNvbnRleHRQcm90
b3R5cGVUYWJsZShFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgcmV0dXJuIGdldEhhc2hUYWJsZUZv
ckdsb2JhbERhdGEoZXhlYy0+Z2xvYmFsRGF0YSgpLCAmSlNXb3JrZXJDb250ZXh0UHJvdG90eXBl
VGFibGUpOworfQorCitjb25zdCBDbGFzc0luZm8gSlNXb3JrZXJDb250ZXh0UHJvdG90eXBlOjpz
X2luZm8gPSB7ICJXb3JrZXJDb250ZXh0UHJvdG90eXBlIiwgMCwgMCwgZ2V0SlNXb3JrZXJDb250
ZXh0UHJvdG90eXBlVGFibGUgfTsKKworSlNPYmplY3QqIEpTV29ya2VyQ29udGV4dFByb3RvdHlw
ZTo6c2VsZihFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgcmV0dXJuIGdldERPTVByb3RvdHlwZTxK
U1dvcmtlckNvbnRleHQ+KGV4ZWMpOworfQorCitib29sIEpTV29ya2VyQ29udGV4dFByb3RvdHlw
ZTo6Z2V0T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYg
cHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCit7CisgICAgcmV0dXJuIGdldFN0YXRp
Y0Z1bmN0aW9uU2xvdDxKU09iamVjdD4oZXhlYywgZ2V0SlNXb3JrZXJDb250ZXh0UHJvdG90eXBl
VGFibGUoZXhlYyksIHRoaXMsIHByb3BlcnR5TmFtZSwgc2xvdCk7Cit9CisKK3ZvaWQgc2V0SlNX
b3JrZXJDb250ZXh0TWVzc2FnZUNoYW5uZWwoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVl
KikKK3sKKyAgICAvLyBGSVhNRTogRG8gd2UgbmVlZCB0byBvdmVycmlkZSBwdXQgZm9yIGdsb2Jh
bCBjb25zdHJ1Y3RvcnMsIGxpa2UgSlNET01XaW5kb3dCYXNlIGRvZXM/CisgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7Cit9CisKK3ZvaWQgc2V0SlNXb3JrZXJDb250ZXh0TWVzc2FnZVBvcnQoRXhl
Y1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlKikKK3sKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKK30KKwordm9pZCBzZXRKU1dvcmtlckNvbnRleHRXb3JrZXJMb2NhdGlvbihFeGVjU3RhdGUq
LCBKU09iamVjdCosIEpTVmFsdWUqKQoreworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQor
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShXT1JLRVJTKQoK
UHJvcGVydHkgY2hhbmdlcyBvbjogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtlckNvbnRleHQu
Y3BwCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX18KTmFtZTogc3ZuOmVvbC1zdHlsZQogICArIG5hdGl2ZQoKSW5kZXg6IFdl
YkNvcmUvYmluZGluZ3MvanMvSlNXb3JrZXJDb250ZXh0LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU1dvcmtlckNvbnRleHQuaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUv
YmluZGluZ3MvanMvSlNXb3JrZXJDb250ZXh0LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsODAg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
Q09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBD
T01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqCisgKi8KKworI2lmbmRlZiBKU1dvcmtlckNvbnRleHRfaAorI2RlZmluZSBKU1dv
cmtlckNvbnRleHRfaAorCisjaWYgRU5BQkxFKFdPUktFUlMpCisKKyNpbmNsdWRlICJKU0RPTUds
b2JhbE9iamVjdC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyAgICBjbGFzcyBXb3JrZXJD
b250ZXh0OworCisgICAgY2xhc3MgSlNXb3JrZXJDb250ZXh0IDogcHVibGljIEpTRE9NR2xvYmFs
T2JqZWN0IHsKKyAgICAgICAgdHlwZWRlZiBKU0RPTUdsb2JhbE9iamVjdCBCYXNlOworICAgIHB1
YmxpYzoKKyAgICAgICAgSlNXb3JrZXJDb250ZXh0KFBhc3NSZWZQdHI8V29ya2VyQ29udGV4dD4p
OworICAgICAgICB2aXJ0dWFsIH5KU1dvcmtlckNvbnRleHQoKTsKKworICAgICAgICBzdGF0aWMg
SlNDOjpKU09iamVjdCogY3JlYXRlUHJvdG90eXBlKEpTQzo6RXhlY1N0YXRlKik7CisgICAgICAg
IHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBK
U0M6OklkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgSlNDOjpQcm9wZXJ0eVNsb3QmKTsKKyAgICAg
ICAgdmlydHVhbCBjb25zdCBKU0M6OkNsYXNzSW5mbyogY2xhc3NJbmZvKCkgY29uc3QgeyByZXR1
cm4gJnNfaW5mbzsgfQorICAgICAgICBzdGF0aWMgY29uc3QgSlNDOjpDbGFzc0luZm8gc19pbmZv
OworICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxKU0M6OlN0cnVjdHVyZUlEPiBjcmVhdGVTdHJ1
Y3R1cmVJRChKU0M6OkpTVmFsdWUqIHByb3RvdHlwZSkKKyAgICAgICAgeworICAgICAgICAgICAg
cmV0dXJuIEpTQzo6U3RydWN0dXJlSUQ6OmNyZWF0ZShwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8o
SlNDOjpPYmplY3RUeXBlKSk7CisgICAgICAgIH0KKworICAgICAgICBXb3JrZXJDb250ZXh0KiBp
bXBsKCkgY29uc3QgeyByZXR1cm4gbV9pbXBsLmdldCgpOyB9CisgICAgICAgIHZpcnR1YWwgU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpIGNvbnN0OworCisg
ICAgICAgIHZpcnR1YWwgdm9pZCBtYXJrKCk7CisKKyAgICBwcml2YXRlOgorICAgICAgICBSZWZQ
dHI8V29ya2VyQ29udGV4dD4gbV9pbXBsOworICAgIH07CisKKyAgICBjbGFzcyBKU1dvcmtlckNv
bnRleHRQcm90b3R5cGUgOiBwdWJsaWMgSlNDOjpKU09iamVjdCB7CisgICAgcHVibGljOgorICAg
ICAgICBzdGF0aWMgSlNDOjpKU09iamVjdCogc2VsZihKU0M6OkV4ZWNTdGF0ZSopOworICAgICAg
ICBKU1dvcmtlckNvbnRleHRQcm90b3R5cGUoUGFzc1JlZlB0cjxKU0M6OlN0cnVjdHVyZUlEPiBz
dHJ1Y3R1cmUpIDogSlNDOjpKU09iamVjdChzdHJ1Y3R1cmUpIHsgfQorCisgICAgICAgIHZpcnR1
YWwgY29uc3QgSlNDOjpDbGFzc0luZm8qIGNsYXNzSW5mbygpIGNvbnN0IHsgcmV0dXJuICZzX2lu
Zm87IH0KKyAgICAgICAgc3RhdGljIGNvbnN0IEpTQzo6Q2xhc3NJbmZvIHNfaW5mbzsKKyAgICAg
ICAgdmlydHVhbCBib29sIGdldE93blByb3BlcnR5U2xvdChKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0
IEpTQzo6SWRlbnRpZmllciYsIEpTQzo6UHJvcGVydHlTbG90Jik7CisgICAgICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPEpTQzo6U3RydWN0dXJlSUQ+IGNyZWF0ZVN0cnVjdHVyZUlEKEpTQzo6SlNWYWx1
ZSogcHJvdG90eXBlKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1
cmVJRDo6Y3JlYXRlKHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUpKTsK
KyAgICAgICAgfQorICAgIH07CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8v
IEVOQUJMRShXT1JLRVJTKQorCisjZW5kaWYgLy8gSlNXb3JrZXJDb250ZXh0X2gKClByb3BlcnR5
IGNoYW5nZXMgb246IFdlYkNvcmUvYmluZGluZ3MvanMvSlNXb3JrZXJDb250ZXh0LmgKX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fXwpOYW1lOiBzdm46ZW9sLXN0eWxlCiAgICsgbmF0aXZlCgpJbmRleDogV2ViQ29yZS9iaW5k
aW5ncy9qcy9Xb3JrZXJTY3JpcHRDb250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2JpbmRpbmdzL2pzL1dvcmtlclNjcmlwdENvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiAwKQorKysg
V2ViQ29yZS9iaW5kaW5ncy9qcy9Xb3JrZXJTY3JpcHRDb250cm9sbGVyLmNwcAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSw4NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMu
IEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICoKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisK
KyNpZiBFTkFCTEUoV09SS0VSUykKKworI2luY2x1ZGUgIldvcmtlclNjcmlwdENvbnRyb2xsZXIu
aCIKKworI2luY2x1ZGUgIkpTV29ya2VyQ29udGV4dC5oIgorI2luY2x1ZGUgIldvcmtlckNvbnRl
eHQuaCIKKyNpbmNsdWRlIDxranMvU291cmNlQ29kZS5oPgorI2luY2x1ZGUgPGtqcy9jb21wbGV0
aW9uLmg+CisjaW5jbHVkZSA8a2pzL2ludGVycHJldGVyLmg+CisjaW5jbHVkZSA8cnVudGltZS9K
U0xvY2suaD4KKwordXNpbmcgbmFtZXNwYWNlIEpTQzsKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitXb3JrZXJTY3JpcHRDb250cm9sbGVyOjpXb3JrZXJTY3JpcHRDb250cm9sbGVyKFdvcmtlckNv
bnRleHQqIHdvcmtlckNvbnRleHQpCisgICAgOiBtX2dsb2JhbERhdGEoSlNHbG9iYWxEYXRhOjpj
cmVhdGUoKSkKKyAgICAsIG1fd29ya2VyQ29udGV4dCh3b3JrZXJDb250ZXh0KQoreworfQorCitX
b3JrZXJTY3JpcHRDb250cm9sbGVyOjp+V29ya2VyU2NyaXB0Q29udHJvbGxlcigpCit7CisgICAg
bV9qc1dvcmtlckNvbnRleHQgPSAwOworCisgICAgQVNTRVJUKCFtX2dsb2JhbERhdGEtPmhlYXAu
cHJvdGVjdGVkT2JqZWN0Q291bnQoKSk7CisgICAgQVNTRVJUKCFtX2dsb2JhbERhdGEtPmhlYXAu
aXNCdXN5KCkpOworICAgIG1fZ2xvYmFsRGF0YS0+aGVhcC5kZXN0cm95KCk7Cit9CisKK3ZvaWQg
V29ya2VyU2NyaXB0Q29udHJvbGxlcjo6aW5pdFNjcmlwdCgpCit7CisgICAgQVNTRVJUKCFtX2pz
V29ya2VyQ29udGV4dCk7CisKKyAgICBKU0xvY2sgbG9jayhmYWxzZSk7CisKKyAgICBtX2pzV29y
a2VyQ29udGV4dCA9IG5ldyAobV9nbG9iYWxEYXRhLmdldCgpKSBKU1dvcmtlckNvbnRleHQobV93
b3JrZXJDb250ZXh0KTsKK30KKworSlNWYWx1ZSogV29ya2VyU2NyaXB0Q29udHJvbGxlcjo6ZXZh
bHVhdGUoY29uc3QgU3RyaW5nJiBzb3VyY2VVUkwsIGludCBiYXNlTGluZSwgY29uc3QgU3RyaW5n
JiBjb2RlKQoreworICAgIEV4ZWNTdGF0ZSogZXhlYyA9IG1fanNXb3JrZXJDb250ZXh0LT5nbG9i
YWxFeGVjKCk7CisgICAgbV9qc1dvcmtlckNvbnRleHQtPnN0YXJ0VGltZW91dENoZWNrKCk7Cisg
ICAgQ29tcGxldGlvbiBjb21wID0gSW50ZXJwcmV0ZXI6OmV2YWx1YXRlKGV4ZWMsIGV4ZWMtPmR5
bmFtaWNHbG9iYWxPYmplY3QoKS0+Z2xvYmFsU2NvcGVDaGFpbigpLCBtYWtlU291cmNlKGNvZGUs
IHNvdXJjZVVSTCwgYmFzZUxpbmUpLCBtX2pzV29ya2VyQ29udGV4dCk7CisgICAgbV9qc1dvcmtl
ckNvbnRleHQtPnN0b3BUaW1lb3V0Q2hlY2soKTsKKworICAgIGlmIChjb21wLmNvbXBsVHlwZSgp
ID09IE5vcm1hbCB8fCBjb21wLmNvbXBsVHlwZSgpID09IFJldHVyblZhbHVlKQorICAgICAgICBy
ZXR1cm4gY29tcC52YWx1ZSgpOworCisgICAgaWYgKGNvbXAuY29tcGxUeXBlKCkgPT0gVGhyb3cp
CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXNcbiIsIGNvbXAudmFsdWUoKS0+dG9TdHJpbmco
ZXhlYykuYXNjaWkoKSk7CisgICAgcmV0dXJuIG5vVmFsdWUoKTsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFdPUktFUlMpCgpQcm9wZXJ0eSBjaGFuZ2Vz
IG9uOiBXZWJDb3JlL2JpbmRpbmdzL2pzL1dvcmtlclNjcmlwdENvbnRyb2xsZXIuY3BwCl9fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX18KTmFtZTogc3ZuOmVvbC1zdHlsZQogICArIG5hdGl2ZQoKSW5kZXg6IFdlYkNvcmUvYmlu
ZGluZ3MvanMvV29ya2VyU2NyaXB0Q29udHJvbGxlci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
YmluZGluZ3MvanMvV29ya2VyU2NyaXB0Q29udHJvbGxlci5oCShyZXZpc2lvbiAwKQorKysgV2Vi
Q29yZS9iaW5kaW5ncy9qcy9Xb3JrZXJTY3JpcHRDb250cm9sbGVyLmgJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsNzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwg
UmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqCisgKi8KKworI2lmbmRlZiBXb3JrZXJTY3JpcHRDb250cm9s
bGVyX2gKKyNkZWZpbmUgV29ya2VyU2NyaXB0Q29udHJvbGxlcl9oCisKKyNpZiBFTkFCTEUoV09S
S0VSUykKKworI2luY2x1ZGUgPGtqcy9wcm90ZWN0Lmg+CisKK25hbWVzcGFjZSBKU0MgeworICAg
IGNsYXNzIEpTR2xvYmFsRGF0YTsKKyAgICBjbGFzcyBKU1ZhbHVlOworfQorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKKyAgICBjbGFzcyBKU1dvcmtlckNvbnRleHQ7CisgICAgY2xhc3MgU3RyaW5n
OworICAgIGNsYXNzIFdvcmtlckNvbnRleHQ7CisKKyAgICBjbGFzcyBXb3JrZXJTY3JpcHRDb250
cm9sbGVyIHsKKyAgICBwdWJsaWM6CisgICAgICAgIFdvcmtlclNjcmlwdENvbnRyb2xsZXIoV29y
a2VyQ29udGV4dCopOworICAgICAgICB+V29ya2VyU2NyaXB0Q29udHJvbGxlcigpOworCisgICAg
ICAgIEpTV29ya2VyQ29udGV4dCoganNXb3JrZXJDb250ZXh0KCkKKyAgICAgICAgeworICAgICAg
ICAgICAgaW5pdFNjcmlwdElmTmVlZGVkKCk7CisgICAgICAgICAgICByZXR1cm4gbV9qc1dvcmtl
ckNvbnRleHQ7CisgICAgICAgIH0KKworICAgICAgICBKU0M6OkpTVmFsdWUqIGV2YWx1YXRlKGNv
bnN0IFN0cmluZyYgc291cmNlVVJMLCBpbnQgYmFzZUxpbmUsIGNvbnN0IFN0cmluZyYgY29kZSk7
CisKKyAgICBwcml2YXRlOgorICAgICAgICB2b2lkIGluaXRTY3JpcHRJZk5lZWRlZCgpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGlmICghbV93b3JrZXJDb250ZXh0KQorICAgICAgICAgICAgICAg
IGluaXRTY3JpcHQoKTsKKyAgICAgICAgfQorICAgICAgICB2b2lkIGluaXRTY3JpcHQoKTsKKwor
ICAgICAgICBSZWZQdHI8SlNDOjpKU0dsb2JhbERhdGE+IG1fZ2xvYmFsRGF0YTsKKyAgICAgICAg
V29ya2VyQ29udGV4dCogbV93b3JrZXJDb250ZXh0OworICAgICAgICBKU0M6OlByb3RlY3RlZFB0
cjxKU1dvcmtlckNvbnRleHQ+IG1fanNXb3JrZXJDb250ZXh0OworICAgIH07CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShXT1JLRVJTKQorCisjZW5kaWYgLy8g
V29ya2VyU2NyaXB0Q29udHJvbGxlcl9oCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBXZWJDb3JlL2Jp
bmRpbmdzL2pzL1dvcmtlclNjcmlwdENvbnRyb2xsZXIuaApfX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCk5hbWU6IHN2bjpl
b2wtc3R5bGUKICAgKyBuYXRpdmUKCkluZGV4OiBXZWJDb3JlL2RvbS9EZWRpY2F0ZWRXb3JrZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0RlZGljYXRlZFdvcmtlci5jcHAJKHJldmlz
aW9uIDM4MDk0KQorKysgV2ViQ29yZS9kb20vRGVkaWNhdGVkV29ya2VyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNDQsNiArNDQsNyBAQAogI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCiAjaW5j
bHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgogI2luY2x1ZGUgIlRpbWVyLmgiCisjaW5j
bHVkZSAiV29ya2VyVGhyZWFkLmgiCiAjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewpAQCAtMTEzLDYgKzExNCwxMCBAQCB2b2lkIERlZGljYXRlZFdvcmtl
cjo6cG9zdE1lc3NhZ2UoY29uc3QgCiAKIHZvaWQgRGVkaWNhdGVkV29ya2VyOjpzdGFydExvYWQo
KQogeworICAgIC8vIFRoZSBkb2N1bWVudCBtYXkgaGF2ZSBiZWVuIGRlc3Ryb3llZCBhbHJlYWR5
LgorICAgIGlmICghZG9jdW1lbnQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgbV9jYWNoZWRT
Y3JpcHQgPSBkb2N1bWVudCgpLT5kb2NMb2FkZXIoKS0+cmVxdWVzdFNjcmlwdChtX3NjcmlwdFVS
TCwgZG9jdW1lbnQoKS0+Y2hhcnNldCgpKTsKIAogICAgIGlmIChtX2NhY2hlZFNjcmlwdCkgewpA
QCAtMTMxLDcgKzEzNiw3IEBAIHZvaWQgRGVkaWNhdGVkV29ya2VyOjpub3RpZnlGaW5pc2hlZChD
YWMKICAgICAgICAgZGlzcGF0Y2hFcnJvckV2ZW50KCk7CiAgICAgICAgIHVuc2V0UGVuZGluZ0Fj
dGl2aXR5KHRoaXMpOwogICAgIH0gZWxzZSAgewotICAgICAgICAvLyBTdGFydCB0aGUgd29ya2Vy
IHRocmVhZC4KKyAgICAgICAgV29ya2VyVGhyZWFkOjpjcmVhdGUobV9zY3JpcHRVUkwsIG1fY2Fj
aGVkU2NyaXB0LT5zY3JpcHQoKSwgdGhpcyktPnN0YXJ0KCk7CiAgICAgfQogCiAgICAgbV9jYWNo
ZWRTY3JpcHQtPnJlbW92ZUNsaWVudCh0aGlzKTsKSW5kZXg6IFdlYkNvcmUvZG9tL1dvcmtlckNv
bnRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL1dvcmtlckNvbnRleHQuY3BwCShy
ZXZpc2lvbiAwKQorKysgV2ViQ29yZS9kb20vV29ya2VyQ29udGV4dC5jcHAJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsNjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBB
bGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisj
aWYgRU5BQkxFKFdPUktFUlMpCisKKyNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgorI2luY2x1
ZGUgIldvcmtlckNvbnRleHQuaCIKKyNpbmNsdWRlICJXb3JrZXJMb2NhdGlvbi5oIgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK1dvcmtlckNvbnRleHQ6OldvcmtlckNvbnRleHQoY29uc3QgS1VS
TCYgdXJsKQorICAgIDogbV91cmwodXJsKQorICAgICwgbV9sb2NhdGlvbihXb3JrZXJMb2NhdGlv
bjo6Y3JlYXRlKHVybCkpCisgICAgLCBtX3NlY3VyaXR5T3JpZ2luKFNlY3VyaXR5T3JpZ2luOjpj
cmVhdGUodXJsKSkKKyAgICAsIG1fc2NyaXB0KHRoaXMpCit7Cit9CisKK1dvcmtlckNvbnRleHQ6
On5Xb3JrZXJDb250ZXh0KCkKK3sKK30KKworY29uc3QgS1VSTCYgV29ya2VyQ29udGV4dDo6dmly
dHVhbFVSTCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fdXJsOworfQorCitLVVJMIFdvcmtlckNv
bnRleHQ6OmNvbXBsZXRlVVJMKGNvbnN0IFN0cmluZyYgdXJsKSBjb25zdAoreworICAgIC8vIEFs
d2F5cyByZXR1cm4gYSBudWxsIFVSTCB3aGVuIHBhc3NlZCBhIG51bGwgc3RyaW5nLgorICAgIC8v
IEZJWE1FOiBTaG91bGQgd2UgY2hhbmdlIHRoZSBLVVJMIGNvbnN0cnVjdG9yIHRvIGhhdmUgdGhp
cyBiZWhhdmlvcj8KKyAgICBpZiAodXJsLmlzTnVsbCgpKQorICAgICAgICByZXR1cm4gS1VSTCgp
OworICAgIC8vIEZJWE1FOiBkb2VzIHRoaXMgbmVlZCB0byBwcm92aWRlIGEgY2hhcnNldCwgbGlr
ZSBEb2N1bWVudDo6Y29tcGxldGVVUkwgZG9lcz8KKyAgICByZXR1cm4gS1VSTChtX2xvY2F0aW9u
LT51cmwoKSwgdXJsKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8g
RU5BQkxFKFdPUktFUlMpCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBXZWJDb3JlL2RvbS9Xb3JrZXJD
b250ZXh0LmNwcApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fCk5hbWU6IHN2bjplb2wtc3R5bGUKICAgKyBuYXRpdmUKCklu
ZGV4OiBXZWJDb3JlL2RvbS9Xb3JrZXJDb250ZXh0LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9k
b20vV29ya2VyQ29udGV4dC5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9kb20vV29ya2VyQ29u
dGV4dC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDg0IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDA4IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKgorICovCisKKyNpZm5k
ZWYgV29ya2VyQ29udGV4dF9oCisjZGVmaW5lIFdvcmtlckNvbnRleHRfaAorCisjaWYgRU5BQkxF
KFdPUktFUlMpCisKKyNpbmNsdWRlICJLVVJMLmgiCisjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9u
Q29udGV4dC5oIgorI2luY2x1ZGUgIldvcmtlclNjcmlwdENvbnRyb2xsZXIuaCIKKyNpbmNsdWRl
IDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVk
ZSA8d3RmL1JlZlB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyAgICBjbGFzcyBXb3Jr
ZXJMb2NhdGlvbjsKKworICAgIGNsYXNzIFdvcmtlckNvbnRleHQgOiBwdWJsaWMgUmVmQ291bnRl
ZDxXb3JrZXJDb250ZXh0PiwgcHVibGljIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQgeworICAgIHB1
YmxpYzoKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8V29ya2VyQ29udGV4dD4gY3JlYXRlKGNv
bnN0IEtVUkwmIHVybCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5l
dyBXb3JrZXJDb250ZXh0KHVybCkpOworICAgICAgICB9CisKKyAgICAgICAgfldvcmtlckNvbnRl
eHQoKTsKKworICAgICAgICB2aXJ0dWFsIGJvb2wgaXNXb3JrZXJDb250ZXh0KCkgY29uc3QgeyBy
ZXR1cm4gdHJ1ZTsgfQorCisgICAgICAgIGNvbnN0IEtVUkwmIHVybCgpIGNvbnN0IHsgcmV0dXJu
IG1fdXJsOyB9CisgICAgICAgIHZpcnR1YWwgS1VSTCBjb21wbGV0ZVVSTChjb25zdCBTdHJpbmcm
KSBjb25zdDsKKyAgICAgICAgdmlydHVhbCBTZWN1cml0eU9yaWdpbiogc2VjdXJpdHlPcmlnaW4o
KSBjb25zdCB7IHJldHVybiBtX3NlY3VyaXR5T3JpZ2luLmdldCgpOyB9CisKKyAgICAgICAgV29y
a2VyTG9jYXRpb24qIGxvY2F0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9sb2NhdGlvbi5nZXQoKTsg
fQorCisgICAgICAgIFdvcmtlclNjcmlwdENvbnRyb2xsZXIqIHNjcmlwdCgpIHsgcmV0dXJuICZt
X3NjcmlwdDsgfQorCisgICAgICAgIHVzaW5nIFJlZkNvdW50ZWQ8V29ya2VyQ29udGV4dD46OnJl
ZjsKKyAgICAgICAgdXNpbmcgUmVmQ291bnRlZDxXb3JrZXJDb250ZXh0Pjo6ZGVyZWY7CisKKyAg
ICBwcml2YXRlOgorICAgICAgICB2aXJ0dWFsIHZvaWQgcmVmU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCgpIHsgcmVmKCk7IH0KKyAgICAgICAgdmlydHVhbCB2b2lkIGRlcmVmU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCgpIHsgZGVyZWYoKTsgfQorCisgICAgICAgIFdvcmtlckNvbnRleHQoY29uc3QgS1VS
TCYgdXJsKTsKKworICAgICAgICB2aXJ0dWFsIGNvbnN0IEtVUkwmIHZpcnR1YWxVUkwoKSBjb25z
dDsKKworICAgICAgICBLVVJMIG1fdXJsOworICAgICAgICBSZWZQdHI8V29ya2VyTG9jYXRpb24+
IG1fbG9jYXRpb247CisgICAgICAgIFJlZlB0cjxTZWN1cml0eU9yaWdpbj4gbV9zZWN1cml0eU9y
aWdpbjsKKworICAgICAgICBXb3JrZXJTY3JpcHRDb250cm9sbGVyIG1fc2NyaXB0OworICAgIH07
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShXT1JLRVJTKQor
CisjZW5kaWYgLy8gV29ya2VyQ29udGV4dF9oCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBXZWJDb3Jl
L2RvbS9Xb3JrZXJDb250ZXh0LmgKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpOYW1lOiBzdm46ZW9sLXN0eWxlCiAgICsg
bmF0aXZlCgpJbmRleDogV2ViQ29yZS9kb20vV29ya2VyTG9jYXRpb24uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvZG9tL1dvcmtlckxvY2F0aW9uLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNv
cmUvZG9tL1dvcmtlckxvY2F0aW9uLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw4NSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01Q
VVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBV
VEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICoKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoV09SS0VSUykK
KworI2luY2x1ZGUgIldvcmtlckxvY2F0aW9uLmgiCisKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmlu
Zy5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1N0cmluZyBXb3JrZXJMb2NhdGlvbjo6aHJl
ZigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fdXJsLmhhc1BhdGgoKSA/IG1fdXJsLnByZXR0eVVS
TCgpIDogbV91cmwucHJldHR5VVJMKCkgKyAiLyI7Cit9CisKK1N0cmluZyBXb3JrZXJMb2NhdGlv
bjo6cHJvdG9jb2woKSBjb25zdAoreworICAgIHJldHVybiBtX3VybC5wcm90b2NvbCgpICsgIjoi
OworfQorCitTdHJpbmcgV29ya2VyTG9jYXRpb246Omhvc3QoKSBjb25zdAoreworICAgIHJldHVy
biBtX3VybC5wb3J0KCkgPyBtX3VybC5ob3N0KCkgKyAiOiIgKyBTdHJpbmc6Om51bWJlcigoc3Rh
dGljX2Nhc3Q8aW50PihtX3VybC5wb3J0KCkpKSkgOiBtX3VybC5ob3N0KCk7Cit9CisKK1N0cmlu
ZyBXb3JrZXJMb2NhdGlvbjo6aG9zdG5hbWUoKSBjb25zdAoreworICAgIHJldHVybiBtX3VybC5o
b3N0KCk7Cit9CisKK1N0cmluZyBXb3JrZXJMb2NhdGlvbjo6cG9ydCgpIGNvbnN0Cit7CisgICAg
cmV0dXJuIG1fdXJsLnBvcnQoKSA/IFN0cmluZzo6bnVtYmVyKHN0YXRpY19jYXN0PGludD4obV91
cmwucG9ydCgpKSkgOiAiIjsKK30KKworU3RyaW5nIFdvcmtlckxvY2F0aW9uOjpwYXRobmFtZSgp
IGNvbnN0Cit7CisgICAgcmV0dXJuIG1fdXJsLnBhdGgoKS5pc0VtcHR5KCkgPyAiLyIgOiBtX3Vy
bC5wYXRoKCk7Cit9CisKK1N0cmluZyBXb3JrZXJMb2NhdGlvbjo6c2VhcmNoKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gbV91cmwucXVlcnkoKTsKK30KKworU3RyaW5nIFdvcmtlckxvY2F0aW9uOjpo
YXNoKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV91cmwucmVmKCkuaXNOdWxsKCkgPyAiIiA6ICIj
IiArIG1fdXJsLnJlZigpOworfQorCitTdHJpbmcgV29ya2VyTG9jYXRpb246OnRvU3RyaW5nKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gbV91cmwuaGFzUGF0aCgpID8gbV91cmwucHJldHR5VVJMKCkg
OiBtX3VybC5wcmV0dHlVUkwoKSArICIvIjsKK30KKworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CisKKyNlbmRpZiAvLyBFTkFCTEUoV09SS0VSUykKClByb3BlcnR5IGNoYW5nZXMgb246IFdlYkNv
cmUvZG9tL1dvcmtlckxvY2F0aW9uLmNwcApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCk5hbWU6IHN2bjplb2wtc3R5bGUK
ICAgKyBuYXRpdmUKCkluZGV4OiBXZWJDb3JlL2RvbS9Xb3JrZXJMb2NhdGlvbi5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvZG9tL1dvcmtlckxvY2F0aW9uLmgJKHJldmlzaW9uIDApCisrKyBXZWJD
b3JlL2RvbS9Xb3JrZXJMb2NhdGlvbi5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDczIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBV
VEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVU
RVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKgorICovCisKKyNpZm5kZWYgV29ya2VyTG9jYXRpb25faAorI2RlZmluZSBXb3JrZXJMb2Nh
dGlvbl9oCisKKyNpZiBFTkFCTEUoV09SS0VSUykKKworI2luY2x1ZGUgIktVUkwuaCIKKyNpbmNs
dWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5j
bHVkZSA8d3RmL1JlZlB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyAgICBjbGFzcyBT
dHJpbmc7CisKKyAgICBjbGFzcyBXb3JrZXJMb2NhdGlvbiA6IHB1YmxpYyBSZWZDb3VudGVkPFdv
cmtlckxvY2F0aW9uPiB7CisgICAgcHVibGljOgorICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxX
b3JrZXJMb2NhdGlvbj4gY3JlYXRlKGNvbnN0IEtVUkwmIHVybCkKKyAgICAgICAgeworICAgICAg
ICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBXb3JrZXJMb2NhdGlvbih1cmwpKTsKKyAgICAgICAg
fQorCisgICAgICAgIGNvbnN0IEtVUkwmIHVybCgpIGNvbnN0IHsgcmV0dXJuIG1fdXJsOyB9CisK
KyAgICAgICAgU3RyaW5nIGhyZWYoKSBjb25zdDsKKworICAgICAgICAvLyBVUkkgZGVjb21wb3Np
dGlvbiBhdHRyaWJ1dGVzCisgICAgICAgIFN0cmluZyBwcm90b2NvbCgpIGNvbnN0OworICAgICAg
ICBTdHJpbmcgaG9zdCgpIGNvbnN0OworICAgICAgICBTdHJpbmcgaG9zdG5hbWUoKSBjb25zdDsK
KyAgICAgICAgU3RyaW5nIHBvcnQoKSBjb25zdDsKKyAgICAgICAgU3RyaW5nIHBhdGhuYW1lKCkg
Y29uc3Q7CisgICAgICAgIFN0cmluZyBzZWFyY2goKSBjb25zdDsKKyAgICAgICAgU3RyaW5nIGhh
c2goKSBjb25zdDsKKworICAgICAgICBTdHJpbmcgdG9TdHJpbmcoKSBjb25zdDsKKworICAgIHBy
aXZhdGU6CisgICAgICAgIFdvcmtlckxvY2F0aW9uKGNvbnN0IEtVUkwmIHVybCkgOiBtX3VybCh1
cmwpIHt9CisKKyAgICAgICAgS1VSTCBtX3VybDsKKyAgICB9OworCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoV09SS0VSUykKKworI2VuZGlmIC8vIFdvcmtlckxv
Y2F0aW9uX2gKClByb3BlcnR5IGNoYW5nZXMgb246IFdlYkNvcmUvZG9tL1dvcmtlckxvY2F0aW9u
LmgKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fXwpOYW1lOiBzdm46ZW9sLXN0eWxlCiAgICsgbmF0aXZlCgpJbmRleDogV2Vi
Q29yZS9kb20vV29ya2VyTG9jYXRpb24uaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL1dv
cmtlckxvY2F0aW9uLmlkbAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvZG9tL1dvcmtlckxvY2F0
aW9uLmlkbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0OCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAwOCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4gCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4gCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFw
cGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVz
ZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRo
aXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIAor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklC
VVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKK21vZHVsZSB0aHJlYWRz
IHsKKworICAgIGludGVyZmFjZSBbCisgICAgICAgIENvbmRpdGlvbmFsPVdPUktFUlMsCisgICAg
ICAgIEdlbmVyYXRlQ29uc3RydWN0b3IsCisgICAgICAgIE5vU3RhdGljVGFibGVzCisgICAgXSBX
b3JrZXJMb2NhdGlvbiB7CisgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01TdHJpbmcgaHJl
ZjsKKyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIERPTVN0cmluZyBwcm90b2NvbDsKKyAgICAg
ICAgcmVhZG9ubHkgYXR0cmlidXRlIERPTVN0cmluZyBob3N0OworICAgICAgICByZWFkb25seSBh
dHRyaWJ1dGUgRE9NU3RyaW5nIGhvc3RuYW1lOworICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUg
RE9NU3RyaW5nIHBvcnQ7CisgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01TdHJpbmcgcGF0
aG5hbWU7CisgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01TdHJpbmcgc2VhcmNoOworICAg
ICAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9NU3RyaW5nIGhhc2g7CisKKyAgICAgICAgW0RvbnRF
bnVtXSBET01TdHJpbmcgdG9TdHJpbmcoKTsKKyAgICB9OworCit9CkluZGV4OiBXZWJDb3JlL2Rv
bS9Xb3JrZXJUaHJlYWQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL1dvcmtlclRocmVh
ZC5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL2RvbS9Xb3JrZXJUaHJlYWQuY3BwCShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDc5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxl
IEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKworI2lmIEVOQUJMRShXT1JLRVJTKQorCisjaW5jbHVkZSAiV29ya2VyVGhyZWFkLmgiCisK
KyNpbmNsdWRlICJEZWRpY2F0ZWRXb3JrZXIuaCIKKyNpbmNsdWRlICJKU1dvcmtlckNvbnRleHQu
aCIKKyNpbmNsdWRlICJXb3JrZXJDb250ZXh0LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
V29ya2VyVGhyZWFkOjpXb3JrZXJUaHJlYWQoY29uc3QgS1VSTCYgc2NyaXB0VVJMLCBjb25zdCBT
dHJpbmcmIHNvdXJjZUNvZGUsIFBhc3NSZWZQdHI8RGVkaWNhdGVkV29ya2VyPiB3b3JrZXJPYmpl
Y3QpCisgICAgOiBtX3RocmVhZElEKDApCisgICAgLCBtX3NjcmlwdFVSTChzY3JpcHRVUkwuc3Ry
aW5nKCkuY29weSgpKQorICAgICwgbV9zb3VyY2VDb2RlKHNvdXJjZUNvZGUuY29weSgpKQorICAg
ICwgbV93b3JrZXJPYmplY3Qod29ya2VyT2JqZWN0KQoreworfQorCitib29sIFdvcmtlclRocmVh
ZDo6c3RhcnQoKQoreworICAgIGlmIChtX3RocmVhZElEKQorICAgICAgICByZXR1cm4gdHJ1ZTsK
KworICAgIHJlZigpOworICAgIG1fdGhyZWFkSUQgPSBjcmVhdGVUaHJlYWQoV29ya2VyVGhyZWFk
Ojp3b3JrZXJUaHJlYWRTdGFydCwgdGhpcywgIldlYkNvcmU6OldvcmtlciIpOworCisgICAgcmV0
dXJuIG1fdGhyZWFkSUQ7Cit9CisKK3ZvaWQqIFdvcmtlclRocmVhZDo6d29ya2VyVGhyZWFkU3Rh
cnQodm9pZCogdGhyZWFkKQoreworICAgIHJldHVybiBzdGF0aWNfY2FzdDxXb3JrZXJUaHJlYWQq
Pih0aHJlYWQpLT53b3JrZXJUaHJlYWQoKTsKK30KKwordm9pZCogV29ya2VyVGhyZWFkOjp3b3Jr
ZXJUaHJlYWQoKQoreworICAgIFJlZlB0cjxXb3JrZXJDb250ZXh0PiB3b3JrZXJDb250ZXh0ID0g
V29ya2VyQ29udGV4dDo6Y3JlYXRlKEtVUkwobV9zY3JpcHRVUkwpKTsKKyAgICBXb3JrZXJTY3Jp
cHRDb250cm9sbGVyKiBzY3JpcHQgPSB3b3JrZXJDb250ZXh0LT5zY3JpcHQoKTsKKworICAgIC8v
IFRoaXMgaXMgdGVtcG9yYXJ5IGNvZGUgZm9yIHRlc3RpbmcuIFRoZSB0aHJlYWQgd2lsbCBydW4g
YSBtZXNzYWdlIGxvb3AuCisgICAgc2NyaXB0LT5ldmFsdWF0ZShtX3NjcmlwdFVSTCwgMSwgbV9z
b3VyY2VDb2RlKTsKKworICAgIHdvcmtlckNvbnRleHQgPSAwOworCisgICAgZGVyZWYoKTsKKyAg
ICByZXR1cm4gMDsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5B
QkxFKFdPUktFUlMpCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBXZWJDb3JlL2RvbS9Xb3JrZXJUaHJl
YWQuY3BwCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX18KTmFtZTogc3ZuOmVvbC1zdHlsZQogICArIG5hdGl2ZQoKSW5kZXg6
IFdlYkNvcmUvZG9tL1dvcmtlclRocmVhZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL1dv
cmtlclRocmVhZC5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9kb20vV29ya2VyVGhyZWFkLmgJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgg
QXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqCisgKi8KKworI2lmbmRlZiBXb3Jr
ZXJUaHJlYWRfaAorI2RlZmluZSBXb3JrZXJUaHJlYWRfaAorCisjaWYgRU5BQkxFKFdPUktFUlMp
CisKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRy
Lmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
KyAgICBjbGFzcyBEZWRpY2F0ZWRXb3JrZXI7CisgICAgY2xhc3MgS1VSTDsKKworICAgIGNsYXNz
IFdvcmtlclRocmVhZCA6IHB1YmxpYyBUaHJlYWRTYWZlU2hhcmVkPFdvcmtlclRocmVhZD4gewor
ICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8V29ya2VyVGhyZWFkPiBjcmVh
dGUoY29uc3QgS1VSTCYgc2NyaXB0VVJMLCBjb25zdCBTdHJpbmcmIHNvdXJjZUNvZGUsIFBhc3NS
ZWZQdHI8RGVkaWNhdGVkV29ya2VyPiB3b3JrZXJPYmplY3QpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHJldHVybiBhZG9wdFJlZihuZXcgV29ya2VyVGhyZWFkKHNjcmlwdFVSTCwgc291cmNlQ29k
ZSwgd29ya2VyT2JqZWN0KSk7CisgICAgICAgIH0KKworICAgICAgICBib29sIHN0YXJ0KCk7CisK
KyAgICBwcml2YXRlOgorICAgICAgICBXb3JrZXJUaHJlYWQoY29uc3QgS1VSTCYsIGNvbnN0IFN0
cmluZyYgc291cmNlQ29kZSwgUGFzc1JlZlB0cjxEZWRpY2F0ZWRXb3JrZXI+KTsKKworICAgICAg
ICBzdGF0aWMgdm9pZCogd29ya2VyVGhyZWFkU3RhcnQodm9pZCopOworICAgICAgICB2b2lkKiB3
b3JrZXJUaHJlYWQoKTsKKworICAgICAgICBUaHJlYWRJZGVudGlmaWVyIG1fdGhyZWFkSUQ7CisK
KyAgICAgICAgU3RyaW5nIG1fc2NyaXB0VVJMOworICAgICAgICBTdHJpbmcgbV9zb3VyY2VDb2Rl
OworICAgICAgICBSZWZQdHI8RGVkaWNhdGVkV29ya2VyPiBtX3dvcmtlck9iamVjdDsKKyAgICB9
OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoV09SS0VSUykK
KworI2VuZGlmIC8vIFdvcmtlclRocmVhZF9oCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBXZWJDb3Jl
L2RvbS9Xb3JrZXJUaHJlYWQuaApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCk5hbWU6IHN2bjplb2wtc3R5bGUKICAgKyBu
YXRpdmUKCg==
</data>
<flag name="review"
          id="11411"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>