<?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>60842</bug_id>
          
          <creation_ts>2011-05-14 12:46:13 -0700</creation_ts>
          <short_desc>[Qt] Qt bridge bindings should be rewritten using JSC API</short_desc>
          <delta_ts>2014-02-03 02:32:39 -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>WebKit Qt</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>Qt, QtTriaged</keywords>
          <priority>P1</priority>
          <bug_severity>Major</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>62330</dependson>
    
    <dependson>88161</dependson>
    
    <dependson>93462</dependson>
    
    <dependson>93463</dependson>
    
    <dependson>93476</dependson>
    
    <dependson>93649</dependson>
    
    <dependson>93716</dependson>
    
    <dependson>93720</dependson>
    
    <dependson>93868</dependson>
    
    <dependson>93872</dependson>
    
    <dependson>93880</dependson>
    
    <dependson>93889</dependson>
    
    <dependson>93897</dependson>
    
    <dependson>94695</dependson>
    
    <dependson>94702</dependson>
    
    <dependson>95325</dependson>
    
    <dependson>95570</dependson>
          <blocked>94691</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Oliver Hunt">oliver</reporter>
          <assigned_to name="Simon Hausmann">hausmann</assigned_to>
          <cc>agbakken</cc>
    
    <cc>allan.jensen</cc>
    
    <cc>ararunprasad</cc>
    
    <cc>arurajku</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>cshu</cc>
    
    <cc>girish</cc>
    
    <cc>hausmann</cc>
    
    <cc>kent.hansen</cc>
    
    <cc>lars.knoll</cc>
    
    <cc>laszlo.gombos</cc>
    
    <cc>loki</cc>
    
    <cc>luiz</cc>
    
    <cc>noam</cc>
    
    <cc>oliver</cc>
    
    <cc>ossy</cc>
    
    <cc>pvarga</cc>
    
    <cc>yael</cc>
    
    <cc>zherczeg</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>404092</commentid>
    <comment_count>0</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2011-05-14 12:46:13 -0700</bug_when>
    <thetext>The Qt bridge bindings are a frequent source of pain and frustration for those of us working on the actual engine as they aren&apos;t obviously maintained and no one seems to claim any real ownership of them.  For this reason they should be rewritten using the JSC API and so be protected from underlying changes in JSC.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>404168</commentid>
    <comment_count>1</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2011-05-15 07:46:02 -0700</bug_when>
    <thetext>I&apos;m trying to see how feasible it is and what we&apos;d need to change in the API.
So far it seems the main missing part is being able to access internal types that are known to WebCore, like ByteArray or HTMLElement.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>404381</commentid>
    <comment_count>2</comment_count>
    <who name="Zoltan Herczeg">zherczeg</who>
    <bug_when>2011-05-16 02:32:45 -0700</bug_when>
    <thetext>I have already fixed several bugs in the bridge/qt, and in my experience the changes in the GC mechanism affects badly this code, like all the others in the bridge directory. I am thinking now what could be done here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>407783</commentid>
    <comment_count>3</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2011-05-22 23:50:25 -0700</bug_when>
    <thetext>*** Bug 39746 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>407791</commentid>
    <comment_count>4</comment_count>
      <attachid>94377</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2011-05-23 00:47:33 -0700</bug_when>
    <thetext>Created attachment 94377
WIP patch

This patch still needs lots of work, but it covers the basics.
Still doesn&apos;t work:
1. __qt_sender__ (the code is there, but crashes...)
2. ScriptOwnership
3. deleting properties

It also doesn&apos;t pass the style tests and other things but I wanted people to see where things stand.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>407994</commentid>
    <comment_count>5</comment_count>
      <attachid>94377</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2011-05-23 08:55:21 -0700</bug_when>
    <thetext>Comment on attachment 94377
WIP patch

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

There are a lot of changes that i don&apos;t understand in this patch.  All that should be necessary is to change how your runtime classes are defined, everything else should &quot;just work&quot;.

&gt; Source/JavaScriptCore/API/JSObjectRef.cpp:37
&gt;  #include &quot;APICast.h&quot;
&gt;  #include &quot;CodeBlock.h&quot;
&gt;  #include &quot;DateConstructor.h&quot;
&gt; +#include &quot;DateInstance.h&quot;
&gt;  #include &quot;ErrorConstructor.h&quot;
&gt;  #include &quot;FunctionConstructor.h&quot;
&gt;  #include &quot;Identifier.h&quot;

Why this change?

&gt; Source/JavaScriptCore/API/JSObjectRef.cpp:218
&gt; -    
&gt; +

Remove this

&gt; Source/JavaScriptCore/API/JSObjectRef.h:365
&gt; -} JSClassDefinition;
&gt; +}   JSClassDefinition;
&gt;  

Don&apos;t change our API headers unless you have absolutely no choice.

&gt; Source/JavaScriptCore/API/JSObjectRef.h:468
&gt; +

Again don&apos;t change the API headers

&gt; Source/JavaScriptCore/API/JSValueRef.cpp:88
&gt; +bool JSValueIsNaN(JSContextRef ctx, JSValueRef value)
&gt; +{
&gt; +    ExecState* exec = toJS(ctx);
&gt; +    APIEntryShim entryShim(exec);
&gt; +
&gt; +    JSValue jsValue = toJS(exec, value);
&gt; +
&gt; +    return jsValue == jsNaN();
&gt; +}
&gt; +

This function it potentially broken in the presence of denormalised nan&apos;s.

&gt; Source/JavaScriptCore/API/JSValueRef.h:87
&gt; +@abstract       Tests whether a JavaScript value&apos;s type is the undefined type.
&gt; +@param ctx  The execution context to use.
&gt; +@param value    The JSValue to test.
&gt; +@result         true if value&apos;s type is the undefined type, otherwise false.
&gt; +*/
&gt; +JS_EXPORT bool JSValueIsNaN(JSContextRef ctx, JSValueRef value);
&gt; +
&gt; +/*!
&gt; +@function

You cannot add API without review, and this function is unnecessary, so isn&apos;t going to pass muster.

JSValueIsNumber(), JSValueToNumber() and isnan will do the required checks.

&gt; Source/WebCore/bindings/js/JSPluginElementFunctions.cpp:96
&gt; +    // Then, we check if the
&gt; +    if (JSObject* scriptObject = pluginElement-&gt;getScriptObject())
&gt; +        return scriptObject;
&gt; +

This change seems unrelated

&gt; Source/WebCore/bindings/js/ScriptControllerQt.cpp:-51
&gt; -PassRefPtr&lt;JSC::Bindings::Instance&gt; ScriptController::createScriptInstanceForWidget(WebCore::Widget* widget)
&gt; +JSC::JSObject* ScriptController::createScriptObjectForWidget(Widget* widget)
&gt;  {
&gt; -    if (widget-&gt;isPluginView()) {

I don&apos;t get why all these changes are necessary.  All the this patch should need is for your current JSCell subclasses to switch over to the API for their construction.  So these entirely new functions should not be too necessary.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>408079</commentid>
    <comment_count>6</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2011-05-23 11:00:51 -0700</bug_when>
    <thetext>Why are you spending your time reviewing this?
I haven&apos;t put an r? on it and made clear that this is WIP and needs a lot of more work.
I&apos;ve put it up so that people can track what&apos;s being done.
For now it includes some API changes that of course I&apos;d review separately.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>685225</commentid>
    <comment_count>7</comment_count>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2012-08-02 04:54:36 -0700</bug_when>
    <thetext>I&apos;m working on this and am maintaining a work-in-progress patch set at https://github.com/tronical/webkit/commits/jsc-runtime . I&apos;ll create sub-tasks once I&apos;m ready for inclusion to trunk. I&apos;m doing the changes only for the Qt 5 code path, so I&apos;m making this bug depend on bug #88161</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>974978</commentid>
    <comment_count>8</comment_count>
    <who name="Allan Sandfeld Jensen">allan.jensen</who>
    <bug_when>2014-02-03 02:32:39 -0800</bug_when>
    <thetext>Mostly fixed, out of scope anyway.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>94377</attachid>
            <date>2011-05-23 00:47:33 -0700</date>
            <delta_ts>2011-05-23 08:55:21 -0700</delta_ts>
            <desc>WIP patch</desc>
            <filename>patch.diff</filename>
            <type>text/plain</type>
            <size>184307</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNPYmplY3RSZWYuY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU09iamVjdFJlZi5jcHAKaW5kZXggMmRmMDEwYS4u
YTJjODI4ZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU09iamVjdFJl
Zi5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU09iamVjdFJlZi5jcHAKQEAg
LTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJBUElDYXN0LmgiCiAjaW5jbHVkZSAiQ29kZUJsb2Nr
LmgiCiAjaW5jbHVkZSAiRGF0ZUNvbnN0cnVjdG9yLmgiCisjaW5jbHVkZSAiRGF0ZUluc3RhbmNl
LmgiCiAjaW5jbHVkZSAiRXJyb3JDb25zdHJ1Y3Rvci5oIgogI2luY2x1ZGUgIkZ1bmN0aW9uQ29u
c3RydWN0b3IuaCIKICNpbmNsdWRlICJJZGVudGlmaWVyLmgiCkBAIC0yMTQsNyArMjE1LDcgQEAg
SlNPYmplY3RSZWYgSlNPYmplY3RNYWtlUmVnRXhwKEpTQ29udGV4dFJlZiBjdHgsIHNpemVfdCBh
cmd1bWVudENvdW50LCBjb25zdCBKU1YKICAgICAgICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsK
ICAgICAgICAgcmVzdWx0ID0gMDsKICAgICB9Ci0gICAgCisKICAgICByZXR1cm4gdG9SZWYocmVz
dWx0KTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU09iamVj
dFJlZi5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU09iamVjdFJlZi5oCmluZGV4IDNl
OGIwZWIuLjZjYTFhMWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNP
YmplY3RSZWYuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTT2JqZWN0UmVmLmgK
QEAgLTM2MSw3ICszNjEsNyBAQCB0eXBlZGVmIHN0cnVjdCB7CiAgICAgSlNPYmplY3RDYWxsQXND
b25zdHJ1Y3RvckNhbGxiYWNrICAgY2FsbEFzQ29uc3RydWN0b3I7CiAgICAgSlNPYmplY3RIYXNJ
bnN0YW5jZUNhbGxiYWNrICAgICAgICAgaGFzSW5zdGFuY2U7CiAgICAgSlNPYmplY3RDb252ZXJ0
VG9UeXBlQ2FsbGJhY2sgICAgICAgY29udmVydFRvVHlwZTsKLX0gSlNDbGFzc0RlZmluaXRpb247
Cit9ICAgSlNDbGFzc0RlZmluaXRpb247CiAKIC8qISAKIEBjb25zdCBrSlNDbGFzc0RlZmluaXRp
b25FbXB0eSAKQEAgLTQ2NSw2ICs0NjUsNyBAQCBKU19FWFBPUlQgSlNPYmplY3RSZWYgSlNPYmpl
Y3RNYWtlRGF0ZShKU0NvbnRleHRSZWYgY3R4LCBzaXplX3QgYXJndW1lbnRDb3VudCwgYwogICov
CiBKU19FWFBPUlQgSlNPYmplY3RSZWYgSlNPYmplY3RNYWtlRXJyb3IoSlNDb250ZXh0UmVmIGN0
eCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpT
VmFsdWVSZWYqIGV4Y2VwdGlvbikgQVZBSUxBQkxFX0lOX1dFQktJVF9WRVJTSU9OXzRfMDsKIAor
CiAvKiEKICBAZnVuY3Rpb24KICBAYWJzdHJhY3QgQ3JlYXRlcyBhIEphdmFTY3JpcHQgUmVnRXhw
IG9iamVjdCwgYXMgaWYgYnkgaW52b2tpbmcgdGhlIGJ1aWx0LWluIFJlZ0V4cCBjb25zdHJ1Y3Rv
ci4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNWYWx1ZVJlZi5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTVmFsdWVSZWYuY3BwCmluZGV4IGUyNjI2YmUu
Ljc2ZTU5YTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNWYWx1ZVJl
Zi5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1ZhbHVlUmVmLmNwcApAQCAt
NzYsNiArNzYsMTYgQEAgYm9vbCBKU1ZhbHVlSXNVbmRlZmluZWQoSlNDb250ZXh0UmVmIGN0eCwg
SlNWYWx1ZVJlZiB2YWx1ZSkKICAgICByZXR1cm4ganNWYWx1ZS5pc1VuZGVmaW5lZCgpOwogfQog
Citib29sIEpTVmFsdWVJc05hTihKU0NvbnRleHRSZWYgY3R4LCBKU1ZhbHVlUmVmIHZhbHVlKQor
eworICAgIEV4ZWNTdGF0ZSogZXhlYyA9IHRvSlMoY3R4KTsKKyAgICBBUElFbnRyeVNoaW0gZW50
cnlTaGltKGV4ZWMpOworCisgICAgSlNWYWx1ZSBqc1ZhbHVlID0gdG9KUyhleGVjLCB2YWx1ZSk7
CisKKyAgICByZXR1cm4ganNWYWx1ZSA9PSBqc05hTigpOworfQorCiBib29sIEpTVmFsdWVJc051
bGwoSlNDb250ZXh0UmVmIGN0eCwgSlNWYWx1ZVJlZiB2YWx1ZSkKIHsKICAgICBFeGVjU3RhdGUq
IGV4ZWMgPSB0b0pTKGN0eCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJ
L0pTVmFsdWVSZWYuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNWYWx1ZVJlZi5oCmlu
ZGV4IDQxODZkYjguLmM1N2ViNzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9B
UEkvSlNWYWx1ZVJlZi5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNWYWx1ZVJl
Zi5oCkBAIC03Niw2ICs3NiwxNSBAQCBKU19FWFBPUlQgYm9vbCBKU1ZhbHVlSXNVbmRlZmluZWQo
SlNDb250ZXh0UmVmIGN0eCwgSlNWYWx1ZVJlZiB2YWx1ZSk7CiAKIC8qIQogQGZ1bmN0aW9uCitA
YWJzdHJhY3QgICAgICAgVGVzdHMgd2hldGhlciBhIEphdmFTY3JpcHQgdmFsdWUncyB0eXBlIGlz
IHRoZSB1bmRlZmluZWQgdHlwZS4KK0BwYXJhbSBjdHggIFRoZSBleGVjdXRpb24gY29udGV4dCB0
byB1c2UuCitAcGFyYW0gdmFsdWUgICAgVGhlIEpTVmFsdWUgdG8gdGVzdC4KK0ByZXN1bHQgICAg
ICAgICB0cnVlIGlmIHZhbHVlJ3MgdHlwZSBpcyB0aGUgdW5kZWZpbmVkIHR5cGUsIG90aGVyd2lz
ZSBmYWxzZS4KKyovCitKU19FWFBPUlQgYm9vbCBKU1ZhbHVlSXNOYU4oSlNDb250ZXh0UmVmIGN0
eCwgSlNWYWx1ZVJlZiB2YWx1ZSk7CisKKy8qIQorQGZ1bmN0aW9uCiBAYWJzdHJhY3QgICAgICAg
VGVzdHMgd2hldGhlciBhIEphdmFTY3JpcHQgdmFsdWUncyB0eXBlIGlzIHRoZSBudWxsIHR5cGUu
CiBAcGFyYW0gY3R4ICBUaGUgZXhlY3V0aW9uIGNvbnRleHQgdG8gdXNlLgogQHBhcmFtIHZhbHVl
ICAgIFRoZSBKU1ZhbHVlIHRvIHRlc3QuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU1BsdWdpbkVsZW1lbnRGdW5jdGlvbnMuY3BwIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNQbHVnaW5FbGVtZW50RnVuY3Rpb25zLmNwcAppbmRleCAyNmJiMDVkLi5hYWQx
NmEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1BsdWdpbkVsZW1l
bnRGdW5jdGlvbnMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUGx1Z2lu
RWxlbWVudEZ1bmN0aW9ucy5jcHAKQEAgLTkwLDYgKzkwLDEwIEBAIEpTT2JqZWN0KiBwbHVnaW5T
Y3JpcHRPYmplY3QoRXhlY1N0YXRlKiBleGVjLCBKU0hUTUxFbGVtZW50KiBqc0hUTUxFbGVtZW50
KQogICAgIGlmIChKU09iamVjdCogc2NyaXB0T2JqZWN0ID0gcGx1Z2luU2NyaXB0T2JqZWN0RnJv
bVBsdWdpblZpZXdCYXNlKHBsdWdpbkVsZW1lbnQsIGpzSFRNTEVsZW1lbnQtPmdsb2JhbE9iamVj
dCgpKSkKICAgICAgICAgcmV0dXJuIHNjcmlwdE9iamVjdDsKIAorICAgIC8vIFRoZW4sIHdlIGNo
ZWNrIGlmIHRoZQorICAgIGlmIChKU09iamVjdCogc2NyaXB0T2JqZWN0ID0gcGx1Z2luRWxlbWVu
dC0+Z2V0U2NyaXB0T2JqZWN0KCkpCisgICAgICAgIHJldHVybiBzY3JpcHRPYmplY3Q7CisKICAg
ICAvLyBPdGhlcndpc2UsIGZhbGwgYmFjayB0byBnZXR0aW5nIHRoZSBvYmplY3QgZnJvbSB0aGUg
aW5zdGFuY2UuCiAKICAgICAvLyBUaGUgcGx1Z2luIGVsZW1lbnQgaG9sZHMgYW4gb3duaW5nIHJl
ZmVyZW5jZSwgc28gd2UgZG9uJ3QgaGF2ZSB0by4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL1NjcmlwdENvbnRyb2xsZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL1NjcmlwdENvbnRyb2xsZXIuaAppbmRleCAxYWMwOTYzLi5jODFkOTBiIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVyLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxlci5oCkBAIC00NCw2ICs0NCw3
IEBAIHN0cnVjdCBOUE9iamVjdDsKIAogbmFtZXNwYWNlIEpTQyB7CiAgICAgY2xhc3MgSlNHbG9i
YWxPYmplY3Q7CisgICAgY2xhc3MgSlNPYmplY3Q7CiAKICAgICBuYW1lc3BhY2UgQmluZGluZ3Mg
ewogICAgICAgICBjbGFzcyBSb290T2JqZWN0OwpAQCAtMTQ1LDYgKzE0Niw3IEBAIHB1YmxpYzoK
ICAgICB2b2lkIHVwZGF0ZVBsYXRmb3JtU2NyaXB0T2JqZWN0cygpOwogCiAgICAgUGFzc1Njcmlw
dEluc3RhbmNlIGNyZWF0ZVNjcmlwdEluc3RhbmNlRm9yV2lkZ2V0KFdpZGdldCopOworICAgIEpT
Qzo6SlNPYmplY3QqIGNyZWF0ZVNjcmlwdE9iamVjdEZvcldpZGdldChXaWRnZXQqKTsKICAgICBK
U0M6OkJpbmRpbmdzOjpSb290T2JqZWN0KiBiaW5kaW5nUm9vdE9iamVjdCgpOwogICAgIEpTQzo6
QmluZGluZ3M6OlJvb3RPYmplY3QqIGNhY2hlYWJsZUJpbmRpbmdSb290T2JqZWN0KCk7CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdENvbnRyb2xsZXJRdC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVyUXQuY3BwCmlu
ZGV4IGE4Y2RmOWQuLmI3ZmNiZjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL1NjcmlwdENvbnRyb2xsZXJRdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvU2NyaXB0Q29udHJvbGxlclF0LmNwcApAQCAtMzYsMzIgKzM2LDM1IEBACiAjaW5jbHVkZSAi
Y29uZmlnLmgiCiAjaW5jbHVkZSAiU2NyaXB0Q29udHJvbGxlci5oIgogCisjaW5jbHVkZSAiQVBJ
Q2FzdC5oIgogI2luY2x1ZGUgIkJyaWRnZUpTQy5oIgogI2luY2x1ZGUgIkRPTVdpbmRvdy5oIgor
I2luY2x1ZGUgIkphdmFTY3JpcHQuaCIKICNpbmNsdWRlICJQbHVnaW5WaWV3LmgiCi0jaW5jbHVk
ZSAicXRfaW5zdGFuY2UuaCIKICNpbmNsdWRlICJydW50aW1lX3Jvb3QuaCIKLQorI2luY2x1ZGUg
IkpTR2xvYmFsT2JqZWN0LmgiCiAjaW5jbHVkZSA8UVdpZGdldD4KKyNpbmNsdWRlICJxdF9jbGFz
cy5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVBhc3NSZWZQdHI8SlNDOjpCaW5kaW5nczo6
SW5zdGFuY2U+IFNjcmlwdENvbnRyb2xsZXI6OmNyZWF0ZVNjcmlwdEluc3RhbmNlRm9yV2lkZ2V0
KFdlYkNvcmU6OldpZGdldCogd2lkZ2V0KQorSlNDOjpKU09iamVjdCogU2NyaXB0Q29udHJvbGxl
cjo6Y3JlYXRlU2NyaXB0T2JqZWN0Rm9yV2lkZ2V0KFdpZGdldCogd2lkZ2V0KQogewotICAgIGlm
ICh3aWRnZXQtPmlzUGx1Z2luVmlldygpKSB7Ci0gICAgICAgIFBsdWdpblZpZXcqIHBsdWdpblZp
ZXcgPSBzdGF0aWNfY2FzdDxQbHVnaW5WaWV3Kj4od2lkZ2V0KTsKLSAgICAgICAgcmV0dXJuIHBs
dWdpblZpZXctPmJpbmRpbmdJbnN0YW5jZSgpOwotICAgIH0KLQogICAgIFFPYmplY3QqIG9iamVj
dCA9IHdpZGdldC0+YmluZGluZ09iamVjdCgpOworICAgIEpTQ29udGV4dFJlZiBjb250ZXh0ID0g
dG9SZWYoYmluZGluZ1Jvb3RPYmplY3QoKS0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKSk7
CiAKICAgICBpZiAoIW9iamVjdCkKICAgICAgICAgb2JqZWN0ID0gd2lkZ2V0LT5wbGF0Zm9ybVdp
ZGdldCgpOwogCi0gICAgaWYgKCFvYmplY3QpCi0gICAgICAgIHJldHVybiAwOworICAgIGlmIChv
YmplY3QpCisgICAgICAgIHJldHVybiB0b0pTKEpTQzo6QmluZGluZ3M6OlF0Q2xhc3M6Omluc3Rh
bmNlRm9yUU9iamVjdChjb250ZXh0LCBvYmplY3QsIFFTY3JpcHRFbmdpbmU6OlF0T3duZXJzaGlw
KSk7CiAKLSAgICByZXR1cm4gSlNDOjpCaW5kaW5nczo6UXRJbnN0YW5jZTo6Z2V0UXRJbnN0YW5j
ZShvYmplY3QsIGJpbmRpbmdSb290T2JqZWN0KCksIFFTY3JpcHRFbmdpbmU6OlF0T3duZXJzaGlw
KTsKKyAgICByZXR1cm4gMDsKK30KKworUGFzc1JlZlB0cjxKU0M6OkJpbmRpbmdzOjpJbnN0YW5j
ZT4gU2NyaXB0Q29udHJvbGxlcjo6Y3JlYXRlU2NyaXB0SW5zdGFuY2VGb3JXaWRnZXQoV2ViQ29y
ZTo6V2lkZ2V0KiB3aWRnZXQpCit7CisgICAgcmV0dXJuIDA7CiB9CiAKIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9qc2MvQnJpZGdlSlNDLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2JyaWRnZS9qc2MvQnJpZGdlSlNDLmNwcAppbmRleCA5YzBhZGZjLi4zYjNjNjUzIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9icmlkZ2UvanNjL0JyaWRnZUpTQy5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvYnJpZGdlL2pzYy9CcmlkZ2VKU0MuY3BwCkBAIC0zMywxMSArMzMsNiBAQAogI2lu
Y2x1ZGUgInJ1bnRpbWUvSlNMb2NrLmgiCiAjaW5jbHVkZSAicnVudGltZS9PYmplY3RQcm90b3R5
cGUuaCIKIAotCi0jaWYgUExBVEZPUk0oUVQpCi0jaW5jbHVkZSAicXRfaW5zdGFuY2UuaCIKLSNl
bmRpZgotCiBuYW1lc3BhY2UgSlNDIHsKIAogbmFtZXNwYWNlIEJpbmRpbmdzIHsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9xdC9xdF9jbGFzcy5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9icmlkZ2UvcXQvcXRfY2xhc3MuY3BwCmluZGV4IGMzZDhiMjcuLmI0M2E0MTIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9xdC9xdF9jbGFzcy5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvYnJpZGdlL3F0L3F0X2NsYXNzLmNwcApAQCAtMjEsNyArMjEsNyBAQAogI2luY2x1ZGUg
InF0X2NsYXNzLmgiCiAKICNpbmNsdWRlICJJZGVudGlmaWVyLmgiCi0jaW5jbHVkZSAicXRfaW5z
dGFuY2UuaCIKKyNpbmNsdWRlICJKU09iamVjdFJlZlByaXZhdGUuaCIKICNpbmNsdWRlICJxdF9y
dW50aW1lLmgiCiAKICNpbmNsdWRlIDxxZGVidWcuaD4KQEAgLTMwLDE5NCArMzAsMzU4IEBACiBu
YW1lc3BhY2UgSlNDIHsKIG5hbWVzcGFjZSBCaW5kaW5ncyB7CiAKLVF0Q2xhc3M6OlF0Q2xhc3Mo
Y29uc3QgUU1ldGFPYmplY3QqIG1vKQotICAgIDogbV9tZXRhT2JqZWN0KG1vKQorY2xhc3MgUXRT
YWZlT2JqZWN0CiB7Ci19CitwdWJsaWM6CisgICAgUU9iamVjdCogZGF0YSgpIHsgcmV0dXJuIG1f
b2JqZWN0LmRhdGEoKTsgfQorICAgIFF0U2FmZU9iamVjdChRT2JqZWN0KiBvYmplY3QsIGJvb2wg
b3duKQorICAgICAgICA6IG1fb2JqZWN0KG9iamVjdCkKKyAgICAgICAgLCBtX293bihvd24pCisg
ICAgeyB9CisKKyAgICB2aXJ0dWFsIH5RdFNhZmVPYmplY3QoKQorICAgIHsKKyAgICAgICAgaWYg
KG1fb3duICYmIG1fb2JqZWN0KQorICAgICAgICAgICAgZGVsZXRlIG1fb2JqZWN0LmRhdGEoKTsK
KyAgICB9CiAKLVF0Q2xhc3M6On5RdENsYXNzKCkKK3ByaXZhdGU6CisgICAgUVdlYWtQb2ludGVy
PFFPYmplY3Q+IG1fb2JqZWN0OworICAgIGJvb2wgbV9vd247Cit9OworCitRT2JqZWN0KiBRdENs
YXNzOjp0b1FPYmplY3QoSlNPYmplY3RSZWYgb2JqZWN0KQogeworICAgIGlmICghb2JqZWN0KQor
ICAgICAgICByZXR1cm4gMDsKKyAgICBRdFNhZmVPYmplY3QqIHNhZmUgPSBzdGF0aWNfY2FzdDxR
dFNhZmVPYmplY3QqPihKU09iamVjdEdldFByaXZhdGUob2JqZWN0KSk7CisgICAgcmV0dXJuIHNh
ZmUgPyBzYWZlLT5kYXRhKCkgOiAwOwogfQogCi10eXBlZGVmIEhhc2hNYXA8Y29uc3QgUU1ldGFP
YmplY3QqLCBRdENsYXNzKj4gQ2xhc3Nlc0J5TWV0YU9iamVjdDsKLXN0YXRpYyBDbGFzc2VzQnlN
ZXRhT2JqZWN0KiBjbGFzc2VzQnlNZXRhT2JqZWN0ID0gMDsKK3N0YXRpYyBRQnl0ZUFycmF5IGpz
U3RyaW5nVG9CeXRlQXJyYXkoSlNTdHJpbmdSZWYgc3RyKQoreworICAgIHNpemVfdCBsZW5ndGgg
PSBKU1N0cmluZ0dldExlbmd0aChzdHIpOworICAgIGNvbnN0IEpTQ2hhciogc3RyRGF0YSA9IEpT
U3RyaW5nR2V0Q2hhcmFjdGVyc1B0cihzdHIpOworICAgIHJldHVybiBRU3RyaW5nKHJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgUUNoYXIqPihzdHJEYXRhKSwgbGVuZ3RoKS50b1V0ZjgoKTsKK30KIAot
UXRDbGFzcyogUXRDbGFzczo6Y2xhc3NGb3JPYmplY3QoUU9iamVjdCogbykKK3N0YXRpYyBib29s
IGhhc1Byb3BlcnR5UXQoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIG9iamVjdCwg
SlNTdHJpbmdSZWYgcHJvcGVydHlOYW1lKQogewotICAgIGlmICghY2xhc3Nlc0J5TWV0YU9iamVj
dCkKLSAgICAgICAgY2xhc3Nlc0J5TWV0YU9iamVjdCA9IG5ldyBDbGFzc2VzQnlNZXRhT2JqZWN0
OworICAgIFFPYmplY3QqIHFPYmplY3QgPSBRdENsYXNzOjp0b1FPYmplY3Qob2JqZWN0KTsKKyAg
ICBpZiAoIXFPYmplY3QpCisgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgY29uc3QgUU1ldGFP
YmplY3QqIG1vID0gby0+bWV0YU9iamVjdCgpOwotICAgIFF0Q2xhc3MqIGFDbGFzcyA9IGNsYXNz
ZXNCeU1ldGFPYmplY3QtPmdldChtbyk7Ci0gICAgaWYgKCFhQ2xhc3MpIHsKLSAgICAgICAgYUNs
YXNzID0gbmV3IFF0Q2xhc3MobW8pOwotICAgICAgICBjbGFzc2VzQnlNZXRhT2JqZWN0LT5zZXQo
bW8sIGFDbGFzcyk7CisgICAgUXRDbGFzcyogcXRDbGFzcyA9IFF0Q2xhc3M6OmNsYXNzRm9yT2Jq
ZWN0KHFPYmplY3QpOworICAgIHJldHVybiBxdENsYXNzLT5oYXNQcm9wZXJ0eShjb250ZXh0LCBx
T2JqZWN0LCBqc1N0cmluZ1RvQnl0ZUFycmF5KHByb3BlcnR5TmFtZSkpOworfQorCitzdGF0aWMg
SlNWYWx1ZVJlZiBnZXRQcm9wZXJ0eVF0KEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJl
ZiBvYmplY3QsIEpTU3RyaW5nUmVmIHByb3BlcnR5TmFtZSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9u
KQoreworICAgIEpTVmFsdWVSZWYgY2FjaGVkUHJvcGVydHkgPSBKU09iamVjdEdldFByaXZhdGVQ
cm9wZXJ0eShjb250ZXh0LCBvYmplY3QsIHByb3BlcnR5TmFtZSk7CisgICAgaWYgKGNhY2hlZFBy
b3BlcnR5KQorICAgICAgICByZXR1cm4gY2FjaGVkUHJvcGVydHk7CisgICAgUU9iamVjdCogcU9i
amVjdCA9IFF0Q2xhc3M6OnRvUU9iamVjdChvYmplY3QpOworICAgIGlmICghcU9iamVjdCkgewor
ICAgICAgICBzZXRFeGNlcHRpb24oY29udGV4dCwgZXhjZXB0aW9uLCBRU3RyaW5nKCJjYW5ub3Qg
YWNjZXNzIG1lbWJlciBgJTEnIG9mIGRlbGV0ZWQgUU9iamVjdCIpCisgICAgICAgICAgICAgICAg
ICAgICAuYXJnKFFTdHJpbmcocmVpbnRlcnByZXRfY2FzdDxjb25zdCBRQ2hhcio+KEpTU3RyaW5n
R2V0Q2hhcmFjdGVyc1B0cihwcm9wZXJ0eU5hbWUpKSwgSlNTdHJpbmdHZXRMZW5ndGgocHJvcGVy
dHlOYW1lKSkpKTsKKyAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQp
OwogICAgIH0KIAotICAgIHJldHVybiBhQ2xhc3M7CisgICAgUXRDbGFzcyogcXRDbGFzcyA9IFF0
Q2xhc3M6OmNsYXNzRm9yT2JqZWN0KHFPYmplY3QpOworICAgIHJldHVybiBxdENsYXNzLT5nZXRQ
cm9wZXJ0eShjb250ZXh0LCBvYmplY3QsIHFPYmplY3QsIGpzU3RyaW5nVG9CeXRlQXJyYXkocHJv
cGVydHlOYW1lKSwgZXhjZXB0aW9uKTsKIH0KIAotY29uc3QgY2hhciogUXRDbGFzczo6bmFtZSgp
IGNvbnN0CitzdGF0aWMgdm9pZCBnZXRQcm9wZXJ0eU5hbWVzUXQoSlNDb250ZXh0UmVmIGNvbnRl
eHQsIEpTT2JqZWN0UmVmIG9iamVjdCwgSlNQcm9wZXJ0eU5hbWVBY2N1bXVsYXRvclJlZiBwcm9w
ZXJ0eU5hbWVzKQogewotICAgIHJldHVybiBtX21ldGFPYmplY3QtPmNsYXNzTmFtZSgpOworICAg
IFFPYmplY3QqIHFPYmplY3QgPSBRdENsYXNzOjp0b1FPYmplY3Qob2JqZWN0KTsKKyAgICBpZiAo
IXFPYmplY3QpCisgICAgICAgIHJldHVybjsKKworICAgIFF0Q2xhc3MqIHF0Q2xhc3MgPSBRdENs
YXNzOjpjbGFzc0Zvck9iamVjdChxT2JqZWN0KTsKKyAgICBxdENsYXNzLT5nZXRQcm9wZXJ0eU5h
bWVzKGNvbnRleHQsIHFPYmplY3QsIHByb3BlcnR5TmFtZXMpOwogfQogCi0vLyBXZSB1c2UgdGhp
cyB0byBnZXQgYXQgc2lnbmFscyAoc28gd2UgY2FuIHJldHVybiBhIHByb3BlciBmdW5jdGlvbiBv
YmplY3QsCi0vLyBhbmQgbm90IGdldCB3cmFwcGVkIGluIFJ1bnRpbWVNZXRob2QpLiBBbHNvLCB1
c2UgdGhpcyBmb3IgbWV0aG9kcywKLS8vIHNvIHdlIGNhbiBjYWNoZSB0aGUgb2JqZWN0IGFuZCBy
ZXR1cm4gdGhlIHNhbWUgb2JqZWN0IGZvciB0aGUgc2FtZQotLy8gaWRlbnRpZmllci4KLUpTVmFs
dWUgUXRDbGFzczo6ZmFsbGJhY2tPYmplY3QoRXhlY1N0YXRlKiBleGVjLCBJbnN0YW5jZSogaW5z
dCwgY29uc3QgSWRlbnRpZmllciYgaWRlbnRpZmllcikKK3N0YXRpYyBib29sIHNldFByb3BlcnR5
UXQoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIG9iamVjdCwgSlNTdHJpbmdSZWYg
cHJvcGVydHlOYW1lLCBKU1ZhbHVlUmVmIHZhbHVlLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCiB7
Ci0gICAgUXRJbnN0YW5jZSogcXRpbnN0ID0gc3RhdGljX2Nhc3Q8UXRJbnN0YW5jZSo+KGluc3Qp
OworICAgIFFPYmplY3QqIHFPYmplY3QgPSBRdENsYXNzOjp0b1FPYmplY3Qob2JqZWN0KTsKKyAg
ICBpZiAoIXFPYmplY3QpIHsKKyAgICAgICAgc2V0RXhjZXB0aW9uKGNvbnRleHQsIGV4Y2VwdGlv
biwgUVN0cmluZygiY2Fubm90IGFjY2VzcyBtZW1iZXIgYCUxJyBvZiBkZWxldGVkIFFPYmplY3Qi
KQorICAgICAgICAgICAgICAgICAgICAgLmFyZyhRU3RyaW5nKHJlaW50ZXJwcmV0X2Nhc3Q8Y29u
c3QgUUNoYXIqPihKU1N0cmluZ0dldENoYXJhY3RlcnNQdHIocHJvcGVydHlOYW1lKSkpKSk7Cisg
ICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKKyAgICB9CiAKLSAg
ICBjb25zdCBVU3RyaW5nJiB1c3RyaW5nID0gaWRlbnRpZmllci51c3RyaW5nKCk7Ci0gICAgY29u
c3QgUUJ5dGVBcnJheSBuYW1lID0gUVN0cmluZyhyZWludGVycHJldF9jYXN0PGNvbnN0IFFDaGFy
Kj4odXN0cmluZy5jaGFyYWN0ZXJzKCkpLCB1c3RyaW5nLmxlbmd0aCgpKS50b0FzY2lpKCk7CiAK
LSAgICAvLyBGaXJzdCBzZWUgaWYgd2UgaGF2ZSBhIGNhY2hlIGhpdAotICAgIEpTT2JqZWN0KiB2
YWwgPSBxdGluc3QtPm1fbWV0aG9kcy52YWx1ZShuYW1lKS5nZXQoKTsKLSAgICBpZiAodmFsKQot
ICAgICAgICByZXR1cm4gdmFsOworICAgIFF0Q2xhc3MqIHF0Q2xhc3MgPSBRdENsYXNzOjpjbGFz
c0Zvck9iamVjdChxT2JqZWN0KTsKKyAgICByZXR1cm4gcXRDbGFzcy0+c2V0UHJvcGVydHkoY29u
dGV4dCwgcU9iamVjdCwganNTdHJpbmdUb0J5dGVBcnJheShwcm9wZXJ0eU5hbWUpLCB2YWx1ZSwg
ZXhjZXB0aW9uKTsKK30KIAotICAgIC8vIE5vcGUsIGNyZWF0ZSBhbiBlbnRyeQotICAgIGNvbnN0
IFFCeXRlQXJyYXkgbm9ybWFsID0gUU1ldGFPYmplY3Q6Om5vcm1hbGl6ZWRTaWduYXR1cmUobmFt
ZS5jb25zdERhdGEoKSk7CitzdGF0aWMgYm9vbCBkZWxldGVQcm9wZXJ0eVF0KEpTQ29udGV4dFJl
ZiBjb250ZXh0LCBKU09iamVjdFJlZiBvYmplY3QsIEpTU3RyaW5nUmVmIHByb3BlcnR5TmFtZSwg
SlNWYWx1ZVJlZiogZXhjZXB0aW9uKQoreworICAgIHJldHVybiBmYWxzZTsKK30KIAotICAgIC8v
IFNlZSBpZiB0aGVyZSBpcyBhbiBleGFjdCBtYXRjaAotICAgIGludCBpbmRleCA9IC0xOwotICAg
IGlmIChub3JtYWwuY29udGFpbnMoJygnKSAmJiAoaW5kZXggPSBtX21ldGFPYmplY3QtPmluZGV4
T2ZNZXRob2Qobm9ybWFsKSkgIT0gLTEpIHsKLSAgICAgICAgUU1ldGFNZXRob2QgbSA9IG1fbWV0
YU9iamVjdC0+bWV0aG9kKGluZGV4KTsKLSAgICAgICAgaWYgKG0uYWNjZXNzKCkgIT0gUU1ldGFN
ZXRob2Q6OlByaXZhdGUpIHsKLSAgICAgICAgICAgIFF0UnVudGltZU1ldGFNZXRob2QqIHZhbCA9
IG5ldyAoZXhlYykgUXRSdW50aW1lTWV0YU1ldGhvZChleGVjLCBpZGVudGlmaWVyLCBzdGF0aWNf
Y2FzdDxRdEluc3RhbmNlKj4oaW5zdCksIGluZGV4LCBub3JtYWwsIGZhbHNlKTsKLSAgICAgICAg
ICAgIHF0aW5zdC0+bV9tZXRob2RzLmluc2VydChuYW1lLCBXcml0ZUJhcnJpZXI8SlNPYmplY3Q+
KGV4ZWMtPmdsb2JhbERhdGEoKSwgcXRpbnN0LT5jcmVhdGVSdW50aW1lT2JqZWN0KGV4ZWMpLCB2
YWwpKTsKLSAgICAgICAgICAgIHJldHVybiB2YWw7CitzdGF0aWMgSlNWYWx1ZVJlZiBjb252ZXJ0
VG9UeXBlUXQoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIG9iamVjdCwgOjpKU1R5
cGUgdHlwZSwgSlNWYWx1ZVJlZiopCit7CisgICAgUU9iamVjdCogcU9iamVjdCA9IFF0Q2xhc3M6
OnRvUU9iamVjdChvYmplY3QpOworICAgIGlmICghcU9iamVjdCkKKyAgICAgICAgcmV0dXJuIEpT
VmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworCisgICAgc3dpdGNoICh0eXBlKSB7CisgICAg
ICAgICAgICByZXR1cm4gb2JqZWN0OworICAgICAgICBjYXNlIGtKU1R5cGVVbmRlZmluZWQ6Cisg
ICAgICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CisgICAgICAg
IGNhc2Uga0pTVHlwZUJvb2xlYW46CisgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VCb29s
ZWFuKGNvbnRleHQsIHFPYmplY3QpOworICAgICAgICBjYXNlIGtKU1R5cGVOdW1iZXI6CisgICAg
ICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VOdW1iZXIoY29udGV4dCwgMC4wKTsKKyAgICAgICAg
Y2FzZSBrSlNUeXBlTnVsbDoKKyAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZU51bGwoY29u
dGV4dCk7CisgICAgICAgIGNhc2Uga0pTVHlwZVN0cmluZzogeworICAgICAgICAgICAgUXRDbGFz
cyogcXRDbGFzcyA9IFF0Q2xhc3M6OmNsYXNzRm9yT2JqZWN0KHFPYmplY3QpOworICAgICAgICAg
ICAgUVN0cmluZyBzdHJpbmcgPSBxdENsYXNzLT50b1N0cmluZyhxT2JqZWN0KTsKKyAgICAgICAg
ICAgIEpTU3RyaW5nUmVmIHN0cmluZ1JlZiA9IEpTU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMo
cmVpbnRlcnByZXRfY2FzdDxjb25zdCBKU0NoYXIqPihzdHJpbmcuZGF0YSgpKSwgc3RyaW5nLmxl
bmd0aCgpICsgMSk7CisgICAgICAgICAgICBKU1ZhbHVlUmVmIHZhbHVlID0gSlNWYWx1ZU1ha2VT
dHJpbmcoY29udGV4dCwgc3RyaW5nUmVmKTsKKyAgICAgICAgICAgIEpTU3RyaW5nUmVsZWFzZShz
dHJpbmdSZWYpOworICAgICAgICAgICAgcmV0dXJuIHZhbHVlOwogICAgICAgICB9CisgICAgICAg
IGNhc2Uga0pTVHlwZU9iamVjdDoKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVy
biBvYmplY3Q7CisgICAgfQorfQorCisKK3N0YXRpYyB2b2lkIGZpbmFsaXplUXQoSlNPYmplY3RS
ZWYgb2JqZWN0KQoreworICAgIGRlbGV0ZSBzdGF0aWNfY2FzdDxRdFNhZmVPYmplY3QqPihKU09i
amVjdEdldFByaXZhdGUob2JqZWN0KSk7Cit9CisKK1FTdHJpbmcgUXRDbGFzczo6dG9TdHJpbmco
UU9iamVjdCogb2JqKQoreworICAgIGlmICghb2JqKQorICAgICAgICByZXR1cm4gIiI7CisKKyAg
ICAvLyBIbW0uLiBzZWUgaWYgdGhlcmUgaXMgYSB0b1N0cmluZyBkZWZpbmVkCisgICAgUUJ5dGVB
cnJheSBidWY7CisgICAgLy8gQ2hlYXQgYW5kIGRvbid0IHVzZSB0aGUgZnVsbCBuYW1lIHJlc29s
dXRpb24KKyAgICBpbnQgaW5kZXggPSBtX21ldGFPYmplY3QtPmluZGV4T2ZNZXRob2QoInRvU3Ry
aW5nKCkiKTsKKyAgICBRTWV0YU1ldGhvZCBtOworICAgIGNvbnN0IGNoYXIqIHJldHNpZzsKKyAg
ICB2b2lkKiBxYXJnc1sxXTsKKyAgICBRVmFyaWFudCByZXQ7CisKKyAgICBpZiAoaW5kZXggPCAw
KQorICAgICAgICBnb3RvIHVzZURlZmF1bHQ7CisKKyAgICBtID0gb2JqLT5tZXRhT2JqZWN0KCkt
Pm1ldGhvZChpbmRleCk7CisgICAgLy8gQ2hlY2sgdG8gc2VlIGhvdyBtdWNoIHdlIGNhbiBjYWxs
IGl0CisgICAgaWYgKG0uYWNjZXNzKCkgPT0gUU1ldGFNZXRob2Q6OlByaXZhdGUKKyAgICAgICAg
fHwgbS5tZXRob2RUeXBlKCkgPT0gUU1ldGFNZXRob2Q6OlNpZ25hbAorICAgICAgICB8fCAhbS5w
YXJhbWV0ZXJUeXBlcygpLmlzRW1wdHkoKSkKKyAgICAgICAgZ290byB1c2VEZWZhdWx0OworCisg
ICAgcmV0c2lnID0gbS50eXBlTmFtZSgpOworICAgIGlmIChyZXRzaWcgJiYgKnJldHNpZykgewor
ICAgICAgICByZXQgPSBRVmFyaWFudChRTWV0YVR5cGU6OnR5cGUocmV0c2lnKSwgKHZvaWQqKTAp
OworICAgICAgICBxYXJnc1swXSA9IHJldC5kYXRhKCk7CiAgICAgfQogCi0gICAgLy8gTm9wZS4u
IHRyeSBhIGJhc2VuYW1lIG1hdGNoCisgICAgaWYgKFFNZXRhT2JqZWN0OjptZXRhY2FsbChvYmos
IFFNZXRhT2JqZWN0OjpJbnZva2VNZXRhTWV0aG9kLCBpbmRleCwgcWFyZ3MpID49IDApCisgICAg
ICAgIGdvdG8gdXNlRGVmYXVsdDsKKworICAgIGlmIChyZXQuaXNWYWxpZCgpICYmIHJldC5jYW5D
b252ZXJ0KFFWYXJpYW50OjpTdHJpbmcpKQorICAgICAgICByZXR1cm4gcmV0LnRvU3RyaW5nKCk7
CisKK3VzZURlZmF1bHQ6CisgICAgY29uc3QgUU1ldGFPYmplY3QqIG1ldGEgPSBvYmogPyBvYmot
Pm1ldGFPYmplY3QoKSA6ICZRT2JqZWN0OjpzdGF0aWNNZXRhT2JqZWN0OworICAgIFFTdHJpbmcg
bmFtZSA9IG9iaiA/IG9iai0+b2JqZWN0TmFtZSgpIDogUVN0cmluZzo6ZnJvbVV0ZjgoInVubmFt
ZWQiKTsKKyAgICByZXR1cm4gUVN0cmluZzo6ZnJvbVV0ZjgoIiUwKG5hbWUgPSBcIiUxXCIpIikK
KyAgICAgICAgICAgICAgICAgIC5hcmcoUUxhdGluMVN0cmluZyhtZXRhLT5jbGFzc05hbWUoKSkp
LmFyZyhuYW1lKTsKK30KKworSlNPYmplY3RSZWYgUXRDbGFzczo6aW5zdGFuY2VGb3JRT2JqZWN0
KEpTQ29udGV4dFJlZiBjb250ZXh0LCBRT2JqZWN0KiBvYmplY3QsIFFTY3JpcHRFbmdpbmU6OlZh
bHVlT3duZXJzaGlwIG93bmVyc2hpcCkKK3sKKyAgICBRdENsYXNzKiBjbHMgPSBRdENsYXNzOjpj
bGFzc0Zvck9iamVjdChvYmplY3QpOworICAgIEpTT2JqZWN0UmVmIHJlZiA9IGNscy0+bV9vYmpl
Y3RDYWNoZVtvYmplY3RdOworICAgIGlmIChyZWYgJiYgdG9RT2JqZWN0KHJlZikpCisgICAgICAg
IHJldHVybiByZWY7CisKKyAgICBib29sIG93biA9IG93bmVyc2hpcCA9PSBRU2NyaXB0RW5naW5l
OjpTY3JpcHRPd25lcnNoaXAgfHwgKG93bmVyc2hpcCA9PSBRU2NyaXB0RW5naW5lOjpBdXRvT3du
ZXJzaGlwICYmICFvYmplY3QtPnBhcmVudCgpKTsKKworICAgIHJlZiA9IEpTT2JqZWN0TWFrZShj
b250ZXh0LCBjbHMtPm1fY2xhc3MsIG5ldyBRdFNhZmVPYmplY3Qob2JqZWN0LCBvd24pKTsKKwor
ICAgIGNscy0+bV9vYmplY3RDYWNoZVtvYmplY3RdID0gcmVmOworICAgIHJldHVybiByZWY7Cit9
CisKK0pTQ2xhc3NSZWYgUXRDbGFzczo6cXRPYmplY3RCYXNlQ2xhc3MoKQoreworICAgIHN0YXRp
YyBKU0NsYXNzUmVmIGNsYXNzUmVmID0gMDsKKyAgICBpZiAoIWNsYXNzUmVmKQorICAgICAgICBj
bGFzc1JlZiA9IEpTQ2xhc3NDcmVhdGUoJmtKU0NsYXNzRGVmaW5pdGlvbkVtcHR5KTsKKworICAg
IHJldHVybiBjbGFzc1JlZjsKK30KKworUXRDbGFzczo6UXRDbGFzcyhjb25zdCBRTWV0YU9iamVj
dCogbW8pCisgICAgOiBtX21ldGFPYmplY3QobW8pCisgICAgLCBtX21ldGhvZENhY2hlKDApCit7
CiAgICAgY29uc3QgaW50IGNvdW50ID0gbV9tZXRhT2JqZWN0LT5tZXRob2RDb3VudCgpOwotICAg
IGZvciAoaW5kZXggPSBjb3VudCAtIDE7IGluZGV4ID49IDA7IC0taW5kZXgpIHsKKworICAgIGZv
ciAoaW50IGluZGV4ID0gY291bnQgLSAxOyBpbmRleCA+PSAwOyAtLWluZGV4KSB7CiAgICAgICAg
IGNvbnN0IFFNZXRhTWV0aG9kIG0gPSBtX21ldGFPYmplY3QtPm1ldGhvZChpbmRleCk7CiAgICAg
ICAgIGlmIChtLmFjY2VzcygpID09IFFNZXRhTWV0aG9kOjpQcml2YXRlKQogICAgICAgICAgICAg
Y29udGludWU7CiAKLSAgICAgICAgaW50IGl0ZXIgPSAwOwotICAgICAgICBjb25zdCBjaGFyKiBz
aWduYXR1cmUgPSBtLnNpZ25hdHVyZSgpOwotICAgICAgICB3aGlsZSAoc2lnbmF0dXJlW2l0ZXJd
ICYmIHNpZ25hdHVyZVtpdGVyXSAhPSAnKCcpCi0gICAgICAgICAgICArK2l0ZXI7CisgICAgICAg
IFFCeXRlQXJyYXkgc2lnbmF0dXJlKG0uc2lnbmF0dXJlKCkpOworICAgICAgICBRQnl0ZUFycmF5
IGJhc2VOYW1lID0gc2lnbmF0dXJlLmxlZnQoc2lnbmF0dXJlLmluZGV4T2YoJygnKSk7CisgICAg
ICAgIG1fbWV0aG9kSW5kZXhbc2lnbmF0dXJlXSA9IGluZGV4OworICAgICAgICBtX21ldGhvZElu
ZGV4W2Jhc2VOYW1lXSA9IGluZGV4OworICAgICAgICBtX3Byb3BlcnRpZXNGcm9tTWV0YU9iamVj
dC5hcHBlbmQoYmFzZU5hbWUpOworICAgICAgICBtX3Byb3BlcnRpZXNGcm9tTWV0YU9iamVjdC5h
cHBlbmQoc2lnbmF0dXJlKTsKKyAgICB9CisKKyAgICBpbnQgcHJvcGVydHlDb3VudCA9IG1fbWV0
YU9iamVjdC0+cHJvcGVydHlDb3VudCgpOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcHJvcGVy
dHlDb3VudDsgKytpKSB7CisgICAgICAgIFFNZXRhUHJvcGVydHkgcHJvcGVydHkgPSBtX21ldGFP
YmplY3QtPnByb3BlcnR5KGkpOworICAgICAgICBpZiAocHJvcGVydHkuaXNTY3JpcHRhYmxlKCkp
CisgICAgICAgICAgICBtX3Byb3BlcnRpZXNGcm9tTWV0YU9iamVjdC5hcHBlbmQobV9tZXRhT2Jq
ZWN0LT5wcm9wZXJ0eShpKS5uYW1lKCkpOworICAgIH0KKworICAgIGNvbnN0IEpTQ2xhc3NEZWZp
bml0aW9uIGRlZiA9IHsgMCwgMCwgbW8tPmNsYXNzTmFtZSgpLCBxdE9iamVjdEJhc2VDbGFzcygp
LCAwLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIGZpbmFsaXpl
UXQsIGhhc1Byb3BlcnR5UXQsIGdldFByb3BlcnR5UXQsIHNldFByb3BlcnR5UXQsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlUHJvcGVydHlRdCwgZ2V0UHJvcGVy
dHlOYW1lc1F0LCAwLCAwLCAwLCBjb252ZXJ0VG9UeXBlUXQgfTsKIAotICAgICAgICBpZiAobm9y
bWFsID09IFFCeXRlQXJyYXk6OmZyb21SYXdEYXRhKHNpZ25hdHVyZSwgaXRlcikpIHsKLSAgICAg
ICAgICAgIFF0UnVudGltZU1ldGFNZXRob2QqIHZhbCA9IG5ldyAoZXhlYykgUXRSdW50aW1lTWV0
YU1ldGhvZChleGVjLCBpZGVudGlmaWVyLCBzdGF0aWNfY2FzdDxRdEluc3RhbmNlKj4oaW5zdCks
IGluZGV4LCBub3JtYWwsIGZhbHNlKTsKLSAgICAgICAgICAgIHF0aW5zdC0+bV9tZXRob2RzLmlu
c2VydChuYW1lLCBXcml0ZUJhcnJpZXI8SlNPYmplY3Q+KGV4ZWMtPmdsb2JhbERhdGEoKSwgcXRp
bnN0LT5jcmVhdGVSdW50aW1lT2JqZWN0KGV4ZWMpLCB2YWwpKTsKLSAgICAgICAgICAgIHJldHVy
biB2YWw7Ci0gICAgICAgIH0KKyAgICBtX2NsYXNzID0gSlNDbGFzc0NyZWF0ZSgmZGVmKTsKK30K
KworUXRDbGFzczo6flF0Q2xhc3MoKQoreworfQorCitzdGF0aWMgSGFzaE1hcDxjb25zdCBRTWV0
YU9iamVjdCosIFF0Q2xhc3MqPiYgY2xhc3Nlc0J5TWV0YU9iamVjdCgpCit7CisgICAgc3RhdGlj
IEhhc2hNYXA8Y29uc3QgUU1ldGFPYmplY3QqLCBRdENsYXNzKj4gY2xhc3NlczsKKyAgICByZXR1
cm4gY2xhc3NlczsKK30KKworYm9vbCBRdENsYXNzOjpoYXNQcm9wZXJ0eShKU0NvbnRleHRSZWYs
IFFPYmplY3QqIG9iamVjdCwgY29uc3QgUUJ5dGVBcnJheSYgcHJvcGVydHkpCit7CisgICAgaWYg
KG1fcHJvcGVydGllc0Zyb21NZXRhT2JqZWN0LmNvbnRhaW5zKHByb3BlcnR5KSkKKyAgICAgICAg
cmV0dXJuIHRydWU7CisKKyAgICBpZiAob2JqZWN0LT5keW5hbWljUHJvcGVydHlOYW1lcygpLmNv
bnRhaW5zKHByb3BlcnR5KSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBRT2JqZWN0TGlz
dCBjaGlsZHJlbiA9IG9iamVjdC0+Y2hpbGRyZW4oKTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8
IGNoaWxkcmVuLmNvdW50KCk7ICsraSkgeworICAgICAgICBRT2JqZWN0KiBjaGlsZCA9IGNoaWxk
cmVuW2ldOworICAgICAgICBpZiAoY2hpbGQtPm9iamVjdE5hbWUoKS50b1V0ZjgoKSA9PSBwcm9w
ZXJ0eSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIHJldHVybiBqc1Vu
ZGVmaW5lZCgpOwotfQotCi0vLyBUaGlzIGZ1bmN0aW9uYWxpdHkgaXMgaGFuZGxlZCBieSB0aGUg
ZmFsbGJhY2sgY2FzZSBhYm92ZS4uLgotTWV0aG9kTGlzdCBRdENsYXNzOjptZXRob2RzTmFtZWQo
Y29uc3QgSWRlbnRpZmllciYsIEluc3RhbmNlKikgY29uc3QKLXsKLSAgICByZXR1cm4gTWV0aG9k
TGlzdCgpOwotfQotCi0vLyAjIyMgd2UgbWF5IGVuZCB1cCB3aXRoIGEgZGlmZmVyZW50IHNlYXJj
aCBvcmRlciB0aGFuIFF0U2NyaXB0IGJ5IG5vdAotLy8gZm9sZGluZyB0aGlzIGNvZGUgaW50byB0
aGUgZmFsbGJhY2tNZXRob2QgYWJvdmUsIGJ1dCBGaWVsZHMgcHJvcGFnYXRlIG91dAotLy8gb2Yg
dGhlIGJpbmRpbmcgY29kZQotRmllbGQqIFF0Q2xhc3M6OmZpZWxkTmFtZWQoY29uc3QgSWRlbnRp
ZmllciYgaWRlbnRpZmllciwgSW5zdGFuY2UqIGluc3RhbmNlKSBjb25zdAotewotICAgIC8vIENo
ZWNrIHN0YXRpYyBwcm9wZXJ0aWVzIGZpcnN0Ci0gICAgUXRJbnN0YW5jZSogcXRpbnN0ID0gc3Rh
dGljX2Nhc3Q8UXRJbnN0YW5jZSo+KGluc3RhbmNlKTsKLQotICAgIFFPYmplY3QqIG9iaiA9IHF0
aW5zdC0+Z2V0T2JqZWN0KCk7Ci0gICAgY29uc3QgVVN0cmluZyYgdXN0cmluZyA9IGlkZW50aWZp
ZXIudXN0cmluZygpOwotICAgIGNvbnN0IFFTdHJpbmcgbmFtZShyZWludGVycHJldF9jYXN0PGNv
bnN0IFFDaGFyKj4odXN0cmluZy5jaGFyYWN0ZXJzKCkpLCB1c3RyaW5nLmxlbmd0aCgpKTsKLSAg
ICBjb25zdCBRQnl0ZUFycmF5IGFzY2lpID0gbmFtZS50b0FzY2lpKCk7Ci0KLSAgICAvLyBGaXJz
dCBjaGVjayBmb3IgYSBjYWNoZWQgZmllbGQKLSAgICBRdEZpZWxkKiBmID0gcXRpbnN0LT5tX2Zp
ZWxkcy52YWx1ZShuYW1lKTsKLQotICAgIGlmIChvYmopIHsKLSAgICAgICAgaWYgKGYpIHsKLSAg
ICAgICAgICAgIC8vIFdlIG9ubHkgY2FjaGUgcmVhbCBtZXRhcHJvcGVydGllcywgYnV0IHdlIGRv
IHN0b3JlIHRoZQotICAgICAgICAgICAgLy8gb3RoZXIgdHlwZXMgc28gd2UgY2FuIGRlbGV0ZSB0
aGVtIGxhdGVyCi0gICAgICAgICAgICBpZiAoZi0+ZmllbGRUeXBlKCkgPT0gUXRGaWVsZDo6TWV0
YVByb3BlcnR5KQotICAgICAgICAgICAgICAgIHJldHVybiBmOwotI2lmbmRlZiBRVF9OT19QUk9Q
RVJUSUVTCi0gICAgICAgICAgICBpZiAoZi0+ZmllbGRUeXBlKCkgPT0gUXRGaWVsZDo6RHluYW1p
Y1Byb3BlcnR5KSB7Ci0gICAgICAgICAgICAgICAgaWYgKG9iai0+ZHluYW1pY1Byb3BlcnR5TmFt
ZXMoKS5pbmRleE9mKGFzY2lpKSA+PSAwKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZjsK
LSAgICAgICAgICAgICAgICAvLyBEeW5hbWljIHByb3BlcnR5IHRoYXQgZGlzYXBwZWFyZWQKLSAg
ICAgICAgICAgICAgICBxdGluc3QtPm1fZmllbGRzLnJlbW92ZShuYW1lKTsKLSAgICAgICAgICAg
ICAgICBkZWxldGUgZjsKLSAgICAgICAgICAgIH0KLSNlbmRpZgotICAgICAgICAgICAgZWxzZSB7
Ci0gICAgICAgICAgICAgICAgY29uc3QgUUxpc3Q8UU9iamVjdCo+JiBjaGlsZHJlbiA9IG9iai0+
Y2hpbGRyZW4oKTsKLSAgICAgICAgICAgICAgICBjb25zdCBpbnQgY291bnQgPSBjaGlsZHJlbi5z
aXplKCk7Ci0gICAgICAgICAgICAgICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IGNvdW50
OyArK2luZGV4KSB7Ci0gICAgICAgICAgICAgICAgICAgIFFPYmplY3QqIGNoaWxkID0gY2hpbGRy
ZW4uYXQoaW5kZXgpOwotICAgICAgICAgICAgICAgICAgICBpZiAoY2hpbGQtPm9iamVjdE5hbWUo
KSA9PSBuYW1lKQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGY7Ci0gICAgICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICAgICAgLy8gRGlkbid0IGZpbmQgaXQsIGRlbGV0ZSBpdCBm
cm9tIHRoZSBjYWNoZQotICAgICAgICAgICAgICAgIHF0aW5zdC0+bV9maWVsZHMucmVtb3ZlKG5h
bWUpOwotICAgICAgICAgICAgICAgIGRlbGV0ZSBmOwotICAgICAgICAgICAgfQorICAgIHJldHVy
biBmYWxzZTsKK30KKworSlNWYWx1ZVJlZiBRdENsYXNzOjpnZXRQcm9wZXJ0eShKU0NvbnRleHRS
ZWYgY29udGV4dCwgSlNPYmplY3RSZWYganNPYmplY3QsIFFPYmplY3QqIG9iamVjdCwgY29uc3Qg
UUJ5dGVBcnJheSYgcHJvcGVydHksIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKK3sKKyAgICBpZiAo
IW1fcHJvcGVydGllc0Zyb21NZXRhT2JqZWN0LmNvbnRhaW5zKHByb3BlcnR5KSkgeworICAgICAg
ICBRT2JqZWN0TGlzdCBjaGlsZHJlbiA9IG9iamVjdC0+Y2hpbGRyZW4oKTsKKyAgICAgICAgZm9y
IChpbnQgaSA9IDA7IGkgPCBjaGlsZHJlbi5jb3VudCgpOyArK2kpIHsKKyAgICAgICAgICAgIFFP
YmplY3QqIGNoaWxkID0gY2hpbGRyZW5baV07CisgICAgICAgICAgICBpZiAoY2hpbGQtPm9iamVj
dE5hbWUoKS50b1V0ZjgoKSA9PSBwcm9wZXJ0eSkKKyAgICAgICAgICAgICAgICByZXR1cm4gaW5z
dGFuY2VGb3JRT2JqZWN0KGNvbnRleHQsIGNoaWxkLCBRU2NyaXB0RW5naW5lOjpRdE93bmVyc2hp
cCk7CiAgICAgICAgIH0KKyAgICB9CiAKLSAgICAgICAgaW50IGluZGV4ID0gbV9tZXRhT2JqZWN0
LT5pbmRleE9mUHJvcGVydHkoYXNjaWkpOwotICAgICAgICBpZiAoaW5kZXggPj0gMCkgewotICAg
ICAgICAgICAgY29uc3QgUU1ldGFQcm9wZXJ0eSBwcm9wID0gbV9tZXRhT2JqZWN0LT5wcm9wZXJ0
eShpbmRleCk7CisgICAgUU1hcDxRQnl0ZUFycmF5LCBpbnQ+OjppdGVyYXRvciBpbmRleEl0ID0g
bV9tZXRob2RJbmRleC5maW5kKHByb3BlcnR5KTsKKyAgICBpZiAoaW5kZXhJdCAhPSBtX21ldGhv
ZEluZGV4LmVuZCgpKSB7CisgICAgICAgIGludCBpbmRleCA9IGluZGV4SXQudmFsdWUoKTsKKyAg
ICAgICAgUU1ldGFNZXRob2QgbWV0YU1ldGhvZCA9IG1fbWV0YU9iamVjdC0+bWV0aG9kKGluZGV4
KTsKKyAgICAgICAgUXRSdW50aW1lTWV0aG9kKiBtZXRob2QgPSBuZXcgUXRSdW50aW1lTWV0aG9k
KGNvbnRleHQsIGV4Y2VwdGlvbiwgb2JqZWN0LCBwcm9wZXJ0eSwgaW5kZXgsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRhTWV0aG9kLm1l
dGhvZFR5cGUoKSA9PSBRTWV0YU1ldGhvZDo6U2lnbmFsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gUXRSdW50aW1lTWV0aG9kOjpNZXRo
b2RJc1NpZ25hbCA6IDApOworICAgICAgICBKU09iamVjdFJlZiBmdW5jdGlvbiA9IG1ldGhvZC0+
Y3JlYXRlT2JqZWN0KGNvbnRleHQsIGV4Y2VwdGlvbik7CisgICAgICAgIEpTU3RyaW5nUmVmIHBy
b3BOYW1lU3RyID0gSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcocHJvcGVydHkuY29uc3RE
YXRhKCkpOworICAgICAgICBKU09iamVjdFNldFByaXZhdGVQcm9wZXJ0eShjb250ZXh0LCBqc09i
amVjdCwgcHJvcE5hbWVTdHIsIGZ1bmN0aW9uKTsKKyAgICAgICAgSlNTdHJpbmdSZWxlYXNlKHBy
b3BOYW1lU3RyKTsKKyAgICAgICAgcmV0dXJuIGZ1bmN0aW9uOworICAgIH0KIAotICAgICAgICAg
ICAgaWYgKHByb3AuaXNTY3JpcHRhYmxlKG9iaikpIHsKLSAgICAgICAgICAgICAgICBmID0gbmV3
IFF0RmllbGQocHJvcCk7Ci0gICAgICAgICAgICAgICAgcXRpbnN0LT5tX2ZpZWxkcy5pbnNlcnQo
bmFtZSwgZik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGY7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0KKyAgICBpZiAoIW9iamVjdC0+ZHluYW1pY1Byb3BlcnR5TmFtZXMoKS5jb250YWlucyhw
cm9wZXJ0eSkpIHsKKyAgICAgICAgaW50IHByb3BlcnR5SW5kZXggPSBtX21ldGFPYmplY3QtPmlu
ZGV4T2ZQcm9wZXJ0eShwcm9wZXJ0eSk7CisgICAgICAgIGlmIChwcm9wZXJ0eUluZGV4IDwgMCkK
KyAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKIAotI2lm
bmRlZiBRVF9OT19QUk9QRVJUSUVTCi0gICAgICAgIC8vIER5bmFtaWMgcHJvcGVydGllcwotICAg
ICAgICBpbmRleCA9IG9iai0+ZHluYW1pY1Byb3BlcnR5TmFtZXMoKS5pbmRleE9mKGFzY2lpKTsK
LSAgICAgICAgaWYgKGluZGV4ID49IDApIHsKLSAgICAgICAgICAgIGYgPSBuZXcgUXRGaWVsZChh
c2NpaSk7Ci0gICAgICAgICAgICBxdGluc3QtPm1fZmllbGRzLmluc2VydChuYW1lLCBmKTsKLSAg
ICAgICAgICAgIHJldHVybiBmOwotICAgICAgICB9Ci0jZW5kaWYKLQotICAgICAgICAvLyBDaGls
ZCBvYmplY3RzCi0KLSAgICAgICAgY29uc3QgUUxpc3Q8UU9iamVjdCo+JiBjaGlsZHJlbiA9IG9i
ai0+Y2hpbGRyZW4oKTsKLSAgICAgICAgY29uc3QgaW50IGNvdW50ID0gY2hpbGRyZW4uY291bnQo
KTsKLSAgICAgICAgZm9yIChpbmRleCA9IDA7IGluZGV4IDwgY291bnQ7ICsraW5kZXgpIHsKLSAg
ICAgICAgICAgIFFPYmplY3QqIGNoaWxkID0gY2hpbGRyZW4uYXQoaW5kZXgpOwotICAgICAgICAg
ICAgaWYgKGNoaWxkLT5vYmplY3ROYW1lKCkgPT0gbmFtZSkgewotICAgICAgICAgICAgICAgIGYg
PSBuZXcgUXRGaWVsZChjaGlsZCk7Ci0gICAgICAgICAgICAgICAgcXRpbnN0LT5tX2ZpZWxkcy5p
bnNlcnQobmFtZSwgZik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGY7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIH0KKyAgICAgICAgUU1ldGFQcm9wZXJ0eSBtZXRhUHJvcGVydHkgPSBtX21ldGFP
YmplY3QtPnByb3BlcnR5KHByb3BlcnR5SW5kZXgpOworICAgICAgICBpZiAoIW1ldGFQcm9wZXJ0
eS5pc1JlYWRhYmxlKCkpCisgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQo
Y29udGV4dCk7CisgICAgfQogCi0gICAgICAgIC8vIE5vdGhpbmcgbmFtZWQgdGhpcwotICAgICAg
ICByZXR1cm4gMDsKKyAgICBRVmFyaWFudCB2YWx1ZSA9IG9iamVjdC0+cHJvcGVydHkocHJvcGVy
dHkpOworICAgIHJldHVybiB0b0pTKGNvbnRleHQsIHZhbHVlLCBleGNlcHRpb24pOworfQorCitz
dGF0aWMgdm9pZCBhcHBlbmROYW1lKEpTUHJvcGVydHlOYW1lQWNjdW11bGF0b3JSZWYgbmFtZXMs
IGNvbnN0IGNoYXIqIG5hbWUpCit7CisgICAgSlNTdHJpbmdSZWYgc3RyID0gSlNTdHJpbmdDcmVh
dGVXaXRoVVRGOENTdHJpbmcobmFtZSk7CisgICAgSlNQcm9wZXJ0eU5hbWVBY2N1bXVsYXRvckFk
ZE5hbWUobmFtZXMsIHN0cik7CisgICAgSlNTdHJpbmdSZWxlYXNlKHN0cik7Cit9CisKK3ZvaWQg
UXRDbGFzczo6Z2V0UHJvcGVydHlOYW1lcyhKU0NvbnRleHRSZWYsIFFPYmplY3QqIG9iamVjdCwg
SlNQcm9wZXJ0eU5hbWVBY2N1bXVsYXRvclJlZiBuYW1lcykKK3sKKyAgICBmb3IgKGludCBpID0g
MDsgaSA8IG1fbWV0YU9iamVjdC0+cHJvcGVydHlDb3VudCgpOyArK2kpIHsKKyAgICAgICAgUU1l
dGFQcm9wZXJ0eSBtcHJvcCA9IG1fbWV0YU9iamVjdC0+cHJvcGVydHkoaSk7CisgICAgICAgIGlm
IChtcHJvcC5pc1NjcmlwdGFibGUoKSkKKyAgICAgICAgICAgIGFwcGVuZE5hbWUobmFtZXMsIG1w
cm9wLm5hbWUoKSk7CiAgICAgfQotICAgIC8vIEZvciBjb21wYXRpYmlsaXR5IHdpdGggcXRzY3Jp
cHQsIGNhY2hlZCBtZXRob2RzIGRvbid0IGNhdXNlCi0gICAgLy8gZXJyb3JzIHVudGlsIHRoZXkg
YXJlIGFjY2Vzc2VkLCBzbyBkb24ndCBibGluZGx5IGNyZWF0ZSBhbiBlcnJvcgotICAgIC8vIGhl
cmUuCi0gICAgaWYgKHF0aW5zdC0+bV9tZXRob2RzLmNvbnRhaW5zKGFzY2lpKSkKLSAgICAgICAg
cmV0dXJuIDA7CiAKLSNpZm5kZWYgUVRfTk9fUFJPUEVSVElFUwotICAgIC8vIGRlbGV0ZWQgcW9i
amVjdCwgYnV0IGNhbid0IHRocm93IGFuIGVycm9yIGZyb20gaGVyZSAobm8gZXhlYykKLSAgICAv
LyBjcmVhdGUgYSBmYWtlIFF0RmllbGQgdGhhdCB3aWxsIHRocm93IHVwb24gYWNjZXNzCi0gICAg
aWYgKCFmKSB7Ci0gICAgICAgIGYgPSBuZXcgUXRGaWVsZChhc2NpaSk7Ci0gICAgICAgIHF0aW5z
dC0+bV9maWVsZHMuaW5zZXJ0KG5hbWUsIGYpOworICAgIFFMaXN0PFFCeXRlQXJyYXk+IHByb3Bl
cnRpZXMgPSBvYmplY3QtPmR5bmFtaWNQcm9wZXJ0eU5hbWVzKCk7CisgICAgZm9yIChpbnQgaSA9
IDA7IGkgPCBwcm9wZXJ0aWVzLmxlbmd0aCgpOyArK2kpCisgICAgICAgIGFwcGVuZE5hbWUobmFt
ZXMsIHByb3BlcnRpZXNbaV0uY29uc3REYXRhKCkpOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkg
PCBtX21ldGFPYmplY3QtPm1ldGhvZENvdW50KCk7ICsraSkgeworICAgICAgICBRTWV0YU1ldGhv
ZCBtZXRob2QgPSBtX21ldGFPYmplY3QtPm1ldGhvZChpKTsKKyAgICAgICAgaWYgKCFtZXRob2Qu
YWNjZXNzKCkgPT0gUU1ldGFNZXRob2Q6OlByaXZhdGUpCisgICAgICAgICAgICBhcHBlbmROYW1l
KG5hbWVzLCBtZXRob2Quc2lnbmF0dXJlKCkpOwogICAgIH0KLSNlbmRpZgotICAgIHJldHVybiBm
OworCisgICAgY29uc3QgUUxpc3Q8UU9iamVjdCo+IGNoaWxkcmVuID0gb2JqZWN0LT5jaGlsZHJl
bigpOworICAgIGNvbnN0IGludCBjb3VudCA9IGNoaWxkcmVuLmNvdW50KCk7CisgICAgZm9yIChp
bnQgaSA9IDA7IGkgPCBjb3VudDsgKytpKQorICAgICAgICBhcHBlbmROYW1lKG5hbWVzLCBjaGls
ZHJlbltpXS0+b2JqZWN0TmFtZSgpLnRvVXRmOCgpKTsKK30KKworYm9vbCBRdENsYXNzOjpzZXRQ
cm9wZXJ0eShKU0NvbnRleHRSZWYgY29udGV4dCwgUU9iamVjdCogb2JqZWN0LCBjb25zdCBRQnl0
ZUFycmF5JiBwcm9wZXJ0eSwgSlNWYWx1ZVJlZiB2YWx1ZSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9u
KQoreworICAgIGludCBwcm9wZXJ0eUluZGV4ID0gbV9tZXRhT2JqZWN0LT5pbmRleE9mUHJvcGVy
dHkocHJvcGVydHkpOworICAgIFFNZXRhVHlwZTo6VHlwZSBhcmdUeXBlID0gUU1ldGFUeXBlOjpW
b2lkOworICAgIGJvb2wgZm91bmRTdGF0aWNQcm9wZXJ0eSA9IGZhbHNlOworICAgIGlmIChwcm9w
ZXJ0eUluZGV4ID49IDApIHsKKyAgICAgICAgUU1ldGFQcm9wZXJ0eSBtZXRhUHJvcCA9IG1fbWV0
YU9iamVjdC0+cHJvcGVydHkocHJvcGVydHlJbmRleCk7CisgICAgICAgIGlmIChtZXRhUHJvcC5p
c1NjcmlwdGFibGUoKSkKKyAgICAgICAgICAgIGZvdW5kU3RhdGljUHJvcGVydHkgPSB0cnVlOwor
ICAgICAgICBhcmdUeXBlID0gc3RhdGljX2Nhc3Q8UU1ldGFUeXBlOjpUeXBlPihRTWV0YVR5cGU6
OnR5cGUobWV0YVByb3AudHlwZU5hbWUoKSkpOworICAgIH0KKworICAgIGlmICghZm91bmRTdGF0
aWNQcm9wZXJ0eSAmJiAhb2JqZWN0LT5keW5hbWljUHJvcGVydHlOYW1lcygpLmNvbnRhaW5zKHBy
b3BlcnR5KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgb2JqZWN0LT5zZXRQcm9wZXJ0
eShwcm9wZXJ0eSwgdG9RdChjb250ZXh0LCB2YWx1ZSwgYXJnVHlwZSwgMCwgZXhjZXB0aW9uKSk7
CisgICAgcmV0dXJuIHRydWU7Cit9CisKK1F0Q2xhc3MqIFF0Q2xhc3M6OmNsYXNzRm9yT2JqZWN0
KFFPYmplY3QqIG8pCit7CisgICAgY29uc3QgUU1ldGFPYmplY3QqIG1vID0gby0+bWV0YU9iamVj
dCgpOworICAgIFF0Q2xhc3MqIGFDbGFzcyA9IGNsYXNzZXNCeU1ldGFPYmplY3QoKS5nZXQobW8p
OworICAgIGlmICghYUNsYXNzKSB7CisgICAgICAgIGFDbGFzcyA9IG5ldyBRdENsYXNzKG1vKTsK
KyAgICAgICAgY2xhc3Nlc0J5TWV0YU9iamVjdCgpLnNldChtbywgYUNsYXNzKTsKKyAgICB9Cisg
ICAgcmV0dXJuIGFDbGFzczsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYnJp
ZGdlL3F0L3F0X2NsYXNzLmggYi9Tb3VyY2UvV2ViQ29yZS9icmlkZ2UvcXQvcXRfY2xhc3MuaApp
bmRleCA0YzFhNzUzLi5hMWUxYWQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9icmlkZ2Uv
cXQvcXRfY2xhc3MuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9icmlkZ2UvcXQvcXRfY2xhc3MuaApA
QCAtMjIsNiArMjIsOCBAQAogCiAjaW5jbHVkZSAiQnJpZGdlSlNDLmgiCiAjaW5jbHVkZSAicWds
b2JhbC5oIgorI2luY2x1ZGUgIkphdmFTY3JpcHQuaCIKKyNpbmNsdWRlIDxRdFNjcmlwdC9xc2Ny
aXB0ZW5naW5lLmg+CiAKIFFUX0JFR0lOX05BTUVTUEFDRQogY2xhc3MgUU9iamVjdDsKQEAgLTMy
LDcgKzM0LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiBuYW1lc3BhY2UgQmluZGluZ3MgewogCiAKLWNs
YXNzIFF0Q2xhc3MgOiBwdWJsaWMgQ2xhc3MgeworY2xhc3MgUXRDbGFzcyA6IHB1YmxpYyBRT2Jq
ZWN0ewogcHJvdGVjdGVkOgogICAgIFF0Q2xhc3MoY29uc3QgUU1ldGFPYmplY3QqKTsKIApAQCAt
NDAsMTcgKzQyLDI5IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgUXRDbGFzcyogY2xhc3NGb3JPYmpl
Y3QoUU9iamVjdCopOwogICAgIHZpcnR1YWwgflF0Q2xhc3MoKTsKIAotICAgIHZpcnR1YWwgY29u
c3QgY2hhciogbmFtZSgpIGNvbnN0OwotICAgIHZpcnR1YWwgTWV0aG9kTGlzdCBtZXRob2RzTmFt
ZWQoY29uc3QgSWRlbnRpZmllciYsIEluc3RhbmNlKikgY29uc3Q7Ci0gICAgdmlydHVhbCBGaWVs
ZCogZmllbGROYW1lZChjb25zdCBJZGVudGlmaWVyJiwgSW5zdGFuY2UqKSBjb25zdDsKKyAgICBi
b29sIGhhc1Byb3BlcnR5KEpTQ29udGV4dFJlZiwgUU9iamVjdCosIGNvbnN0IFFCeXRlQXJyYXkm
KTsKKyAgICBKU1ZhbHVlUmVmIGdldFByb3BlcnR5KEpTQ29udGV4dFJlZiwgSlNPYmplY3RSZWYs
IFFPYmplY3QqLCBjb25zdCBRQnl0ZUFycmF5JiwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKTsKKyAg
ICB2b2lkIGdldFByb3BlcnR5TmFtZXMoSlNDb250ZXh0UmVmLCBRT2JqZWN0KiwgSlNQcm9wZXJ0
eU5hbWVBY2N1bXVsYXRvclJlZik7CisgICAgYm9vbCBzZXRQcm9wZXJ0eShKU0NvbnRleHRSZWYs
IFFPYmplY3QqLCBjb25zdCBRQnl0ZUFycmF5JiwgSlNWYWx1ZVJlZiB2YWx1ZSwgSlNWYWx1ZVJl
ZiogZXhjZXB0aW9uKTsKKyAgICBRU3RyaW5nIHRvU3RyaW5nKFFPYmplY3QqKTsKIAotICAgIHZp
cnR1YWwgSlNWYWx1ZSBmYWxsYmFja09iamVjdChFeGVjU3RhdGUqLCBJbnN0YW5jZSosIGNvbnN0
IElkZW50aWZpZXImKTsKKyAgICBzdGF0aWMgSlNPYmplY3RSZWYgaW5zdGFuY2VGb3JRT2JqZWN0
KEpTQ29udGV4dFJlZiBjb250ZXh0LCBRT2JqZWN0KiwgUVNjcmlwdEVuZ2luZTo6VmFsdWVPd25l
cnNoaXAgb3duZXJzaGlwKTsKKyAgICBzdGF0aWMgSlNDbGFzc1JlZiBxdE9iamVjdEJhc2VDbGFz
cygpOworCisgICAgc3RhdGljIFFPYmplY3QqIHRvUU9iamVjdChKU09iamVjdFJlZik7CiAKIHBy
aXZhdGU6CiAgICAgUXRDbGFzcyhjb25zdCBRdENsYXNzJik7IC8vIHByb2hpYml0IGNvcHlpbmcK
ICAgICBRdENsYXNzJiBvcGVyYXRvcj0oY29uc3QgUXRDbGFzcyYpOyAvLyBwcm9oaWJpdCBhc3Np
Z25tZW50CiAKKyAgICBKU0NsYXNzUmVmIG1fY2xhc3M7CisgICAgUU1hcDxRQnl0ZUFycmF5LCBp
bnQ+IG1fbWV0aG9kSW5kZXg7CisgICAgUU1hcDxRT2JqZWN0KiwgSlNPYmplY3RSZWY+IG1fb2Jq
ZWN0Q2FjaGU7CisgICAgUVNjcmlwdEVuZ2luZTo6VmFsdWVPd25lcnNoaXAgbV9vd25lcnNoaXA7
CisgICAgUUxpc3Q8UUJ5dGVBcnJheT4gbV9wcm9wZXJ0aWVzRnJvbU1ldGFPYmplY3Q7CisKICAg
ICBjb25zdCBRTWV0YU9iamVjdCogbV9tZXRhT2JqZWN0OworICAgIEpTT2JqZWN0UmVmIG1fbWV0
aG9kQ2FjaGU7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBCaW5kaW5ncwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvYnJpZGdlL3F0L3F0X2luc3RhbmNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Jy
aWRnZS9xdC9xdF9pbnN0YW5jZS5jcHAKaW5kZXggNjhlMjk1NC4uM2UyNjI3YSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvYnJpZGdlL3F0L3F0X2luc3RhbmNlLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9icmlkZ2UvcXQvcXRfaW5zdGFuY2UuY3BwCkBAIC0xNiwxMCArMTYsMTEgQEAKICAq
ICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0
b24sIE1BICAwMjExMC0xMzAxICBVU0EKICAqCiAgKi8KLQorI2lmIDAKICNpbmNsdWRlICJjb25m
aWcuaCIKICNpbmNsdWRlICJxdF9pbnN0YW5jZS5oIgogCisjaW5jbHVkZSAiQVBJQ2FzdC5oIgog
I2luY2x1ZGUgIkVycm9yLmgiCiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAjaW5jbHVkZSAi
SlNHbG9iYWxPYmplY3QuaCIKQEAgLTE2OCw2ICsxNjksMTEgQEAgUXRJbnN0YW5jZSogUXRJbnN0
YW5jZTo6Z2V0SW5zdGFuY2UoSlNPYmplY3QqIG9iamVjdCkKICAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8UXRJbnN0YW5jZSo+KHN0YXRpY19jYXN0PFJ1bnRpbWVPYmplY3QqPihvYmplY3QpLT5nZXRJ
bnRlcm5hbEluc3RhbmNlKCkpOwogfQogCitRdEluc3RhbmNlKiBRdEluc3RhbmNlOjpnZXRJbnN0
YW5jZShKU09iamVjdFJlZiBvYmplY3QpCit7CisgICAgcmV0dXJuIGdldEluc3RhbmNlKHRvSlMo
b2JqZWN0KSk7Cit9CisKIENsYXNzKiBRdEluc3RhbmNlOjpnZXRDbGFzcygpIGNvbnN0CiB7CiAg
ICAgaWYgKCFtX2NsYXNzKSB7CkBAIC0yMzksNiArMjQ1LDcgQEAgSlNWYWx1ZSBRdEluc3RhbmNl
OjpnZXRNZXRob2QoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5h
bWUpCiB7CiAgICAgaWYgKCFnZXRDbGFzcygpKQogICAgICAgICByZXR1cm4ganNOdWxsKCk7CisK
ICAgICBNZXRob2RMaXN0IG1ldGhvZExpc3QgPSBtX2NsYXNzLT5tZXRob2RzTmFtZWQocHJvcGVy
dHlOYW1lLCB0aGlzKTsKICAgICByZXR1cm4gbmV3IChleGVjKSBSdW50aW1lTWV0aG9kKGV4ZWMs
IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgV2ViQ29yZTo6ZGVwcmVjYXRlZEdldERPTVN0
cnVjdHVyZTxSdW50aW1lTWV0aG9kPihleGVjKSwgcHJvcGVydHlOYW1lLCBtZXRob2RMaXN0KTsK
IH0KQEAgLTM5MywzICs0MDAsNCBAQCB2b2lkIFF0RmllbGQ6OnNldFZhbHVlVG9JbnN0YW5jZShF
eGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEluc3RhbmNlKiBpbnN0LCBKU1ZhbHVlCiAKIH0KIH0KKyNl
bmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYnJpZGdlL3F0L3F0X2luc3RhbmNlLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9icmlkZ2UvcXQvcXRfaW5zdGFuY2UuaAppbmRleCAxZDUxY2EyLi4y
YjJkMTE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9icmlkZ2UvcXQvcXRfaW5zdGFuY2Uu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9icmlkZ2UvcXQvcXRfaW5zdGFuY2UuaApAQCAtMjcsNiAr
MjcsOCBAQAogI2luY2x1ZGUgPHFwb2ludGVyLmg+CiAjaW5jbHVkZSA8cXNldC5oPgogCisjaW5j
bHVkZSAiSlNPYmplY3RSZWYuaCIKKwogbmFtZXNwYWNlIEpTQyB7CiAKIG5hbWVzcGFjZSBCaW5k
aW5ncyB7CkBAIC03MCw2ICs3Miw5IEBAIHB1YmxpYzoKICAgICB2b2lkIHJlbW92ZUNhY2hlZE1l
dGhvZChKU09iamVjdCopOwogCiAgICAgc3RhdGljIFF0SW5zdGFuY2UqIGdldEluc3RhbmNlKEpT
T2JqZWN0Kik7CisgICAgc3RhdGljIFF0SW5zdGFuY2UqIGdldEluc3RhbmNlKEpTT2JqZWN0UmVm
KTsKKworICAgIEpTT2JqZWN0UmVmIGNyZWF0ZVJ1bnRpbWVPYmplY3QoSlNDb250ZXh0UmVmLCBK
U1ZhbHVlUmVmKiBleGNlcHRpb24pOwogCiBwcml2YXRlOgogICAgIHN0YXRpYyBQYXNzUmVmUHRy
PFF0SW5zdGFuY2U+IGNyZWF0ZShRT2JqZWN0ICppbnN0YW5jZSwgUGFzc1JlZlB0cjxSb290T2Jq
ZWN0PiByb290T2JqZWN0LCBRU2NyaXB0RW5naW5lOjpWYWx1ZU93bmVyc2hpcCBvd25lcnNoaXAp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9icmlkZ2UvcXQvcXRfcGl4bWFwcnVudGltZS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9icmlkZ2UvcXQvcXRfcGl4bWFwcnVudGltZS5jcHAKaW5kZXgg
YmUwY2QyOC4uZGI4YzAyMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYnJpZGdlL3F0L3F0
X3BpeG1hcHJ1bnRpbWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9xdC9xdF9waXht
YXBydW50aW1lLmNwcApAQCAtMTksNiArMTksOCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2lu
Y2x1ZGUgInF0X3BpeG1hcHJ1bnRpbWUuaCIKIAorI2luY2x1ZGUgIkFQSUNhc3QuaCIKKyNpbmNs
dWRlICJKYXZhU2NyaXB0LmgiCiAjaW5jbHVkZSAiQ2FjaGVkSW1hZ2UuaCIKICNpbmNsdWRlICJI
VE1MSW1hZ2VFbGVtZW50LmgiCiAjaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCkBAIC0yNiw4ICsyOCw2
IEBACiAjaW5jbHVkZSAiSlNHbG9iYWxPYmplY3QuaCIKICNpbmNsdWRlICJKU0hUTUxJbWFnZUVs
ZW1lbnQuaCIKICNpbmNsdWRlICJKU0ltYWdlRGF0YS5oIgotI2luY2x1ZGUgIkpTTG9jay5oIgot
I2luY2x1ZGUgIk9iamVjdFByb3RvdHlwZS5oIgogI2luY2x1ZGUgIlN0aWxsSW1hZ2VRdC5oIgog
I2luY2x1ZGUgPFF0RW5kaWFuPgogI2luY2x1ZGUgPFFCdWZmZXI+CkBAIC0zNiwzNjEgKzM2LDIw
MiBAQAogI2luY2x1ZGUgPFFJbWFnZT4KICNpbmNsdWRlIDxRUGl4bWFwPgogI2luY2x1ZGUgPFFW
YXJpYW50PgotI2luY2x1ZGUgPHJ1bnRpbWVfbWV0aG9kLmg+Ci0jaW5jbHVkZSA8cnVudGltZV9v
YmplY3QuaD4KLSNpbmNsdWRlIDxydW50aW1lX3Jvb3QuaD4KLSNpbmNsdWRlICJydW50aW1lL0Z1
bmN0aW9uUHJvdG90eXBlLmgiCiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogbmFtZXNwYWNl
IEpTQyB7CiAKIG5hbWVzcGFjZSBCaW5kaW5ncyB7CiAKLWNsYXNzIFF0UGl4bWFwQ2xhc3MgOiBw
dWJsaWMgQ2xhc3MgewotcHVibGljOgotICAgIFF0UGl4bWFwQ2xhc3MoKTsKLSAgICB2aXJ0dWFs
IE1ldGhvZExpc3QgbWV0aG9kc05hbWVkKGNvbnN0IElkZW50aWZpZXImLCBJbnN0YW5jZSopIGNv
bnN0OwotICAgIHZpcnR1YWwgRmllbGQqIGZpZWxkTmFtZWQoY29uc3QgSWRlbnRpZmllciYsIElu
c3RhbmNlKikgY29uc3Q7Ci19OwotCi0KLWNsYXNzIFF0UGl4bWFwV2lkdGhGaWVsZCA6IHB1Ymxp
YyBGaWVsZCB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIGNvbnN0IGNoYXIqIG5hbWUoKSB7IHJldHVy
biAid2lkdGgiOyB9Ci0gICAgdmlydHVhbCBKU1ZhbHVlIHZhbHVlRnJvbUluc3RhbmNlKEV4ZWNT
dGF0ZSosIGNvbnN0IEluc3RhbmNlKiBpbnN0YW5jZSkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBqc051bWJlcihzdGF0aWNfY2FzdDxjb25zdCBRdFBpeG1hcEluc3RhbmNlKj4oaW5zdGFu
Y2UpLT53aWR0aCgpKTsKLSAgICB9Ci0gICAgdmlydHVhbCB2b2lkIHNldFZhbHVlVG9JbnN0YW5j
ZShFeGVjU3RhdGUqLCBjb25zdCBJbnN0YW5jZSosIEpTVmFsdWUpIGNvbnN0IHt9Ci19OwotCi1j
bGFzcyBRdFBpeG1hcEhlaWdodEZpZWxkIDogcHVibGljIEZpZWxkIHsKLXB1YmxpYzoKLSAgICBz
dGF0aWMgY29uc3QgY2hhciogbmFtZSgpIHsgcmV0dXJuICJoZWlnaHQiOyB9Ci0gICAgdmlydHVh
bCBKU1ZhbHVlIHZhbHVlRnJvbUluc3RhbmNlKEV4ZWNTdGF0ZSosIGNvbnN0IEluc3RhbmNlKiBp
bnN0YW5jZSkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBqc051bWJlcihzdGF0aWNfY2Fz
dDxjb25zdCBRdFBpeG1hcEluc3RhbmNlKj4oaW5zdGFuY2UpLT5oZWlnaHQoKSk7Ci0gICAgfQot
ICAgIHZpcnR1YWwgdm9pZCBzZXRWYWx1ZVRvSW5zdGFuY2UoRXhlY1N0YXRlKiwgY29uc3QgSW5z
dGFuY2UqLCBKU1ZhbHVlKSBjb25zdCB7fQotfTsKLQotY2xhc3MgUXRQaXhtYXBSdW50aW1lTWV0
aG9kIDogcHVibGljIE1ldGhvZCB7Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCBpbnQgbnVtUGFyYW1l
dGVycygpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0gICAgdmlydHVh
bCBKU1ZhbHVlIGludm9rZShFeGVjU3RhdGUqIGV4ZWMsIFF0UGl4bWFwSW5zdGFuY2UqKSA9IDA7
Ci0KLX07Ci0KLWNsYXNzIFF0UGl4bWFwVG9JbWFnZURhdGFNZXRob2QgOiBwdWJsaWMgUXRQaXht
YXBSdW50aW1lTWV0aG9kIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgY29uc3QgY2hhciogbmFtZSgp
IHsgcmV0dXJuICJ0b0ltYWdlRGF0YSI7IH0KLSAgICBKU1ZhbHVlIGludm9rZShFeGVjU3RhdGUq
IGV4ZWMsIFF0UGl4bWFwSW5zdGFuY2UqIGluc3RhbmNlKQotICAgIHsKLSAgICAgICAgaW50IHdp
ZHRoID0gaW5zdGFuY2UtPndpZHRoKCk7Ci0gICAgICAgIGludCBoZWlnaHQgPSBpbnN0YW5jZS0+
aGVpZ2h0KCk7Ci0gICAgICAgIFJlZlB0cjxCeXRlQXJyYXk+IGJ5dGVBcnJheSA9IEJ5dGVBcnJh
eTo6Y3JlYXRlKHdpZHRoICogaGVpZ2h0ICogNCk7Ci0gICAgICAgIGNvcHlQaXhlbHMoaW5zdGFu
Y2UtPnRvSW1hZ2UoKSwgd2lkdGgsIGhlaWdodCwgYnl0ZUFycmF5LT5kYXRhKCkpOwotICAgICAg
ICBSZWZQdHI8SW1hZ2VEYXRhPiBpbWFnZURhdGEgPSBJbWFnZURhdGE6OmNyZWF0ZShJbnRTaXpl
KHdpZHRoLCBoZWlnaHQpLCBieXRlQXJyYXkpOwotICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBz
dGF0aWNfY2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3Qo
KSksIGltYWdlRGF0YS5nZXQoKSk7Ci0gICAgfQotcHJpdmF0ZToKLSAgICB2b2lkIGNvcHlQaXhl
bHMoY29uc3QgUUltYWdlJiBzb3VyY2VJbWFnZSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCB1bnNp
Z25lZCBjaGFyKiBkZXN0UGl4ZWxzKQotICAgIHsKLSAgICAgICAgUUltYWdlIGltYWdlKHNvdXJj
ZUltYWdlKTsKLSAgICAgICAgc3dpdGNoIChpbWFnZS5mb3JtYXQoKSkgewotICAgICAgICBjYXNl
IFFJbWFnZTo6Rm9ybWF0X1JHQjg4ODoKLSAgICAgICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwg
aGVpZ2h0OyB5KyspIHsKLSAgICAgICAgICAgICAgICBjb25zdCB1Y2hhciogc2NhbkxpbmUgPSBp
bWFnZS5zY2FuTGluZSh5KTsKLSAgICAgICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdp
ZHRoOyB4KyspIHsKLSAgICAgICAgICAgICAgICAgICAgKihkZXN0UGl4ZWxzKyspID0gKihzY2Fu
TGluZSsrKTsKLSAgICAgICAgICAgICAgICAgICAgKihkZXN0UGl4ZWxzKyspID0gKihzY2FuTGlu
ZSsrKTsKLSAgICAgICAgICAgICAgICAgICAgKihkZXN0UGl4ZWxzKyspID0gKihzY2FuTGluZSsr
KTsKLSAgICAgICAgICAgICAgICAgICAgKihkZXN0UGl4ZWxzKyspID0gMHhGRjsKLSAgICAgICAg
ICAgICAgICB9CitzdGF0aWMgdm9pZCBjb3B5UGl4ZWxzKGNvbnN0IFFJbWFnZSYgc291cmNlSW1h
Z2UsIGludCB3aWR0aCwgaW50IGhlaWdodCwgdW5zaWduZWQgY2hhciogZGVzdFBpeGVscykKK3sK
KyAgICBRSW1hZ2UgaW1hZ2Uoc291cmNlSW1hZ2UpOworICAgIHN3aXRjaCAoaW1hZ2UuZm9ybWF0
KCkpIHsKKyAgICBjYXNlIFFJbWFnZTo6Rm9ybWF0X1JHQjg4ODoKKyAgICAgICAgZm9yIChpbnQg
eSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykgeworICAgICAgICAgICAgY29uc3QgdWNoYXIqIHNjYW5M
aW5lID0gaW1hZ2Uuc2NhbkxpbmUoeSk7CisgICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8
IHdpZHRoOyB4KyspIHsKKyAgICAgICAgICAgICAgICAqKGRlc3RQaXhlbHMrKykgPSAqKHNjYW5M
aW5lKyspOworICAgICAgICAgICAgICAgICooZGVzdFBpeGVscysrKSA9ICooc2NhbkxpbmUrKyk7
CisgICAgICAgICAgICAgICAgKihkZXN0UGl4ZWxzKyspID0gKihzY2FuTGluZSsrKTsKKyAgICAg
ICAgICAgICAgICAqKGRlc3RQaXhlbHMrKykgPSAweEZGOwogICAgICAgICAgICAgfQotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBpbWFnZSA9IGltYWdl
LmNvbnZlcnRUb0Zvcm1hdChRSW1hZ2U6OkZvcm1hdF9BUkdCMzIpOwotICAgICAgICAgICAgLy8g
RmFsbCB0aHJvdWdoCi0gICAgICAgIGNhc2UgUUltYWdlOjpGb3JtYXRfUkdCMzI6Ci0gICAgICAg
IGNhc2UgUUltYWdlOjpGb3JtYXRfQVJHQjMyOgotICAgICAgICAgICAgZm9yIChpbnQgeSA9IDA7
IHkgPCBoZWlnaHQ7IHkrKykgewotICAgICAgICAgICAgICAgIGNvbnN0IHF1aW50MzIqIHNjYW5M
aW5lID0gcmVpbnRlcnByZXRfY2FzdF9wdHI8Y29uc3QgcXVpbnQzMio+KGltYWdlLnNjYW5MaW5l
KHkpKTsKLSAgICAgICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoOyB4KyspIHsK
LSAgICAgICAgICAgICAgICAgICAgUVJnYiBwaXhlbCA9IHNjYW5MaW5lW3hdOwotICAgICAgICAg
ICAgICAgICAgICBxVG9CaWdFbmRpYW48cXVpbnQzMj4oKHBpeGVsIDw8IDgpIHwgcUFscGhhKHBp
eGVsKSwgZGVzdFBpeGVscyk7Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RQaXhlbHMgKz0gNDsK
LSAgICAgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVs
dDoKKyAgICAgICAgaW1hZ2UgPSBpbWFnZS5jb252ZXJ0VG9Gb3JtYXQoUUltYWdlOjpGb3JtYXRf
QVJHQjMyKTsKKyAgICAgICAgLy8gRmFsbCB0aHJvdWdoCisgICAgY2FzZSBRSW1hZ2U6OkZvcm1h
dF9SR0IzMjoKKyAgICBjYXNlIFFJbWFnZTo6Rm9ybWF0X0FSR0IzMjoKKyAgICAgICAgZm9yIChp
bnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykgeworICAgICAgICAgICAgY29uc3QgcXVpbnQzMiog
c2NhbkxpbmUgPSByZWludGVycHJldF9jYXN0X3B0cjxjb25zdCBxdWludDMyKj4oaW1hZ2Uuc2Nh
bkxpbmUoeSkpOworICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKSB7
CisgICAgICAgICAgICAgICAgUVJnYiBwaXhlbCA9IHNjYW5MaW5lW3hdOworICAgICAgICAgICAg
ICAgIHFUb0JpZ0VuZGlhbjxxdWludDMyPigocGl4ZWwgPDwgOCkgfCBxQWxwaGEocGl4ZWwpLCBk
ZXN0UGl4ZWxzKTsKKyAgICAgICAgICAgICAgICBkZXN0UGl4ZWxzICs9IDQ7CiAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICBicmVhazsKICAgICAgICAgfQorICAgICAgICBicmVhazsKICAgICB9
Ci19OwotCi0vLyB0aGlzIGZ1bmN0aW9uIHJlY2VpdmVzIGFuIEhUTUwgaW1hZ2UgZWxlbWVudCBh
cyBhIHBhcmFtZXRlciwgbWFrZXMgaXQgZGlzcGxheSB0aGUgcGl4bWFwL2ltYWdlIGZyb20gUXQK
LWNsYXNzIFF0UGl4bWFwQXNzaWduVG9FbGVtZW50TWV0aG9kIDogcHVibGljIFF0UGl4bWFwUnVu
dGltZU1ldGhvZCB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIGNvbnN0IGNoYXIqIG5hbWUoKSB7IHJl
dHVybiAiYXNzaWduVG9IVE1MSW1hZ2VFbGVtZW50IjsgfQotICAgIEpTVmFsdWUgaW52b2tlKEV4
ZWNTdGF0ZSogZXhlYywgUXRQaXhtYXBJbnN0YW5jZSogaW5zdGFuY2UpCi0gICAgewotICAgICAg
ICBpZiAoIWV4ZWMtPmFyZ3VtZW50Q291bnQoKSkKLSAgICAgICAgICAgIHJldHVybiBqc1VuZGVm
aW5lZCgpOwotCi0gICAgICAgIEpTT2JqZWN0KiBvYmplY3RBcmcgPSBleGVjLT5hcmd1bWVudCgw
KS50b09iamVjdChleGVjKTsKLSAgICAgICAgaWYgKCFvYmplY3RBcmcpCi0gICAgICAgICAgICBy
ZXR1cm4ganNVbmRlZmluZWQoKTsKLQotICAgICAgICBpZiAoIW9iamVjdEFyZy0+aW5oZXJpdHMo
JkpTSFRNTEltYWdlRWxlbWVudDo6c19pbmZvKSkKLSAgICAgICAgICAgIHJldHVybiBqc1VuZGVm
aW5lZCgpOwotCi0gICAgICAgIC8vIHdlIG5vdyBrbm93IHRoYXQgd2UgaGF2ZSBhIHZhbGlkIDxp
bWc+IGVsZW1lbnQgYXMgdGhlIGFyZ3VtZW50LCB3ZSBjYW4gYXR0YWNoIHRoZSBwaXhtYXAgdG8g
aXQuCi0gICAgICAgIFBhc3NSZWZQdHI8U3RpbGxJbWFnZT4gc3RpbGxJbWFnZSA9IFdlYkNvcmU6
OlN0aWxsSW1hZ2U6OmNyZWF0ZShpbnN0YW5jZS0+dG9QaXhtYXAoKSk7Ci0gICAgICAgIEhUTUxJ
bWFnZUVsZW1lbnQqIGltYWdlRWxlbWVudCA9IHN0YXRpY19jYXN0PEhUTUxJbWFnZUVsZW1lbnQq
PihzdGF0aWNfY2FzdDxKU0hUTUxJbWFnZUVsZW1lbnQqPihvYmplY3RBcmcpLT5pbXBsKCkpOwot
ICAgICAgICBpbWFnZUVsZW1lbnQtPnNldENhY2hlZEltYWdlKG5ldyBDYWNoZWRJbWFnZShzdGls
bEltYWdlLmdldCgpKSk7Ci0gICAgICAgIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWwgPSBzdGF0
aWNfY2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGluc3RhbmNlLT5yb290T2JqZWN0KCktPmdsb2Jh
bE9iamVjdCgpKTsKLSAgICAgICAgdG9KUyhleGVjLCBnbG9iYWwsIGltYWdlRWxlbWVudC0+ZG9j
dW1lbnQoKSk7Ci0gICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgIH0KLQotICAgIHZp
cnR1YWwgaW50IG51bVBhcmFtZXRlcnMoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIDE7
Ci0gICAgfQotfTsKLQotLy8gdGhpcyBmdW5jdGlvbiBlbmNvZGVzIHRoZSBpbWFnZSB0byBhIGRh
dGFVcmwsIHRvIGJlIHVzZWQgaW4gYmFja2dyb3VuZCBldGMuIE5vdGU6IHZlcnkgc2xvdy4KLWNs
YXNzIFF0UGl4bWFwVG9EYXRhVXJsTWV0aG9kIDogcHVibGljIFF0UGl4bWFwUnVudGltZU1ldGhv
ZCB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIGNvbnN0IGNoYXIqIG5hbWUoKSB7IHJldHVybiAidG9E
YXRhVXJsIjsgfQotICAgIEpTVmFsdWUgaW52b2tlKEV4ZWNTdGF0ZSogZXhlYywgUXRQaXhtYXBJ
bnN0YW5jZSogaW5zdGFuY2UpCi0gICAgewotICAgICAgICBRQnl0ZUFycmF5IGJ5dGVBcnJheTsK
LSAgICAgICAgUUJ1ZmZlciBidWZmZXIoJmJ5dGVBcnJheSk7Ci0gICAgICAgIGluc3RhbmNlLT50
b0ltYWdlKCkuc2F2ZSgmYnVmZmVyLCAiUE5HIik7Ci0gICAgICAgIGNvbnN0IFFTdHJpbmcgZW5j
b2RlZFN0cmluZyA9IFFMYXRpbjFTdHJpbmcoImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCwiKSArIFFM
YXRpbjFTdHJpbmcoYnl0ZUFycmF5LnRvQmFzZTY0KCkpOwotICAgICAgICBjb25zdCBVU3RyaW5n
IHVzdHJpbmcoKFVDaGFyKillbmNvZGVkU3RyaW5nLnV0ZjE2KCksIGVuY29kZWRTdHJpbmcubGVu
Z3RoKCkpOwotICAgICAgICByZXR1cm4ganNTdHJpbmcoZXhlYywgdXN0cmluZyk7Ci0gICAgfQot
fTsKLQotY2xhc3MgUXRQaXhtYXBUb1N0cmluZ01ldGhvZCA6IHB1YmxpYyBRdFBpeG1hcFJ1bnRp
bWVNZXRob2QgewotICAgIHB1YmxpYzoKLSAgICBzdGF0aWMgY29uc3QgY2hhciogbmFtZSgpIHsg
cmV0dXJuICJ0b1N0cmluZyI7IH0KLSAgICBKU1ZhbHVlIGludm9rZShFeGVjU3RhdGUqIGV4ZWMs
IFF0UGl4bWFwSW5zdGFuY2UqIGluc3RhbmNlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGluc3Rh
bmNlLT52YWx1ZU9mKGV4ZWMpOwotICAgIH0KLX07Ci0KLXN0cnVjdCBRdFBpeG1hcE1ldGFEYXRh
IHsKLSAgICBRdFBpeG1hcFRvRGF0YVVybE1ldGhvZCB0b0RhdGFVcmxNZXRob2Q7Ci0gICAgUXRQ
aXhtYXBUb0ltYWdlRGF0YU1ldGhvZCB0b0ltYWdlRGF0YU1ldGhvZDsKLSAgICBRdFBpeG1hcEFz
c2lnblRvRWxlbWVudE1ldGhvZCBhc3NpZ25Ub0VsZW1lbnRNZXRob2Q7Ci0gICAgUXRQaXhtYXBU
b1N0cmluZ01ldGhvZCB0b1N0cmluZ01ldGhvZDsKLSAgICBRdFBpeG1hcEhlaWdodEZpZWxkIGhl
aWdodEZpZWxkOwotICAgIFF0UGl4bWFwV2lkdGhGaWVsZCB3aWR0aEZpZWxkOwotICAgIFF0UGl4
bWFwQ2xhc3MgY2xzOwotfSBxdF9waXhtYXBfbWV0YURhdGE7Ci0KLS8vIERlcml2ZWQgUnVudGlt
ZU9iamVjdAotY2xhc3MgUXRQaXhtYXBSdW50aW1lT2JqZWN0IDogcHVibGljIFJ1bnRpbWVPYmpl
Y3QgewotcHVibGljOgotICAgIFF0UGl4bWFwUnVudGltZU9iamVjdChFeGVjU3RhdGUqLCBKU0ds
b2JhbE9iamVjdCosIFBhc3NSZWZQdHI8SW5zdGFuY2U+KTsKLQotICAgIHN0YXRpYyBjb25zdCBD
bGFzc0luZm8gc19pbmZvOwotCi0gICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJl
KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNWYWx1ZSBwcm90b3R5cGUpCi0gICAgewotICAg
ICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUoZ2xvYmFsRGF0YSwgcHJvdG90eXBlLCBUeXBl
SW5mbyhPYmplY3RUeXBlLCAgU3RydWN0dXJlRmxhZ3MpLCBBbm9ueW1vdXNTbG90Q291bnQsICZz
X2luZm8pOwotICAgIH0KLQotcHJvdGVjdGVkOgotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBT
dHJ1Y3R1cmVGbGFncyA9IFJ1bnRpbWVPYmplY3Q6OlN0cnVjdHVyZUZsYWdzIHwgT3ZlcnJpZGVz
VmlzaXRDaGlsZHJlbjsKLX07Ci0KLVF0UGl4bWFwUnVudGltZU9iamVjdDo6UXRQaXhtYXBSdW50
aW1lT2JqZWN0KEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
UGFzc1JlZlB0cjxJbnN0YW5jZT4gaW5zdGFuY2UpCi0gICAgOiBSdW50aW1lT2JqZWN0KGV4ZWMs
IGdsb2JhbE9iamVjdCwgV2ViQ29yZTo6ZGVwcmVjYXRlZEdldERPTVN0cnVjdHVyZTxRdFBpeG1h
cFJ1bnRpbWVPYmplY3Q+KGV4ZWMpLCBpbnN0YW5jZSkKLXsKIH0KIAotY29uc3QgQ2xhc3NJbmZv
IFF0UGl4bWFwUnVudGltZU9iamVjdDo6c19pbmZvID0geyAiUXRQaXhtYXBSdW50aW1lT2JqZWN0
IiwgJlJ1bnRpbWVPYmplY3Q6OnNfaW5mbywgMCwgMCB9OwotCi1RdFBpeG1hcENsYXNzOjpRdFBp
eG1hcENsYXNzKCkKK3N0YXRpYyBRUGl4bWFwIHRvUGl4bWFwKGNvbnN0IFFWYXJpYW50JiBkYXRh
KQogewotfQorICAgIGlmIChkYXRhLnR5cGUoKSA9PSBzdGF0aWNfY2FzdDxRVmFyaWFudDo6VHlw
ZT4ocU1ldGFUeXBlSWQ8UVBpeG1hcD4oKSkpCisgICAgICAgIHJldHVybiBkYXRhLnZhbHVlPFFQ
aXhtYXA+KCk7CiAKKyAgICBpZiAoZGF0YS50eXBlKCkgPT0gc3RhdGljX2Nhc3Q8UVZhcmlhbnQ6
OlR5cGU+KHFNZXRhVHlwZUlkPFFJbWFnZT4oKSkpCisgICAgICAgIHJldHVybiBRUGl4bWFwOjpm
cm9tSW1hZ2UoZGF0YS52YWx1ZTxRSW1hZ2U+KCkpOwogCi1DbGFzcyogUXRQaXhtYXBJbnN0YW5j
ZTo6Z2V0Q2xhc3MoKSBjb25zdAotewotICAgIHJldHVybiAmcXRfcGl4bWFwX21ldGFEYXRhLmNs
czsKKyAgICByZXR1cm4gUVBpeG1hcCgpOwogfQogCi1KU1ZhbHVlIFF0UGl4bWFwSW5zdGFuY2U6
OmdldE1ldGhvZChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFt
ZSkKK3N0YXRpYyBRSW1hZ2UgdG9JbWFnZShjb25zdCBRVmFyaWFudCYgZGF0YSkKIHsKLSAgICBN
ZXRob2RMaXN0IG1ldGhvZExpc3QgPSBnZXRDbGFzcygpLT5tZXRob2RzTmFtZWQocHJvcGVydHlO
YW1lLCB0aGlzKTsKLSAgICByZXR1cm4gbmV3IChleGVjKSBSdW50aW1lTWV0aG9kKGV4ZWMsIGV4
ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgV2ViQ29yZTo6ZGVwcmVjYXRlZEdldERPTVN0cnVj
dHVyZTxSdW50aW1lTWV0aG9kPihleGVjKSwgcHJvcGVydHlOYW1lLCBtZXRob2RMaXN0KTsKLX0K
KyAgICBpZiAoZGF0YS50eXBlKCkgPT0gc3RhdGljX2Nhc3Q8UVZhcmlhbnQ6OlR5cGU+KHFNZXRh
VHlwZUlkPFFJbWFnZT4oKSkpCisgICAgICAgIHJldHVybiBkYXRhLnZhbHVlPFFJbWFnZT4oKTsK
IAotSlNWYWx1ZSBRdFBpeG1hcEluc3RhbmNlOjppbnZva2VNZXRob2QoRXhlY1N0YXRlKiBleGVj
LCBSdW50aW1lTWV0aG9kKiBydW50aW1lTWV0aG9kKQotewotICAgIGNvbnN0IE1ldGhvZExpc3Qm
IG1ldGhvZHMgPSAqcnVudGltZU1ldGhvZC0+bWV0aG9kcygpOworICAgIGlmIChkYXRhLnR5cGUo
KSA9PSBzdGF0aWNfY2FzdDxRVmFyaWFudDo6VHlwZT4ocU1ldGFUeXBlSWQ8UVBpeG1hcD4oKSkp
CisgICAgICAgIHJldHVybiBkYXRhLnZhbHVlPFFQaXhtYXA+KCkudG9JbWFnZSgpOwogCi0gICAg
aWYgKG1ldGhvZHMuc2l6ZSgpID09IDEpIHsKLSAgICAgICAgUXRQaXhtYXBSdW50aW1lTWV0aG9k
KiBtZXRob2QgPSBzdGF0aWNfY2FzdDxRdFBpeG1hcFJ1bnRpbWVNZXRob2QqPihtZXRob2RzWzBd
KTsKLSAgICAgICAgcmV0dXJuIG1ldGhvZC0+aW52b2tlKGV4ZWMsIHRoaXMpOwotICAgIH0KLSAg
ICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICByZXR1cm4gUUltYWdlKCk7CiB9CiAKLU1ldGhv
ZExpc3QgUXRQaXhtYXBDbGFzczo6bWV0aG9kc05hbWVkKGNvbnN0IElkZW50aWZpZXImIGlkZW50
aWZpZXIsIEluc3RhbmNlKikgY29uc3QKK3N0YXRpYyBRU2l6ZSBpbWFnZVNpemVGb3JWYXJpYW50
KGNvbnN0IFFWYXJpYW50JiBkYXRhKQogewotICAgIE1ldGhvZExpc3QgbWV0aG9kczsKLSAgICBp
ZiAoaWRlbnRpZmllciA9PSBRdFBpeG1hcFRvRGF0YVVybE1ldGhvZDo6bmFtZSgpKQotICAgICAg
ICBtZXRob2RzLmFwcGVuZCgmcXRfcGl4bWFwX21ldGFEYXRhLnRvRGF0YVVybE1ldGhvZCk7Ci0g
ICAgZWxzZSBpZiAoaWRlbnRpZmllciA9PSBRdFBpeG1hcFRvSW1hZ2VEYXRhTWV0aG9kOjpuYW1l
KCkpCi0gICAgICAgIG1ldGhvZHMuYXBwZW5kKCZxdF9waXhtYXBfbWV0YURhdGEudG9JbWFnZURh
dGFNZXRob2QpOwotICAgIGVsc2UgaWYgKGlkZW50aWZpZXIgPT0gUXRQaXhtYXBBc3NpZ25Ub0Vs
ZW1lbnRNZXRob2Q6Om5hbWUoKSkKLSAgICAgICAgbWV0aG9kcy5hcHBlbmQoJnF0X3BpeG1hcF9t
ZXRhRGF0YS5hc3NpZ25Ub0VsZW1lbnRNZXRob2QpOwotICAgIGVsc2UgaWYgKGlkZW50aWZpZXIg
PT0gUXRQaXhtYXBUb1N0cmluZ01ldGhvZDo6bmFtZSgpKQotICAgICAgICBtZXRob2RzLmFwcGVu
ZCgmcXRfcGl4bWFwX21ldGFEYXRhLnRvU3RyaW5nTWV0aG9kKTsKLSAgICByZXR1cm4gbWV0aG9k
czsKKyAgICBpZiAoZGF0YS50eXBlKCkgPT0gc3RhdGljX2Nhc3Q8UVZhcmlhbnQ6OlR5cGU+KHFN
ZXRhVHlwZUlkPFFQaXhtYXA+KCkpKQorICAgICAgICByZXR1cm4gZGF0YS52YWx1ZTxRUGl4bWFw
PigpLnNpemUoKTsKKyAgICBpZiAoZGF0YS50eXBlKCkgPT0gc3RhdGljX2Nhc3Q8UVZhcmlhbnQ6
OlR5cGU+KHFNZXRhVHlwZUlkPFFJbWFnZT4oKSkpCisgICAgICAgIHJldHVybiBkYXRhLnZhbHVl
PFFJbWFnZT4oKS5zaXplKCk7CisgICAgcmV0dXJuIFFTaXplKDAsIDApOwogfQogCi1GaWVsZCog
UXRQaXhtYXBDbGFzczo6ZmllbGROYW1lZChjb25zdCBJZGVudGlmaWVyJiBpZGVudGlmaWVyLCBJ
bnN0YW5jZSopIGNvbnN0CitzdGF0aWMgSlNWYWx1ZVJlZiBnZXRQaXhtYXBXaWR0aChKU0NvbnRl
eHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgb2JqZWN0LCBKU1N0cmluZ1JlZiBwcm9wZXJ0eU5h
bWUsIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKIHsKLSAgICBpZiAoaWRlbnRpZmllciA9PSBRdFBp
eG1hcFdpZHRoRmllbGQ6Om5hbWUoKSkKLSAgICAgICAgcmV0dXJuICZxdF9waXhtYXBfbWV0YURh
dGEud2lkdGhGaWVsZDsKLSAgICBpZiAoaWRlbnRpZmllciA9PSBRdFBpeG1hcEhlaWdodEZpZWxk
OjpuYW1lKCkpCi0gICAgICAgIHJldHVybiAmcXRfcGl4bWFwX21ldGFEYXRhLmhlaWdodEZpZWxk
OwotICAgIHJldHVybiAwOworICAgIFFWYXJpYW50JiBkYXRhID0gKnN0YXRpY19jYXN0PFFWYXJp
YW50Kj4oSlNPYmplY3RHZXRQcml2YXRlKG9iamVjdCkpOworICAgIHJldHVybiBKU1ZhbHVlTWFr
ZU51bWJlcihjb250ZXh0LCBpbWFnZVNpemVGb3JWYXJpYW50KGRhdGEpLndpZHRoKCkpOwogfQog
Ci12b2lkIFF0UGl4bWFwSW5zdGFuY2U6OmdldFByb3BlcnR5TmFtZXMoRXhlY1N0YXRlKmV4ZWMs
IFByb3BlcnR5TmFtZUFycmF5JiBhcnIpCitzdGF0aWMgSlNWYWx1ZVJlZiBnZXRQaXhtYXBIZWln
aHQoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIG9iamVjdCwgSlNTdHJpbmdSZWYg
cHJvcGVydHlOYW1lLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCiB7Ci0gICAgYXJyLmFkZChJZGVu
dGlmaWVyKGV4ZWMsIFVTdHJpbmcoUXRQaXhtYXBUb0RhdGFVcmxNZXRob2Q6Om5hbWUoKSkpKTsK
LSAgICBhcnIuYWRkKElkZW50aWZpZXIoZXhlYywgVVN0cmluZyhRdFBpeG1hcFRvSW1hZ2VEYXRh
TWV0aG9kOjpuYW1lKCkpKSk7Ci0gICAgYXJyLmFkZChJZGVudGlmaWVyKGV4ZWMsIFVTdHJpbmco
UXRQaXhtYXBBc3NpZ25Ub0VsZW1lbnRNZXRob2Q6Om5hbWUoKSkpKTsKLSAgICBhcnIuYWRkKElk
ZW50aWZpZXIoZXhlYywgVVN0cmluZyhRdFBpeG1hcFRvU3RyaW5nTWV0aG9kOjpuYW1lKCkpKSk7
Ci0gICAgYXJyLmFkZChJZGVudGlmaWVyKGV4ZWMsIFVTdHJpbmcoUXRQaXhtYXBXaWR0aEZpZWxk
OjpuYW1lKCkpKSk7Ci0gICAgYXJyLmFkZChJZGVudGlmaWVyKGV4ZWMsIFVTdHJpbmcoUXRQaXht
YXBIZWlnaHRGaWVsZDo6bmFtZSgpKSkpOworICAgIFFWYXJpYW50JiBkYXRhID0gKnN0YXRpY19j
YXN0PFFWYXJpYW50Kj4oSlNPYmplY3RHZXRQcml2YXRlKG9iamVjdCkpOworICAgIHJldHVybiBK
U1ZhbHVlTWFrZU51bWJlcihjb250ZXh0LCBpbWFnZVNpemVGb3JWYXJpYW50KGRhdGEpLmhlaWdo
dCgpKTsKIH0KIAotSlNWYWx1ZSBRdFBpeG1hcEluc3RhbmNlOjpkZWZhdWx0VmFsdWUoRXhlY1N0
YXRlKiBleGVjLCBQcmVmZXJyZWRQcmltaXRpdmVUeXBlIHB0eXBlKSBjb25zdAorc3RhdGljIEpT
VmFsdWVSZWYgYXNzaWduVG9IVE1MSW1hZ2VFbGVtZW50KEpTQ29udGV4dFJlZiBjb250ZXh0LCBK
U09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgb2JqZWN0LCBzaXplX3QgYXJndW1lbnRD
b3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9u
KQogewotICAgIGlmIChwdHlwZSA9PSBQcmVmZXJOdW1iZXIpIHsKLSAgICAgICAgcmV0dXJuIGpz
Qm9vbGVhbigKLSAgICAgICAgICAgICAgICAoZGF0YS50eXBlKCkgPT0gc3RhdGljX2Nhc3Q8UVZh
cmlhbnQ6OlR5cGU+KHFNZXRhVHlwZUlkPFFJbWFnZT4oKSkgJiYgIShkYXRhLnZhbHVlPFFJbWFn
ZT4oKSkuaXNOdWxsKCkpCi0gICAgICAgICAgICAgICAgfHwgKGRhdGEudHlwZSgpID09IHN0YXRp
Y19jYXN0PFFWYXJpYW50OjpUeXBlPihxTWV0YVR5cGVJZDxRUGl4bWFwPigpKSAmJiAhZGF0YS52
YWx1ZTxRUGl4bWFwPigpLmlzTnVsbCgpKSk7Ci0gICAgfQorICAgIGlmICghYXJndW1lbnRDb3Vu
dCkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwogCi0gICAg
aWYgKHB0eXBlID09IFByZWZlclN0cmluZykKLSAgICAgICAgcmV0dXJuIHZhbHVlT2YoZXhlYyk7
CisgICAgSlNPYmplY3RSZWYgb2JqZWN0QXJnID0gSlNWYWx1ZVRvT2JqZWN0KGNvbnRleHQsIGFy
Z3VtZW50c1swXSwgZXhjZXB0aW9uKTsKKyAgICBpZiAoIW9iamVjdEFyZykKKyAgICAgICAgcmV0
dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwogCi0gICAgcmV0dXJuIGpzVW5kZWZp
bmVkKCk7Ci19CisgICAgSlNPYmplY3QqIGpzT2JqZWN0ID0gOjp0b0pTKG9iamVjdEFyZyk7CiAK
LUpTVmFsdWUgUXRQaXhtYXBJbnN0YW5jZTo6dmFsdWVPZihFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0
Ci17Ci0gICAgY29uc3QgUVN0cmluZyBzdHJpbmdWYWx1ZSA9IFFTdHJpbmc6OmZyb21MYXRpbjEo
IltRdCBOYXRpdmUgUGl4bWFwICUxLCUyXSIpLmFyZyh3aWR0aCgpKS5hcmcoaGVpZ2h0KCkpOwot
ICAgIFVTdHJpbmcgdXN0cmluZygoVUNoYXIqKXN0cmluZ1ZhbHVlLnV0ZjE2KCksIHN0cmluZ1Zh
bHVlLmxlbmd0aCgpKTsKLSAgICByZXR1cm4ganNTdHJpbmcoZXhlYywgdXN0cmluZyk7Ci19Cisg
ICAgaWYgKCFqc09iamVjdC0+aW5oZXJpdHMoJkpTSFRNTEltYWdlRWxlbWVudDo6c19pbmZvKSkK
KyAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwogCi1RdFBpeG1h
cEluc3RhbmNlOjpRdFBpeG1hcEluc3RhbmNlKFBhc3NSZWZQdHI8Um9vdE9iamVjdD4gcm9vdE9i
aiwgY29uc3QgUVZhcmlhbnQmIGQpCi0gICAgICAgIDpJbnN0YW5jZShyb290T2JqKSwgZGF0YShk
KQoteworICAgIFFWYXJpYW50JiBkYXRhID0gKnN0YXRpY19jYXN0PFFWYXJpYW50Kj4oSlNPYmpl
Y3RHZXRQcml2YXRlKG9iamVjdCkpOworCisgICAgLy8gd2Ugbm93IGtub3cgdGhhdCB3ZSBoYXZl
IGEgdmFsaWQgPGltZz4gZWxlbWVudCBhcyB0aGUgYXJndW1lbnQsIHdlIGNhbiBhdHRhY2ggdGhl
IHBpeG1hcCB0byBpdC4KKyAgICBQYXNzUmVmUHRyPFN0aWxsSW1hZ2U+IHN0aWxsSW1hZ2UgPSBX
ZWJDb3JlOjpTdGlsbEltYWdlOjpjcmVhdGUodG9QaXhtYXAoZGF0YSkpOworICAgIEhUTUxJbWFn
ZUVsZW1lbnQqIGltYWdlRWxlbWVudCA9IHN0YXRpY19jYXN0PEhUTUxJbWFnZUVsZW1lbnQqPihz
dGF0aWNfY2FzdDxKU0hUTUxJbWFnZUVsZW1lbnQqPihqc09iamVjdCktPmltcGwoKSk7CisgICAg
aW1hZ2VFbGVtZW50LT5zZXRDYWNoZWRJbWFnZShuZXcgQ2FjaGVkSW1hZ2Uoc3RpbGxJbWFnZS5n
ZXQoKSkpOworICAgIEV4ZWNTdGF0ZSogZXhlYyA9IDo6dG9KUyhjb250ZXh0KTsKKyAgICBKU0RP
TUdsb2JhbE9iamVjdCogZ2xvYmFsID0gc3RhdGljX2Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihl
eGVjLT5keW5hbWljR2xvYmFsT2JqZWN0KCkpOworICAgIHRvSlMoZXhlYywgZ2xvYmFsLCBpbWFn
ZUVsZW1lbnQtPmRvY3VtZW50KCkpOworICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChj
b250ZXh0KTsKIH0KIAotaW50IFF0UGl4bWFwSW5zdGFuY2U6OndpZHRoKCkgY29uc3QKK3N0YXRp
YyBKU1ZhbHVlUmVmIHBpeG1hcFRvSW1hZ2VEYXRhKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09i
amVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgb2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3Vu
dCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQog
ewotICAgIGlmIChkYXRhLnR5cGUoKSA9PSBzdGF0aWNfY2FzdDxRVmFyaWFudDo6VHlwZT4ocU1l
dGFUeXBlSWQ8UVBpeG1hcD4oKSkpCi0gICAgICAgIHJldHVybiBkYXRhLnZhbHVlPFFQaXhtYXA+
KCkud2lkdGgoKTsKLSAgICBpZiAoZGF0YS50eXBlKCkgPT0gc3RhdGljX2Nhc3Q8UVZhcmlhbnQ6
OlR5cGU+KHFNZXRhVHlwZUlkPFFJbWFnZT4oKSkpCi0gICAgICAgIHJldHVybiBkYXRhLnZhbHVl
PFFJbWFnZT4oKS53aWR0aCgpOwotICAgIHJldHVybiAwOworICAgIFFWYXJpYW50JiBkYXRhID0g
KnN0YXRpY19jYXN0PFFWYXJpYW50Kj4oSlNPYmplY3RHZXRQcml2YXRlKG9iamVjdCkpOworICAg
IFFJbWFnZSBpbWFnZSA9IHRvSW1hZ2UoZGF0YSk7CisgICAgaW50IHdpZHRoID0gaW1hZ2Uud2lk
dGgoKTsKKyAgICBpbnQgaGVpZ2h0ID0gaW1hZ2UuaGVpZ2h0KCk7CisKKyAgICBSZWZQdHI8Qnl0
ZUFycmF5PiBieXRlQXJyYXkgPSBCeXRlQXJyYXk6OmNyZWF0ZSh3aWR0aCAqIGhlaWdodCAqIDQp
OworICAgIGNvcHlQaXhlbHMoaW1hZ2UsIHdpZHRoLCBoZWlnaHQsIGJ5dGVBcnJheS0+ZGF0YSgp
KTsKKyAgICBSZWZQdHI8SW1hZ2VEYXRhPiBpbWFnZURhdGEgPSBJbWFnZURhdGE6OmNyZWF0ZShJ
bnRTaXplKHdpZHRoLCBoZWlnaHQpLCBieXRlQXJyYXkpOworICAgIEpTRE9NR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QgPSBzdGF0aWNfY2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KDo6dG9KUyhK
U0NvbnRleHRHZXRHbG9iYWxPYmplY3QoY29udGV4dCkpKTsKKyAgICBKU0M6OkV4ZWNTdGF0ZSog
ZXhlYyA9IDo6dG9KUyhjb250ZXh0KTsKKyAgICByZXR1cm4gOjp0b1JlZihleGVjLCB0b0pTKGV4
ZWMsIGdsb2JhbE9iamVjdCwgaW1hZ2VEYXRhLmdldCgpKSk7CiB9CiAKLWludCBRdFBpeG1hcElu
c3RhbmNlOjpoZWlnaHQoKSBjb25zdAorc3RhdGljIEpTVmFsdWVSZWYgcGl4bWFwVG9EYXRhVXJs
KEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYg
b2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNb
XSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQogewotICAgIGlmIChkYXRhLnR5cGUoKSA9PSBzdGF0
aWNfY2FzdDxRVmFyaWFudDo6VHlwZT4ocU1ldGFUeXBlSWQ8UVBpeG1hcD4oKSkpCi0gICAgICAg
IHJldHVybiBkYXRhLnZhbHVlPFFQaXhtYXA+KCkuaGVpZ2h0KCk7Ci0gICAgaWYgKGRhdGEudHlw
ZSgpID09IHN0YXRpY19jYXN0PFFWYXJpYW50OjpUeXBlPihxTWV0YVR5cGVJZDxRSW1hZ2U+KCkp
KQotICAgICAgICByZXR1cm4gZGF0YS52YWx1ZTxRSW1hZ2U+KCkuaGVpZ2h0KCk7Ci0gICAgcmV0
dXJuIDA7CisgICAgUVZhcmlhbnQmIGRhdGEgPSAqc3RhdGljX2Nhc3Q8UVZhcmlhbnQqPihKU09i
amVjdEdldFByaXZhdGUob2JqZWN0KSk7CisgICAgUUJ5dGVBcnJheSBieXRlQXJyYXk7CisgICAg
UUJ1ZmZlciBidWZmZXIoJmJ5dGVBcnJheSk7CisgICAgdG9JbWFnZShkYXRhKS5zYXZlKCZidWZm
ZXIsICJQTkciKTsKKyAgICBRQnl0ZUFycmF5IGVuY29kZWQgPSBRQnl0ZUFycmF5KCJkYXRhOmlt
YWdlL3BuZztiYXNlNjQsIikgKyBieXRlQXJyYXkudG9CYXNlNjQoKTsKKyAgICBKU1N0cmluZ1Jl
ZiBzdHIgPSBKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhlbmNvZGVkLmNvbnN0RGF0YSgp
KTsKKyAgICBKU1ZhbHVlUmVmIHZhbHVlID0gSlNWYWx1ZU1ha2VTdHJpbmcoY29udGV4dCwgc3Ry
KTsKKyAgICBKU1N0cmluZ1JlbGVhc2Uoc3RyKTsKKyAgICByZXR1cm4gdmFsdWU7CiB9CiAKLVFQ
aXhtYXAgUXRQaXhtYXBJbnN0YW5jZTo6dG9QaXhtYXAoKQorc3RhdGljIEpTVmFsdWVSZWYgcGl4
bWFwVG9TdHJpbmcoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBK
U09iamVjdFJlZiBvYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVm
IGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCiB7Ci0gICAgaWYgKGRhdGEudHlw
ZSgpID09IHN0YXRpY19jYXN0PFFWYXJpYW50OjpUeXBlPihxTWV0YVR5cGVJZDxRUGl4bWFwPigp
KSkKLSAgICAgICAgcmV0dXJuIGRhdGEudmFsdWU8UVBpeG1hcD4oKTsKLQotICAgIGlmIChkYXRh
LnR5cGUoKSA9PSBzdGF0aWNfY2FzdDxRVmFyaWFudDo6VHlwZT4ocU1ldGFUeXBlSWQ8UUltYWdl
PigpKSkgewotICAgICAgICBjb25zdCBRUGl4bWFwIHBpeG1hcCA9IFFQaXhtYXA6OmZyb21JbWFn
ZShkYXRhLnZhbHVlPFFJbWFnZT4oKSk7Ci0gICAgICAgIGRhdGEgPSBRVmFyaWFudDo6ZnJvbVZh
bHVlPFFQaXhtYXA+KHBpeG1hcCk7Ci0gICAgICAgIHJldHVybiBwaXhtYXA7Ci0gICAgfQotCi0g
ICAgcmV0dXJuIFFQaXhtYXAoKTsKKyAgICBRVmFyaWFudCYgZGF0YSA9ICpzdGF0aWNfY2FzdDxR
VmFyaWFudCo+KEpTT2JqZWN0R2V0UHJpdmF0ZShvYmplY3QpKTsKKyAgICBRU2l6ZSBzaXplID0g
aW1hZ2VTaXplRm9yVmFyaWFudChkYXRhKTsKKyAgICBRU3RyaW5nIHN0cmluZ1ZhbHVlID0gUVN0
cmluZygiW1F0IE5hdGl2ZSBQaXhtYXAgJTEsJTJdIikuYXJnKHNpemUud2lkdGgoKSkuYXJnKHNp
emUuaGVpZ2h0KCkpOworICAgIEpTU3RyaW5nUmVmIHN0ciA9IEpTU3RyaW5nQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKHN0cmluZ1ZhbHVlLnRvVXRmOCgpLmNvbnN0RGF0YSgpKTsKKyAgICBKU1ZhbHVl
UmVmIHZhbHVlID0gSlNWYWx1ZU1ha2VTdHJpbmcoY29udGV4dCwgc3RyKTsKKyAgICBKU1N0cmlu
Z1JlbGVhc2Uoc3RyKTsKKyAgICByZXR1cm4gdmFsdWU7CiB9Ci0KLVFJbWFnZSBRdFBpeG1hcElu
c3RhbmNlOjp0b0ltYWdlKCkKK0pTT2JqZWN0UmVmIFF0UGl4bWFwUnVudGltZTo6dG9KUyhKU0Nv
bnRleHRSZWYgY29udGV4dCwgY29uc3QgUVZhcmlhbnQmIHZhbHVlLCBKU1ZhbHVlUmVmKiBleGNl
cHRpb24pCiB7Ci0gICAgaWYgKGRhdGEudHlwZSgpID09IHN0YXRpY19jYXN0PFFWYXJpYW50OjpU
eXBlPihxTWV0YVR5cGVJZDxRSW1hZ2U+KCkpKQotICAgICAgICByZXR1cm4gZGF0YS52YWx1ZTxR
SW1hZ2U+KCk7Ci0KLSAgICBpZiAoZGF0YS50eXBlKCkgPT0gc3RhdGljX2Nhc3Q8UVZhcmlhbnQ6
OlR5cGU+KHFNZXRhVHlwZUlkPFFQaXhtYXA+KCkpKSB7Ci0gICAgICAgIGNvbnN0IFFJbWFnZSBp
bWFnZSA9IGRhdGEudmFsdWU8UVBpeG1hcD4oKS50b0ltYWdlKCk7Ci0gICAgICAgIGRhdGEgPSBR
VmFyaWFudDo6ZnJvbVZhbHVlPFFJbWFnZT4oaW1hZ2UpOwotICAgICAgICByZXR1cm4gaW1hZ2U7
Ci0gICAgfQotCi0gICAgcmV0dXJuIFFJbWFnZSgpOworICAgIHJldHVybiBKU09iamVjdE1ha2Uo
Y29udGV4dCwgZ2V0Q2xhc3NSZWYoKSwgbmV3IFFWYXJpYW50KHZhbHVlKSk7CiB9CiAKLVFWYXJp
YW50IFF0UGl4bWFwSW5zdGFuY2U6OnZhcmlhbnRGcm9tT2JqZWN0KEpTT2JqZWN0KiBvYmplY3Qs
IFFNZXRhVHlwZTo6VHlwZSBoaW50KQorUVZhcmlhbnQgUXRQaXhtYXBSdW50aW1lOjp0b1F0KEpT
Q29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBvYmosIFFNZXRhVHlwZTo6VHlwZSBoaW50
LCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCiB7Ci0gICAgaWYgKCFvYmplY3QpCisgICAgSlNPYmpl
Y3QqIGpzT2JqZWN0OworICAgIEpTSFRNTEltYWdlRWxlbWVudCogZWxlbWVudEpTV3JhcHBlcjsK
KyAgICBIVE1MSW1hZ2VFbGVtZW50KiBpbWFnZUVsZW1lbnQ7CisgICAgQ2FjaGVkSW1hZ2UqIGNh
Y2hlZEltYWdlOworICAgIEltYWdlKiBpbWFnZTsKKyAgICBRUGl4bWFwKiBwaXhtYXA7CisKKyAg
ICBpZiAoIW9iaikKICAgICAgICAgZ290byByZXR1cm5FbXB0eVZhcmlhbnQ7CiAKLSAgICBpZiAo
b2JqZWN0LT5pbmhlcml0cygmSlNIVE1MSW1hZ2VFbGVtZW50OjpzX2luZm8pKSB7Ci0gICAgICAg
IEpTSFRNTEltYWdlRWxlbWVudCogZWxlbWVudEpTV3JhcHBlciA9IHN0YXRpY19jYXN0PEpTSFRN
TEltYWdlRWxlbWVudCo+KG9iamVjdCk7Ci0gICAgICAgIEhUTUxJbWFnZUVsZW1lbnQqIGltYWdl
RWxlbWVudCA9IHN0YXRpY19jYXN0PEhUTUxJbWFnZUVsZW1lbnQqPihlbGVtZW50SlNXcmFwcGVy
LT5pbXBsKCkpOworICAgIGlmIChKU1ZhbHVlSXNPYmplY3RPZkNsYXNzKGNvbnRleHQsIG9iaiwg
UXRQaXhtYXBSdW50aW1lOjpnZXRDbGFzc1JlZigpKSkgeworICAgICAgICBRVmFyaWFudCogb3Jp
Z2luYWxWYXJpYW50ID0gc3RhdGljX2Nhc3Q8UVZhcmlhbnQqPihKU09iamVjdEdldFByaXZhdGUo
b2JqKSk7CisgICAgICAgIGlmIChoaW50ID09IHFNZXRhVHlwZUlkPFFQaXhtYXA+KCkpCisgICAg
ICAgICAgICByZXR1cm4gUVZhcmlhbnQ6OmZyb21WYWx1ZTxRUGl4bWFwPih0b1BpeG1hcCgqb3Jp
Z2luYWxWYXJpYW50KSk7CiAKLSAgICAgICAgaWYgKCFpbWFnZUVsZW1lbnQpCi0gICAgICAgICAg
ICBnb3RvIHJldHVybkVtcHR5VmFyaWFudDsKKyAgICAgICAgaWYgKGhpbnQgPT0gcU1ldGFUeXBl
SWQ8UUltYWdlPigpKQorICAgICAgICAgICAgcmV0dXJuIFFWYXJpYW50Ojpmcm9tVmFsdWU8UUlt
YWdlPih0b0ltYWdlKCpvcmlnaW5hbFZhcmlhbnQpKTsKKyAgICB9CiAKLSAgICAgICAgQ2FjaGVk
SW1hZ2UqIGNhY2hlZEltYWdlID0gaW1hZ2VFbGVtZW50LT5jYWNoZWRJbWFnZSgpOwotICAgICAg
ICBpZiAoIWNhY2hlZEltYWdlKQotICAgICAgICAgICAgZ290byByZXR1cm5FbXB0eVZhcmlhbnQ7
CisgICAganNPYmplY3QgPSA6OnRvSlMob2JqKTsKKyAgICBpZiAoIWpzT2JqZWN0LT5pbmhlcml0
cygmSlNIVE1MSW1hZ2VFbGVtZW50OjpzX2luZm8pKQorICAgICAgICBnb3RvIHJldHVybkVtcHR5
VmFyaWFudDsKIAotICAgICAgICBJbWFnZSogaW1hZ2UgPSBjYWNoZWRJbWFnZS0+aW1hZ2UoKTsK
LSAgICAgICAgaWYgKCFpbWFnZSkKLSAgICAgICAgICAgIGdvdG8gcmV0dXJuRW1wdHlWYXJpYW50
OworICAgIGVsZW1lbnRKU1dyYXBwZXIgPSBzdGF0aWNfY2FzdDxKU0hUTUxJbWFnZUVsZW1lbnQq
Pihqc09iamVjdCk7CisgICAgaW1hZ2VFbGVtZW50ID0gc3RhdGljX2Nhc3Q8SFRNTEltYWdlRWxl
bWVudCo+KGVsZW1lbnRKU1dyYXBwZXItPmltcGwoKSk7CiAKLSAgICAgICAgUVBpeG1hcCogcGl4
bWFwID0gaW1hZ2UtPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCk7Ci0gICAgICAgIGlmICgh
cGl4bWFwKQotICAgICAgICAgICAgZ290byByZXR1cm5FbXB0eVZhcmlhbnQ7CisgICAgaWYgKCFp
bWFnZUVsZW1lbnQpCisgICAgICAgIGdvdG8gcmV0dXJuRW1wdHlWYXJpYW50OwogCi0gICAgICAg
IHJldHVybiAoaGludCA9PSBzdGF0aWNfY2FzdDxRTWV0YVR5cGU6OlR5cGU+KHFNZXRhVHlwZUlk
PFFQaXhtYXA+KCkpKQotICAgICAgICAgICAgICAgICAgPyBRVmFyaWFudDo6ZnJvbVZhbHVlPFFQ
aXhtYXA+KCpwaXhtYXApCi0gICAgICAgICAgICAgICAgICA6IFFWYXJpYW50Ojpmcm9tVmFsdWU8
UUltYWdlPihwaXhtYXAtPnRvSW1hZ2UoKSk7Ci0gICAgfQorICAgIGNhY2hlZEltYWdlID0gaW1h
Z2VFbGVtZW50LT5jYWNoZWRJbWFnZSgpOworICAgIGlmICghY2FjaGVkSW1hZ2UpCisgICAgICAg
IGdvdG8gcmV0dXJuRW1wdHlWYXJpYW50OwogCi0gICAgaWYgKG9iamVjdC0+aW5oZXJpdHMoJlF0
UGl4bWFwUnVudGltZU9iamVjdDo6c19pbmZvKSkgewotICAgICAgICBRdFBpeG1hcFJ1bnRpbWVP
YmplY3QqIHJ1bnRpbWVPYmplY3QgPSBzdGF0aWNfY2FzdDxRdFBpeG1hcFJ1bnRpbWVPYmplY3Qq
PihvYmplY3QpOwotICAgICAgICBRdFBpeG1hcEluc3RhbmNlKiBpbnN0YW5jZSA9IHN0YXRpY19j
YXN0PFF0UGl4bWFwSW5zdGFuY2UqPihydW50aW1lT2JqZWN0LT5nZXRJbnRlcm5hbEluc3RhbmNl
KCkpOwotICAgICAgICBpZiAoIWluc3RhbmNlKQotICAgICAgICAgICAgZ290byByZXR1cm5FbXB0
eVZhcmlhbnQ7CisgICAgaW1hZ2UgPSBjYWNoZWRJbWFnZS0+aW1hZ2UoKTsKKyAgICBpZiAoIWlt
YWdlKQorICAgICAgICBnb3RvIHJldHVybkVtcHR5VmFyaWFudDsKIAotICAgICAgICBpZiAoaGlu
dCA9PSBxTWV0YVR5cGVJZDxRUGl4bWFwPigpKQotICAgICAgICAgICAgcmV0dXJuIFFWYXJpYW50
Ojpmcm9tVmFsdWU8UVBpeG1hcD4oaW5zdGFuY2UtPnRvUGl4bWFwKCkpOworICAgIHBpeG1hcCA9
IGltYWdlLT5uYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpOworICAgIGlmICghcGl4bWFwKQor
ICAgICAgICBnb3RvIHJldHVybkVtcHR5VmFyaWFudDsKIAotICAgICAgICBpZiAoaGludCA9PSBx
TWV0YVR5cGVJZDxRSW1hZ2U+KCkpCi0gICAgICAgICAgICByZXR1cm4gUVZhcmlhbnQ6OmZyb21W
YWx1ZTxRSW1hZ2U+KGluc3RhbmNlLT50b0ltYWdlKCkpOwotICAgIH0KKyAgICByZXR1cm4gKGhp
bnQgPT0gc3RhdGljX2Nhc3Q8UU1ldGFUeXBlOjpUeXBlPihxTWV0YVR5cGVJZDxRUGl4bWFwPigp
KSkKKyAgICAgICAgICAgICAgPyBRVmFyaWFudDo6ZnJvbVZhbHVlPFFQaXhtYXA+KCpwaXhtYXAp
CisgICAgICAgICAgICAgIDogUVZhcmlhbnQ6OmZyb21WYWx1ZTxRSW1hZ2U+KHBpeG1hcC0+dG9J
bWFnZSgpKTsKIAogcmV0dXJuRW1wdHlWYXJpYW50OgogICAgIGlmIChoaW50ID09IHFNZXRhVHlw
ZUlkPFFQaXhtYXA+KCkpCkBAIC00MDAsMjIgKzI0MSwzNCBAQCByZXR1cm5FbXB0eVZhcmlhbnQ6
CiAgICAgcmV0dXJuIFFWYXJpYW50KCk7CiB9CiAKLVJ1bnRpbWVPYmplY3QqIFF0UGl4bWFwSW5z
dGFuY2U6Om5ld1J1bnRpbWVPYmplY3QoRXhlY1N0YXRlKiBleGVjKQorYm9vbCBRdFBpeG1hcFJ1
bnRpbWU6OmNhbkhhbmRsZShRTWV0YVR5cGU6OlR5cGUgaGludCkKIHsKLSAgICByZXR1cm4gbmV3
KGV4ZWMpIFF0UGl4bWFwUnVudGltZU9iamVjdChleGVjLCBleGVjLT5sZXhpY2FsR2xvYmFsT2Jq
ZWN0KCksIHRoaXMpOworICAgIHJldHVybiBoaW50ID09IHFNZXRhVHlwZUlkPFFJbWFnZT4oKSB8
fCBoaW50ID09IHFNZXRhVHlwZUlkPFFQaXhtYXA+KCk7CiB9CiAKLUpTT2JqZWN0KiBRdFBpeG1h
cEluc3RhbmNlOjpjcmVhdGVQaXhtYXBSdW50aW1lT2JqZWN0KEV4ZWNTdGF0ZSogZXhlYywgUGFz
c1JlZlB0cjxSb290T2JqZWN0PiByb290LCBjb25zdCBRVmFyaWFudCYgZGF0YSkKK0pTQ2xhc3NS
ZWYgUXRQaXhtYXBSdW50aW1lOjpnZXRDbGFzc1JlZigpCiB7Ci0gICAgSlNMb2NrIGxvY2soU2ls
ZW5jZUFzc2VydGlvbnNPbmx5KTsKLSAgICBSZWZQdHI8UXRQaXhtYXBJbnN0YW5jZT4gaW5zdGFu
Y2UgPSBhZG9wdFJlZihuZXcgUXRQaXhtYXBJbnN0YW5jZShyb290LCBkYXRhKSk7Ci0gICAgcmV0
dXJuIGluc3RhbmNlLT5jcmVhdGVSdW50aW1lT2JqZWN0KGV4ZWMpOworICAgIHN0YXRpYyBjb25z
dCBKU1N0YXRpY1ZhbHVlIHN0YXRpY1ZhbHVlc1tdID0geworICAgICAgICB7ICJ3aWR0aCIsIGdl
dFBpeG1hcFdpZHRoLCAwLCAwIH0sCisgICAgICAgIHsgImhlaWdodCIsIGdldFBpeG1hcEhlaWdo
dCwgMCwgMCB9CisgICAgfTsKKworICAgIHN0YXRpYyBjb25zdCBKU1N0YXRpY0Z1bmN0aW9uIHN0
YXRpY0Z1bmN0aW9uc1tdID0geworICAgICAgICB7ICJhc3NpZ25UbyIsIGFzc2lnblRvSFRNTElt
YWdlRWxlbWVudCwgMCB9LAorICAgICAgICB7ICJ0b0RhdGFVcmwiLCBwaXhtYXBUb0RhdGFVcmws
IDAgfSwKKyAgICAgICAgeyAidG9JbWFnZURhdGEiLCBwaXhtYXBUb0ltYWdlRGF0YSwgMCB9LAor
ICAgICAgICB7ICJ0b1N0cmluZyIsIHBpeG1hcFRvU3RyaW5nLCAwIH0KKyAgICB9OworCisgICAg
c3RhdGljIGNvbnN0IEpTQ2xhc3NEZWZpbml0aW9uIGNsYXNzRGVmaW5pdGlvbiA9IHsKKyAgICAg
ICAgMCwgMCwgIlF0UGl4bWFwUnVudGltZU9iamVjdCIsIDAsIHN0YXRpY1ZhbHVlcywgc3RhdGlj
RnVuY3Rpb25zLAorICAgICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwCisgICAg
fTsKKworICAgIHN0YXRpYyBKU0NsYXNzUmVmIGNsYXNzUmVmID0gSlNDbGFzc0NyZWF0ZSgmY2xh
c3NEZWZpbml0aW9uKTsKKyAgICByZXR1cm4gY2xhc3NSZWY7CiB9CiAKLWJvb2wgUXRQaXhtYXBJ
bnN0YW5jZTo6Y2FuSGFuZGxlKFFNZXRhVHlwZTo6VHlwZSBoaW50KQotewotICAgIHJldHVybiBo
aW50ID09IHFNZXRhVHlwZUlkPFFJbWFnZT4oKSB8fCBoaW50ID09IHFNZXRhVHlwZUlkPFFQaXht
YXA+KCk7Ci19CiAKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYnJpZGdlL3F0L3F0
X3BpeG1hcHJ1bnRpbWUuaCBiL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9xdC9xdF9waXhtYXBydW50
aW1lLmgKaW5kZXggYjQ3NGVmZC4uZGYwNjA4ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
YnJpZGdlL3F0L3F0X3BpeG1hcHJ1bnRpbWUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9icmlkZ2Uv
cXQvcXRfcGl4bWFwcnVudGltZS5oCkBAIC0yMiwzMCArMjIsMTkgQEAKIAogI2luY2x1ZGUgIkJy
aWRnZUpTQy5oIgogI2luY2x1ZGUgPFFWYXJpYW50PgorI2luY2x1ZGUgIkphdmFTY3JpcHQuaCIK
IAogbmFtZXNwYWNlIEpTQyB7CiAKIG5hbWVzcGFjZSBCaW5kaW5ncyB7CiAKLWNsYXNzIFF0UGl4
bWFwSW5zdGFuY2UgOiBwdWJsaWMgSW5zdGFuY2UgewotICAgIFFWYXJpYW50IGRhdGE7CitjbGFz
cyBRdFBpeG1hcFJ1bnRpbWUgewogcHVibGljOgotICAgIFF0UGl4bWFwSW5zdGFuY2UoUGFzc1Jl
ZlB0cjxSb290T2JqZWN0PiByb290T2JqLCBjb25zdCBRVmFyaWFudCYgbmV3RGF0YSk7Ci0gICAg
dmlydHVhbCBDbGFzcyogZ2V0Q2xhc3MoKSBjb25zdDsKLSAgICB2aXJ0dWFsIEpTVmFsdWUgZ2V0
TWV0aG9kKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lKTsK
LSAgICB2aXJ0dWFsIEpTVmFsdWUgaW52b2tlTWV0aG9kKEV4ZWNTdGF0ZSosIFJ1bnRpbWVNZXRo
b2QqKTsKLSAgICB2aXJ0dWFsIHZvaWQgZ2V0UHJvcGVydHlOYW1lcyhFeGVjU3RhdGUqLCBQcm9w
ZXJ0eU5hbWVBcnJheSYpOwotCi0gICAgdmlydHVhbCBKU1ZhbHVlIGRlZmF1bHRWYWx1ZShFeGVj
U3RhdGUqLCBQcmVmZXJyZWRQcmltaXRpdmVUeXBlKSBjb25zdDsKLSAgICB2aXJ0dWFsIEpTVmFs
dWUgdmFsdWVPZihFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0OwotICAgIGludCB3aWR0aCgpIGNvbnN0
OwotICAgIGludCBoZWlnaHQoKSBjb25zdDsKLSAgICBRUGl4bWFwIHRvUGl4bWFwKCk7Ci0gICAg
UUltYWdlIHRvSW1hZ2UoKTsKLSAgICBSdW50aW1lT2JqZWN0KiBuZXdSdW50aW1lT2JqZWN0KEV4
ZWNTdGF0ZSogZXhlYyk7Ci0gICAgc3RhdGljIEpTT2JqZWN0KiBjcmVhdGVQaXhtYXBSdW50aW1l
T2JqZWN0KEV4ZWNTdGF0ZSosIFBhc3NSZWZQdHI8Um9vdE9iamVjdD4sIGNvbnN0IFFWYXJpYW50
Jik7Ci0gICAgc3RhdGljIFFWYXJpYW50IHZhcmlhbnRGcm9tT2JqZWN0KEpTT2JqZWN0KiwgUU1l
dGFUeXBlOjpUeXBlIGhpbnQpOworICAgIHN0YXRpYyBKU09iamVjdFJlZiB0b0pTKEpTQ29udGV4
dFJlZiwgY29uc3QgUVZhcmlhbnQmLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pOworICAgIHN0YXRp
YyBRVmFyaWFudCB0b1F0KEpTQ29udGV4dFJlZiwgSlNPYmplY3RSZWYsIFFNZXRhVHlwZTo6VHlw
ZSBoaW50LCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pOwogICAgIHN0YXRpYyBib29sIGNhbkhhbmRs
ZShRTWV0YVR5cGU6OlR5cGUgaGludCk7CisKKyAgICBzdGF0aWMgSlNDbGFzc1JlZiBnZXRDbGFz
c1JlZigpOwogfTsKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYnJpZGdlL3F0L3F0
X3J1bnRpbWUuY3BwIGIvU291cmNlL1dlYkNvcmUvYnJpZGdlL3F0L3F0X3J1bnRpbWUuY3BwCmlu
ZGV4IDYyZDQ0MTcuLjExNzVjZmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9x
dC9xdF9ydW50aW1lLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9icmlkZ2UvcXQvcXRfcnVudGlt
ZS5jcHAKQEAgLTIwLDI2ICsyMCwyMCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUg
InF0X3J1bnRpbWUuaCIKIAorI2luY2x1ZGUgIkFQSUNhc3QuaCIKKyNpbmNsdWRlICJKYXZhU2Ny
aXB0LmgiCisKICNpbmNsdWRlICJCb29sZWFuT2JqZWN0LmgiCiAjaW5jbHVkZSAiRGF0ZUluc3Rh
bmNlLmgiCiAjaW5jbHVkZSAiRGF0ZU1hdGguaCIKLSNpbmNsdWRlICJEYXRlUHJvdG90eXBlLmgi
CiAjaW5jbHVkZSAiRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQuaCIKLSNpbmNsdWRlICJGdW5jdGlv
blByb3RvdHlwZS5oIgotI2luY2x1ZGUgIkludGVycHJldGVyLmgiCi0jaW5jbHVkZSAiSlNBcnJh
eS5oIgogI2luY2x1ZGUgIkpTQnl0ZUFycmF5LmgiCiAjaW5jbHVkZSAiSlNEb2N1bWVudC5oIgog
I2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgogI2luY2x1ZGUgIkpTRE9NV2luZG93LmgiCi0jaW5j
bHVkZSA8SlNGdW5jdGlvbi5oPgotI2luY2x1ZGUgIkpTR2xvYmFsT2JqZWN0LmgiCisjaW5jbHVk
ZSAiSlNGdW5jdGlvbi5oIgogI2luY2x1ZGUgIkpTSFRNTEVsZW1lbnQuaCIKLSNpbmNsdWRlICJK
U0xvY2suaCIKLSNpbmNsdWRlICJKU09iamVjdC5oIgotI2luY2x1ZGUgIk9iamVjdFByb3RvdHlw
ZS5oIgotI2luY2x1ZGUgIlByb3BlcnR5TmFtZUFycmF5LmgiCi0jaW5jbHVkZSAiUmVnRXhwQ29u
c3RydWN0b3IuaCIKKyNpbmNsdWRlICJKU09iamVjdFJlZlByaXZhdGUuaCIKICNpbmNsdWRlICJS
ZWdFeHBPYmplY3QuaCIKICNpbmNsdWRlICJxZGF0ZXRpbWUuaCIKICNpbmNsdWRlICJxZGVidWcu
aCIKQEAgLTQ3LDE0ICs0MSwxNSBAQAogI2luY2x1ZGUgInFtZXRhdHlwZS5oIgogI2luY2x1ZGUg
InFvYmplY3QuaCIKICNpbmNsdWRlICJxc3RyaW5nbGlzdC5oIgotI2luY2x1ZGUgInF0X2luc3Rh
bmNlLmgiCiAjaW5jbHVkZSAicXRfcGl4bWFwcnVudGltZS5oIgogI2luY2x1ZGUgInF2YXJsZW5n
dGhhcnJheS5oIgogI2luY2x1ZGUgInF3ZWJlbGVtZW50LmgiCisjaW5jbHVkZSAiUmVnRXhwLmgi
CiAjaW5jbHVkZSA8bGltaXRzLmg+Ci0jaW5jbHVkZSA8cnVudGltZS9FcnJvci5oPgotI2luY2x1
ZGUgPHJ1bnRpbWVfYXJyYXkuaD4KLSNpbmNsdWRlIDxydW50aW1lX29iamVjdC5oPgorI2luY2x1
ZGUgPFF0RGVidWc+CisKKyNpbmNsdWRlICJxdF9jbGFzcy5oIgorI2luY2x1ZGUgInJ1bnRpbWVf
cm9vdC5oIgogCiAvLyBRdFNjcmlwdCBoYXMgdGhlc2UKIFFfREVDTEFSRV9NRVRBVFlQRShRT2Jq
ZWN0TGlzdCk7CkBAIC0xMDMsNyArOTgsNiBAQCB0eXBlZGVmIGVudW0gewogICAgIFFPYmosCiAg
ICAgT2JqZWN0LAogICAgIE51bGwsCi0gICAgUlRBcnJheSwKICAgICBKU0J5dGVBcnJheQogfSBK
U1JlYWxUeXBlOwogCkBAIC0xMTksNiArMTEzLDIzIEBAIFFEZWJ1ZyBvcGVyYXRvcjw8KFFEZWJ1
ZyBkYmcsIGNvbnN0IEpTUmVhbFR5cGUgJmMpCiB9CiAjZW5kaWYKIAorSlNET01HbG9iYWxPYmpl
Y3QqIHRvSlNHbG9iYWxPYmplY3QoSlNDb250ZXh0UmVmIGNvbnRleHQpCit7CisgICAgRXhlY1N0
YXRlKiBleGVjID0gOjp0b0pTKGNvbnRleHQpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxKU0RP
TUdsb2JhbE9iamVjdCo+KGV4ZWMtPmR5bmFtaWNHbG9iYWxPYmplY3QoKSk7Cit9CisKK3ZvaWQg
c2V0RXhjZXB0aW9uKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU1ZhbHVlUmVmKiBleGNlcHRpb24s
IGNvbnN0IFFTdHJpbmcmIHRleHQpCit7CisgICAgaWYgKCFleGNlcHRpb24pCisgICAgICAgIHJl
dHVybjsKKworICAgIEpTU3RyaW5nUmVmIGVycm9yU3RyID0gSlNTdHJpbmdDcmVhdGVXaXRoVVRG
OENTdHJpbmcodGV4dC50b1V0ZjgoKSk7CisgICAgSlNWYWx1ZVJlZiBlcnJvclZhbFtdID0geyBK
U1ZhbHVlTWFrZVN0cmluZyhjb250ZXh0LCBlcnJvclN0cikgfTsKKyAgICAqZXhjZXB0aW9uID0g
SlNPYmplY3RNYWtlRXJyb3IoY29udGV4dCwgMSwgZXJyb3JWYWwsIDApOworICAgIEpTU3RyaW5n
UmVsZWFzZShlcnJvclN0cik7Cit9CisKIC8vIHRoaXMgaXMgaGVyZSBhcyBhIHByb3h5LCBzbyB3
ZSdkIGhhdmUgYSBjbGFzcyB0byBmcmllbmQgaW4gUVdlYkVsZW1lbnQsCiAvLyBhcyBnZXR0aW5n
L3NldHRpbmcgYSBXZWJDb3JlIGluIFFXZWJFbGVtZW50IGlzIHByaXZhdGUKIGNsYXNzIFF0V2Vi
RWxlbWVudFJ1bnRpbWUgewpAQCAtMTI4LDYgKzEzOSwzMiBAQCBwdWJsaWM6CiAgICAgICAgIHJl
dHVybiBRV2ViRWxlbWVudChlbGVtZW50KTsKICAgICB9CiAKKyAgICBzdGF0aWMgUVdlYkVsZW1l
bnQgY3JlYXRlKEpTQ29udGV4dFJlZiwgSlNPYmplY3RSZWYgb2JqZWN0LCBpbnQmIGRpc3QsIEpT
VmFsdWVSZWYqKQorICAgIHsKKyAgICAgICAgSlNPYmplY3QqIGpzT2JqZWN0ID0gOjp0b0pTKG9i
amVjdCk7CisgICAgICAgIGlmICghanNPYmplY3QpCisgICAgICAgICAgICByZXR1cm4gUVdlYkVs
ZW1lbnQoKTsKKworICAgICAgICBpZiAoanNPYmplY3QtPmluaGVyaXRzKCZKU0hUTUxFbGVtZW50
OjpzX2luZm8pKSB7CisgICAgICAgICAgICBkaXN0ID0gMDsKKyAgICAgICAgICAgIHJldHVybiBj
cmVhdGUoKHN0YXRpY19jYXN0PEpTSFRNTEVsZW1lbnQqPihqc09iamVjdCkpLT5pbXBsKCkpOwor
ICAgICAgICB9CisKKyAgICAgICAgaWYgKGpzT2JqZWN0LT5pbmhlcml0cygmSlNEb2N1bWVudDo6
c19pbmZvKSkgeworICAgICAgICAgICAgZGlzdCA9IDA7CisgICAgICAgICAgICByZXR1cm4gY3Jl
YXRlKChzdGF0aWNfY2FzdDxKU0RvY3VtZW50Kj4oanNPYmplY3QpKS0+aW1wbCgpLT5kb2N1bWVu
dEVsZW1lbnQoKSk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gUVdlYkVsZW1lbnQoKTsK
KyAgICB9CisKKyAgICBzdGF0aWMgSlNPYmplY3RSZWYgdG9KUyhKU0NvbnRleHRSZWYgY29udGV4
dCwgY29uc3QgUVdlYkVsZW1lbnQmIGVsZW1lbnQsIEpTVmFsdWVSZWYqKQorICAgIHsKKyAgICAg
ICAgRXhlY1N0YXRlKiBleGVjID0gOjp0b0pTKGNvbnRleHQpOworICAgICAgICBKU1ZhbHVlIHZh
bHVlID0gV2ViQ29yZTo6dG9KUyhleGVjLCB0b0pTR2xvYmFsT2JqZWN0KGNvbnRleHQpLCBlbGVt
ZW50Lm1fZWxlbWVudCk7CisgICAgICAgIHJldHVybiA6OnRvUmVmKHZhbHVlLmdldE9iamVjdCgp
KTsKKyAgICB9CisKICAgICBzdGF0aWMgRWxlbWVudCogZ2V0KGNvbnN0IFFXZWJFbGVtZW50JiBl
bGVtZW50KQogICAgIHsKICAgICAgICAgcmV0dXJuIGVsZW1lbnQubV9lbGVtZW50OwpAQCAtMTQ0
LDgzICsxODEsNTEyIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIFFEUlROb2RlKG5vZGUpOwog
ICAgIH0KIAorICAgIHN0YXRpYyBRRFJUTm9kZSBjcmVhdGUoSlNDb250ZXh0UmVmIGNvbnRleHQs
IEpTT2JqZWN0UmVmIG9iamVjdCwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQorICAgIHsKKyAgICAg
ICAgSlNPYmplY3QqIGpzT2JqZWN0ID0gOjp0b0pTKG9iamVjdCk7CisgICAgICAgIGlmIChqc09i
amVjdC0+aW5oZXJpdHMoJkpTTm9kZTo6c19pbmZvKSkKKyAgICAgICAgICAgIHJldHVybiBRRFJU
Tm9kZShzdGF0aWNfY2FzdDxKU05vZGUqPihqc09iamVjdCktPmltcGwoKSk7CisKKyAgICAgICAg
cmV0dXJuIFFEUlROb2RlKCk7CisgICAgfQorCisgICAgc3RhdGljIEpTT2JqZWN0UmVmIHRvSlMo
SlNDb250ZXh0UmVmIGNvbnRleHQsIGNvbnN0IFFEUlROb2RlJiBub2RlLCBKU1ZhbHVlUmVmKikK
KyAgICB7CisgICAgICAgIEV4ZWNTdGF0ZSogZXhlYyA9IDo6dG9KUyhjb250ZXh0KTsKKyAgICAg
ICAgSlNDOjpKU1ZhbHVlIHZhbHVlID0gV2ViQ29yZTo6dG9KUyhleGVjLCB0b0pTR2xvYmFsT2Jq
ZWN0KGNvbnRleHQpLCBnZXQobm9kZSkpOworICAgICAgICByZXR1cm4gOjp0b1JlZih2YWx1ZS5n
ZXRPYmplY3QoKSk7CisgICAgfQorCiAgICAgc3RhdGljIE5vZGUqIGdldChjb25zdCBRRFJUTm9k
ZSYgbm9kZSkKICAgICB7CiAgICAgICAgIHJldHVybiBub2RlLm1fbm9kZTsKICAgICB9CiB9Owog
Ci1zdGF0aWMgSlNSZWFsVHlwZSB2YWx1ZVJlYWxUeXBlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1
ZSB2YWwpCitRVmFyaWFudCB0b1F0KEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU1ZhbHVlUmVmIHZh
bHVlLCBRTWV0YVR5cGU6OlR5cGUgaGludCwgaW50ICpkaXN0YW5jZSwgSGFzaFNldDxKU09iamVj
dFJlZj4qIHZpc2l0ZWRPYmplY3RzLCBpbnQgcmVjdXJzaW9uTGltaXQsIEpTVmFsdWVSZWYqIGV4
Y2VwdGlvbik7CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBpc0pTQnl0ZUFycmF5KEpTQ29udGV4dFJl
ZiBjb250ZXh0LCBKU09iamVjdFJlZiBvYmplY3QpCit7CisgICAgSlNPYmplY3QqIGpzT2JqZWN0
ID0gOjp0b0pTKG9iamVjdCk7CisgICAgcmV0dXJuIGpzT2JqZWN0LT5pbmhlcml0cygmSlNDOjpK
U0J5dGVBcnJheTo6c19kZWZhdWx0SW5mbyk7Cit9CisKK3N0YXRpYyBKU09iamVjdFJlZiB0b0pT
Qnl0ZUFycmF5KEpTQ29udGV4dFJlZiBjb250ZXh0LCBzaXplX3Qgc2l6ZSwgdm9pZCogZGF0YSwg
SlNWYWx1ZVJlZiogZXhjZXB0aW9uKQoreworICAgIEV4ZWNTdGF0ZSogZXhlYyA9IDo6dG9KUyhj
b250ZXh0KTsKKworICAgIFJlZlB0cjxXVEY6OkJ5dGVBcnJheT4gYnl0ZUFycmF5ID0gV1RGOjpC
eXRlQXJyYXk6OmNyZWF0ZShzaXplKTsKKyAgICBtZW1jcHkoYnl0ZUFycmF5LT5kYXRhKCksIGRh
dGEsIHNpemUpOworCisgICAgSlNPYmplY3QqIHJlc3VsdCA9ICBuZXcgKGV4ZWMpIEpTQzo6SlNC
eXRlQXJyYXkoZXhlYywgSlNDOjpKU0J5dGVBcnJheTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPmds
b2JhbERhdGEoKSwganNOdWxsKCkpLCBieXRlQXJyYXkuZ2V0KCkpOworCisgICAgaWYgKGV4ZWMt
PmhhZEV4Y2VwdGlvbigpKSB7CisgICAgICAgIGlmIChleGNlcHRpb24pCisgICAgICAgICAgICAq
ZXhjZXB0aW9uID0gdG9SZWYoZXhlYywgZXhlYy0+ZXhjZXB0aW9uKCkpOworICAgICAgICBleGVj
LT5jbGVhckV4Y2VwdGlvbigpOworICAgICAgICByZXN1bHQgPSAwOworICAgIH0KKworICAgIHJl
dHVybiB0b1JlZihyZXN1bHQpOworfQorCitzdGF0aWMgdW5zaWduZWQgY2hhcioganNCeXRlQXJy
YXlHZXREYXRhKEpTQ29udGV4dFJlZiwgSlNPYmplY3RSZWYgb2JqZWN0LCBzaXplX3QmIHNpemUs
IEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKK3sKKyAgICBKU09iamVjdCoganNPYmplY3QgPSA6OnRv
SlMob2JqZWN0KTsKKyAgICBKU0M6OkpTQnl0ZUFycmF5KiBieXRlQXJyYXkgPSBzdGF0aWNfY2Fz
dDxKU0M6OkpTQnl0ZUFycmF5Kj4oanNPYmplY3QpOworICAgIFdURjo6Qnl0ZUFycmF5KiBkYXRh
ID0gYnl0ZUFycmF5LT5zdG9yYWdlKCk7CisgICAgaWYgKCFkYXRhKSB7CisgICAgICAgIHNpemUg
PSAwOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBzaXplID0gZGF0YS0+bGVuZ3Ro
KCk7CisgICAgcmV0dXJuIGRhdGEtPmRhdGEoKTsKK30KKworc3RhdGljIGlubGluZSBib29sIGlz
SlNBcnJheShKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgb2JqZWN0KQogewotICAg
IGlmICh2YWwuaXNOdW1iZXIoKSkKKyAgICBKU09iamVjdCoganNPYmplY3QgPSA6OnRvSlMob2Jq
ZWN0KTsKKyAgICByZXR1cm4gKGpzT2JqZWN0LT5pbmhlcml0cygmSlNBcnJheTo6c19pbmZvKSk7
Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBpc0pTRGF0ZShKU0NvbnRleHRSZWYgY29udGV4dCwg
SlNPYmplY3RSZWYgb2JqZWN0KQoreworICAgIEpTT2JqZWN0KiBqc09iamVjdCA9IDo6dG9KUyhv
YmplY3QpOworICAgIHJldHVybiBqc09iamVjdC0+aW5oZXJpdHMoJkRhdGVJbnN0YW5jZTo6c19p
bmZvKTsKK30KKworc3RhdGljIGlubGluZSBib29sIGlzSlNSZWdFeHAoSlNDb250ZXh0UmVmIGNv
bnRleHQsIEpTT2JqZWN0UmVmIG9iamVjdCkKK3sKKyAgICBKU09iamVjdCoganNPYmplY3QgPSA6
OnRvSlMob2JqZWN0KTsKKyAgICByZXR1cm4ganNPYmplY3QtPmluaGVyaXRzKCZSZWdFeHBPYmpl
Y3Q6OnNfaW5mbyk7Cit9CisKK3N0YXRpYyBRU3RyaW5nIHRvUVN0cmluZyhKU1N0cmluZ1JlZiBz
dHIpCit7CisgICAgc2l6ZV90IGxlbmd0aCA9IEpTU3RyaW5nR2V0TGVuZ3RoKHN0cik7CisgICAg
Y29uc3QgSlNDaGFyKiBzdHJEYXRhID0gSlNTdHJpbmdHZXRDaGFyYWN0ZXJzUHRyKHN0cik7Cisg
ICAgcmV0dXJuIFFTdHJpbmcocmVpbnRlcnByZXRfY2FzdDxjb25zdCBRQ2hhcio+KHN0ckRhdGEp
LCBsZW5ndGgpOworfQorCitzdGF0aWMgUVN0cmluZyB0b1FTdHJpbmcoSlNDb250ZXh0UmVmIGNv
bnRleHQsIEpTVmFsdWVSZWYgdmFsdWUsIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKK3sKKyAgICBp
ZiAoIXZhbHVlKQorICAgICAgICByZXR1cm4gUVN0cmluZygpOworICAgIEpTU3RyaW5nUmVmIHN0
ciA9IEpTVmFsdWVUb1N0cmluZ0NvcHkoY29udGV4dCwgdmFsdWUsIGV4Y2VwdGlvbik7CisgICAg
UVN0cmluZyBxc3RyID0gdG9RU3RyaW5nKHN0cik7CisgICAgSlNTdHJpbmdSZWxlYXNlKHN0cik7
CisgICAgcmV0dXJuIHFzdHI7Cit9CisKK3N0YXRpYyBKU1JlYWxUeXBlIHZhbHVlUmVhbFR5cGUo
SlNDb250ZXh0UmVmIGNvbnRleHQsIEpTVmFsdWVSZWYgdmFsdWUsIEpTVmFsdWVSZWYqIGV4Y2Vw
dGlvbikKK3sKKyAgICBpZiAoSlNWYWx1ZUlzTnVtYmVyKGNvbnRleHQsIHZhbHVlKSkKICAgICAg
ICAgcmV0dXJuIE51bWJlcjsKLSAgICBlbHNlIGlmICh2YWwuaXNTdHJpbmcoKSkKKworICAgIGlm
IChKU1ZhbHVlSXNTdHJpbmcoY29udGV4dCwgdmFsdWUpKQogICAgICAgICByZXR1cm4gU3RyaW5n
OwotICAgIGVsc2UgaWYgKHZhbC5pc0Jvb2xlYW4oKSkKKworICAgIGlmIChKU1ZhbHVlSXNCb29s
ZWFuKGNvbnRleHQsIHZhbHVlKSkKICAgICAgICAgcmV0dXJuIEJvb2xlYW47Ci0gICAgZWxzZSBp
ZiAodmFsLmlzTnVsbCgpKQorCisgICAgaWYgKEpTVmFsdWVJc051bGwoY29udGV4dCwgdmFsdWUp
KQogICAgICAgICByZXR1cm4gTnVsbDsKLSAgICBlbHNlIGlmIChpc0pTQnl0ZUFycmF5KCZleGVj
LT5nbG9iYWxEYXRhKCksIHZhbCkpCisKKyAgICBpZiAoIUpTVmFsdWVJc09iamVjdChjb250ZXh0
LCB2YWx1ZSkpCisgICAgICAgIHJldHVybiBTdHJpbmc7CisKKyAgICBKU09iamVjdFJlZiBvYmpl
Y3QgPSBKU1ZhbHVlVG9PYmplY3QoY29udGV4dCwgdmFsdWUsIGV4Y2VwdGlvbik7CisKKyAgICBp
ZiAoaXNKU0J5dGVBcnJheShjb250ZXh0LCBvYmplY3QpKQogICAgICAgICByZXR1cm4gSlNCeXRl
QXJyYXk7Ci0gICAgZWxzZSBpZiAodmFsLmlzT2JqZWN0KCkpIHsKLSAgICAgICAgSlNPYmplY3Qg
Km9iamVjdCA9IHZhbC50b09iamVjdChleGVjKTsKLSAgICAgICAgaWYgKG9iamVjdC0+aW5oZXJp
dHMoJlJ1bnRpbWVBcnJheTo6c19pbmZvKSkgIC8vIFJ1bnRpbWVBcnJheSAnaW5oZXJpdHMnIGZy
b20gQXJyYXksIGJ1dCBub3QgaW4gQysrCi0gICAgICAgICAgICByZXR1cm4gUlRBcnJheTsKLSAg
ICAgICAgZWxzZSBpZiAob2JqZWN0LT5pbmhlcml0cygmSlNBcnJheTo6c19pbmZvKSkKLSAgICAg
ICAgICAgIHJldHVybiBBcnJheTsKLSAgICAgICAgZWxzZSBpZiAob2JqZWN0LT5pbmhlcml0cygm
RGF0ZUluc3RhbmNlOjpzX2luZm8pKQotICAgICAgICAgICAgcmV0dXJuIERhdGU7Ci0gICAgICAg
IGVsc2UgaWYgKG9iamVjdC0+aW5oZXJpdHMoJlJlZ0V4cE9iamVjdDo6c19pbmZvKSkKLSAgICAg
ICAgICAgIHJldHVybiBSZWdFeHA7Ci0gICAgICAgIGVsc2UgaWYgKG9iamVjdC0+aW5oZXJpdHMo
JlJ1bnRpbWVPYmplY3Q6OnNfaW5mbykpCi0gICAgICAgICAgICByZXR1cm4gUU9iajsKLSAgICAg
ICAgcmV0dXJuIE9iamVjdDsKKworICAgIGlmIChpc0pTQXJyYXkoY29udGV4dCwgb2JqZWN0KSkK
KyAgICAgICAgcmV0dXJuIEFycmF5OworCisgICAgaWYgKGlzSlNEYXRlKGNvbnRleHQsIG9iamVj
dCkpCisgICAgICAgIHJldHVybiBEYXRlOworCisgICAgaWYgKGlzSlNSZWdFeHAoY29udGV4dCwg
b2JqZWN0KSkKKyAgICAgICAgcmV0dXJuIFJlZ0V4cDsKKworICAgIGlmIChKU1ZhbHVlSXNPYmpl
Y3RPZkNsYXNzKGNvbnRleHQsIHZhbHVlLCBRdENsYXNzOjpxdE9iamVjdEJhc2VDbGFzcygpKSkK
KyAgICAgICAgcmV0dXJuIFFPYmo7CisKKyAgICByZXR1cm4gT2JqZWN0OworfQorCitzdGF0aWMg
UVJlZ0V4cCB0b1FSZWdFeHAoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTUmVhbFR5cGUgdHlwZSwg
SlNWYWx1ZVJlZiB2YWx1ZSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uLCBpbnQmIGRpc3QpCit7Cisg
ICAgaWYgKHR5cGUgPT0gUmVnRXhwKSB7CisgICAgICAgIC8vIEF0dGVtcHQgdG8gY29udmVydC4u
IGEgYml0IHJpc2t5CisgICAgICAgIFFTdHJpbmcgcXN0cmluZyA9IHRvUVN0cmluZyhjb250ZXh0
LCB2YWx1ZSwgZXhjZXB0aW9uKTsKKyAgICAgICAgLy8gdGhpcyBpcyBvZiB0aGUgZm9ybSAnL3h4
eHh4eC9pJworICAgICAgICBpbnQgZmlyc3RTbGFzaCA9IHFzdHJpbmcuaW5kZXhPZihRTGF0aW4x
Q2hhcignLycpKTsKKyAgICAgICAgaW50IGxhc3RTbGFzaCA9IHFzdHJpbmcubGFzdEluZGV4T2Yo
UUxhdGluMUNoYXIoJy8nKSk7CisgICAgICAgIGlmIChmaXJzdFNsYXNoIDwgMCB8fCBsYXN0U2xh
c2ggPD0gZmlyc3RTbGFzaCkgeworICAgICAgICAgICAgcUNvbnZEZWJ1ZygpIDw8ICJjb3VsZG4n
dCBwYXJzZSBhIEpTIHJlZ2V4cCI7CisgICAgICAgICAgICByZXR1cm4gUVJlZ0V4cCgpOworICAg
ICAgICB9CisgICAgICAgIFFSZWdFeHAgcmVnZXhwOworICAgICAgICByZWdleHAuc2V0UGF0dGVy
bihxc3RyaW5nLm1pZChmaXJzdFNsYXNoICsgMSwgbGFzdFNsYXNoIC0gZmlyc3RTbGFzaCAtIDEp
KTsKKyAgICAgICAgaWYgKHFzdHJpbmcubWlkKGxhc3RTbGFzaCArIDEpLmNvbnRhaW5zKFFMYXRp
bjFDaGFyKCdpJykpKQorICAgICAgICAgICAgcmVnZXhwLnNldENhc2VTZW5zaXRpdml0eShRdDo6
Q2FzZUluc2Vuc2l0aXZlKTsKKworICAgICAgICBkaXN0ID0gMDsKKyAgICAgICAgcmV0dXJuIHJl
Z2V4cDsKICAgICB9CiAKLSAgICByZXR1cm4gU3RyaW5nOyAvLyBJIGRvbid0IGtub3cuCisgICAg
aWYgKHR5cGUgPT0gU3RyaW5nKSB7CisgICAgICAgIFFTdHJpbmcgcXN0cmluZyA9IHRvUVN0cmlu
Zyhjb250ZXh0LCB2YWx1ZSwgZXhjZXB0aW9uKTsKKyAgICAgICAgUVJlZ0V4cCByZShxc3RyaW5n
KTsKKyAgICAgICAgaWYgKHJlLmlzVmFsaWQoKSkKKyAgICAgICAgICAgIGRpc3QgPSAxMDsKKyAg
ICAgICAgcmV0dXJuIHJlOworICAgIH0KKworICAgIHJldHVybiBRUmVnRXhwKCk7CiB9CiAKLVFW
YXJpYW50IGNvbnZlcnRWYWx1ZVRvUVZhcmlhbnQoRXhlY1N0YXRlKiwgSlNWYWx1ZSwgUU1ldGFU
eXBlOjpUeXBlLCBpbnQqLCBIYXNoU2V0PEpTT2JqZWN0Kj4qLCBpbnQpOworY29uc3QgSlNDOjpH
cmVnb3JpYW5EYXRlVGltZSogZ2V0R3JlZ29yaWFuRGF0ZVRpbWVVVEMoSlNDb250ZXh0UmVmIGNv
bnRleHQsIEpTT2JqZWN0UmVmIG9iamVjdCwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQoreworICAg
IEV4ZWNTdGF0ZSogZXhlYyA9IHRvSlMoY29udGV4dCk7CisgICAgSlNPYmplY3QqIGpzT2JqZWN0
ID0gdG9KUyhvYmplY3QpOworICAgIERhdGVJbnN0YW5jZSogZGF0ZSA9IGFzRGF0ZUluc3RhbmNl
KGpzT2JqZWN0KTsKKyAgICByZXR1cm4gZGF0ZS0+Z3JlZ29yaWFuRGF0ZVRpbWVVVEMoZXhlYyk7
Cit9CiAKLXN0YXRpYyBRVmFyaWFudE1hcCBjb252ZXJ0VmFsdWVUb1FWYXJpYW50TWFwKEV4ZWNT
dGF0ZSogZXhlYywgSlNPYmplY3QqIG9iamVjdCwgSGFzaFNldDxKU09iamVjdCo+KiB2aXNpdGVk
T2JqZWN0cywgaW50IHJlY3Vyc2lvbkxpbWl0KQorc3RhdGljIFFNZXRhVHlwZTo6VHlwZSBoaW50
RnJvbVR5cGVBbmRPYmplY3QoSlNSZWFsVHlwZSB0eXBlLCBKU0NvbnRleHRSZWYgY29udGV4dCwg
SlNPYmplY3RSZWYgb2JqZWN0KQogewotICAgIFFfQVNTRVJUKCFleGVjLT5oYWRFeGNlcHRpb24o
KSk7CisgICAgc3dpdGNoKHR5cGUpIHsKKyAgICAgICAgY2FzZSBOdW1iZXI6CisgICAgICAgICAg
ICByZXR1cm4gUU1ldGFUeXBlOjpEb3VibGU7CisgICAgICAgIGNhc2UgQm9vbGVhbjoKKyAgICAg
ICAgICAgIHJldHVybiBRTWV0YVR5cGU6OkJvb2w7CisgICAgICAgIGNhc2UgRGF0ZToKKyAgICAg
ICAgICAgIHJldHVybiBRTWV0YVR5cGU6OlFEYXRlVGltZTsKKyAgICAgICAgY2FzZSBSZWdFeHA6
CisgICAgICAgICAgICByZXR1cm4gUU1ldGFUeXBlOjpRUmVnRXhwOworICAgICAgICBjYXNlIE9i
amVjdDoKKyAgICAgICAgeworICAgICAgICAgICAgSlNPYmplY3QqIGpzT2JqZWN0ID0gOjp0b0pT
KG9iamVjdCk7CisgICAgICAgICAgICBpZiAoanNPYmplY3QtPmluaGVyaXRzKCZOdW1iZXJPYmpl
Y3Q6OnNfaW5mbykpCisgICAgICAgICAgICAgICByZXR1cm4gUU1ldGFUeXBlOjpEb3VibGU7Cisg
ICAgICAgICAgICBpZiAoanNPYmplY3QtPmluaGVyaXRzKCZCb29sZWFuT2JqZWN0OjpzX2luZm8p
KQorICAgICAgICAgICAgICAgIHJldHVybiBRTWV0YVR5cGU6OkJvb2w7CisgICAgICAgICAgICBy
ZXR1cm4gUU1ldGFUeXBlOjpRVmFyaWFudE1hcDsKKyAgICAgICAgfQorICAgICAgICBjYXNlIFFP
Ymo6CisgICAgICAgICAgICByZXR1cm4gUU1ldGFUeXBlOjpRT2JqZWN0U3RhcjsKKyAgICAgICAg
Y2FzZSBKU0J5dGVBcnJheToKKyAgICAgICAgICAgIHJldHVybiBRTWV0YVR5cGU6OlFCeXRlQXJy
YXk7CisgICAgICAgIGNhc2UgQXJyYXk6CisgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
UU1ldGFUeXBlOjpUeXBlPihxTWV0YVR5cGVJZDxRVmFyaWFudExpc3Q+KCkpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgU3RyaW5nOgorICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgcmV0dXJuIFFNZXRhVHlwZTo6UVN0cmluZzsKKyAgICB9Cit9CiAKLSAgICBQcm9wZXJ0
eU5hbWVBcnJheSBwcm9wZXJ0aWVzKGV4ZWMpOwotICAgIG9iamVjdC0+Z2V0UHJvcGVydHlOYW1l
cyhleGVjLCBwcm9wZXJ0aWVzKTsKLSAgICBQcm9wZXJ0eU5hbWVBcnJheTo6Y29uc3RfaXRlcmF0
b3IgaXQgPSBwcm9wZXJ0aWVzLmJlZ2luKCk7Ci0gICAgUVZhcmlhbnRNYXAgcmVzdWx0OwotICAg
IGludCBvYmpkaXN0ID0gMDsKLQotICAgIHdoaWxlIChpdCAhPSBwcm9wZXJ0aWVzLmVuZCgpKSB7
Ci0gICAgICAgIGlmIChvYmplY3QtPnByb3BlcnR5SXNFbnVtZXJhYmxlKGV4ZWMsICppdCkpIHsK
LSAgICAgICAgICAgIEpTVmFsdWUgdmFsID0gb2JqZWN0LT5nZXQoZXhlYywgKml0KTsKLSAgICAg
ICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKLSAgICAgICAgICAgICAgICBleGVjLT5j
bGVhckV4Y2VwdGlvbigpOwotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgUVZh
cmlhbnQgdiA9IGNvbnZlcnRWYWx1ZVRvUVZhcmlhbnQoZXhlYywgdmFsLCBRTWV0YVR5cGU6OlZv
aWQsICZvYmpkaXN0LCB2aXNpdGVkT2JqZWN0cywgcmVjdXJzaW9uTGltaXQpOwotICAgICAgICAg
ICAgICAgIGlmIChvYmpkaXN0ID49IDApIHsKLSAgICAgICAgICAgICAgICAgICAgVVN0cmluZyB1
c3RyaW5nID0gKCppdCkudXN0cmluZygpOwotICAgICAgICAgICAgICAgICAgICBRU3RyaW5nIGlk
ID0gUVN0cmluZygoY29uc3QgUUNoYXIqKXVzdHJpbmcuaW1wbCgpLT5jaGFyYWN0ZXJzKCksIHVz
dHJpbmcubGVuZ3RoKCkpOwotICAgICAgICAgICAgICAgICAgICByZXN1bHQuaW5zZXJ0KGlkLCB2
KTsKLSAgICAgICAgICAgICAgICB9CitzdGF0aWMgUU9iamVjdCogdG9RT2JqZWN0KEpTQ29udGV4
dFJlZiwgSlNSZWFsVHlwZSB0eXBlLCBKU09iamVjdFJlZiBvYmplY3QsIEpTVmFsdWVSZWYqIGV4
Y2VwdGlvbiwgaW50JiBkaXN0KQoreworICAgIGlmICh0eXBlID09IFFPYmopIHsKKyAgICAgICAg
UU9iamVjdCogcU9iamVjdCA9IFF0Q2xhc3M6OnRvUU9iamVjdChvYmplY3QpOworICAgICAgICBp
ZiAoIXFPYmplY3QpCisgICAgICAgICAgICByZXR1cm4gMDsKKworICAgICAgICBkaXN0ID0gMDsK
KyAgICAgICAgcmV0dXJuIHFPYmplY3Q7CisgICAgfQorCisgICAgaWYgKHR5cGUgPT0gTnVsbCkK
KyAgICAgICAgZGlzdCA9IDA7CisKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIFdURjo6VmVj
dG9yPEpTVmFsdWVSZWY+IHRvSlNWYWx1ZVJlZlZlY3RvcihKU0NvbnRleHRSZWYgY29udGV4dCwg
SlNPYmplY3RSZWYgb2JqZWN0LCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCit7CisgICAgV1RGOjpW
ZWN0b3I8SlNWYWx1ZVJlZj4gdjsKKyAgICBKU1N0cmluZ1JlZiBsZW5ndGhTdHIgPSBKU1N0cmlu
Z0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygibGVuZ3RoIik7CisgICAgSlNWYWx1ZVJlZiBsZW5ndGhW
YWwgPSBKU09iamVjdEdldFByb3BlcnR5KGNvbnRleHQsIG9iamVjdCwgbGVuZ3RoU3RyLCBleGNl
cHRpb24pOworICAgIEpTU3RyaW5nUmVsZWFzZSgobGVuZ3RoU3RyKSk7CisgICAgc2l6ZV90IGxl
bmd0aCA9IEpTVmFsdWVUb051bWJlcihjb250ZXh0LCBsZW5ndGhWYWwsIGV4Y2VwdGlvbik7Cisg
ICAgdi5yZXNpemUobGVuZ3RoKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbmd0aDsg
KytpKQorICAgICAgICB2W2ldID0gSlNPYmplY3RHZXRQcm9wZXJ0eUF0SW5kZXgoY29udGV4dCwg
b2JqZWN0LCBpLCBleGNlcHRpb24pOworCisgICAgcmV0dXJuIHY7Cit9CisKK3N0YXRpYyBRQnl0
ZUFycmF5IHRvUUJ5dGVBcnJheShKU0NvbnRleHRSZWYgY29udGV4dCwgSlNSZWFsVHlwZSB0eXBl
LCBKU09iamVjdFJlZiBvYmplY3QsIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbiwgaW50JiBkaXN0KQor
eworICAgIGlmICh0eXBlID09IEpTQnl0ZUFycmF5KSB7CisgICAgICAgIHNpemVfdCBzaXplOwor
ICAgICAgICBkaXN0ID0gMDsKKyAgICAgICAgdW5zaWduZWQgY2hhciogZGF0YSA9IGpzQnl0ZUFy
cmF5R2V0RGF0YShjb250ZXh0LCBvYmplY3QsIHNpemUsIGV4Y2VwdGlvbik7CisgICAgICAgIHJl
dHVybiBRQnl0ZUFycmF5Ojpmcm9tUmF3RGF0YShyZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIq
PihkYXRhKSwgc2l6ZSk7CisgICAgfQorCisgICAgZGlzdCA9ICh0eXBlID09IFN0cmluZykgPyA1
IDogMTA7CisgICAgcmV0dXJuIHRvUVN0cmluZyhjb250ZXh0LCBvYmplY3QsIGV4Y2VwdGlvbiku
dG9VdGY4KCk7Cit9CisKK3N0YXRpYyBRTGlzdDxpbnQ+IHRvUUxpc3RPZkludChKU0NvbnRleHRS
ZWYgY29udGV4dCwgSlNSZWFsVHlwZSB0eXBlLCBKU09iamVjdFJlZiBvYmplY3QsIEhhc2hTZXQ8
SlNPYmplY3RSZWY+KiB2aXNpdGVkT2JqZWN0cywgaW50JiBkaXN0LCBKU1ZhbHVlUmVmKiBleGNl
cHRpb24sIGludCByZWN1cnNpb25MaW1pdCkKK3sKKyAgICBRTGlzdDxpbnQ+IHJlc3VsdDsKKyAg
ICBpZiAodHlwZSA9PSBBcnJheSkgeworICAgICAgICBXVEY6OlZlY3RvcjxKU1ZhbHVlUmVmPiB2
YWx1ZXMgPSB0b0pTVmFsdWVSZWZWZWN0b3IoY29udGV4dCwgb2JqZWN0LCBleGNlcHRpb24pOwor
ICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHZhbHVlcy5zaXplKCk7ICsraSkgeworICAgICAg
ICAgICAgSlNWYWx1ZVJlZiB2YWwgPSB2YWx1ZXNbaV07CisgICAgICAgICAgICBpbnQgaXRlbWRp
c3QgPSAtMTsKKyAgICAgICAgICAgIFFWYXJpYW50IGl0ZW0gPSB0b1F0KGNvbnRleHQsIHZhbCwg
UU1ldGFUeXBlOjpJbnQsICZpdGVtZGlzdCwgdmlzaXRlZE9iamVjdHMsIHJlY3Vyc2lvbkxpbWl0
LCBleGNlcHRpb24pOworICAgICAgICAgICAgaWYgKGl0ZW1kaXN0ID49IDApCisgICAgICAgICAg
ICAgICAgcmVzdWx0LmFwcGVuZChpdGVtLnZhbHVlPGludD4oKSk7CisgICAgICAgICAgICBlbHNl
CisgICAgICAgICAgICAgICAgcmV0dXJuIFFMaXN0PGludD4oKTsKKyAgICAgICAgfQorICAgICAg
ICAvLyBJZiB3ZSBkaWRuJ3QgZmFpbCBjb252ZXJzaW9uCisgICAgICAgIGlmIChyZXN1bHQuY291
bnQoKSA9PSB2YWx1ZXMuc2l6ZSgpKSB7CisgICAgICAgICAgICBkaXN0ID0gNTsKKyAgICAgICAg
ICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIFFMaXN0PGludD4o
KTsKKyAgICB9CisgICAgICAgIC8vIE1ha2UgYSBzaW5nbGUgbGVuZ3RoIGFycmF5CisgICAgaW50
IGl0ZW1kaXN0ID0gLTE7CisgICAgUVZhcmlhbnQgaXRlbSA9IHRvUXQoY29udGV4dCwgb2JqZWN0
LCBRTWV0YVR5cGU6OkludCwgJml0ZW1kaXN0LCB2aXNpdGVkT2JqZWN0cywgcmVjdXJzaW9uTGlt
aXQsIGV4Y2VwdGlvbik7CisgICAgaWYgKGl0ZW1kaXN0ID49IDApIHsKKyAgICAgICAgcmVzdWx0
LmFwcGVuZChpdGVtLnZhbHVlPGludD4oKSk7CisgICAgICAgIGRpc3QgPSAxMDsKKyAgICB9CisK
KyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgUVZhcmlhbnRMaXN0IHRvUVZhcmlhbnRM
aXN0KEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU1JlYWxUeXBlIHR5cGUsIEpTT2JqZWN0UmVmIG9i
amVjdCwgSGFzaFNldDxKU09iamVjdFJlZj4qIHZpc2l0ZWRPYmplY3RzLCBpbnQmIGRpc3QsIEpT
VmFsdWVSZWYqIGV4Y2VwdGlvbiwgaW50IHJlY3Vyc2lvbkxpbWl0KQoreworICAgIGlmICh0eXBl
ID09IEFycmF5KSB7CisgICAgICAgIFdURjo6VmVjdG9yPEpTVmFsdWVSZWY+IHZhbHVlcyA9IHRv
SlNWYWx1ZVJlZlZlY3Rvcihjb250ZXh0LCBvYmplY3QsIGV4Y2VwdGlvbik7CisKKyAgICAgICAg
UVZhcmlhbnRMaXN0IHJlc3VsdDsKKyAgICAgICAgaW50IG9iamRpc3QgPSAwOworCisgICAgICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgdmFsdWVzLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBy
ZXN1bHQuYXBwZW5kKHRvUXQoY29udGV4dCwgdmFsdWVzW2ldLCBRTWV0YVR5cGU6OlZvaWQsICZv
YmpkaXN0LCB2aXNpdGVkT2JqZWN0cywgcmVjdXJzaW9uTGltaXQsIGV4Y2VwdGlvbikpOworICAg
ICAgICAgICAgaWYgKG9iamRpc3QgPT0gLTEpIHsKKyAgICAgICAgICAgICAgICBxQ29udkRlYnVn
KCkgPDwgIkZhaWxlZCBjb252ZXJ0aW5nIGVsZW1lbnQgYXQgaW5kZXggIiA8PCBpOworICAgICAg
ICAgICAgICAgIGJyZWFrOyAvLyBGYWlsZWQgY29udmVydGluZyBhIGxpc3QgZW50cnksIHNvIGZh
aWwgdGhlIGFycmF5CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgKytpdDsKKyAg
ICAgICAgaWYgKG9iamRpc3QgIT0gLTEpCisgICAgICAgICAgICBkaXN0ID0gNTsKKworICAgICAg
ICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIC8vIE1ha2UgYSBzaW5nbGUgbGVuZ3RoIGFy
cmF5CisgICAgaW50IG9iamRpc3Q7CisgICAgUVZhcmlhbnQgdmFyID0gdG9RdChjb250ZXh0LCBv
YmplY3QsIFFNZXRhVHlwZTo6Vm9pZCwgJm9iamRpc3QsIHZpc2l0ZWRPYmplY3RzLCByZWN1cnNp
b25MaW1pdCwgZXhjZXB0aW9uKTsKKyAgICBpZiAob2JqZGlzdCAhPSAtMSkgeworICAgICAgICBk
aXN0ID0gMTA7CisgICAgICAgIHJldHVybiBRVmFyaWFudExpc3QoKSA8PCB2YXI7CisgICAgfQor
CisgICAgcmV0dXJuIFFWYXJpYW50TGlzdCgpOworfQorCitzdGF0aWMgUVN0cmluZ0xpc3QgdG9R
U3RyaW5nTGlzdChKU0NvbnRleHRSZWYgY29udGV4dCwgSlNSZWFsVHlwZSB0eXBlLCBKU09iamVj
dFJlZiBvYmplY3QsIGludCYgZGlzdCwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQoreworICAgIGlm
ICh0eXBlID09IEFycmF5KSB7CisgICAgICAgIFFTdHJpbmdMaXN0IHJlc3VsdDsKKyAgICAgICAg
V1RGOjpWZWN0b3I8SlNWYWx1ZVJlZj4gdmFsdWVzID0gdG9KU1ZhbHVlUmVmVmVjdG9yKGNvbnRl
eHQsIG9iamVjdCwgZXhjZXB0aW9uKTsKKworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHZh
bHVlcy5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgSlNWYWx1ZVJlZiB2YWwgPSB2YWx1ZXNb
aV07CisgICAgICAgICAgICBRU3RyaW5nIHFzdHJpbmcgPSB0b1FTdHJpbmcoY29udGV4dCwgdmFs
LCBleGNlcHRpb24pOworICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChxc3RyaW5nKTsKKyAgICAg
ICAgfQorICAgICAgICBkaXN0ID0gNTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisK
KyAgICAvLyBNYWtlIGEgc2luZ2xlIGxlbmd0aCBhcnJheQorICAgIGRpc3QgPSAxMDsKKyAgICBy
ZXR1cm4gUVN0cmluZ0xpc3QoKSA8PCB0b1FTdHJpbmcoY29udGV4dCwgb2JqZWN0LCBleGNlcHRp
b24pOworfQorCitzdGF0aWMgUU9iamVjdExpc3QgdG9RT2JqZWN0TGlzdChKU0NvbnRleHRSZWYg
Y29udGV4dCwgSlNSZWFsVHlwZSB0eXBlLCBKU09iamVjdFJlZiBvYmplY3QsIEhhc2hTZXQ8SlNP
YmplY3RSZWY+KiB2aXNpdGVkT2JqZWN0cywgaW50JiBkaXN0LCBKU1ZhbHVlUmVmKiBleGNlcHRp
b24sIGludCByZWN1cnNpb25MaW1pdCkKK3sKKyAgICBRT2JqZWN0TGlzdCByZXN1bHQ7CisgICAg
aWYgKHR5cGUgPT0gQXJyYXkpIHsKKyAgICAgICAgV1RGOjpWZWN0b3I8SlNWYWx1ZVJlZj4gdmFs
dWVzID0gdG9KU1ZhbHVlUmVmVmVjdG9yKGNvbnRleHQsIG9iamVjdCwgZXhjZXB0aW9uKTsKKwor
ICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHZhbHVlcy5zaXplKCk7ICsraSkgeworICAgICAg
ICAgICAgSlNWYWx1ZVJlZiB2YWwgPSB2YWx1ZXNbaV07CisgICAgICAgICAgICBpbnQgaXRlbWRp
c3QgPSAtMTsKKyAgICAgICAgICAgIFFWYXJpYW50IGl0ZW0gPSB0b1F0KGNvbnRleHQsIHZhbCwg
UU1ldGFUeXBlOjpRT2JqZWN0U3RhciwgJml0ZW1kaXN0LCB2aXNpdGVkT2JqZWN0cywgcmVjdXJz
aW9uTGltaXQsIGV4Y2VwdGlvbik7CisgICAgICAgICAgICBpZiAoaXRlbWRpc3QgPj0gMCkKKyAg
ICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKGl0ZW0udmFsdWU8UU9iamVjdCo+KCkpOworICAg
ICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAg
IC8vIElmIHdlIGRpZG4ndCBmYWlsIGNvbnZlcnNpb24KKyAgICAgICAgaWYgKHJlc3VsdC5jb3Vu
dCgpID09IHZhbHVlcy5zaXplKCkpCisgICAgICAgICAgICBkaXN0ID0gNTsKKworICAgICAgICBy
ZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAvLyBNYWtlIGEgc2luZ2xlIGxlbmd0aCBhcnJheQor
ICAgIGludCBpdGVtZGlzdCA9IC0xOworICAgIFFWYXJpYW50IGl0ZW0gPSB0b1F0KGNvbnRleHQs
IG9iamVjdCwgUU1ldGFUeXBlOjpRT2JqZWN0U3RhciwgJml0ZW1kaXN0LCB2aXNpdGVkT2JqZWN0
cywgcmVjdXJzaW9uTGltaXQsIGV4Y2VwdGlvbik7CisgICAgaWYgKGl0ZW1kaXN0ID49IDApIHsK
KyAgICAgICAgcmVzdWx0LmFwcGVuZChpdGVtLnZhbHVlPFFPYmplY3QqPigpKTsKKyAgICAgICAg
ZGlzdCA9IDEwOworICAgIH0KKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBRVmFy
aWFudE1hcCB0b1FWYXJpYW50TWFwKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBv
YmplY3QsIEhhc2hTZXQ8SlNPYmplY3RSZWY+KiB2aXNpdGVkT2JqZWN0cywgSlNWYWx1ZVJlZiog
ZXhjZXB0aW9uLCBpbnQgcmVjdXJzaW9uTGltaXQpCit7CisgICAgSlNQcm9wZXJ0eU5hbWVBcnJh
eVJlZiBwcm9wZXJ0aWVzID0gSlNPYmplY3RDb3B5UHJvcGVydHlOYW1lcyhjb250ZXh0LCBvYmpl
Y3QpOworICAgIHNpemVfdCBwcm9wZXJ0eUNvdW50ID0gSlNQcm9wZXJ0eU5hbWVBcnJheUdldENv
dW50KHByb3BlcnRpZXMpOworCisgICAgUVZhcmlhbnRNYXAgcmVzdWx0OworICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgcHJvcGVydHlDb3VudDsgKytpKSB7CisgICAgICAgIGludCBvYmpkaXN0
ID0gMDsKKyAgICAgICAgSlNTdHJpbmdSZWYgcHJvcGVydHlOYW1lID0gSlNQcm9wZXJ0eU5hbWVB
cnJheUdldE5hbWVBdEluZGV4KHByb3BlcnRpZXMsIGkpOworICAgICAgICBKU1ZhbHVlUmVmIHBy
b3BlcnR5VmFsdWUgPSBKU09iamVjdEdldFByb3BlcnR5KGNvbnRleHQsIG9iamVjdCwgcHJvcGVy
dHlOYW1lLCBleGNlcHRpb24pOworICAgICAgICBRVmFyaWFudCB2YXJpYW50ID0gdG9RdChjb250
ZXh0LCBwcm9wZXJ0eVZhbHVlLCBRTWV0YVR5cGU6OlZvaWQsICZvYmpkaXN0LCB2aXNpdGVkT2Jq
ZWN0cywgcmVjdXJzaW9uTGltaXQsIGV4Y2VwdGlvbik7CisgICAgICAgIGlmIChleGNlcHRpb24g
JiYgKmV4Y2VwdGlvbikKKyAgICAgICAgICAgICpleGNlcHRpb24gPSAwOworICAgICAgICBlbHNl
IGlmIChvYmpkaXN0ID49IDApCisgICAgICAgICAgICByZXN1bHQuaW5zZXJ0KHRvUVN0cmluZyhw
cm9wZXJ0eU5hbWUpLCB2YXJpYW50KTsKICAgICB9CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAot
UVZhcmlhbnQgY29udmVydFZhbHVlVG9RVmFyaWFudChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUg
dmFsdWUsIFFNZXRhVHlwZTo6VHlwZSBoaW50LCBpbnQgKmRpc3RhbmNlLCBIYXNoU2V0PEpTT2Jq
ZWN0Kj4qIHZpc2l0ZWRPYmplY3RzLCBpbnQgcmVjdXJzaW9uTGltaXQpCitzdGF0aWMgUVZhcmlh
bnQgdG9RRGF0ZU9yVGltZShKU0NvbnRleHRSZWYgY29udGV4dCwgSlNSZWFsVHlwZSB0eXBlLCBR
TWV0YVR5cGU6OlR5cGUgaGludCwgSlNWYWx1ZVJlZiB2YWx1ZSwgSlNWYWx1ZVJlZiogZXhjZXB0
aW9uLCBpbnQmIGRpc3QpCit7CisgICAgaWYgKHR5cGUgPT0gRGF0ZSkgeworICAgICAgICBKU09i
amVjdFJlZiBvYmplY3QgPSBKU1ZhbHVlVG9PYmplY3QoY29udGV4dCwgdmFsdWUsIGV4Y2VwdGlv
bik7CisgICAgICAgIGNvbnN0IEdyZWdvcmlhbkRhdGVUaW1lKiBnZHQgPSBnZXRHcmVnb3JpYW5E
YXRlVGltZVVUQyhjb250ZXh0LCBvYmplY3QsIGV4Y2VwdGlvbik7CisgICAgICAgIGlmIChoaW50
ID09IFFNZXRhVHlwZTo6UURhdGVUaW1lKSB7CisgICAgICAgICAgICBkaXN0ID0gMDsKKyAgICAg
ICAgICAgIHJldHVybiBRRGF0ZVRpbWUoUURhdGUoZ2R0LT55ZWFyICsgMTkwMCwgZ2R0LT5tb250
aCArIDEsIGdkdC0+bW9udGhEYXkpLCBRVGltZShnZHQtPmhvdXIsIGdkdC0+bWludXRlLCBnZHQt
PnNlY29uZCksIFF0OjpVVEMpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGhpbnQgPT0gUU1l
dGFUeXBlOjpRRGF0ZSkgeworICAgICAgICAgICAgZGlzdCA9IDE7CisgICAgICAgICAgICByZXR1
cm4gUURhdGUoZ2R0LT55ZWFyICsgMTkwMCwgZ2R0LT5tb250aCArIDEsIGdkdC0+bW9udGhEYXkp
OworICAgICAgICB9CisKKyAgICAgICAgZGlzdCA9IDI7CisgICAgICAgIHJldHVybiBRVGltZShn
ZHQtPmhvdXIgKyAxOTAwLCBnZHQtPm1pbnV0ZSwgZ2R0LT5zZWNvbmQpOworICAgIH0KKworICAg
IGlmICh0eXBlID09IE51bWJlcikgeworICAgICAgICBkb3VibGUgYiA9IEpTVmFsdWVUb051bWJl
cihjb250ZXh0LCB2YWx1ZSwgZXhjZXB0aW9uKTsKKyAgICAgICAgR3JlZ29yaWFuRGF0ZVRpbWUg
Z2R0OworICAgICAgICBtc1RvR3JlZ29yaWFuRGF0ZVRpbWUoMCwgYiwgdHJ1ZSwgZ2R0KTsKKyAg
ICAgICAgaWYgKGhpbnQgPT0gUU1ldGFUeXBlOjpRRGF0ZVRpbWUpIHsKKyAgICAgICAgICAgIGRp
c3QgPSA2OworICAgICAgICAgICAgcmV0dXJuIFFEYXRlVGltZShRRGF0ZShnZHQueWVhciArIDE5
MDAsIGdkdC5tb250aCArIDEsIGdkdC5tb250aERheSksIFFUaW1lKGdkdC5ob3VyLCBnZHQubWlu
dXRlLCBnZHQuc2Vjb25kKSwgUXQ6OlVUQyk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaGlu
dCA9PSBRTWV0YVR5cGU6OlFEYXRlKSB7CisgICAgICAgICAgICBkaXN0ID0gODsKKyAgICAgICAg
ICAgIHJldHVybiBRRGF0ZShnZHQueWVhciArIDE5MDAsIGdkdC5tb250aCArIDEsIGdkdC5tb250
aERheSk7CisgICAgICAgIH0KKworICAgICAgICBkaXN0ID0gMTA7CisgICAgICAgIHJldHVybiBR
VGltZShnZHQuaG91ciwgZ2R0Lm1pbnV0ZSwgZ2R0LnNlY29uZCk7CisgICAgfQorCisjaWZuZGVm
IFFUX05PX0RBVEVTVFJJTkcKKyAgICBpZiAodHlwZSAhPSBTdHJpbmcpCisgICAgICAgIHJldHVy
biBRVmFyaWFudCgpOworCisgICAgUVN0cmluZyBxc3RyaW5nID0gdG9RU3RyaW5nKGNvbnRleHQs
IHZhbHVlLCBleGNlcHRpb24pOworICAgIGlmIChoaW50ID09IFFNZXRhVHlwZTo6UURhdGVUaW1l
KSB7CisgICAgICAgIFFEYXRlVGltZSBkdCA9IFFEYXRlVGltZTo6ZnJvbVN0cmluZyhxc3RyaW5n
LCBRdDo6SVNPRGF0ZSk7CisgICAgICAgIGlmICghZHQuaXNWYWxpZCgpKQorICAgICAgICAgICAg
ZHQgPSBRRGF0ZVRpbWU6OmZyb21TdHJpbmcocXN0cmluZywgUXQ6OlRleHREYXRlKTsKKyAgICAg
ICAgaWYgKCFkdC5pc1ZhbGlkKCkpCisgICAgICAgICAgICBkdCA9IFFEYXRlVGltZTo6ZnJvbVN0
cmluZyhxc3RyaW5nLCBRdDo6U3lzdGVtTG9jYWxlRGF0ZSk7CisgICAgICAgIGlmICghZHQuaXNW
YWxpZCgpKQorICAgICAgICAgICAgZHQgPSBRRGF0ZVRpbWU6OmZyb21TdHJpbmcocXN0cmluZywg
UXQ6OkxvY2FsZURhdGUpOworICAgICAgICBpZiAoZHQuaXNWYWxpZCgpKQorICAgICAgICAgICAg
ZGlzdCA9IDI7CisgICAgICAgIHJldHVybiBkdDsKKyAgICB9CisKKyAgICBpZiAoaGludCA9PSBR
TWV0YVR5cGU6OlFEYXRlKSB7CisgICAgICAgIFFEYXRlIGR0ID0gUURhdGU6OmZyb21TdHJpbmco
cXN0cmluZywgUXQ6OklTT0RhdGUpOworICAgICAgICBpZiAoIWR0LmlzVmFsaWQoKSkKKyAgICAg
ICAgICAgIGR0ID0gUURhdGU6OmZyb21TdHJpbmcocXN0cmluZywgUXQ6OlRleHREYXRlKTsKKyAg
ICAgICAgaWYgKCFkdC5pc1ZhbGlkKCkpCisgICAgICAgICAgICBkdCA9IFFEYXRlOjpmcm9tU3Ry
aW5nKHFzdHJpbmcsIFF0OjpTeXN0ZW1Mb2NhbGVEYXRlKTsKKyAgICAgICAgaWYgKCFkdC5pc1Zh
bGlkKCkpCisgICAgICAgICAgICBkdCA9IFFEYXRlOjpmcm9tU3RyaW5nKHFzdHJpbmcsIFF0OjpM
b2NhbGVEYXRlKTsKKyAgICAgICAgaWYgKGR0LmlzVmFsaWQoKSkKKyAgICAgICAgICAgIGRpc3Qg
PSAzOworICAgICAgICByZXR1cm4gZHQ7CisgICAgfQorCisKKyAgICBRVGltZSB0aW1lID0gUVRp
bWU6OmZyb21TdHJpbmcocXN0cmluZywgUXQ6OklTT0RhdGUpOworICAgIGlmICghdGltZS5pc1Zh
bGlkKCkpCisgICAgICAgIHRpbWUgPSBRVGltZTo6ZnJvbVN0cmluZyhxc3RyaW5nLCBRdDo6VGV4
dERhdGUpOworICAgIGlmICghdGltZS5pc1ZhbGlkKCkpCisgICAgICAgIHRpbWUgPSBRVGltZTo6
ZnJvbVN0cmluZyhxc3RyaW5nLCBRdDo6U3lzdGVtTG9jYWxlRGF0ZSk7CisgICAgaWYgKCF0aW1l
LmlzVmFsaWQoKSkKKyAgICAgICAgdGltZSA9IFFUaW1lOjpmcm9tU3RyaW5nKHFzdHJpbmcsIFF0
OjpMb2NhbGVEYXRlKTsKKyAgICBpZiAodGltZS5pc1ZhbGlkKCkpCisgICAgICAgIGRpc3QgPSAz
OworCisgICAgcmV0dXJuIHRpbWU7CisjZWxzZQorICAgIHJldHVybiBRVmFyaWFudCgpOworI2Vu
ZGlmCit9CisKK3N0YXRpYyBpbnQgZGlzdGFuY2VGcm9tTnVtYmVyKFFNZXRhVHlwZTo6VHlwZSBo
aW50KQoreworICAgIHN3aXRjaCAoaGludCkgeworICAgIGNhc2UgUU1ldGFUeXBlOjpEb3VibGU6
CisgICAgICAgIHJldHVybiAwOworICAgIGNhc2UgUU1ldGFUeXBlOjpGbG9hdDoKKyAgICAgICAg
cmV0dXJuIDE7CisgICAgY2FzZSBRTWV0YVR5cGU6OkxvbmdMb25nOgorICAgIGNhc2UgUU1ldGFU
eXBlOjpVTG9uZ0xvbmc6CisgICAgICAgIHJldHVybiAyOworICAgIGNhc2UgUU1ldGFUeXBlOjpM
b25nOgorICAgIGNhc2UgUU1ldGFUeXBlOjpVTG9uZzoKKyAgICAgICAgcmV0dXJuIDM7CisgICAg
Y2FzZSBRTWV0YVR5cGU6OkludDoKKyAgICBjYXNlIFFNZXRhVHlwZTo6VUludDoKKyAgICAgICAg
cmV0dXJuIDQ7CisgICAgY2FzZSBRTWV0YVR5cGU6OlNob3J0OgorICAgIGNhc2UgUU1ldGFUeXBl
OjpVU2hvcnQ6CisgICAgICAgIHJldHVybiA1OworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVy
biAxMDsKKyAgICB9Cit9CisKK1FWYXJpYW50IHRvUXQoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpT
VmFsdWVSZWYgdmFsdWUsIFFNZXRhVHlwZTo6VHlwZSBoaW50LCBpbnQgKmRpc3RhbmNlLCBIYXNo
U2V0PEpTT2JqZWN0UmVmPiogdmlzaXRlZE9iamVjdHMsIGludCByZWN1cnNpb25MaW1pdCwgSlNW
YWx1ZVJlZiogZXhjZXB0aW9uKQogewogICAgIC0tcmVjdXJzaW9uTGltaXQ7CiAKICAgICBpZiAo
IXZhbHVlIHx8ICFyZWN1cnNpb25MaW1pdCkKICAgICAgICAgcmV0dXJuIFFWYXJpYW50KCk7CiAK
LSAgICBKU09iamVjdCogb2JqZWN0ID0gMDsKLSAgICBpZiAodmFsdWUuaXNPYmplY3QoKSkgewot
ICAgICAgICBvYmplY3QgPSB2YWx1ZS50b09iamVjdChleGVjKTsKKyAgICBKU09iamVjdFJlZiBv
YmplY3QgPSAwOworICAgIGlmIChKU1ZhbHVlSXNPYmplY3QoY29udGV4dCwgdmFsdWUpKSB7Cisg
ICAgICAgIG9iamVjdCA9IEpTVmFsdWVUb09iamVjdChjb250ZXh0LCB2YWx1ZSwgZXhjZXB0aW9u
KTsKICAgICAgICAgaWYgKHZpc2l0ZWRPYmplY3RzLT5jb250YWlucyhvYmplY3QpKQogICAgICAg
ICAgICAgcmV0dXJuIFFWYXJpYW50KCk7CiAKQEAgLTIyOCw4ICs2OTQsOCBAQCBRVmFyaWFudCBj
b252ZXJ0VmFsdWVUb1FWYXJpYW50KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSwgUU1l
dGFUeXBlOjpUeXBlCiAgICAgfQogCiAgICAgLy8gY2hlY2sgbWFnaWMgcG9pbnRlciB2YWx1ZXMg
YmVmb3JlIGRlcmVmZXJlbmNpbmcgdmFsdWUKLSAgICBpZiAodmFsdWUgPT0ganNOYU4oKQotICAg
ICAgICB8fCAodmFsdWUgPT0ganNVbmRlZmluZWQoKQorICAgIGlmIChKU1ZhbHVlSXNOYU4oY29u
dGV4dCwgdmFsdWUpCisgICAgICAgIHx8IChKU1ZhbHVlSXNVbmRlZmluZWQoY29udGV4dCwgdmFs
dWUpCiAgICAgICAgICAgICAmJiBoaW50ICE9IFFNZXRhVHlwZTo6UVN0cmluZwogICAgICAgICAg
ICAgJiYgaGludCAhPSAoUU1ldGFUeXBlOjpUeXBlKSBxTWV0YVR5cGVJZDxRVmFyaWFudD4oKSkp
IHsKICAgICAgICAgaWYgKGRpc3RhbmNlKQpAQCAtMjM3LDUwICs3MDMsMTMgQEAgUVZhcmlhbnQg
Y29udmVydFZhbHVlVG9RVmFyaWFudChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUsIFFN
ZXRhVHlwZTo6VHlwZQogICAgICAgICByZXR1cm4gUVZhcmlhbnQoKTsKICAgICB9CiAKLSAgICBK
U0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwotICAgIEpTUmVhbFR5cGUgdHlwZSA9
IHZhbHVlUmVhbFR5cGUoZXhlYywgdmFsdWUpOwotICAgIGlmIChoaW50ID09IFFNZXRhVHlwZTo6
Vm9pZCkgewotICAgICAgICBzd2l0Y2godHlwZSkgewotICAgICAgICAgICAgY2FzZSBOdW1iZXI6
Ci0gICAgICAgICAgICAgICAgaGludCA9IFFNZXRhVHlwZTo6RG91YmxlOwotICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBCb29sZWFuOgotICAgICAgICAgICAgICAgIGhp
bnQgPSBRTWV0YVR5cGU6OkJvb2w7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICBjYXNlIFN0cmluZzoKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgaGlu
dCA9IFFNZXRhVHlwZTo6UVN0cmluZzsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgIGNhc2UgRGF0ZToKLSAgICAgICAgICAgICAgICBoaW50ID0gUU1ldGFUeXBlOjpRRGF0ZVRp
bWU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFJlZ0V4cDoKLSAg
ICAgICAgICAgICAgICBoaW50ID0gUU1ldGFUeXBlOjpRUmVnRXhwOwotICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgY2FzZSBPYmplY3Q6Ci0gICAgICAgICAgICAgICAgaWYgKG9i
amVjdC0+aW5oZXJpdHMoJk51bWJlck9iamVjdDo6c19pbmZvKSkKLSAgICAgICAgICAgICAgICAg
ICAgaGludCA9IFFNZXRhVHlwZTo6RG91YmxlOwotICAgICAgICAgICAgICAgIGVsc2UgaWYgKG9i
amVjdC0+aW5oZXJpdHMoJkJvb2xlYW5PYmplY3Q6OnNfaW5mbykpCi0gICAgICAgICAgICAgICAg
ICAgIGhpbnQgPSBRTWV0YVR5cGU6OkJvb2w7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAg
ICAgICAgICAgICAgICBoaW50ID0gUU1ldGFUeXBlOjpRVmFyaWFudE1hcDsKLSAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgUU9iajoKLSAgICAgICAgICAgICAgICBoaW50
ID0gUU1ldGFUeXBlOjpRT2JqZWN0U3RhcjsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgIGNhc2UgSlNCeXRlQXJyYXk6Ci0gICAgICAgICAgICAgICAgaGludCA9IFFNZXRhVHlw
ZTo6UUJ5dGVBcnJheTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2Ug
QXJyYXk6Ci0gICAgICAgICAgICBjYXNlIFJUQXJyYXk6Ci0gICAgICAgICAgICAgICAgaGludCA9
IFFNZXRhVHlwZTo6UVZhcmlhbnRMaXN0OwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICB9Ci0gICAgfQorICAgIEpTUmVhbFR5cGUgdHlwZSA9IHZhbHVlUmVhbFR5cGUoY29udGV4dCwg
dmFsdWUsIGV4Y2VwdGlvbik7CisgICAgaWYgKGhpbnQgPT0gUU1ldGFUeXBlOjpWb2lkKQorICAg
ICAgICBoaW50ID0gaGludEZyb21UeXBlQW5kT2JqZWN0KHR5cGUsIGNvbnRleHQsIG9iamVjdCk7
CiAKLSAgICBxQ29udkRlYnVnKCkgPDwgImNvbnZlcnRWYWx1ZVRvUVZhcmlhbnQ6IGpzdHlwZSBp
cyAiIDw8IHR5cGUgPDwgIiwgaGludCBpcyIgPDwgaGludDsKKyAgICBxQ29udkRlYnVnKCkgPDwg
InRvUXQ6IGpzdHlwZSBpcyAiIDw8IHR5cGUgPDwgIiwgaGludCBpcyIgPDwgaGludDsKIAotICAg
IGlmICh2YWx1ZSA9PSBqc051bGwoKQorICAgIGlmIChKU1ZhbHVlSXNOdWxsKGNvbnRleHQsIHZh
bHVlKQogICAgICAgICAmJiBoaW50ICE9IFFNZXRhVHlwZTo6UU9iamVjdFN0YXIKICAgICAgICAg
JiYgaGludCAhPSBRTWV0YVR5cGU6OlZvaWRTdGFyCiAgICAgICAgICYmIGhpbnQgIT0gUU1ldGFU
eXBlOjpRU3RyaW5nCkBAIC0yOTQsMTQgKzcyMyw4IEBAIFFWYXJpYW50IGNvbnZlcnRWYWx1ZVRv
UVZhcmlhbnQoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlLCBRTWV0YVR5cGU6OlR5cGUK
ICAgICBpbnQgZGlzdCA9IC0xOwogICAgIHN3aXRjaCAoaGludCkgewogICAgICAgICBjYXNlIFFN
ZXRhVHlwZTo6Qm9vbDoKLSAgICAgICAgICAgIGlmICh0eXBlID09IE9iamVjdCAmJiBvYmplY3Qt
PmluaGVyaXRzKCZCb29sZWFuT2JqZWN0OjpzX2luZm8pKQotICAgICAgICAgICAgICAgIHJldCA9
IFFWYXJpYW50KGFzQm9vbGVhbk9iamVjdCh2YWx1ZSktPmludGVybmFsVmFsdWUoKS50b0Jvb2xl
YW4oZXhlYykpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHJldCA9IFFWYXJp
YW50KHZhbHVlLnRvQm9vbGVhbihleGVjKSk7Ci0gICAgICAgICAgICBpZiAodHlwZSA9PSBCb29s
ZWFuKQotICAgICAgICAgICAgICAgIGRpc3QgPSAwOwotICAgICAgICAgICAgZWxzZQotICAgICAg
ICAgICAgICAgIGRpc3QgPSAxMDsKKyAgICAgICAgICAgIHJldCA9IEpTVmFsdWVUb0Jvb2xlYW4o
Y29udGV4dCwgdmFsdWUpOworICAgICAgICAgICAgZGlzdCA9ICh0eXBlID09IEJvb2xlYW4pID8g
MCA6IDEwOwogICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSBRTWV0YVR5cGU6Oklu
dDoKQEAgLTMxNCw0OTIgKzczNywxMzAgQEAgUVZhcmlhbnQgY29udmVydFZhbHVlVG9RVmFyaWFu
dChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUsIFFNZXRhVHlwZTo6VHlwZQogICAgICAg
ICBjYXNlIFFNZXRhVHlwZTo6VVNob3J0OgogICAgICAgICBjYXNlIFFNZXRhVHlwZTo6RmxvYXQ6
CiAgICAgICAgIGNhc2UgUU1ldGFUeXBlOjpEb3VibGU6Ci0gICAgICAgICAgICByZXQgPSBRVmFy
aWFudCh2YWx1ZS50b051bWJlcihleGVjKSk7Ci0gICAgICAgICAgICByZXQuY29udmVydCgoUVZh
cmlhbnQ6OlR5cGUpaGludCk7Ci0gICAgICAgICAgICBpZiAodHlwZSA9PSBOdW1iZXIpIHsKLSAg
ICAgICAgICAgICAgICBzd2l0Y2ggKGhpbnQpIHsKLSAgICAgICAgICAgICAgICBjYXNlIFFNZXRh
VHlwZTo6RG91YmxlOgotICAgICAgICAgICAgICAgICAgICBkaXN0ID0gMDsKLSAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBRTWV0YVR5cGU6OkZsb2F0Ogot
ICAgICAgICAgICAgICAgICAgICBkaXN0ID0gMTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAgICAgY2FzZSBRTWV0YVR5cGU6OkxvbmdMb25nOgotICAgICAgICAgICAg
ICAgIGNhc2UgUU1ldGFUeXBlOjpVTG9uZ0xvbmc6Ci0gICAgICAgICAgICAgICAgICAgIGRpc3Qg
PSAyOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIFFN
ZXRhVHlwZTo6TG9uZzoKLSAgICAgICAgICAgICAgICBjYXNlIFFNZXRhVHlwZTo6VUxvbmc6Ci0g
ICAgICAgICAgICAgICAgICAgIGRpc3QgPSAzOwotICAgICAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgICAgICBjYXNlIFFNZXRhVHlwZTo6SW50OgotICAgICAgICAgICAgICAgIGNh
c2UgUU1ldGFUeXBlOjpVSW50OgotICAgICAgICAgICAgICAgICAgICBkaXN0ID0gNDsKLSAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBRTWV0YVR5cGU6OlNo
b3J0OgotICAgICAgICAgICAgICAgIGNhc2UgUU1ldGFUeXBlOjpVU2hvcnQ6Ci0gICAgICAgICAg
ICAgICAgICAgIGRpc3QgPSA1OwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAg
ICAgICAgICAgZGlzdCA9IDEwOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGRpc3QgPSAx
MDsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldCA9IFFWYXJpYW50KEpTVmFsdWVUb051
bWJlcihjb250ZXh0LCB2YWx1ZSwgZXhjZXB0aW9uKSk7CisgICAgICAgICAgICByZXQuY29udmVy
dChzdGF0aWNfY2FzdDxRVmFyaWFudDo6VHlwZT4oaGludCkpOworICAgICAgICAgICAgZGlzdCA9
ICh0eXBlID09IE51bWJlcikgPyBkaXN0YW5jZUZyb21OdW1iZXIoaGludCkgOiAxMDsKICAgICAg
ICAgICAgIGJyZWFrOwogCi0gICAgICAgIGNhc2UgUU1ldGFUeXBlOjpRQ2hhcjoKKyAgICAgICAg
Y2FzZSBRTWV0YVR5cGU6OlFDaGFyOiB7CiAgICAgICAgICAgICBpZiAodHlwZSA9PSBOdW1iZXIg
fHwgdHlwZSA9PSBCb29sZWFuKSB7Ci0gICAgICAgICAgICAgICAgcmV0ID0gUVZhcmlhbnQoUUNo
YXIoKHVzaG9ydCl2YWx1ZS50b051bWJlcihleGVjKSkpOwotICAgICAgICAgICAgICAgIGlmICh0
eXBlID09IEJvb2xlYW4pCi0gICAgICAgICAgICAgICAgICAgIGRpc3QgPSAzOwotICAgICAgICAg
ICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgZGlzdCA9IDY7Ci0gICAgICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgICAgIFVTdHJpbmcgc3RyID0gdmFsdWUudG9TdHJpbmcoZXhl
Yyk7Ci0gICAgICAgICAgICAgICAgcmV0ID0gUVZhcmlhbnQoUUNoYXIoc3RyLmxlbmd0aCgpID8g
Kihjb25zdCB1c2hvcnQqKXN0ci5pbXBsKCktPmNoYXJhY3RlcnMoKSA6IDApKTsKLSAgICAgICAg
ICAgICAgICBpZiAodHlwZSA9PSBTdHJpbmcpCi0gICAgICAgICAgICAgICAgICAgIGRpc3QgPSAz
OwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgZGlzdCA9IDEwOwor
ICAgICAgICAgICAgICAgIHJldCA9IFFWYXJpYW50KFFDaGFyKCh1c2hvcnQpSlNWYWx1ZVRvTnVt
YmVyKGNvbnRleHQsIHZhbHVlLCBleGNlcHRpb24pKSk7CisgICAgICAgICAgICAgICAgZGlzdCA9
ICh0eXBlID09IEJvb2xlYW4pID8gMyA6IDY7CisgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIEpTU3RyaW5nUmVmIHN0ciA9IEpTVmFsdWVUb1N0cmlu
Z0NvcHkoY29udGV4dCwgdmFsdWUsIGV4Y2VwdGlvbik7CisgICAgICAgICAgICBzaXplX3QgbGVu
Z3RoID0gSlNTdHJpbmdHZXRMZW5ndGgoc3RyKTsKKyAgICAgICAgICAgIGNvbnN0IEpTQ2hhciog
c3RyRGF0YSA9IEpTU3RyaW5nR2V0Q2hhcmFjdGVyc1B0cihzdHIpOworICAgICAgICAgICAgcmV0
ID0gUVZhcmlhbnQoUUNoYXIobGVuZ3RoID8gc3RyRGF0YVswXSA6IDApKTsKKyAgICAgICAgICAg
IEpTU3RyaW5nUmVsZWFzZShzdHIpOworICAgICAgICAgICAgZGlzdCA9ICh0eXBlID09IFN0cmlu
ZykgPyAzIDogMTA7CiAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQogCiAgICAgICAgIGNh
c2UgUU1ldGFUeXBlOjpRU3RyaW5nOiB7Ci0gICAgICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmlu
ZWRPck51bGwoKSkgeworICAgICAgICAgICAgaWYgKEpTVmFsdWVJc1VuZGVmaW5lZChjb250ZXh0
LCB2YWx1ZSkgfHwgSlNWYWx1ZUlzTnVsbChjb250ZXh0LCB2YWx1ZSkpIHsKICAgICAgICAgICAg
ICAgICBpZiAoZGlzdGFuY2UpCiAgICAgICAgICAgICAgICAgICAgICpkaXN0YW5jZSA9IDE7CiAg
ICAgICAgICAgICAgICAgcmV0dXJuIFFTdHJpbmcoKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICAgICAgVVN0cmluZyB1c3RyaW5nID0gdmFsdWUudG9TdHJpbmcoZXhlYyk7Ci0g
ICAgICAgICAgICAgICAgcmV0ID0gUVZhcmlhbnQoUVN0cmluZygoY29uc3QgUUNoYXIqKXVzdHJp
bmcuaW1wbCgpLT5jaGFyYWN0ZXJzKCksIHVzdHJpbmcubGVuZ3RoKCkpKTsKLSAgICAgICAgICAg
ICAgICBpZiAodHlwZSA9PSBTdHJpbmcpCi0gICAgICAgICAgICAgICAgICAgIGRpc3QgPSAwOwot
ICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgZGlzdCA9IDEwOwogICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICByZXQgPSBRVmFyaWFudCh0b1FTdHJpbmcoY29udGV4
dCwgdmFsdWUsIGV4Y2VwdGlvbikpOworICAgICAgICAgICAgZGlzdCA9ICh0eXBlID09IFN0cmlu
ZykgPyAwIDogMTA7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCiAgICAgICAgIGNh
c2UgUU1ldGFUeXBlOjpRVmFyaWFudE1hcDoKLSAgICAgICAgICAgIGlmICh0eXBlID09IE9iamVj
dCB8fCB0eXBlID09IEFycmF5IHx8IHR5cGUgPT0gUlRBcnJheSkgewotICAgICAgICAgICAgICAg
IHJldCA9IFFWYXJpYW50KGNvbnZlcnRWYWx1ZVRvUVZhcmlhbnRNYXAoZXhlYywgb2JqZWN0LCB2
aXNpdGVkT2JqZWN0cywgcmVjdXJzaW9uTGltaXQpKTsKLSAgICAgICAgICAgICAgICAvLyBUaG9z
ZSB0eXBlcyBjYW4gc3RpbGwgaGF2ZSBwZXJmZWN0IG1hdGNoZXMsIGUuZy4gJ2Jvb2wnIGlmIHZh
bHVlIGlzIGEgQm9vbGVhbiBPYmplY3QuCi0gICAgICAgICAgICAgICAgZGlzdCA9IDE7Ci0gICAg
ICAgICAgICB9CisgICAgICAgICAgICByZXQgPSBRVmFyaWFudCh0b1FWYXJpYW50TWFwKGNvbnRl
eHQsIG9iamVjdCwgdmlzaXRlZE9iamVjdHMsIGV4Y2VwdGlvbiwgcmVjdXJzaW9uTGltaXQpKTsK
KyAgICAgICAgICAgIGRpc3QgPSAxOworICAgICAgICAgICAgaWYgKGV4Y2VwdGlvbikKKyAgICAg
ICAgICAgICAgICAqZXhjZXB0aW9uID0gMDsKICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAg
IGNhc2UgUU1ldGFUeXBlOjpRVmFyaWFudExpc3Q6Ci0gICAgICAgICAgICBpZiAodHlwZSA9PSBS
VEFycmF5KSB7Ci0gICAgICAgICAgICAgICAgUnVudGltZUFycmF5KiBydGFycmF5ID0gc3RhdGlj
X2Nhc3Q8UnVudGltZUFycmF5Kj4ob2JqZWN0KTsKLQotICAgICAgICAgICAgICAgIFFWYXJpYW50
TGlzdCByZXN1bHQ7Ci0gICAgICAgICAgICAgICAgaW50IGxlbiA9IHJ0YXJyYXktPmdldExlbmd0
aCgpOwotICAgICAgICAgICAgICAgIGludCBvYmpkaXN0ID0gMDsKLSAgICAgICAgICAgICAgICBx
Q29udkRlYnVnKCkgPDwgImNvbnZlcnRpbmcgYSAiIDw8IGxlbiA8PCAiIGxlbmd0aCBBcnJheSI7
Ci0gICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW47ICsraSkgewotICAgICAg
ICAgICAgICAgICAgICBKU1ZhbHVlIHZhbCA9IHJ0YXJyYXktPmdldENvbmNyZXRlQXJyYXkoKS0+
dmFsdWVBdChleGVjLCBpKTsKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChjb252
ZXJ0VmFsdWVUb1FWYXJpYW50KGV4ZWMsIHZhbCwgUU1ldGFUeXBlOjpWb2lkLCAmb2JqZGlzdCwg
dmlzaXRlZE9iamVjdHMsIHJlY3Vyc2lvbkxpbWl0KSk7Ci0gICAgICAgICAgICAgICAgICAgIGlm
IChvYmpkaXN0ID09IC0xKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBxQ29udkRlYnVnKCkg
PDwgIkZhaWxlZCBjb252ZXJ0aW5nIGVsZW1lbnQgYXQgaW5kZXggIiA8PCBpOwotICAgICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7IC8vIEZhaWxlZCBjb252ZXJ0aW5nIGEgbGlzdCBlbnRyeSwg
c28gZmFpbCB0aGUgYXJyYXkKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICBpZiAob2JqZGlzdCAhPSAtMSkgewotICAgICAgICAgICAgICAg
ICAgICBkaXN0ID0gNTsKLSAgICAgICAgICAgICAgICAgICAgcmV0ID0gUVZhcmlhbnQocmVzdWx0
KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT0gQXJy
YXkpIHsKLSAgICAgICAgICAgICAgICBKU0FycmF5KiBhcnJheSA9IHN0YXRpY19jYXN0PEpTQXJy
YXkqPihvYmplY3QpOwotCi0gICAgICAgICAgICAgICAgUVZhcmlhbnRMaXN0IHJlc3VsdDsKLSAg
ICAgICAgICAgICAgICBpbnQgbGVuID0gYXJyYXktPmxlbmd0aCgpOwotICAgICAgICAgICAgICAg
IGludCBvYmpkaXN0ID0gMDsKLSAgICAgICAgICAgICAgICBxQ29udkRlYnVnKCkgPDwgImNvbnZl
cnRpbmcgYSAiIDw8IGxlbiA8PCAiIGxlbmd0aCBBcnJheSI7Ci0gICAgICAgICAgICAgICAgZm9y
IChpbnQgaSA9IDA7IGkgPCBsZW47ICsraSkgewotICAgICAgICAgICAgICAgICAgICBKU1ZhbHVl
IHZhbCA9IGFycmF5LT5nZXQoZXhlYywgaSk7Ci0gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5h
cHBlbmQoY29udmVydFZhbHVlVG9RVmFyaWFudChleGVjLCB2YWwsIFFNZXRhVHlwZTo6Vm9pZCwg
Jm9iamRpc3QsIHZpc2l0ZWRPYmplY3RzLCByZWN1cnNpb25MaW1pdCkpOwotICAgICAgICAgICAg
ICAgICAgICBpZiAob2JqZGlzdCA9PSAtMSkgewotICAgICAgICAgICAgICAgICAgICAgICAgcUNv
bnZEZWJ1ZygpIDw8ICJGYWlsZWQgY29udmVydGluZyBlbGVtZW50IGF0IGluZGV4ICIgPDwgaTsK
LSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOyAvLyBGYWlsZWQgY29udmVydGluZyBhIGxp
c3QgZW50cnksIHNvIGZhaWwgdGhlIGFycmF5Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKG9iamRpc3QgIT0gLTEpIHsKLSAgICAg
ICAgICAgICAgICAgICAgZGlzdCA9IDU7Ci0gICAgICAgICAgICAgICAgICAgIHJldCA9IFFWYXJp
YW50KHJlc3VsdCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgICAgICAvLyBNYWtlIGEgc2luZ2xlIGxlbmd0aCBhcnJheQotICAgICAgICAgICAg
ICAgIGludCBvYmpkaXN0OwotICAgICAgICAgICAgICAgIHFDb252RGVidWcoKSA8PCAibWFraW5n
IGEgc2luZ2xlIGxlbmd0aCB2YXJpYW50bGlzdCI7Ci0gICAgICAgICAgICAgICAgUVZhcmlhbnQg
dmFyID0gY29udmVydFZhbHVlVG9RVmFyaWFudChleGVjLCB2YWx1ZSwgUU1ldGFUeXBlOjpWb2lk
LCAmb2JqZGlzdCwgdmlzaXRlZE9iamVjdHMsIHJlY3Vyc2lvbkxpbWl0KTsKLSAgICAgICAgICAg
ICAgICBpZiAob2JqZGlzdCAhPSAtMSkgewotICAgICAgICAgICAgICAgICAgICBRVmFyaWFudExp
c3QgcmVzdWx0OwotICAgICAgICAgICAgICAgICAgICByZXN1bHQgPDwgdmFyOwotICAgICAgICAg
ICAgICAgICAgICByZXQgPSBRVmFyaWFudChyZXN1bHQpOwotICAgICAgICAgICAgICAgICAgICBk
aXN0ID0gMTA7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAg
cUNvbnZEZWJ1ZygpIDw8ICJmYWlsZWQgbWFraW5nIHNpbmdsZSBsZW5ndGggdmFybGlzdCI7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0ID0gdG9RVmFy
aWFudExpc3QoY29udGV4dCwgdHlwZSwgb2JqZWN0LCB2aXNpdGVkT2JqZWN0cywgZGlzdCwgZXhj
ZXB0aW9uLCByZWN1cnNpb25MaW1pdCk7CiAgICAgICAgICAgICBicmVhazsKIAotICAgICAgICBj
YXNlIFFNZXRhVHlwZTo6UVN0cmluZ0xpc3Q6IHsKLSAgICAgICAgICAgIGlmICh0eXBlID09IFJU
QXJyYXkpIHsKLSAgICAgICAgICAgICAgICBSdW50aW1lQXJyYXkqIHJ0YXJyYXkgPSBzdGF0aWNf
Y2FzdDxSdW50aW1lQXJyYXkqPihvYmplY3QpOwotCi0gICAgICAgICAgICAgICAgUVN0cmluZ0xp
c3QgcmVzdWx0OwotICAgICAgICAgICAgICAgIGludCBsZW4gPSBydGFycmF5LT5nZXRMZW5ndGgo
KTsKLSAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbjsgKytpKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIEpTVmFsdWUgdmFsID0gcnRhcnJheS0+Z2V0Q29uY3JldGVBcnJheSgp
LT52YWx1ZUF0KGV4ZWMsIGkpOwotICAgICAgICAgICAgICAgICAgICBVU3RyaW5nIHVzdHJpbmcg
PSB2YWwudG9TdHJpbmcoZXhlYyk7Ci0gICAgICAgICAgICAgICAgICAgIFFTdHJpbmcgcXN0cmlu
ZyA9IFFTdHJpbmcoKGNvbnN0IFFDaGFyKil1c3RyaW5nLmltcGwoKS0+Y2hhcmFjdGVycygpLCB1
c3RyaW5nLmxlbmd0aCgpKTsKLQotICAgICAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKHFz
dHJpbmcpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBkaXN0ID0gNTsKLSAg
ICAgICAgICAgICAgICByZXQgPSBRVmFyaWFudChyZXN1bHQpOwotICAgICAgICAgICAgfSBlbHNl
IGlmICh0eXBlID09IEFycmF5KSB7Ci0gICAgICAgICAgICAgICAgSlNBcnJheSogYXJyYXkgPSBz
dGF0aWNfY2FzdDxKU0FycmF5Kj4ob2JqZWN0KTsKLQotICAgICAgICAgICAgICAgIFFTdHJpbmdM
aXN0IHJlc3VsdDsKLSAgICAgICAgICAgICAgICBpbnQgbGVuID0gYXJyYXktPmxlbmd0aCgpOwot
ICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuOyArK2kpIHsKLSAgICAgICAg
ICAgICAgICAgICAgSlNWYWx1ZSB2YWwgPSBhcnJheS0+Z2V0KGV4ZWMsIGkpOwotICAgICAgICAg
ICAgICAgICAgICBVU3RyaW5nIHVzdHJpbmcgPSB2YWwudG9TdHJpbmcoZXhlYyk7Ci0gICAgICAg
ICAgICAgICAgICAgIFFTdHJpbmcgcXN0cmluZyA9IFFTdHJpbmcoKGNvbnN0IFFDaGFyKil1c3Ry
aW5nLmltcGwoKS0+Y2hhcmFjdGVycygpLCB1c3RyaW5nLmxlbmd0aCgpKTsKLQotICAgICAgICAg
ICAgICAgICAgICByZXN1bHQuYXBwZW5kKHFzdHJpbmcpOwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICBkaXN0ID0gNTsKLSAgICAgICAgICAgICAgICByZXQgPSBRVmFyaWFudChy
ZXN1bHQpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAvLyBNYWtlIGEg
c2luZ2xlIGxlbmd0aCBhcnJheQotICAgICAgICAgICAgICAgIFVTdHJpbmcgdXN0cmluZyA9IHZh
bHVlLnRvU3RyaW5nKGV4ZWMpOwotICAgICAgICAgICAgICAgIFFTdHJpbmcgcXN0cmluZyA9IFFT
dHJpbmcoKGNvbnN0IFFDaGFyKil1c3RyaW5nLmltcGwoKS0+Y2hhcmFjdGVycygpLCB1c3RyaW5n
Lmxlbmd0aCgpKTsKLSAgICAgICAgICAgICAgICBRU3RyaW5nTGlzdCByZXN1bHQ7Ci0gICAgICAg
ICAgICAgICAgcmVzdWx0LmFwcGVuZChxc3RyaW5nKTsKLSAgICAgICAgICAgICAgICByZXQgPSBR
VmFyaWFudChyZXN1bHQpOwotICAgICAgICAgICAgICAgIGRpc3QgPSAxMDsKLSAgICAgICAgICAg
IH0KKyAgICAgICAgY2FzZSBRTWV0YVR5cGU6OlFTdHJpbmdMaXN0OgorICAgICAgICAgICAgcmV0
ID0gdG9RU3RyaW5nTGlzdChjb250ZXh0LCB0eXBlLCBvYmplY3QsIGRpc3QsIGV4Y2VwdGlvbik7
CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQogCi0gICAgICAgIGNhc2UgUU1ldGFUeXBl
OjpRQnl0ZUFycmF5OiB7Ci0gICAgICAgICAgICBpZiAodHlwZSA9PSBKU0J5dGVBcnJheSkgewot
ICAgICAgICAgICAgICAgIFdURjo6Qnl0ZUFycmF5KiBhcnIgPSBhc0J5dGVBcnJheSh2YWx1ZSkt
PnN0b3JhZ2UoKTsKLSAgICAgICAgICAgICAgICByZXQgPSBRVmFyaWFudChRQnl0ZUFycmF5KHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KGFyci0+ZGF0YSgpKSwgYXJyLT5sZW5ndGgoKSkp
OwotICAgICAgICAgICAgICAgIGRpc3QgPSAwOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgICAgICBVU3RyaW5nIHVzdHJpbmcgPSB2YWx1ZS50b1N0cmluZyhleGVjKTsKLSAgICAg
ICAgICAgICAgICByZXQgPSBRVmFyaWFudChRU3RyaW5nKChjb25zdCBRQ2hhciopdXN0cmluZy5p
bXBsKCktPmNoYXJhY3RlcnMoKSwgdXN0cmluZy5sZW5ndGgoKSkudG9MYXRpbjEoKSk7Ci0gICAg
ICAgICAgICAgICAgaWYgKHR5cGUgPT0gU3RyaW5nKQotICAgICAgICAgICAgICAgICAgICBkaXN0
ID0gNTsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIGRpc3QgPSAx
MDsKLSAgICAgICAgICAgIH0KKyAgICAgICAgY2FzZSBRTWV0YVR5cGU6OlFCeXRlQXJyYXk6Cisg
ICAgICAgICAgICByZXQgPSBRVmFyaWFudCh0b1FCeXRlQXJyYXkoY29udGV4dCwgdHlwZSwgb2Jq
ZWN0LCBleGNlcHRpb24sIGRpc3QpKTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9CiAK
ICAgICAgICAgY2FzZSBRTWV0YVR5cGU6OlFEYXRlVGltZToKICAgICAgICAgY2FzZSBRTWV0YVR5
cGU6OlFEYXRlOgogICAgICAgICBjYXNlIFFNZXRhVHlwZTo6UVRpbWU6Ci0gICAgICAgICAgICBp
ZiAodHlwZSA9PSBEYXRlKSB7Ci0gICAgICAgICAgICAgICAgRGF0ZUluc3RhbmNlKiBkYXRlID0g
c3RhdGljX2Nhc3Q8RGF0ZUluc3RhbmNlKj4ob2JqZWN0KTsKLSAgICAgICAgICAgICAgICBHcmVn
b3JpYW5EYXRlVGltZSBnZHQ7Ci0gICAgICAgICAgICAgICAgbXNUb0dyZWdvcmlhbkRhdGVUaW1l
KGV4ZWMsIGRhdGUtPmludGVybmFsTnVtYmVyKCksIHRydWUsIGdkdCk7Ci0gICAgICAgICAgICAg
ICAgaWYgKGhpbnQgPT0gUU1ldGFUeXBlOjpRRGF0ZVRpbWUpIHsKLSAgICAgICAgICAgICAgICAg
ICAgcmV0ID0gUURhdGVUaW1lKFFEYXRlKGdkdC55ZWFyICsgMTkwMCwgZ2R0Lm1vbnRoICsgMSwg
Z2R0Lm1vbnRoRGF5KSwgUVRpbWUoZ2R0LmhvdXIsIGdkdC5taW51dGUsIGdkdC5zZWNvbmQpLCBR
dDo6VVRDKTsKLSAgICAgICAgICAgICAgICAgICAgZGlzdCA9IDA7Ci0gICAgICAgICAgICAgICAg
fSBlbHNlIGlmIChoaW50ID09IFFNZXRhVHlwZTo6UURhdGUpIHsKLSAgICAgICAgICAgICAgICAg
ICAgcmV0ID0gUURhdGUoZ2R0LnllYXIgKyAxOTAwLCBnZHQubW9udGggKyAxLCBnZHQubW9udGhE
YXkpOwotICAgICAgICAgICAgICAgICAgICBkaXN0ID0gMTsKLSAgICAgICAgICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgICAgICAgICByZXQgPSBRVGltZShnZHQuaG91ciArIDE5MDAsIGdk
dC5taW51dGUsIGdkdC5zZWNvbmQpOwotICAgICAgICAgICAgICAgICAgICBkaXN0ID0gMjsKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT0gTnVtYmVyKSB7
Ci0gICAgICAgICAgICAgICAgZG91YmxlIGIgPSB2YWx1ZS50b051bWJlcihleGVjKTsKLSAgICAg
ICAgICAgICAgICBHcmVnb3JpYW5EYXRlVGltZSBnZHQ7Ci0gICAgICAgICAgICAgICAgbXNUb0dy
ZWdvcmlhbkRhdGVUaW1lKGV4ZWMsIGIsIHRydWUsIGdkdCk7Ci0gICAgICAgICAgICAgICAgaWYg
KGhpbnQgPT0gUU1ldGFUeXBlOjpRRGF0ZVRpbWUpIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0
ID0gUURhdGVUaW1lKFFEYXRlKGdkdC55ZWFyICsgMTkwMCwgZ2R0Lm1vbnRoICsgMSwgZ2R0Lm1v
bnRoRGF5KSwgUVRpbWUoZ2R0LmhvdXIsIGdkdC5taW51dGUsIGdkdC5zZWNvbmQpLCBRdDo6VVRD
KTsKLSAgICAgICAgICAgICAgICAgICAgZGlzdCA9IDY7Ci0gICAgICAgICAgICAgICAgfSBlbHNl
IGlmIChoaW50ID09IFFNZXRhVHlwZTo6UURhdGUpIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0
ID0gUURhdGUoZ2R0LnllYXIgKyAxOTAwLCBnZHQubW9udGggKyAxLCBnZHQubW9udGhEYXkpOwot
ICAgICAgICAgICAgICAgICAgICBkaXN0ID0gODsKLSAgICAgICAgICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgICAgICAgICByZXQgPSBRVGltZShnZHQuaG91ciwgZ2R0Lm1pbnV0ZSwgZ2R0
LnNlY29uZCk7Ci0gICAgICAgICAgICAgICAgICAgIGRpc3QgPSAxMDsKLSAgICAgICAgICAgICAg
ICB9Ci0jaWZuZGVmIFFUX05PX0RBVEVTVFJJTkcKLSAgICAgICAgICAgIH0gZWxzZSBpZiAodHlw
ZSA9PSBTdHJpbmcpIHsKLSAgICAgICAgICAgICAgICBVU3RyaW5nIHVzdHJpbmcgPSB2YWx1ZS50
b1N0cmluZyhleGVjKTsKLSAgICAgICAgICAgICAgICBRU3RyaW5nIHFzdHJpbmcgPSBRU3RyaW5n
KChjb25zdCBRQ2hhciopdXN0cmluZy5pbXBsKCktPmNoYXJhY3RlcnMoKSwgdXN0cmluZy5sZW5n
dGgoKSk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoaGludCA9PSBRTWV0YVR5cGU6OlFEYXRlVGlt
ZSkgewotICAgICAgICAgICAgICAgICAgICBRRGF0ZVRpbWUgZHQgPSBRRGF0ZVRpbWU6OmZyb21T
dHJpbmcocXN0cmluZywgUXQ6OklTT0RhdGUpOwotICAgICAgICAgICAgICAgICAgICBpZiAoIWR0
LmlzVmFsaWQoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGR0ID0gUURhdGVUaW1lOjpmcm9t
U3RyaW5nKHFzdHJpbmcsIFF0OjpUZXh0RGF0ZSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICgh
ZHQuaXNWYWxpZCgpKQotICAgICAgICAgICAgICAgICAgICAgICAgZHQgPSBRRGF0ZVRpbWU6OmZy
b21TdHJpbmcocXN0cmluZywgUXQ6OlN5c3RlbUxvY2FsZURhdGUpOwotICAgICAgICAgICAgICAg
ICAgICBpZiAoIWR0LmlzVmFsaWQoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGR0ID0gUURh
dGVUaW1lOjpmcm9tU3RyaW5nKHFzdHJpbmcsIFF0OjpMb2NhbGVEYXRlKTsKLSAgICAgICAgICAg
ICAgICAgICAgaWYgKGR0LmlzVmFsaWQoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgcmV0
ID0gZHQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkaXN0ID0gMjsKLSAgICAgICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaGludCA9PSBRTWV0YVR5cGU6OlFE
YXRlKSB7Ci0gICAgICAgICAgICAgICAgICAgIFFEYXRlIGR0ID0gUURhdGU6OmZyb21TdHJpbmco
cXN0cmluZywgUXQ6OklTT0RhdGUpOwotICAgICAgICAgICAgICAgICAgICBpZiAoIWR0LmlzVmFs
aWQoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGR0ID0gUURhdGU6OmZyb21TdHJpbmcocXN0
cmluZywgUXQ6OlRleHREYXRlKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFkdC5pc1ZhbGlk
KCkpCi0gICAgICAgICAgICAgICAgICAgICAgICBkdCA9IFFEYXRlOjpmcm9tU3RyaW5nKHFzdHJp
bmcsIFF0OjpTeXN0ZW1Mb2NhbGVEYXRlKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFkdC5p
c1ZhbGlkKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICBkdCA9IFFEYXRlOjpmcm9tU3RyaW5n
KHFzdHJpbmcsIFF0OjpMb2NhbGVEYXRlKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGR0Lmlz
VmFsaWQoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgcmV0ID0gZHQ7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBkaXN0ID0gMzsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIFFUaW1lIGR0ID0gUVRpbWU6OmZy
b21TdHJpbmcocXN0cmluZywgUXQ6OklTT0RhdGUpOwotICAgICAgICAgICAgICAgICAgICBpZiAo
IWR0LmlzVmFsaWQoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGR0ID0gUVRpbWU6OmZyb21T
dHJpbmcocXN0cmluZywgUXQ6OlRleHREYXRlKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFk
dC5pc1ZhbGlkKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICBkdCA9IFFUaW1lOjpmcm9tU3Ry
aW5nKHFzdHJpbmcsIFF0OjpTeXN0ZW1Mb2NhbGVEYXRlKTsKLSAgICAgICAgICAgICAgICAgICAg
aWYgKCFkdC5pc1ZhbGlkKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICBkdCA9IFFUaW1lOjpm
cm9tU3RyaW5nKHFzdHJpbmcsIFF0OjpMb2NhbGVEYXRlKTsKLSAgICAgICAgICAgICAgICAgICAg
aWYgKGR0LmlzVmFsaWQoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgcmV0ID0gZHQ7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBkaXN0ID0gMzsKLSAgICAgICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgIH0KLSNlbmRpZiAvLyBRVF9OT19EQVRFU1RSSU5HCi0gICAgICAgICAg
ICB9CisgICAgICAgICAgICByZXQgPSB0b1FEYXRlT3JUaW1lKGNvbnRleHQsIHR5cGUsIGhpbnQs
IHZhbHVlLCBleGNlcHRpb24sIGRpc3QpOwogICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAg
Y2FzZSBRTWV0YVR5cGU6OlFSZWdFeHA6Ci0gICAgICAgICAgICBpZiAodHlwZSA9PSBSZWdFeHAp
IHsKLS8qCi0gICAgICAgICAgICAgICAgUmVnRXhwT2JqZWN0ICpyZSA9IHN0YXRpY19jYXN0PFJl
Z0V4cE9iamVjdCo+KG9iamVjdCk7Ci0qLwotICAgICAgICAgICAgICAgIC8vIEF0dGVtcHQgdG8g
Y29udmVydC4uIGEgYml0IHJpc2t5Ci0gICAgICAgICAgICAgICAgVVN0cmluZyB1c3RyaW5nID0g
dmFsdWUudG9TdHJpbmcoZXhlYyk7Ci0gICAgICAgICAgICAgICAgUVN0cmluZyBxc3RyaW5nID0g
UVN0cmluZygoY29uc3QgUUNoYXIqKXVzdHJpbmcuaW1wbCgpLT5jaGFyYWN0ZXJzKCksIHVzdHJp
bmcubGVuZ3RoKCkpOwotCi0gICAgICAgICAgICAgICAgLy8gdGhpcyBpcyBvZiB0aGUgZm9ybSAn
L3h4eHh4eC9pJwotICAgICAgICAgICAgICAgIGludCBmaXJzdFNsYXNoID0gcXN0cmluZy5pbmRl
eE9mKFFMYXRpbjFDaGFyKCcvJykpOwotICAgICAgICAgICAgICAgIGludCBsYXN0U2xhc2ggPSBx
c3RyaW5nLmxhc3RJbmRleE9mKFFMYXRpbjFDaGFyKCcvJykpOwotICAgICAgICAgICAgICAgIGlm
IChmaXJzdFNsYXNoID49MCAmJiBsYXN0U2xhc2ggPiBmaXJzdFNsYXNoKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIFFSZWdFeHAgcmVhbFJlOwotCi0gICAgICAgICAgICAgICAgICAgIHJlYWxSZS5z
ZXRQYXR0ZXJuKHFzdHJpbmcubWlkKGZpcnN0U2xhc2ggKyAxLCBsYXN0U2xhc2ggLSBmaXJzdFNs
YXNoIC0gMSkpOwotCi0gICAgICAgICAgICAgICAgICAgIGlmIChxc3RyaW5nLm1pZChsYXN0U2xh
c2ggKyAxKS5jb250YWlucyhRTGF0aW4xQ2hhcignaScpKSkKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHJlYWxSZS5zZXRDYXNlU2Vuc2l0aXZpdHkoUXQ6OkNhc2VJbnNlbnNpdGl2ZSk7Ci0KLSAg
ICAgICAgICAgICAgICAgICAgcmV0ID0gUVZhcmlhbnQ6OmZyb21WYWx1ZShyZWFsUmUpOwotICAg
ICAgICAgICAgICAgICAgICBkaXN0ID0gMDsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgICAgICAgICBxQ29udkRlYnVnKCkgPDwgImNvdWxkbid0IHBhcnNlIGEgSlMgcmVn
ZXhwIjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT0g
U3RyaW5nKSB7Ci0gICAgICAgICAgICAgICAgVVN0cmluZyB1c3RyaW5nID0gdmFsdWUudG9TdHJp
bmcoZXhlYyk7Ci0gICAgICAgICAgICAgICAgUVN0cmluZyBxc3RyaW5nID0gUVN0cmluZygoY29u
c3QgUUNoYXIqKXVzdHJpbmcuaW1wbCgpLT5jaGFyYWN0ZXJzKCksIHVzdHJpbmcubGVuZ3RoKCkp
OwotCi0gICAgICAgICAgICAgICAgUVJlZ0V4cCByZShxc3RyaW5nKTsKLSAgICAgICAgICAgICAg
ICBpZiAocmUuaXNWYWxpZCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldCA9IFFWYXJpYW50
Ojpmcm9tVmFsdWUocmUpOwotICAgICAgICAgICAgICAgICAgICBkaXN0ID0gMTA7Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0ID0gUVZhcmlhbnQ6OmZy
b21WYWx1ZTxRUmVnRXhwPih0b1FSZWdFeHAoY29udGV4dCwgdHlwZSwgdmFsdWUsIGV4Y2VwdGlv
biwgZGlzdCkpOwogICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSBRTWV0YVR5cGU6
OlFPYmplY3RTdGFyOgotICAgICAgICAgICAgaWYgKHR5cGUgPT0gUU9iaikgewotICAgICAgICAg
ICAgICAgIFF0SW5zdGFuY2UqIHF0aW5zdCA9IFF0SW5zdGFuY2U6OmdldEluc3RhbmNlKG9iamVj
dCk7Ci0gICAgICAgICAgICAgICAgaWYgKHF0aW5zdCkgewotICAgICAgICAgICAgICAgICAgICBp
ZiAocXRpbnN0LT5nZXRPYmplY3QoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgcUNvbnZE
ZWJ1ZygpIDw8ICJmb3VuZCBpbnN0YW5jZSwgd2l0aCBvYmplY3Q6IiA8PCAodm9pZCopIHF0aW5z
dC0+Z2V0T2JqZWN0KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXQgPSBRVmFyaWFudDo6
ZnJvbVZhbHVlKHF0aW5zdC0+Z2V0T2JqZWN0KCkpOwotICAgICAgICAgICAgICAgICAgICAgICAg
cUNvbnZEZWJ1ZygpIDw8IHJldDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRpc3QgPSAwOwot
ICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgcUNv
bnZEZWJ1ZygpIDw8ICJjYW4ndCBjb252ZXJ0IGRlbGV0ZWQgcW9iamVjdCI7Ci0gICAgICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAg
ICBxQ29udkRlYnVnKCkgPDwgIndhc24ndCBhIHF0aW5zdGFuY2UiOwotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PSBOdWxsKSB7Ci0gICAgICAgICAgICAg
ICAgUU9iamVjdCogbnVsbG9iaiA9IDA7Ci0gICAgICAgICAgICAgICAgcmV0ID0gUVZhcmlhbnQ6
OmZyb21WYWx1ZShudWxsb2JqKTsKLSAgICAgICAgICAgICAgICBkaXN0ID0gMDsKLSAgICAgICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgcUNvbnZEZWJ1ZygpIDw8ICJwcmV2aW91cyB0
eXBlIHdhcyBub3QgYW4gb2JqZWN0OiIgPDwgdHlwZTsKLSAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIHJldCA9IFFWYXJpYW50Ojpmcm9tVmFsdWU8UU9iamVjdCo+KHRvUU9iamVjdChjb250ZXh0
LCB0eXBlLCBvYmplY3QsIGV4Y2VwdGlvbiwgZGlzdCkpOwogICAgICAgICAgICAgYnJlYWs7CiAK
ICAgICAgICAgY2FzZSBRTWV0YVR5cGU6OlZvaWRTdGFyOgogICAgICAgICAgICAgaWYgKHR5cGUg
PT0gUU9iaikgewotICAgICAgICAgICAgICAgIFF0SW5zdGFuY2UqIHF0aW5zdCA9IFF0SW5zdGFu
Y2U6OmdldEluc3RhbmNlKG9iamVjdCk7Ci0gICAgICAgICAgICAgICAgaWYgKHF0aW5zdCkgewot
ICAgICAgICAgICAgICAgICAgICBpZiAocXRpbnN0LT5nZXRPYmplY3QoKSkgewotICAgICAgICAg
ICAgICAgICAgICAgICAgcUNvbnZEZWJ1ZygpIDw8ICJmb3VuZCBpbnN0YW5jZSwgd2l0aCBvYmpl
Y3Q6IiA8PCAodm9pZCopIHF0aW5zdC0+Z2V0T2JqZWN0KCk7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICByZXQgPSBRVmFyaWFudDo6ZnJvbVZhbHVlKCh2b2lkICopcXRpbnN0LT5nZXRPYmplY3Qo
KSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBxQ29udkRlYnVnKCkgPDwgcmV0OwotICAgICAg
ICAgICAgICAgICAgICAgICAgZGlzdCA9IDA7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBxQ29udkRlYnVnKCkgPDwgImNhbid0IGNvbnZlcnQg
ZGVsZXRlZCBxb2JqZWN0IjsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHFDb252RGVidWcoKSA8PCAid2Fzbid0IGEg
cXRpbnN0YW5jZSI7CisgICAgICAgICAgICAgICAgUU9iamVjdCogcU9iaiA9IHRvUU9iamVjdChj
b250ZXh0LCBRT2JqLCBvYmplY3QsIGV4Y2VwdGlvbiwgZGlzdCk7CisgICAgICAgICAgICAgICAg
aWYgKHFPYmopIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0ID0gUVZhcmlhbnQ6OmZyb21WYWx1
ZShzdGF0aWNfY2FzdDx2b2lkKj4ocU9iaikpOworICAgICAgICAgICAgICAgICAgICBkaXN0ID0g
MDsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT0gTnVs
bCkgewotICAgICAgICAgICAgICAgIHJldCA9IFFWYXJpYW50Ojpmcm9tVmFsdWUoKHZvaWQqKTAp
OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBp
ZiAodHlwZSA9PSBOdWxsKSB7CisgICAgICAgICAgICAgICAgcmV0ID0gUVZhcmlhbnQ6OmZyb21W
YWx1ZShzdGF0aWNfY2FzdDx2b2lkKj4oMCkpOwogICAgICAgICAgICAgICAgIGRpc3QgPSAwOwot
ICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlID09IE51bWJlcikgewotICAgICAgICAgICAgICAg
IC8vIEkgZG9uJ3QgdGhpbmsgdGhhdCBjb252ZXJ0aW5nIGEgZG91YmxlIHRvIGEgcG9pbnRlciBp
cyBhIHdpc2UKLSAgICAgICAgICAgICAgICAvLyBtb3ZlLiAgRXhjZXB0IG1heWJlIDAuCi0gICAg
ICAgICAgICAgICAgcUNvbnZEZWJ1ZygpIDw8ICJnb3QgbnVtYmVyIGZvciB2b2lkICogLSBub3Qg
Y29udmVydGluZywgc2VlbXMgdW5zYWZlOiIgPDwgdmFsdWUudG9OdW1iZXIoZXhlYyk7Ci0gICAg
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHFDb252RGVidWcoKSA8PCAidm9pZCog
LSB1bmhhbmRsZWQgdHlwZSIgPDwgdHlwZTsKKyAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAg
ICAgICAvLyBOb24gY29uc3QgdHlwZSBpZHMKLSAgICAgICAgICAgIGlmIChoaW50ID09IChRTWV0
YVR5cGU6OlR5cGUpIHFNZXRhVHlwZUlkPFFPYmplY3RMaXN0PigpKQotICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgIGlmICh0eXBlID09IFJUQXJyYXkpIHsKLSAgICAgICAgICAgICAgICAg
ICAgUnVudGltZUFycmF5KiBydGFycmF5ID0gc3RhdGljX2Nhc3Q8UnVudGltZUFycmF5Kj4ob2Jq
ZWN0KTsKLQotICAgICAgICAgICAgICAgICAgICBRT2JqZWN0TGlzdCByZXN1bHQ7Ci0gICAgICAg
ICAgICAgICAgICAgIGludCBsZW4gPSBydGFycmF5LT5nZXRMZW5ndGgoKTsKLSAgICAgICAgICAg
ICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW47ICsraSkgewotICAgICAgICAgICAgICAg
ICAgICAgICAgSlNWYWx1ZSB2YWwgPSBydGFycmF5LT5nZXRDb25jcmV0ZUFycmF5KCktPnZhbHVl
QXQoZXhlYywgaSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpbnQgaXRlbWRpc3QgPSAtMTsK
LSAgICAgICAgICAgICAgICAgICAgICAgIFFWYXJpYW50IGl0ZW0gPSBjb252ZXJ0VmFsdWVUb1FW
YXJpYW50KGV4ZWMsIHZhbCwgUU1ldGFUeXBlOjpRT2JqZWN0U3RhciwgJml0ZW1kaXN0LCB2aXNp
dGVkT2JqZWN0cywgcmVjdXJzaW9uTGltaXQpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KGl0ZW1kaXN0ID49IDApCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVu
ZChpdGVtLnZhbHVlPFFPYmplY3QqPigpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgICAgICAvLyBJZiB3ZSBkaWRuJ3QgZmFpbCBjb252ZXJzaW9uCi0g
ICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQuY291bnQoKSA9PSBsZW4pIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGRpc3QgPSA1OwotICAgICAgICAgICAgICAgICAgICAgICAgcmV0ID0g
UVZhcmlhbnQ6OmZyb21WYWx1ZShyZXN1bHQpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlID09IEFycmF5KSB7Ci0gICAgICAgICAgICAgICAg
ICAgIEpTT2JqZWN0KiBvYmplY3QgPSB2YWx1ZS50b09iamVjdChleGVjKTsKLSAgICAgICAgICAg
ICAgICAgICAgSlNBcnJheSogYXJyYXkgPSBzdGF0aWNfY2FzdDxKU0FycmF5ICo+KG9iamVjdCk7
Ci0gICAgICAgICAgICAgICAgICAgIFFPYmplY3RMaXN0IHJlc3VsdDsKLSAgICAgICAgICAgICAg
ICAgICAgaW50IGxlbiA9IGFycmF5LT5sZW5ndGgoKTsKLSAgICAgICAgICAgICAgICAgICAgZm9y
IChpbnQgaSA9IDA7IGkgPCBsZW47ICsraSkgewotICAgICAgICAgICAgICAgICAgICAgICAgSlNW
YWx1ZSB2YWwgPSBhcnJheS0+Z2V0KGV4ZWMsIGkpOwotICAgICAgICAgICAgICAgICAgICAgICAg
aW50IGl0ZW1kaXN0ID0gLTE7Ci0gICAgICAgICAgICAgICAgICAgICAgICBRVmFyaWFudCBpdGVt
ID0gY29udmVydFZhbHVlVG9RVmFyaWFudChleGVjLCB2YWwsIFFNZXRhVHlwZTo6UU9iamVjdFN0
YXIsICZpdGVtZGlzdCwgdmlzaXRlZE9iamVjdHMsIHJlY3Vyc2lvbkxpbWl0KTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIChpdGVtZGlzdCA+PSAwKQotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJlc3VsdC5hcHBlbmQoaXRlbS52YWx1ZTxRT2JqZWN0Kj4oKSk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgLy8gSWYgd2UgZGlkbid0
IGZhaWwgY29udmVyc2lvbgotICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0LmNvdW50KCkg
PT0gbGVuKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkaXN0ID0gNTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHJldCA9IFFWYXJpYW50Ojpmcm9tVmFsdWUocmVzdWx0KTsKLSAgICAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAg
ICAgIC8vIE1ha2UgYSBzaW5nbGUgbGVuZ3RoIGFycmF5Ci0gICAgICAgICAgICAgICAgICAgIFFP
YmplY3RMaXN0IHJlc3VsdDsKLSAgICAgICAgICAgICAgICAgICAgaW50IGl0ZW1kaXN0ID0gLTE7
Ci0gICAgICAgICAgICAgICAgICAgIFFWYXJpYW50IGl0ZW0gPSBjb252ZXJ0VmFsdWVUb1FWYXJp
YW50KGV4ZWMsIHZhbHVlLCBRTWV0YVR5cGU6OlFPYmplY3RTdGFyLCAmaXRlbWRpc3QsIHZpc2l0
ZWRPYmplY3RzLCByZWN1cnNpb25MaW1pdCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChpdGVt
ZGlzdCA+PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKGl0ZW0u
dmFsdWU8UU9iamVjdCo+KCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgZGlzdCA9IDEwOwot
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0ID0gUVZhcmlhbnQ6OmZyb21WYWx1ZShyZXN1bHQp
OwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
aWYgKGhpbnQgPT0gc3RhdGljX2Nhc3Q8UU1ldGFUeXBlOjpUeXBlPihxTWV0YVR5cGVJZDxRT2Jq
ZWN0TGlzdD4oKSkpIHsKKyAgICAgICAgICAgICAgICByZXQgPSBRVmFyaWFudDo6ZnJvbVZhbHVl
PFFPYmplY3RMaXN0Pih0b1FPYmplY3RMaXN0KGNvbnRleHQsIHR5cGUsIG9iamVjdCwgdmlzaXRl
ZE9iamVjdHMsIGRpc3QsIGV4Y2VwdGlvbiwgcmVjdXJzaW9uTGltaXQpKTsKICAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoaGludCA9PSAoUU1ldGFUeXBlOjpU
eXBlKSBxTWV0YVR5cGVJZDxRTGlzdDxpbnQ+ID4oKSkgewotICAgICAgICAgICAgICAgIGlmICh0
eXBlID09IFJUQXJyYXkpIHsKLSAgICAgICAgICAgICAgICAgICAgUnVudGltZUFycmF5KiBydGFy
cmF5ID0gc3RhdGljX2Nhc3Q8UnVudGltZUFycmF5Kj4ob2JqZWN0KTsKLQotICAgICAgICAgICAg
ICAgICAgICBRTGlzdDxpbnQ+IHJlc3VsdDsKLSAgICAgICAgICAgICAgICAgICAgaW50IGxlbiA9
IHJ0YXJyYXktPmdldExlbmd0aCgpOwotICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBpID0g
MDsgaSA8IGxlbjsgKytpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBKU1ZhbHVlIHZhbCA9
IHJ0YXJyYXktPmdldENvbmNyZXRlQXJyYXkoKS0+dmFsdWVBdChleGVjLCBpKTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGludCBpdGVtZGlzdCA9IC0xOwotICAgICAgICAgICAgICAgICAgICAg
ICAgUVZhcmlhbnQgaXRlbSA9IGNvbnZlcnRWYWx1ZVRvUVZhcmlhbnQoZXhlYywgdmFsLCBRTWV0
YVR5cGU6OkludCwgJml0ZW1kaXN0LCB2aXNpdGVkT2JqZWN0cywgcmVjdXJzaW9uTGltaXQpOwot
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZW1kaXN0ID49IDApCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChpdGVtLnZhbHVlPGludD4oKSk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgLy8gSWYgd2UgZGlk
bid0IGZhaWwgY29udmVyc2lvbgotICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0LmNvdW50
KCkgPT0gbGVuKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkaXN0ID0gNTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHJldCA9IFFWYXJpYW50Ojpmcm9tVmFsdWUocmVzdWx0KTsKLSAgICAg
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PSBBcnJh
eSkgewotICAgICAgICAgICAgICAgICAgICBKU0FycmF5KiBhcnJheSA9IHN0YXRpY19jYXN0PEpT
QXJyYXkgKj4ob2JqZWN0KTsKLQotICAgICAgICAgICAgICAgICAgICBRTGlzdDxpbnQ+IHJlc3Vs
dDsKLSAgICAgICAgICAgICAgICAgICAgaW50IGxlbiA9IGFycmF5LT5sZW5ndGgoKTsKLSAgICAg
ICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW47ICsraSkgewotICAgICAgICAg
ICAgICAgICAgICAgICAgSlNWYWx1ZSB2YWwgPSBhcnJheS0+Z2V0KGV4ZWMsIGkpOwotICAgICAg
ICAgICAgICAgICAgICAgICAgaW50IGl0ZW1kaXN0ID0gLTE7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBRVmFyaWFudCBpdGVtID0gY29udmVydFZhbHVlVG9RVmFyaWFudChleGVjLCB2YWwsIFFN
ZXRhVHlwZTo6SW50LCAmaXRlbWRpc3QsIHZpc2l0ZWRPYmplY3RzLCByZWN1cnNpb25MaW1pdCk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbWRpc3QgPj0gMCkKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKGl0ZW0udmFsdWU8aW50PigpKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAvLyBJZiB3ZSBk
aWRuJ3QgZmFpbCBjb252ZXJzaW9uCi0gICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQuY291
bnQoKSA9PSBsZW4pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRpc3QgPSA1OwotICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0ID0gUVZhcmlhbnQ6OmZyb21WYWx1ZShyZXN1bHQpOwotICAg
ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
ICAgICAgICAgLy8gTWFrZSBhIHNpbmdsZSBsZW5ndGggYXJyYXkKLSAgICAgICAgICAgICAgICAg
ICAgUUxpc3Q8aW50PiByZXN1bHQ7Ci0gICAgICAgICAgICAgICAgICAgIGludCBpdGVtZGlzdCA9
IC0xOwotICAgICAgICAgICAgICAgICAgICBRVmFyaWFudCBpdGVtID0gY29udmVydFZhbHVlVG9R
VmFyaWFudChleGVjLCB2YWx1ZSwgUU1ldGFUeXBlOjpJbnQsICZpdGVtZGlzdCwgdmlzaXRlZE9i
amVjdHMsIHJlY3Vyc2lvbkxpbWl0KTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZW1kaXN0
ID49IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoaXRlbS52YWx1
ZTxpbnQ+KCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgZGlzdCA9IDEwOwotICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0ID0gUVZhcmlhbnQ6OmZyb21WYWx1ZShyZXN1bHQpOwotICAgICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBpZiAoaGludCA9PSAoUU1ldGFUeXBlOjpUeXBlKSBxTWV0YVR5cGVJZDxRTGlzdDxp
bnQ+ID4oKSkgeworICAgICAgICAgICAgICAgIHJldCA9IFFWYXJpYW50Ojpmcm9tVmFsdWU8UUxp
c3Q8aW50PiA+KHRvUUxpc3RPZkludChjb250ZXh0LCB0eXBlLCBvYmplY3QsIHZpc2l0ZWRPYmpl
Y3RzLCBkaXN0LCBleGNlcHRpb24sIGRpc3QpKTsKICAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgIH0gZWxzZSBpZiAoUXRQaXhtYXBJbnN0YW5jZTo6Y2FuSGFuZGxlKHN0YXRpY19j
YXN0PFFNZXRhVHlwZTo6VHlwZT4oaGludCkpKSB7Ci0gICAgICAgICAgICAgICAgcmV0ID0gUXRQ
aXhtYXBJbnN0YW5jZTo6dmFyaWFudEZyb21PYmplY3Qob2JqZWN0LCBzdGF0aWNfY2FzdDxRTWV0
YVR5cGU6OlR5cGU+KGhpbnQpKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoaGludCA9PSAoUU1l
dGFUeXBlOjpUeXBlKSBxTWV0YVR5cGVJZDxRV2ViRWxlbWVudD4oKSkgewotICAgICAgICAgICAg
ICAgIGlmIChvYmplY3QgJiYgb2JqZWN0LT5pbmhlcml0cygmSlNIVE1MRWxlbWVudDo6c19pbmZv
KSkKLSAgICAgICAgICAgICAgICAgICAgcmV0ID0gUVZhcmlhbnQ6OmZyb21WYWx1ZTxRV2ViRWxl
bWVudD4oUXRXZWJFbGVtZW50UnVudGltZTo6Y3JlYXRlKChzdGF0aWNfY2FzdDxKU0hUTUxFbGVt
ZW50Kj4ob2JqZWN0KSktPmltcGwoKSkpOwotICAgICAgICAgICAgICAgIGVsc2UgaWYgKG9iamVj
dCAmJiBvYmplY3QtPmluaGVyaXRzKCZKU0RvY3VtZW50OjpzX2luZm8pKQotICAgICAgICAgICAg
ICAgICAgICByZXQgPSBRVmFyaWFudDo6ZnJvbVZhbHVlPFFXZWJFbGVtZW50PihRdFdlYkVsZW1l
bnRSdW50aW1lOjpjcmVhdGUoKHN0YXRpY19jYXN0PEpTRG9jdW1lbnQqPihvYmplY3QpKS0+aW1w
bCgpLT5kb2N1bWVudEVsZW1lbnQoKSkpOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAg
ICAgICAgICAgICAgcmV0ID0gUVZhcmlhbnQ6OmZyb21WYWx1ZTxRV2ViRWxlbWVudD4oUVdlYkVs
ZW1lbnQoKSk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGhpbnQgPT0gKFFNZXRhVHlwZTo6VHlw
ZSkgcU1ldGFUeXBlSWQ8UURSVE5vZGU+KCkpIHsKLSAgICAgICAgICAgICAgICBpZiAob2JqZWN0
ICYmIG9iamVjdC0+aW5oZXJpdHMoJkpTTm9kZTo6c19pbmZvKSkKLSAgICAgICAgICAgICAgICAg
ICAgcmV0ID0gUVZhcmlhbnQ6OmZyb21WYWx1ZTxRRFJUTm9kZT4oUXREUlROb2RlUnVudGltZTo6
Y3JlYXRlKChzdGF0aWNfY2FzdDxKU05vZGUqPihvYmplY3QpKS0+aW1wbCgpKSk7Ci0gICAgICAg
ICAgICB9IGVsc2UgaWYgKGhpbnQgPT0gKFFNZXRhVHlwZTo6VHlwZSkgcU1ldGFUeXBlSWQ8UVZh
cmlhbnQ+KCkpIHsKLSAgICAgICAgICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwo
KSkgeworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoUXRQaXhtYXBSdW50aW1lOjpj
YW5IYW5kbGUoc3RhdGljX2Nhc3Q8UU1ldGFUeXBlOjpUeXBlPihoaW50KSkpIHsKKyAgICAgICAg
ICAgICAgICByZXQgPSBRdFBpeG1hcFJ1bnRpbWU6OnRvUXQoY29udGV4dCwgb2JqZWN0LCBzdGF0
aWNfY2FzdDxRTWV0YVR5cGU6OlR5cGU+KGhpbnQpLCBleGNlcHRpb24pOworICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoaGludCA9PSBzdGF0
aWNfY2FzdDxRTWV0YVR5cGU6OlR5cGU+KHFNZXRhVHlwZUlkPFFXZWJFbGVtZW50PigpKSkgewor
ICAgICAgICAgICAgICAgIHJldCA9IFFWYXJpYW50Ojpmcm9tVmFsdWU8UVdlYkVsZW1lbnQ+KFF0
V2ViRWxlbWVudFJ1bnRpbWU6OmNyZWF0ZShjb250ZXh0LCBvYmplY3QsIGRpc3QsIGV4Y2VwdGlv
bikpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBpZiAoaGludCA9PSBzdGF0aWNfY2FzdDxRTWV0YVR5cGU6OlR5cGU+KHFNZXRhVHlwZUlkPFFE
UlROb2RlPigpKSkgeworICAgICAgICAgICAgICAgIHJldCA9IFFWYXJpYW50Ojpmcm9tVmFsdWU8
UURSVE5vZGU+KFF0RFJUTm9kZVJ1bnRpbWU6OmNyZWF0ZShjb250ZXh0LCBvYmplY3QsIGV4Y2Vw
dGlvbikpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBpZiAoaGludCA9PSBzdGF0aWNfY2FzdDxRTWV0YVR5cGU6OlR5cGU+KHFNZXRhVHlwZUlk
PFFWYXJpYW50PigpKSkgeworICAgICAgICAgICAgICAgIGlmIChKU1ZhbHVlSXNVbmRlZmluZWQo
Y29udGV4dCwgdmFsdWUpIHx8IEpTVmFsdWVJc051bGwoY29udGV4dCwgdmFsdWUpKSB7CiAgICAg
ICAgICAgICAgICAgICAgIGlmIChkaXN0YW5jZSkKICAgICAgICAgICAgICAgICAgICAgICAgICpk
aXN0YW5jZSA9IDE7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBRVmFyaWFudCgpOwotICAg
ICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlID09IE9i
amVjdCkgewotICAgICAgICAgICAgICAgICAgICAgICAgLy8gU2luY2Ugd2UgaGF2ZW4ndCByZWFs
bHkgdmlzaXRlZCB0aGlzIG9iamVjdCB5ZXQsIHdlIHJlbW92ZSBpdAotICAgICAgICAgICAgICAg
ICAgICAgICAgdmlzaXRlZE9iamVjdHMtPnJlbW92ZShvYmplY3QpOwotICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgICAgIC8vIEFuZCB0
aGVuIHJlY3Vyc2Ugd2l0aCB0aGUgYXV0b2RldGVjdCBmbGFnCi0gICAgICAgICAgICAgICAgICAg
IHJldCA9IGNvbnZlcnRWYWx1ZVRvUVZhcmlhbnQoZXhlYywgdmFsdWUsIFFNZXRhVHlwZTo6Vm9p
ZCwgZGlzdGFuY2UsIHZpc2l0ZWRPYmplY3RzLCByZWN1cnNpb25MaW1pdCk7Ci0gICAgICAgICAg
ICAgICAgICAgIGRpc3QgPSAxMDsKKyAgICAgICAgICAgICAgICBpZiAodHlwZSA9PSBPYmplY3Qp
IHsKKyAgICAgICAgICAgICAgICAgICAgLy8gU2luY2Ugd2UgaGF2ZW4ndCByZWFsbHkgdmlzaXRl
ZCB0aGlzIG9iamVjdCB5ZXQsIHdlIHJlbW92ZSBpdAorICAgICAgICAgICAgICAgICAgICB2aXNp
dGVkT2JqZWN0cy0+cmVtb3ZlKG9iamVjdCk7CiAgICAgICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICAgICAgLy8gQW5kIHRoZW4gcmVjdXJzZSB3aXRoIHRoZSBhdXRvZGV0ZWN0IGZsYWcKKyAg
ICAgICAgICAgICAgICByZXQgPSB0b1F0KGNvbnRleHQsIHZhbHVlLCBRTWV0YVR5cGU6OlZvaWQs
IGRpc3RhbmNlLCB2aXNpdGVkT2JqZWN0cywgcmVjdXJzaW9uTGltaXQsIGV4Y2VwdGlvbik7Cisg
ICAgICAgICAgICAgICAgZGlzdCA9IDEwOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgfQogCkBAIC04MTUsMzIgKzg3NiwzMCBAQCBRVmFyaWFudCBjb252ZXJ0VmFsdWVUb1FW
YXJpYW50KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSwgUU1ldGFUeXBlOjpUeXBlCiAg
ICAgcmV0dXJuIHJldDsKIH0KIAotUVZhcmlhbnQgY29udmVydFZhbHVlVG9RVmFyaWFudChFeGVj
U3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUsIFFNZXRhVHlwZTo6VHlwZSBoaW50LCBpbnQgKmRp
c3RhbmNlKQorUVZhcmlhbnQgdG9RdChKU0NvbnRleHRSZWYgY29udGV4dCwgSlNWYWx1ZVJlZiB2
YWx1ZSwgUU1ldGFUeXBlOjpUeXBlIGhpbnQsIGludCAqZGlzdGFuY2UsIEpTVmFsdWVSZWYqIGV4
Y2VwdGlvbikKIHsKICAgICBjb25zdCBpbnQgcmVjdXJzaW9uTGltaXQgPSAyMDA7Ci0gICAgSGFz
aFNldDxKU09iamVjdCo+IHZpc2l0ZWRPYmplY3RzOwotICAgIHJldHVybiBjb252ZXJ0VmFsdWVU
b1FWYXJpYW50KGV4ZWMsIHZhbHVlLCBoaW50LCBkaXN0YW5jZSwgJnZpc2l0ZWRPYmplY3RzLCBy
ZWN1cnNpb25MaW1pdCk7CisgICAgSGFzaFNldDxKU09iamVjdFJlZj4gdmlzaXRlZE9iamVjdHM7
CisgICAgcmV0dXJuIHRvUXQoY29udGV4dCwgdmFsdWUsIGhpbnQsIGRpc3RhbmNlLCAmdmlzaXRl
ZE9iamVjdHMsIHJlY3Vyc2lvbkxpbWl0LCBleGNlcHRpb24pOwogfQogCi1KU1ZhbHVlIGNvbnZl
cnRRVmFyaWFudFRvVmFsdWUoRXhlY1N0YXRlKiBleGVjLCBQYXNzUmVmUHRyPFJvb3RPYmplY3Q+
IHJvb3QsIGNvbnN0IFFWYXJpYW50JiB2YXJpYW50KQorSlNWYWx1ZVJlZiB0b0pTKEpTQ29udGV4
dFJlZiBjb250ZXh0LCBjb25zdCBRVmFyaWFudCYgdmFyaWFudCwgSlNWYWx1ZVJlZiogZXhjZXB0
aW9uKQogewogICAgIC8vIFZhcmlhbnRzIHdpdGggUU9iamVjdCAqIGNhbiBiZSBpc051bGwgYnV0
IG5vdCBhIG51bGwgcG9pbnRlcgogICAgIC8vIEFuIGVtcHR5IFFTdHJpbmcgdmFyaWFudCBpcyBh
bHNvIG51bGwKLSAgICBRTWV0YVR5cGU6OlR5cGUgdHlwZSA9IChRTWV0YVR5cGU6OlR5cGUpIHZh
cmlhbnQudXNlclR5cGUoKTsKKyAgICBRTWV0YVR5cGU6OlR5cGUgdHlwZSA9IHN0YXRpY19jYXN0
PFFNZXRhVHlwZTo6VHlwZT4odmFyaWFudC51c2VyVHlwZSgpKTsKIAotICAgIHFDb252RGVidWco
KSA8PCAiY29udmVydFFWYXJpYW50VG9WYWx1ZTogbWV0YXR5cGU6IiA8PCB0eXBlIDw8ICIsIGlz
bnVsbDogIiA8PCB2YXJpYW50LmlzTnVsbCgpOworICAgIHFDb252RGVidWcoKSA8PCAidG9KUzog
bWV0YXR5cGU6IiA8PCB0eXBlIDw8ICIsIGlzbnVsbDogIiA8PCB2YXJpYW50LmlzTnVsbCgpOwog
ICAgIGlmICh2YXJpYW50LmlzTnVsbCgpICYmCiAgICAgICAgIHR5cGUgIT0gUU1ldGFUeXBlOjpR
T2JqZWN0U3RhciAmJgogICAgICAgICB0eXBlICE9IFFNZXRhVHlwZTo6Vm9pZFN0YXIgJiYKICAg
ICAgICAgdHlwZSAhPSBRTWV0YVR5cGU6OlFXaWRnZXRTdGFyICYmCiAgICAgICAgIHR5cGUgIT0g
UU1ldGFUeXBlOjpRU3RyaW5nKSB7Ci0gICAgICAgIHJldHVybiBqc051bGwoKTsKKyAgICAgICAg
cmV0dXJuIEpTVmFsdWVNYWtlTnVsbChjb250ZXh0KTsKICAgICB9CiAKLSAgICBKU0xvY2sgbG9j
ayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwotCiAgICAgaWYgKHR5cGUgPT0gUU1ldGFUeXBlOjpC
b29sKQotICAgICAgICByZXR1cm4ganNCb29sZWFuKHZhcmlhbnQudG9Cb29sKCkpOworICAgICAg
ICByZXR1cm4gSlNWYWx1ZU1ha2VCb29sZWFuKGNvbnRleHQsIHZhcmlhbnQudG9Cb29sKCkpOwog
CiAgICAgaWYgKHR5cGUgPT0gUU1ldGFUeXBlOjpJbnQgfHwKICAgICAgICAgdHlwZSA9PSBRTWV0
YVR5cGU6OlVJbnQgfHwKQEAgLTg1MiwyMCArOTExLDIxIEBAIEpTVmFsdWUgY29udmVydFFWYXJp
YW50VG9WYWx1ZShFeGVjU3RhdGUqIGV4ZWMsIFBhc3NSZWZQdHI8Um9vdE9iamVjdD4gcm9vdCwg
Y29uCiAgICAgICAgIHR5cGUgPT0gUU1ldGFUeXBlOjpVU2hvcnQgfHwKICAgICAgICAgdHlwZSA9
PSBRTWV0YVR5cGU6OkZsb2F0IHx8CiAgICAgICAgIHR5cGUgPT0gUU1ldGFUeXBlOjpEb3VibGUp
Ci0gICAgICAgIHJldHVybiBqc051bWJlcih2YXJpYW50LnRvRG91YmxlKCkpOworICAgICAgICBy
ZXR1cm4gSlNWYWx1ZU1ha2VOdW1iZXIoY29udGV4dCwgdmFyaWFudC50b0RvdWJsZSgpKTsKIAog
ICAgIGlmICh0eXBlID09IFFNZXRhVHlwZTo6UVJlZ0V4cCkgewogICAgICAgICBRUmVnRXhwIHJl
ID0gdmFyaWFudC52YWx1ZTxRUmVnRXhwPigpOworICAgICAgICBpZiAoIXJlLmlzVmFsaWQoKSkK
KyAgICAgICAgICAgIHJldHVybiBKU09iamVjdE1ha2VSZWdFeHAoY29udGV4dCwgMCwgMCwgZXhj
ZXB0aW9uKTsKIAotICAgICAgICBpZiAocmUuaXNWYWxpZCgpKSB7Ci0gICAgICAgICAgICBVU3Ry
aW5nIHBhdHRlcm4oKFVDaGFyKilyZS5wYXR0ZXJuKCkudXRmMTYoKSwgcmUucGF0dGVybigpLmxl
bmd0aCgpKTsKLSAgICAgICAgICAgIFJlZ0V4cEZsYWdzIGZsYWdzID0gKHJlLmNhc2VTZW5zaXRp
dml0eSgpID09IFF0OjpDYXNlSW5zZW5zaXRpdmUpID8gRmxhZ0lnbm9yZUNhc2UgOiBOb0ZsYWdz
OworICAgICAgICBSZWdFeHBGbGFncyBmbGFncyA9IChyZS5jYXNlU2Vuc2l0aXZpdHkoKSA9PSBR
dDo6Q2FzZUluc2Vuc2l0aXZlKSA/IEZsYWdJZ25vcmVDYXNlIDogTm9GbGFnczsKIAotICAgICAg
ICAgICAgUmVmUHRyPEpTQzo6UmVnRXhwPiByZWdFeHAgPSBKU0M6OlJlZ0V4cDo6Y3JlYXRlKCZl
eGVjLT5nbG9iYWxEYXRhKCksIHBhdHRlcm4sIGZsYWdzKTsKLSAgICAgICAgICAgIGlmIChyZWdF
eHAtPmlzVmFsaWQoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gbmV3IChleGVjKSBSZWdFeHBP
YmplY3QoZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBleGVjLT5sZXhpY2FsR2xvYmFsT2Jq
ZWN0KCktPnJlZ0V4cFN0cnVjdHVyZSgpLCByZWdFeHAucmVsZWFzZSgpKTsKLSAgICAgICAgICAg
IHJldHVybiBqc051bGwoKTsKLSAgICAgICAgfQorICAgICAgICBKU1N0cmluZ1JlZiBwYXR0ZXJu
U3RyaW5nID0gSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcocmUucGF0dGVybigpLnRvVXRm
OCgpKTsKKyAgICAgICAgSlNWYWx1ZVJlZiBhcmd1bWVudHNbMl0gPSB7IEpTVmFsdWVNYWtlU3Ry
aW5nKGNvbnRleHQsIHBhdHRlcm5TdHJpbmcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgSlNWYWx1ZU1ha2VOdW1iZXIoY29udGV4dCwgZmxhZ3MpIH07CisgICAgICAgIEpT
T2JqZWN0UmVmIHJlZ0V4cE9iaiA9IEpTT2JqZWN0TWFrZVJlZ0V4cChjb250ZXh0LCAyLCBhcmd1
bWVudHMsIGV4Y2VwdGlvbik7CisgICAgICAgIEpTU3RyaW5nUmVsZWFzZShwYXR0ZXJuU3RyaW5n
KTsKKyAgICAgICAgcmV0dXJuIHJlZ0V4cE9iajsKICAgICB9CiAKICAgICBpZiAodHlwZSA9PSBR
TWV0YVR5cGU6OlFEYXRlVGltZSB8fApAQCAtODg2LDE0NyArOTQ2LDExNSBAQCBKU1ZhbHVlIGNv
bnZlcnRRVmFyaWFudFRvVmFsdWUoRXhlY1N0YXRlKiBleGVjLCBQYXNzUmVmUHRyPFJvb3RPYmpl
Y3Q+IHJvb3QsIGNvbgogICAgICAgICB9CiAKICAgICAgICAgLy8gRGF0ZXMgc3BlY2lmaWVkIHRo
aXMgd2F5IGFyZSBpbiBsb2NhbCB0aW1lICh3ZSBjb252ZXJ0IERhdGVUaW1lcyBhYm92ZSkKLSAg
ICAgICAgR3JlZ29yaWFuRGF0ZVRpbWUgZHQ7Ci0gICAgICAgIGR0LnllYXIgPSBkYXRlLnllYXIo
KSAtIDE5MDA7Ci0gICAgICAgIGR0Lm1vbnRoID0gZGF0ZS5tb250aCgpIC0gMTsKLSAgICAgICAg
ZHQubW9udGhEYXkgPSBkYXRlLmRheSgpOwotICAgICAgICBkdC5ob3VyID0gdGltZS5ob3VyKCk7
Ci0gICAgICAgIGR0Lm1pbnV0ZSA9IHRpbWUubWludXRlKCk7Ci0gICAgICAgIGR0LnNlY29uZCA9
IHRpbWUuc2Vjb25kKCk7Ci0gICAgICAgIGR0LmlzRFNUID0gLTE7Ci0gICAgICAgIGRvdWJsZSBt
cyA9IGdyZWdvcmlhbkRhdGVUaW1lVG9NUyhleGVjLCBkdCwgdGltZS5tc2VjKCksIC8qaW5wdXRJ
c1VUQyovIGZhbHNlKTsKLQotICAgICAgICByZXR1cm4gbmV3IChleGVjKSBEYXRlSW5zdGFuY2Uo
ZXhlYywgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5kYXRlU3RydWN0dXJlKCksIHRydW5j
KG1zKSk7CisgICAgICAgIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10gPSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBKU1ZhbHVlTWFrZU51bWJlcihjb250ZXh0LCBkYXRlLnll
YXIoKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU1ZhbHVlTWFrZU51bWJlcihj
b250ZXh0LCBkYXRlLm1vbnRoKCkgLSAxKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEpTVmFsdWVNYWtlTnVtYmVyKGNvbnRleHQsIGRhdGUuZGF5KCkpLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgSlNWYWx1ZU1ha2VOdW1iZXIoY29udGV4dCwgdGltZS5ob3VyKCkpLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNWYWx1ZU1ha2VOdW1iZXIoY29udGV4dCwg
dGltZS5taW51dGUoKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU1ZhbHVlTWFr
ZU51bWJlcihjb250ZXh0LCB0aW1lLnNlY29uZCgpKSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEpTVmFsdWVNYWtlTnVtYmVyKGNvbnRleHQsIHRpbWUubXNlYygpKX07CisgICAgICAg
IHJldHVybiBKU09iamVjdE1ha2VEYXRlKGNvbnRleHQsIDcsIGFyZ3VtZW50cywgZXhjZXB0aW9u
KTsKICAgICB9CiAKICAgICBpZiAodHlwZSA9PSBRTWV0YVR5cGU6OlFCeXRlQXJyYXkpIHsKICAg
ICAgICAgUUJ5dGVBcnJheSBxdEJ5dGVBcnJheSA9IHZhcmlhbnQudmFsdWU8UUJ5dGVBcnJheT4o
KTsKLSAgICAgICAgV1RGOjpSZWZQdHI8V1RGOjpCeXRlQXJyYXk+IHd0ZkJ5dGVBcnJheSA9IFdU
Rjo6Qnl0ZUFycmF5OjpjcmVhdGUocXRCeXRlQXJyYXkubGVuZ3RoKCkpOwotICAgICAgICBtZW1j
cHkod3RmQnl0ZUFycmF5LT5kYXRhKCksIHF0Qnl0ZUFycmF5LmNvbnN0RGF0YSgpLCBxdEJ5dGVB
cnJheS5sZW5ndGgoKSk7Ci0gICAgICAgIHJldHVybiBuZXcgKGV4ZWMpIEpTQzo6SlNCeXRlQXJy
YXkoZXhlYywgSlNDOjpKU0J5dGVBcnJheTo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPmdsb2JhbERh
dGEoKSwganNOdWxsKCkpLCB3dGZCeXRlQXJyYXkuZ2V0KCkpOworICAgICAgICByZXR1cm4gdG9K
U0J5dGVBcnJheShjb250ZXh0LCBxdEJ5dGVBcnJheS5zaXplKCksIHF0Qnl0ZUFycmF5LmRhdGEo
KSwgZXhjZXB0aW9uKTsKICAgICB9CiAKICAgICBpZiAodHlwZSA9PSBRTWV0YVR5cGU6OlFPYmpl
Y3RTdGFyIHx8IHR5cGUgPT0gUU1ldGFUeXBlOjpRV2lkZ2V0U3RhcikgewogICAgICAgICBRT2Jq
ZWN0KiBvYmogPSB2YXJpYW50LnZhbHVlPFFPYmplY3QqPigpOwogICAgICAgICBpZiAoIW9iaikK
LSAgICAgICAgICAgIHJldHVybiBqc051bGwoKTsKLSAgICAgICAgcmV0dXJuIFF0SW5zdGFuY2U6
OmdldFF0SW5zdGFuY2Uob2JqLCByb290LCBRU2NyaXB0RW5naW5lOjpRdE93bmVyc2hpcCktPmNy
ZWF0ZVJ1bnRpbWVPYmplY3QoZXhlYyk7CisgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VO
dWxsKGNvbnRleHQpOworICAgICAgICByZXR1cm4gUXRDbGFzczo6aW5zdGFuY2VGb3JRT2JqZWN0
KGNvbnRleHQsIG9iaiwgUVNjcmlwdEVuZ2luZTo6UXRPd25lcnNoaXApOwogICAgIH0KIAotICAg
IGlmIChRdFBpeG1hcEluc3RhbmNlOjpjYW5IYW5kbGUoc3RhdGljX2Nhc3Q8UU1ldGFUeXBlOjpU
eXBlPih2YXJpYW50LnR5cGUoKSkpKQotICAgICAgICByZXR1cm4gUXRQaXhtYXBJbnN0YW5jZTo6
Y3JlYXRlUGl4bWFwUnVudGltZU9iamVjdChleGVjLCByb290LCB2YXJpYW50KTsKKyAgICBpZiAo
UXRQaXhtYXBSdW50aW1lOjpjYW5IYW5kbGUoc3RhdGljX2Nhc3Q8UU1ldGFUeXBlOjpUeXBlPih2
YXJpYW50LnR5cGUoKSkpKQorICAgICAgICByZXR1cm4gUXRQaXhtYXBSdW50aW1lOjp0b0pTKGNv
bnRleHQsIHZhcmlhbnQsIGV4Y2VwdGlvbik7CiAKICAgICBpZiAodHlwZSA9PSBxTWV0YVR5cGVJ
ZDxRV2ViRWxlbWVudD4oKSkgewotICAgICAgICBpZiAoIXJvb3QtPmdsb2JhbE9iamVjdCgpLT5p
bmhlcml0cygmSlNET01XaW5kb3c6OnNfaW5mbykpCi0gICAgICAgICAgICByZXR1cm4ganNVbmRl
ZmluZWQoKTsKKyAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbCA9IHRvSlNHbG9iYWxPYmpl
Y3QoY29udGV4dCk7CisgICAgICAgIGlmICghZ2xvYmFsLT5pbmhlcml0cygmSlNET01XaW5kb3c6
OnNfaW5mbykpCisgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4
dCk7CiAKLSAgICAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gKHN0YXRpY19jYXN0PEpTRE9NV2lu
ZG93Kj4ocm9vdC0+Z2xvYmFsT2JqZWN0KCkpKS0+aW1wbCgpLT5kb2N1bWVudCgpOworICAgICAg
ICBEb2N1bWVudCogZG9jdW1lbnQgPSBzdGF0aWNfY2FzdDxKU0RPTVdpbmRvdyo+KGdsb2JhbCkt
PmltcGwoKS0+ZG9jdW1lbnQoKTsKICAgICAgICAgaWYgKCFkb2N1bWVudCkKLSAgICAgICAgICAg
IHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5k
ZWZpbmVkKGNvbnRleHQpOwogCi0gICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIHRvSlNET01HbG9i
YWxPYmplY3QoZG9jdW1lbnQsIGV4ZWMpLCBRdFdlYkVsZW1lbnRSdW50aW1lOjpnZXQodmFyaWFu
dC52YWx1ZTxRV2ViRWxlbWVudD4oKSkpOworICAgICAgICByZXR1cm4gUXRXZWJFbGVtZW50UnVu
dGltZTo6dG9KUyhjb250ZXh0LCB2YXJpYW50LnZhbHVlPFFXZWJFbGVtZW50PigpLCBleGNlcHRp
b24pOwogICAgIH0KIAogICAgIGlmICh0eXBlID09IHFNZXRhVHlwZUlkPFFEUlROb2RlPigpKSB7
Ci0gICAgICAgIGlmICghcm9vdC0+Z2xvYmFsT2JqZWN0KCktPmluaGVyaXRzKCZKU0RPTVdpbmRv
dzo6c19pbmZvKSkKLSAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgICAgICBp
ZiAoIXRvSlNHbG9iYWxPYmplY3QoY29udGV4dCktPmluaGVyaXRzKCZKU0RPTVdpbmRvdzo6c19p
bmZvKSkKKyAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsK
IAotICAgICAgICBEb2N1bWVudCogZG9jdW1lbnQgPSAoc3RhdGljX2Nhc3Q8SlNET01XaW5kb3cq
Pihyb290LT5nbG9iYWxPYmplY3QoKSkpLT5pbXBsKCktPmRvY3VtZW50KCk7CisgICAgICAgIERv
Y3VtZW50KiBkb2N1bWVudCA9IChzdGF0aWNfY2FzdDxKU0RPTVdpbmRvdyo+KHRvSlNHbG9iYWxP
YmplY3QoY29udGV4dCkpKS0+aW1wbCgpLT5kb2N1bWVudCgpOwogICAgICAgICBpZiAoIWRvY3Vt
ZW50KQotICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgICAgICAgICByZXR1
cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CiAKLSAgICAgICAgcmV0dXJuIHRvSlMo
ZXhlYywgdG9KU0RPTUdsb2JhbE9iamVjdChkb2N1bWVudCwgZXhlYyksIFF0RFJUTm9kZVJ1bnRp
bWU6OmdldCh2YXJpYW50LnZhbHVlPFFEUlROb2RlPigpKSk7CisgICAgICAgIHJldHVybiBRdERS
VE5vZGVSdW50aW1lOjp0b0pTKGNvbnRleHQsIHZhcmlhbnQudmFsdWU8UURSVE5vZGU+KCksIGV4
Y2VwdGlvbik7CiAgICAgfQogCiAgICAgaWYgKHR5cGUgPT0gUU1ldGFUeXBlOjpRVmFyaWFudE1h
cCkgewogICAgICAgICAvLyBjcmVhdGUgYSBuZXcgb2JqZWN0LCBhbmQgc3R1ZmYgcHJvcGVydGll
cyBpbnRvIGl0Ci0gICAgICAgIEpTT2JqZWN0KiByZXQgPSBjb25zdHJ1Y3RFbXB0eU9iamVjdChl
eGVjKTsKKyAgICAgICAgSlNPYmplY3RSZWYgbmV3T2JqZWN0ID0gSlNPYmplY3RNYWtlKGNvbnRl
eHQsIDAsIDApOwogICAgICAgICBRVmFyaWFudE1hcCBtYXAgPSB2YXJpYW50LnZhbHVlPFFWYXJp
YW50TWFwPigpOwogICAgICAgICBRVmFyaWFudE1hcDo6Y29uc3RfaXRlcmF0b3IgaSA9IG1hcC5j
b25zdEJlZ2luKCk7CiAgICAgICAgIHdoaWxlIChpICE9IG1hcC5jb25zdEVuZCgpKSB7Ci0gICAg
ICAgICAgICBRU3RyaW5nIHMgPSBpLmtleSgpOwotICAgICAgICAgICAgSlNWYWx1ZSB2YWwgPSBj
b252ZXJ0UVZhcmlhbnRUb1ZhbHVlKGV4ZWMsIHJvb3QuZ2V0KCksIGkudmFsdWUoKSk7Ci0gICAg
ICAgICAgICBpZiAodmFsKSB7Ci0gICAgICAgICAgICAgICAgUHV0UHJvcGVydHlTbG90IHNsb3Q7
Ci0gICAgICAgICAgICAgICAgcmV0LT5wdXQoZXhlYywgSWRlbnRpZmllcihleGVjLCByZWludGVy
cHJldF9jYXN0X3B0cjxjb25zdCBVQ2hhciAqPihzLmNvbnN0RGF0YSgpKSwgcy5sZW5ndGgoKSks
IHZhbCwgc2xvdCk7Ci0gICAgICAgICAgICAgICAgLy8gIyMjIGVycm9yIGNhc2U/Ci0gICAgICAg
ICAgICB9CisgICAgICAgICAgICBKU1N0cmluZ1JlZiBrZXkgPSBKU1N0cmluZ0NyZWF0ZVdpdGhV
VEY4Q1N0cmluZyhpLmtleSgpLnRvVXRmOCgpKTsKKyAgICAgICAgICAgIEpTVmFsdWVSZWYgdmFs
ID0gdG9KUyhjb250ZXh0LCBpLnZhbHVlKCksIGV4Y2VwdGlvbik7CisgICAgICAgICAgICBpZiAo
dmFsKQorICAgICAgICAgICAgICAgIEpTT2JqZWN0U2V0UHJvcGVydHkoY29udGV4dCwgbmV3T2Jq
ZWN0LCBrZXksIHZhbCwga0pTUHJvcGVydHlBdHRyaWJ1dGVOb25lICwgZXhjZXB0aW9uKTsKKyAg
ICAgICAgICAgIEpTU3RyaW5nUmVsZWFzZShrZXkpOwogICAgICAgICAgICAgKytpOwogICAgICAg
ICB9CiAKLSAgICAgICAgcmV0dXJuIHJldDsKKyAgICAgICAgcmV0dXJuIG5ld09iamVjdDsKICAg
ICB9CiAKICAgICAvLyBMaXN0IHR5cGVzCiAgICAgaWYgKHR5cGUgPT0gUU1ldGFUeXBlOjpRVmFy
aWFudExpc3QpIHsKICAgICAgICAgUVZhcmlhbnRMaXN0IHZsID0gdmFyaWFudC50b0xpc3QoKTsK
LSAgICAgICAgcUNvbnZEZWJ1ZygpIDw8ICJnb3QgYSAiIDw8IHZsLmNvdW50KCkgPDwgIiBsZW5n
dGggbGlzdDoiIDw8IHZsOwotICAgICAgICByZXR1cm4gbmV3IChleGVjKSBSdW50aW1lQXJyYXko
ZXhlYywgbmV3IFF0QXJyYXk8UVZhcmlhbnQ+KHZsLCBRTWV0YVR5cGU6OlZvaWQsIHJvb3QpKTsK
LSAgICB9IGVsc2UgaWYgKHR5cGUgPT0gUU1ldGFUeXBlOjpRU3RyaW5nTGlzdCkgewotICAgICAg
ICBRU3RyaW5nTGlzdCBzbCA9IHZhcmlhbnQudmFsdWU8UVN0cmluZ0xpc3Q+KCk7Ci0gICAgICAg
IHJldHVybiBuZXcgKGV4ZWMpIFJ1bnRpbWVBcnJheShleGVjLCBuZXcgUXRBcnJheTxRU3RyaW5n
PihzbCwgUU1ldGFUeXBlOjpRU3RyaW5nLCByb290KSk7Ci0gICAgfSBlbHNlIGlmICh0eXBlID09
IChRTWV0YVR5cGU6OlR5cGUpIHFNZXRhVHlwZUlkPFFPYmplY3RMaXN0PigpKSB7Ci0gICAgICAg
IFFPYmplY3RMaXN0IG9sPSB2YXJpYW50LnZhbHVlPFFPYmplY3RMaXN0PigpOwotICAgICAgICBy
ZXR1cm4gbmV3IChleGVjKSBSdW50aW1lQXJyYXkoZXhlYywgbmV3IFF0QXJyYXk8UU9iamVjdCo+
KG9sLCBRTWV0YVR5cGU6OlFPYmplY3RTdGFyLCByb290KSk7Ci0gICAgfSBlbHNlIGlmICh0eXBl
ID09IChRTWV0YVR5cGU6OlR5cGUpcU1ldGFUeXBlSWQ8UUxpc3Q8aW50PiA+KCkpIHsKLSAgICAg
ICAgUUxpc3Q8aW50PiBpbD0gdmFyaWFudC52YWx1ZTxRTGlzdDxpbnQ+ID4oKTsKLSAgICAgICAg
cmV0dXJuIG5ldyAoZXhlYykgUnVudGltZUFycmF5KGV4ZWMsIG5ldyBRdEFycmF5PGludD4oaWws
IFFNZXRhVHlwZTo6SW50LCByb290KSk7CisgICAgICAgIEpTT2JqZWN0UmVmIGFycmF5ID0gSlNP
YmplY3RNYWtlQXJyYXkoY29udGV4dCwgMCwgMCwgMCk7CisgICAgICAgIGZvciAoaW50IGkgPSAw
OyBpIDwgdmwuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICBKU09iamVjdFNldFByb3BlcnR5QXRJ
bmRleChjb250ZXh0LCBhcnJheSwgaSwgdG9KUyhjb250ZXh0LCB2bFtpXSwgZXhjZXB0aW9uKSwg
ZXhjZXB0aW9uKTsKKyAgICAgICAgcmV0dXJuIGFycmF5OwogICAgIH0KIAotICAgIGlmICh0eXBl
ID09IChRTWV0YVR5cGU6OlR5cGUpcU1ldGFUeXBlSWQ8UVZhcmlhbnQ+KCkpIHsKLSAgICAgICAg
UVZhcmlhbnQgcmVhbCA9IHZhcmlhbnQudmFsdWU8UVZhcmlhbnQ+KCk7Ci0gICAgICAgIHFDb252
RGVidWcoKSA8PCAicmVhbCB2YXJpYW50IGlzOiIgPDwgcmVhbDsKLSAgICAgICAgcmV0dXJuIGNv
bnZlcnRRVmFyaWFudFRvVmFsdWUoZXhlYywgcm9vdCwgcmVhbCk7CisgICAgaWYgKHR5cGUgPT0g
UU1ldGFUeXBlOjpRU3RyaW5nTGlzdCkgeworICAgICAgICBRU3RyaW5nTGlzdCBzbCA9IHZhcmlh
bnQudmFsdWU8UVN0cmluZ0xpc3Q+KCk7CisgICAgICAgIEpTT2JqZWN0UmVmIGFycmF5ID0gSlNP
YmplY3RNYWtlQXJyYXkoY29udGV4dCwgMCwgMCwgMCk7CisgICAgICAgIGZvciAoaW50IGkgPSAw
OyBpIDwgc2wuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICBKU09iamVjdFNldFByb3BlcnR5QXRJ
bmRleChjb250ZXh0LCBhcnJheSwgaSwgdG9KUyhjb250ZXh0LCBzbFtpXSwgZXhjZXB0aW9uKSwg
ZXhjZXB0aW9uKTsKKyAgICAgICAgcmV0dXJuIGFycmF5OwogICAgIH0KIAotICAgIHFDb252RGVi
dWcoKSA8PCAiZmFsbGJhY2sgcGF0aCBmb3IiIDw8IHZhcmlhbnQgPDwgdmFyaWFudC51c2VyVHlw
ZSgpOwotCi0gICAgUVN0cmluZyBzdHJpbmcgPSB2YXJpYW50LnRvU3RyaW5nKCk7Ci0gICAgVVN0
cmluZyB1c3RyaW5nKChVQ2hhciopc3RyaW5nLnV0ZjE2KCksIHN0cmluZy5sZW5ndGgoKSk7Ci0g
ICAgcmV0dXJuIGpzU3RyaW5nKGV4ZWMsIHVzdHJpbmcpOwotfQotCi0vLyA9PT09PT09PT09PT09
PT0KLQotLy8gUXQtbGlrZSBtYWNyb3MKLSNkZWZpbmUgUVdfRChDbGFzcykgQ2xhc3MjI0RhdGEq
IGQgPSBkX2Z1bmMoKQotI2RlZmluZSBRV19EUyhDbGFzcyxJbnN0YW5jZSkgQ2xhc3MjI0RhdGEq
IGQgPSBJbnN0YW5jZS0+ZF9mdW5jKCkKLQotY29uc3QgQ2xhc3NJbmZvIFF0UnVudGltZU1ldGhv
ZDo6c19pbmZvID0geyAiUXRSdW50aW1lTWV0aG9kIiwgJkludGVybmFsRnVuY3Rpb246OnNfaW5m
bywgMCwgMCB9OwotCi1RdFJ1bnRpbWVNZXRob2Q6OlF0UnVudGltZU1ldGhvZChRdFJ1bnRpbWVN
ZXRob2REYXRhKiBkZCwgRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCwg
UGFzc1JlZlB0cjxRdEluc3RhbmNlPiBpbnN0KQotICAgIDogSW50ZXJuYWxGdW5jdGlvbigmZXhl
Yy0+Z2xvYmFsRGF0YSgpLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIGRlcHJlY2F0ZWRH
ZXRET01TdHJ1Y3R1cmU8UXRSdW50aW1lTWV0aG9kPihleGVjKSwgaWRlbnQpCi0gICAgLCBkX3B0
cihkZCkKLXsKLSAgICBRV19EKFF0UnVudGltZU1ldGhvZCk7Ci0gICAgZC0+bV9pbnN0YW5jZSA9
IGluc3Q7Ci0gICAgZC0+bV9maW5hbGl6ZXIuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywg
ZCk7Ci19Ci0KLVF0UnVudGltZU1ldGhvZDo6flF0UnVudGltZU1ldGhvZCgpCi17Ci0gICAgZGVs
ZXRlIGRfcHRyOwotfQotCi0vLyA9PT09PT09PT09PT09PT0KLQotUXRSdW50aW1lTWV0aG9kRGF0
YTo6flF0UnVudGltZU1ldGhvZERhdGEoKQotewotfQotCi12b2lkIFF0UnVudGltZU1ldGhvZERh
dGE6OmZpbmFsaXplKEhhbmRsZTxVbmtub3duPiB2YWx1ZSwgdm9pZCopCi17Ci0gICAgbV9pbnN0
YW5jZS0+cmVtb3ZlQ2FjaGVkTWV0aG9kKHN0YXRpY19jYXN0PEpTT2JqZWN0Kj4odmFsdWUuZ2V0
KCkuYXNDZWxsKCkpKTsKLX0KKyAgICBpZiAodHlwZSA9PSBzdGF0aWNfY2FzdDxRTWV0YVR5cGU6
OlR5cGU+KHFNZXRhVHlwZUlkPFFPYmplY3RMaXN0PigpKSkgeworICAgICAgICBRT2JqZWN0TGlz
dCBvbCA9IHZhcmlhbnQudmFsdWU8UU9iamVjdExpc3Q+KCk7CisgICAgICAgIEpTT2JqZWN0UmVm
IGFycmF5ID0gSlNPYmplY3RNYWtlQXJyYXkoY29udGV4dCwgMCwgMCwgMCk7CisgICAgICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgb2wuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICBKU09iamVjdFNl
dFByb3BlcnR5QXRJbmRleChjb250ZXh0LCBhcnJheSwgaSwgdG9KUyhjb250ZXh0LCBRVmFyaWFu
dDo6ZnJvbVZhbHVlPFFPYmplY3QqPihvbFtpXSksIGV4Y2VwdGlvbiksIGV4Y2VwdGlvbik7Cisg
ICAgICAgIHJldHVybiBhcnJheTsKKyAgICB9CiAKLVF0UnVudGltZU1ldGFNZXRob2REYXRhOjp+
UXRSdW50aW1lTWV0YU1ldGhvZERhdGEoKQoteworICAgIGlmICh0eXBlID09IHN0YXRpY19jYXN0
PFFNZXRhVHlwZTo6VHlwZT4ocU1ldGFUeXBlSWQ8UUxpc3Q8aW50PiA+KCkpKSB7CisgICAgICAg
IFFMaXN0PGludD4gaWw9IHZhcmlhbnQudmFsdWU8UUxpc3Q8aW50PiA+KCk7CisgICAgICAgIEpT
T2JqZWN0UmVmIGFycmF5ID0gSlNPYmplY3RNYWtlQXJyYXkoY29udGV4dCwgMCwgMCwgMCk7Cisg
ICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgaWwuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICBK
U09iamVjdFNldFByb3BlcnR5QXRJbmRleChjb250ZXh0LCBhcnJheSwgaSwgdG9KUyhjb250ZXh0
LCBpbFtpXSwgZXhjZXB0aW9uKSwgZXhjZXB0aW9uKTsKKyAgICAgICAgcmV0dXJuIGFycmF5Owor
ICAgIH0KIAotfQorICAgIGlmICh0eXBlID09IHN0YXRpY19jYXN0PFFNZXRhVHlwZTo6VHlwZT4o
cU1ldGFUeXBlSWQ8UVZhcmlhbnQ+KCkpKQorICAgICAgICByZXR1cm4gdG9KUyhjb250ZXh0LCB2
YXJpYW50LnZhbHVlPFFWYXJpYW50PigpLCBleGNlcHRpb24pOwogCi1RdFJ1bnRpbWVDb25uZWN0
aW9uTWV0aG9kRGF0YTo6flF0UnVudGltZUNvbm5lY3Rpb25NZXRob2REYXRhKCkKLXsKKyAgICBx
Q29udkRlYnVnKCkgPDwgImZhbGxiYWNrIHBhdGggZm9yIiA8PCB2YXJpYW50IDw8IHZhcmlhbnQu
dXNlclR5cGUoKTsKIAorICAgIFFTdHJpbmcgc3RyaW5nID0gdmFyaWFudC50b1N0cmluZygpOwor
ICAgIEpTU3RyaW5nUmVmIGpzc3RyaW5nID0gSlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycyhy
ZWludGVycHJldF9jYXN0PGNvbnN0IEpTQ2hhcio+KHN0cmluZy51dGYxNigpKSwgc3RyaW5nLmxl
bmd0aCgpKTsKKyAgICBKU1ZhbHVlUmVmIHZhbHVlID0gSlNWYWx1ZU1ha2VTdHJpbmcoY29udGV4
dCwganNzdHJpbmcpOworICAgIEpTU3RyaW5nUmVsZWFzZShqc3N0cmluZyk7CisgICAgcmV0dXJu
IHZhbHVlOwogfQogCiAvLyA9PT09PT09PT09PT09PT0KQEAgLTEwNDMsNyArMTA3MSw2IEBAIHB1
YmxpYzoKICAgICAgICAgTWV0YUVudW0KICAgICB9OwogCi0KICAgICBRdE1ldGhvZE1hdGNoVHlw
ZSgpCiAgICAgICAgIDogbV9raW5kKEludmFsaWQpIHsgfQogCkBAIC0xMTU2LDEzICsxMTgzLDE1
IEBAIHN0YXRpYyBpbnQgaW5kZXhPZk1ldGFFbnVtKGNvbnN0IFFNZXRhT2JqZWN0ICptZXRhLCBj
b25zdCBRQnl0ZUFycmF5ICZzdHIpCiAKIC8vIEhlbHBlciBmdW5jdGlvbiBmb3IgcmVzb2x2aW5n
IG1ldGhvZHMKIC8vIExhcmdlbHkgYmFzZWQgb24gY29kZSBpbiBRdFNjcmlwdCBmb3IgY29tcGF0
aWJpbGl0eSByZWFzb25zCi1zdGF0aWMgaW50IGZpbmRNZXRob2RJbmRleChFeGVjU3RhdGUqIGV4
ZWMsCitzdGF0aWMgaW50IGZpbmRNZXRob2RJbmRleChKU0NvbnRleHRSZWYgY29udGV4dCwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFFNZXRhT2JqZWN0KiBtZXRhLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgUUJ5dGVBcnJheSYgc2lnbmF0dXJlLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW50IGFyZ3VtZW50Q291bnQsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYm9vbCBhbGxvd1ByaXZhdGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBRVmFyTGVuZ3RoQXJyYXk8UVZhcmlhbnQsIDEwPiAmdmFycywKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHZvaWQqKiB2dmFycywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTT2Jq
ZWN0ICoqcEVycm9yKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNWYWx1ZVJlZiogZXhj
ZXB0aW9uKQogewogICAgIFFMaXN0PGludD4gbWF0Y2hpbmdJbmRpY2VzOwogCkBAIC0xMTg4LDcg
KzEyMTcsNiBAQCBzdGF0aWMgaW50IGZpbmRNZXRob2RJbmRleChFeGVjU3RhdGUqIGV4ZWMsCiAg
ICAgfQogCiAgICAgaW50IGNob3NlbkluZGV4ID0gLTE7Ci0gICAgKnBFcnJvciA9IDA7CiAgICAg
UVZlY3RvcjxRdE1ldGhvZE1hdGNoVHlwZT4gY2hvc2VuVHlwZXM7CiAKICAgICBRVmFyTGVuZ3Ro
QXJyYXk8UVZhcmlhbnQsIDEwPiBhcmdzOwpAQCAtMTI1Myw3ICsxMjgxLDcgQEAgc3RhdGljIGlu
dCBmaW5kTWV0aG9kSW5kZXgoRXhlY1N0YXRlKiBleGVjLAogICAgICAgICB9CiAKICAgICAgICAg
Ly8gSWYgdGhlIG5hdGl2ZSBtZXRob2QgcmVxdWlyZXMgbW9yZSBhcmd1bWVudHMgdGhhbiB3aGF0
IHdhcyBwYXNzZWQgZnJvbSBKYXZhU2NyaXB0Ci0gICAgICAgIGlmIChleGVjLT5hcmd1bWVudENv
dW50KCkgKyAxIDwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHR5cGVzLmNvdW50KCkpKSB7CisgICAg
ICAgIGlmIChhcmd1bWVudENvdW50ICsgMSA8IHN0YXRpY19jYXN0PHVuc2lnbmVkPih0eXBlcy5j
b3VudCgpKSkgewogICAgICAgICAgICAgcU1hdGNoRGVidWcoKSA8PCAiTWF0Y2g6dG9vIGZldyBh
cmdzIGZvciIgPDwgbWV0aG9kLnNpZ25hdHVyZSgpOwogICAgICAgICAgICAgdG9vRmV3QXJncy5h
cHBlbmQoaW5kZXgpOwogICAgICAgICAgICAgY29udGludWU7CkBAIC0xMjc3LDEwICsxMzA1LDkg
QEAgc3RhdGljIGludCBmaW5kTWV0aG9kSW5kZXgoRXhlY1N0YXRlKiBleGVjLAogICAgICAgICBi
b29sIGNvbnZlcnRlZCA9IHRydWU7CiAgICAgICAgIGludCBtYXRjaERpc3RhbmNlID0gMDsKICAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgY29udmVydGVkICYmIGkgKyAxIDwgc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KHR5cGVzLmNvdW50KCkpOyArK2kpIHsKLSAgICAgICAgICAgIEpTVmFsdWUg
YXJnID0gaSA8IGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA/IGV4ZWMtPmFyZ3VtZW50KGkpIDoganNV
bmRlZmluZWQoKTsKLQorICAgICAgICAgICAgSlNWYWx1ZVJlZiBhcmdSZWYgPSBpIDwgYXJndW1l
bnRDb3VudCA/IGFyZ3VtZW50c1tpXSA6IEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwog
ICAgICAgICAgICAgaW50IGFyZ2Rpc3RhbmNlID0gLTE7Ci0gICAgICAgICAgICBRVmFyaWFudCB2
ID0gY29udmVydFZhbHVlVG9RVmFyaWFudChleGVjLCBhcmcsIHR5cGVzLmF0KGkrMSkudHlwZUlk
KCksICZhcmdkaXN0YW5jZSk7CisgICAgICAgICAgICBRVmFyaWFudCB2ID0gdG9RdChjb250ZXh0
LCBhcmdSZWYsIHR5cGVzLmF0KGkrMSkudHlwZUlkKCksICZhcmdkaXN0YW5jZSwgZXhjZXB0aW9u
KTsKICAgICAgICAgICAgIGlmIChhcmdkaXN0YW5jZSA+PSAwKSB7CiAgICAgICAgICAgICAgICAg
bWF0Y2hEaXN0YW5jZSArPSBhcmdkaXN0YW5jZTsKICAgICAgICAgICAgICAgICBhcmdzW2krMV0g
PSB2OwpAQCAtMTI5MywyOSArMTMyMCwyNyBAQCBzdGF0aWMgaW50IGZpbmRNZXRob2RJbmRleChF
eGVjU3RhdGUqIGV4ZWMsCiAgICAgICAgIHFNYXRjaERlYnVnKCkgPDwgIk1hdGNoOiAiIDw8IG1l
dGhvZC5zaWduYXR1cmUoKSA8PCAoY29udmVydGVkID8gImNvbnZlcnRlZCI6ImZhaWxlZCB0byBj
b252ZXJ0IikgPDwgImRpc3RhbmNlICIgPDwgbWF0Y2hEaXN0YW5jZTsKIAogICAgICAgICBpZiAo
Y29udmVydGVkKSB7Ci0gICAgICAgICAgICBpZiAoKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSArIDEg
PT0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHR5cGVzLmNvdW50KCkpKQorICAgICAgICAgICAgaWYg
KChhcmd1bWVudENvdW50ICsgMSA9PSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4odHlwZXMuY291bnQo
KSkpCiAgICAgICAgICAgICAgICAgJiYgKG1hdGNoRGlzdGFuY2UgPT0gMCkpIHsKICAgICAgICAg
ICAgICAgICAvLyBwZXJmZWN0IG1hdGNoLCB1c2UgdGhpcyBvbmUKICAgICAgICAgICAgICAgICBj
aG9zZW5JbmRleCA9IGluZGV4OwogICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgUXRNZXRob2RNYXRjaERhdGEgY3VycmVudE1hdGNoKG1hdGNoRGlzdGFu
Y2UsIGluZGV4LCB0eXBlcywgYXJncyk7CisgICAgICAgICAgICBpZiAoY2FuZGlkYXRlcy5pc0Vt
cHR5KCkpIHsKKyAgICAgICAgICAgICAgICBjYW5kaWRhdGVzLmFwcGVuZChjdXJyZW50TWF0Y2gp
OwogICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBRdE1ldGhvZE1hdGNoRGF0
YSBjdXJyZW50TWF0Y2gobWF0Y2hEaXN0YW5jZSwgaW5kZXgsIHR5cGVzLCBhcmdzKTsKLSAgICAg
ICAgICAgICAgICBpZiAoY2FuZGlkYXRlcy5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgICAgICAg
ICAgY2FuZGlkYXRlcy5hcHBlbmQoY3VycmVudE1hdGNoKTsKKyAgICAgICAgICAgICAgICBRdE1l
dGhvZE1hdGNoRGF0YSBiZXN0TWF0Y2hTb0ZhciA9IGNhbmRpZGF0ZXMuYXQoMCk7CisgICAgICAg
ICAgICAgICAgaWYgKChhcmdzLmNvdW50KCkgPiBiZXN0TWF0Y2hTb0Zhci5hcmdzLmNvdW50KCkp
CisgICAgICAgICAgICAgICAgICAgIHx8ICgoYXJncy5jb3VudCgpID09IGJlc3RNYXRjaFNvRmFy
LmFyZ3MuY291bnQoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICYmIChtYXRjaERpc3RhbmNl
IDw9IGJlc3RNYXRjaFNvRmFyLm1hdGNoRGlzdGFuY2UpKSkgeworICAgICAgICAgICAgICAgICAg
ICBjYW5kaWRhdGVzLnByZXBlbmQoY3VycmVudE1hdGNoKTsKICAgICAgICAgICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgICAgICAgICBRdE1ldGhvZE1hdGNoRGF0YSBiZXN0TWF0Y2hTb0Zh
ciA9IGNhbmRpZGF0ZXMuYXQoMCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICgoYXJncy5jb3Vu
dCgpID4gYmVzdE1hdGNoU29GYXIuYXJncy5jb3VudCgpKQotICAgICAgICAgICAgICAgICAgICAg
ICAgfHwgKChhcmdzLmNvdW50KCkgPT0gYmVzdE1hdGNoU29GYXIuYXJncy5jb3VudCgpKQotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICYmIChtYXRjaERpc3RhbmNlIDw9IGJlc3RNYXRjaFNv
RmFyLm1hdGNoRGlzdGFuY2UpKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgY2FuZGlkYXRl
cy5wcmVwZW5kKGN1cnJlbnRNYXRjaCk7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBjYW5kaWRhdGVzLmFwcGVuZChjdXJyZW50TWF0Y2gpOwot
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGNhbmRpZGF0ZXMuYXBw
ZW5kKGN1cnJlbnRNYXRjaCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQotICAg
ICAgICB9IGVsc2UgeworICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIGNvbnZlcnNpb25GYWls
ZWQuYXBwZW5kKGluZGV4KTsKLSAgICAgICAgfQogCiAgICAgICAgIGlmICghb3ZlcmxvYWRzKQog
ICAgICAgICAgICAgYnJlYWs7CkBAIC0xMzI4LDExICsxMzUzLDEyIEBAIHN0YXRpYyBpbnQgZmlu
ZE1ldGhvZEluZGV4KEV4ZWNTdGF0ZSogZXhlYywKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC5hcmcoUUxhdGluMVN0cmluZyhzaWduYXR1cmUpKTsKICAgICAgICAgICAgIGZvciAoaW50
IGkgPSAwOyBpIDwgY29udmVyc2lvbkZhaWxlZC5zaXplKCk7ICsraSkgewogICAgICAgICAgICAg
ICAgIGlmIChpID4gMCkKLSAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSArPSBRTGF0aW4xU3Ry
aW5nKCJcbiIpOworICAgICAgICAgICAgICAgICAgICBtZXNzYWdlICs9IFFMYXRpbjFTdHJpbmco
IiAiKTsKICAgICAgICAgICAgICAgICBRTWV0YU1ldGhvZCBtdGQgPSBtZXRhLT5tZXRob2QoY29u
dmVyc2lvbkZhaWxlZC5hdChpKSk7CiAgICAgICAgICAgICAgICAgbWVzc2FnZSArPSBRU3RyaW5n
Ojpmcm9tTGF0aW4xKCIgICAgJTAiKS5hcmcoUVN0cmluZzo6ZnJvbUxhdGluMShtdGQuc2lnbmF0
dXJlKCkpKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICpwRXJyb3IgPSB0aHJvd0Vycm9y
KGV4ZWMsIGNyZWF0ZVR5cGVFcnJvcihleGVjLCBtZXNzYWdlLnRvTGF0aW4xKCkuY29uc3REYXRh
KCkpKTsKKyAgICAgICAgICAgIHNldEV4Y2VwdGlvbihjb250ZXh0LCBleGNlcHRpb24sIG1lc3Nh
Z2UpOworICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICB9IGVsc2UgaWYgKCF1bnJlc29s
dmVkLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgUXRNZXRob2RNYXRjaERhdGEgYXJnc0luc3Rh
bmNlID0gdW5yZXNvbHZlZC5maXJzdCgpOwogICAgICAgICAgICAgaW50IHVucmVzb2x2ZWRJbmRl
eCA9IGFyZ3NJbnN0YW5jZS5maXJzdFVucmVzb2x2ZWRJbmRleCgpOwpAQCAtMTM0MSw3ICsxMzY3
LDggQEAgc3RhdGljIGludCBmaW5kTWV0aG9kSW5kZXgoRXhlY1N0YXRlKiBleGVjLAogICAgICAg
ICAgICAgUVN0cmluZyBtZXNzYWdlID0gUVN0cmluZzo6ZnJvbUxhdGluMSgiY2Fubm90IGNhbGwg
JTAoKTogdW5rbm93biB0eXBlIGAlMSciKQogICAgICAgICAgICAgICAgIC5hcmcoUVN0cmluZzo6
ZnJvbUxhdGluMShzaWduYXR1cmUpKQogICAgICAgICAgICAgICAgIC5hcmcoUUxhdGluMVN0cmlu
Zyh1bnJlc29sdmVkVHlwZS5uYW1lKCkpKTsKLSAgICAgICAgICAgICpwRXJyb3IgPSB0aHJvd0Vy
cm9yKGV4ZWMsIGNyZWF0ZVR5cGVFcnJvcihleGVjLCBtZXNzYWdlLnRvTGF0aW4xKCkuY29uc3RE
YXRhKCkpKTsKKyAgICAgICAgICAgIHNldEV4Y2VwdGlvbihjb250ZXh0LCBleGNlcHRpb24sIG1l
c3NhZ2UpOworICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICB9IGVsc2UgewogICAgICAg
ICAgICAgUVN0cmluZyBtZXNzYWdlID0gUVN0cmluZzo6ZnJvbUxhdGluMSgidG9vIGZldyBhcmd1
bWVudHMgaW4gY2FsbCB0byAlMCgpOyBjYW5kaWRhdGVzIGFyZVxuIikKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIC5hcmcoUUxhdGluMVN0cmluZyhzaWduYXR1cmUpKTsKQEAgLTEzNTEs
NyArMTM3OCw4IEBAIHN0YXRpYyBpbnQgZmluZE1ldGhvZEluZGV4KEV4ZWNTdGF0ZSogZXhlYywK
ICAgICAgICAgICAgICAgICBRTWV0YU1ldGhvZCBtdGQgPSBtZXRhLT5tZXRob2QodG9vRmV3QXJn
cy5hdChpKSk7CiAgICAgICAgICAgICAgICAgbWVzc2FnZSArPSBRU3RyaW5nOjpmcm9tTGF0aW4x
KCIgICAgJTAiKS5hcmcoUVN0cmluZzo6ZnJvbUxhdGluMShtdGQuc2lnbmF0dXJlKCkpKTsKICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICpwRXJyb3IgPSB0aHJvd0Vycm9yKGV4ZWMsIGNyZWF0
ZVN5bnRheEVycm9yKGV4ZWMsIG1lc3NhZ2UudG9MYXRpbjEoKS5jb25zdERhdGEoKSkpOworICAg
ICAgICAgICAgc2V0RXhjZXB0aW9uKGNvbnRleHQsIGV4Y2VwdGlvbiwgbWVzc2FnZSk7CisgICAg
ICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTEzNzMsNyArMTQwMSw4
IEBAIHN0YXRpYyBpbnQgZmluZE1ldGhvZEluZGV4KEV4ZWNTdGF0ZSogZXhlYywKICAgICAgICAg
ICAgICAgICAgICAgbWVzc2FnZSArPSBRU3RyaW5nOjpmcm9tTGF0aW4xKCIgICAgJTAiKS5hcmco
UVN0cmluZzo6ZnJvbUxhdGluMShtdGQuc2lnbmF0dXJlKCkpKTsKICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAqcEVycm9yID0gdGhyb3dFcnJvcihleGVjLCBj
cmVhdGVUeXBlRXJyb3IoZXhlYywgbWVzc2FnZS50b0xhdGluMSgpLmNvbnN0RGF0YSgpKSk7Cisg
ICAgICAgICAgICBzZXRFeGNlcHRpb24oY29udGV4dCwgZXhjZXB0aW9uLCBtZXNzYWdlKTsKKyAg
ICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGNob3Nl
bkluZGV4ID0gYmVzdE1hdGNoLmluZGV4OwogICAgICAgICAgICAgYXJncyA9IGJlc3RNYXRjaC5h
cmdzOwpAQCAtMTM5MywzNjQgKzE0MjIsMjQ2IEBAIHN0YXRpYyBpbnQgZmluZE1ldGhvZEluZGV4
KEV4ZWNTdGF0ZSogZXhlYywKICAgICByZXR1cm4gY2hvc2VuSW5kZXg7CiB9CiAKLS8vIFNpZ25h
bHMgYXJlIG5vdCBmdXp6eSBtYXRjaGVkIGFzIG11Y2ggYXMgbWV0aG9kcwotc3RhdGljIGludCBm
aW5kU2lnbmFsSW5kZXgoY29uc3QgUU1ldGFPYmplY3QqIG1ldGEsIGludCBpbml0aWFsSW5kZXgs
IFFCeXRlQXJyYXkgc2lnbmF0dXJlKQorc3RhdGljIEpTQ2xhc3NSZWYgcHJvdG90eXBlRm9yU2ln
bmFsc0FuZFNsb3RzKCkKIHsKLSAgICBpbnQgaW5kZXggPSBpbml0aWFsSW5kZXg7Ci0gICAgUU1l
dGFNZXRob2QgbWV0aG9kID0gbWV0YS0+bWV0aG9kKGluZGV4KTsKLSAgICBib29sIG92ZXJsb2Fk
cyA9ICFzaWduYXR1cmUuY29udGFpbnMoJygnKTsKLSAgICBpZiAob3ZlcmxvYWRzICYmIChtZXRo
b2QuYXR0cmlidXRlcygpICYgUU1ldGFNZXRob2Q6OkNsb25lZCkpIHsKLSAgICAgICAgLy8gZmlu
ZCB0aGUgbW9zdCBnZW5lcmFsIG1ldGhvZAotICAgICAgICBkbyB7Ci0gICAgICAgICAgICBtZXRo
b2QgPSBtZXRhLT5tZXRob2QoLS1pbmRleCk7Ci0gICAgICAgIH0gd2hpbGUgKG1ldGhvZC5hdHRy
aWJ1dGVzKCkgJiBRTWV0YU1ldGhvZDo6Q2xvbmVkKTsKLSAgICB9Ci0gICAgcmV0dXJuIGluZGV4
OworICAgIHN0YXRpYyBKU0NsYXNzUmVmIGNscyA9IEpTQ2xhc3NDcmVhdGUoJmtKU0NsYXNzRGVm
aW5pdGlvbkVtcHR5KTsKKyAgICByZXR1cm4gY2xzOwogfQogCi1RdFJ1bnRpbWVNZXRhTWV0aG9k
OjpRdFJ1bnRpbWVNZXRhTWV0aG9kKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYg
aWRlbnQsIFBhc3NSZWZQdHI8UXRJbnN0YW5jZT4gaW5zdCwgaW50IGluZGV4LCBjb25zdCBRQnl0
ZUFycmF5JiBzaWduYXR1cmUsIGJvb2wgYWxsb3dQcml2YXRlKQotICAgIDogUXRSdW50aW1lTWV0
aG9kIChuZXcgUXRSdW50aW1lTWV0YU1ldGhvZERhdGEoKSwgZXhlYywgaWRlbnQsIGluc3QpCitR
dFJ1bnRpbWVNZXRob2Q6OlF0UnVudGltZU1ldGhvZChKU0NvbnRleHRSZWYgY29udGV4dCwgSlNW
YWx1ZVJlZiogZXhjZXB0aW9uLCBRT2JqZWN0KiBvYmplY3QsIGNvbnN0IFFCeXRlQXJyYXkmIGlk
ZW50aWZpZXIsIGludCBpbmRleCwgaW50IGZsYWdzKQorICAgIDogbV9vYmplY3Qob2JqZWN0KQor
ICAgICwgbV9pZGVudGlmaWVyKGlkZW50aWZpZXIpCisgICAgLCBtX2luZGV4KGluZGV4KQorICAg
ICwgbV9mbGFncyhmbGFncykKIHsKLSAgICBRV19EKFF0UnVudGltZU1ldGFNZXRob2QpOwotICAg
IGQtPm1fc2lnbmF0dXJlID0gc2lnbmF0dXJlOwotICAgIGQtPm1faW5kZXggPSBpbmRleDsKLSAg
ICBkLT5tX2FsbG93UHJpdmF0ZSA9IGFsbG93UHJpdmF0ZTsKLX0KKyAgICBKU0NsYXNzRGVmaW5p
dGlvbiBjbGFzc0RlZiA9IHsKKyAgICAgICAwLCAwLCBtX2lkZW50aWZpZXIuY29uc3REYXRhKCks
IHByb3RvdHlwZUZvclNpZ25hbHNBbmRTbG90cygpLCAwLCAwLAorICAgICAgIDAsIDAsIDAsIDAs
IDAsIDAsIDAsIGNhbGwsIDAsIDAsIDAKKyAgICB9OwogCi12b2lkIFF0UnVudGltZU1ldGFNZXRo
b2Q6OnZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCi17Ci0gICAgUXRSdW50aW1l
TWV0aG9kOjp2aXNpdENoaWxkcmVuKHZpc2l0b3IpOwotICAgIFFXX0QoUXRSdW50aW1lTWV0YU1l
dGhvZCk7Ci0gICAgaWYgKGQtPm1fY29ubmVjdCkKLSAgICAgICAgdmlzaXRvci5hcHBlbmQoJmQt
Pm1fY29ubmVjdCk7Ci0gICAgaWYgKGQtPm1fZGlzY29ubmVjdCkKLSAgICAgICAgdmlzaXRvci5h
cHBlbmQoJmQtPm1fZGlzY29ubmVjdCk7CisgICAgbV9jbGFzc1JlZiA9IEpTQ2xhc3NDcmVhdGUo
JmNsYXNzRGVmKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgUXRSdW50aW1lTWV0YU1ldGhvZDo6Y2Fs
bChFeGVjU3RhdGUqIGV4ZWMpCitRdFJ1bnRpbWVNZXRob2Q6On5RdFJ1bnRpbWVNZXRob2QoKQog
ewotICAgIFF0UnVudGltZU1ldGFNZXRob2REYXRhKiBkID0gc3RhdGljX2Nhc3Q8UXRSdW50aW1l
TWV0YU1ldGhvZCAqPihleGVjLT5jYWxsZWUoKSktPmRfZnVuYygpOwotCi0gICAgLy8gV2UncmUg
bGltaXRlZCB0byAxMCBhcmdzCi0gICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA+IDEwKQot
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwotCi0gICAgLy8g
V2UgaGF2ZSB0byBwaWNrIGEgbWV0aG9kIHRoYXQgbWF0Y2hlcy4uCi0gICAgSlNMb2NrIGxvY2so
U2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKLQotICAgIFFPYmplY3QgKm9iaiA9IGQtPm1faW5zdGFu
Y2UtPmdldE9iamVjdCgpOwotICAgIGlmIChvYmopIHsKLSAgICAgICAgUVZhckxlbmd0aEFycmF5
PFFWYXJpYW50LCAxMD4gdmFyZ3M7Ci0gICAgICAgIHZvaWQgKnFhcmdzWzExXTsKLQotICAgICAg
ICBpbnQgbWV0aG9kSW5kZXg7Ci0gICAgICAgIEpTT2JqZWN0KiBlcnJvck9iaiA9IDA7Ci0gICAg
ICAgIGlmICgobWV0aG9kSW5kZXggPSBmaW5kTWV0aG9kSW5kZXgoZXhlYywgb2JqLT5tZXRhT2Jq
ZWN0KCksIGQtPm1fc2lnbmF0dXJlLCBkLT5tX2FsbG93UHJpdmF0ZSwgdmFyZ3MsICh2b2lkICoq
KXFhcmdzLCAmZXJyb3JPYmopKSAhPSAtMSkgewotICAgICAgICAgICAgaWYgKFFNZXRhT2JqZWN0
OjptZXRhY2FsbChvYmosIFFNZXRhT2JqZWN0OjpJbnZva2VNZXRhTWV0aG9kLCBtZXRob2RJbmRl
eCwgcWFyZ3MpID49IDApCi0gICAgICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c1VuZGVmaW5lZCgpKTsKLQotICAgICAgICAgICAgaWYgKHZhcmdzWzBdLmlzVmFsaWQoKSkKLSAg
ICAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGNvbnZlcnRRVmFyaWFudFRvVmFs
dWUoZXhlYywgZC0+bV9pbnN0YW5jZS0+cm9vdE9iamVjdCgpLCB2YXJnc1swXSkpOwotICAgICAg
ICB9Ci0KLSAgICAgICAgaWYgKGVycm9yT2JqKQotICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShlcnJvck9iaik7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgcmV0dXJuIHRocm93Vk1F
cnJvcihleGVjLCBjcmVhdGVFcnJvcihleGVjLCAiY2Fubm90IGNhbGwgZnVuY3Rpb24gb2YgZGVs
ZXRlZCBRT2JqZWN0IikpOwotICAgIH0KLQotICAgIC8vIHZvaWQgZnVuY3Rpb25zIHJldHVybiB1
bmRlZmluZWQKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAg
IEpTQ2xhc3NSZWxlYXNlKG1fY2xhc3NSZWYpOwogfQogCi1DYWxsVHlwZSBRdFJ1bnRpbWVNZXRh
TWV0aG9kOjpnZXRDYWxsRGF0YShDYWxsRGF0YSYgY2FsbERhdGEpCitKU1ZhbHVlUmVmIFF0UnVu
dGltZU1ldGhvZDo6Y2FsbChKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rp
b24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBK
U1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCiB7Ci0gICAgY2Fs
bERhdGEubmF0aXZlLmZ1bmN0aW9uID0gY2FsbDsKLSAgICByZXR1cm4gQ2FsbFR5cGVIb3N0Owot
fQorICAgIFF0UnVudGltZU1ldGhvZCogZCA9IHJlaW50ZXJwcmV0X2Nhc3Q8UXRSdW50aW1lTWV0
aG9kKj4oSlNPYmplY3RHZXRQcml2YXRlKGZ1bmN0aW9uKSk7CisgICAgUU9iamVjdCAqb2JqID0g
UXRDbGFzczo6dG9RT2JqZWN0KHRoaXNPYmplY3QpOwogCi1ib29sIFF0UnVudGltZU1ldGFNZXRo
b2Q6OmdldE93blByb3BlcnR5U2xvdChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXIm
IHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQotewotICAgIGlmIChwcm9wZXJ0eU5h
bWUgPT0gImNvbm5lY3QiKSB7Ci0gICAgICAgIHNsb3Quc2V0Q3VzdG9tKHRoaXMsIGNvbm5lY3RH
ZXR0ZXIpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9IGVsc2UgaWYgKHByb3BlcnR5TmFt
ZSA9PSAiZGlzY29ubmVjdCIpIHsKLSAgICAgICAgc2xvdC5zZXRDdXN0b20odGhpcywgZGlzY29u
bmVjdEdldHRlcik7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0gZWxzZSBpZiAocHJvcGVy
dHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgpIHsKLSAgICAgICAgc2xvdC5z
ZXRDdXN0b20odGhpcywgbGVuZ3RoR2V0dGVyKTsKLSAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
aWYgKGFyZ3VtZW50Q291bnQgPiAxMCkgeworICAgICAgICBzZXRFeGNlcHRpb24oY29udGV4dCwg
ZXhjZXB0aW9uLCAiUGFzc2luZyBtb3JlIHRoYW4gMTAgYXJndW1lbnRzIik7CisgICAgICAgIHJl
dHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKICAgICB9CiAKLSAgICByZXR1cm4g
UXRSdW50aW1lTWV0aG9kOjpnZXRPd25Qcm9wZXJ0eVNsb3QoZXhlYywgcHJvcGVydHlOYW1lLCBz
bG90KTsKLX0KLQotYm9vbCBRdFJ1bnRpbWVNZXRhTWV0aG9kOjpnZXRPd25Qcm9wZXJ0eURlc2Ny
aXB0b3IoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIFBy
b3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvcikKLXsKLSAgICBpZiAocHJvcGVydHlOYW1lID09
ICJjb25uZWN0IikgewotICAgICAgICBQcm9wZXJ0eVNsb3Qgc2xvdDsKLSAgICAgICAgc2xvdC5z
ZXRDdXN0b20odGhpcywgY29ubmVjdEdldHRlcik7Ci0gICAgICAgIGRlc2NyaXB0b3Iuc2V0RGVz
Y3JpcHRvcihzbG90LmdldFZhbHVlKGV4ZWMsIHByb3BlcnR5TmFtZSksIERvbnREZWxldGUgfCBS
ZWFkT25seSB8IERvbnRFbnVtKTsKLSAgICAgICAgcmV0dXJuIHRydWU7CisgICAgaWYgKCFvYmop
IHsKKyAgICAgICAgc2V0RXhjZXB0aW9uKGNvbnRleHQsIGV4Y2VwdGlvbiwgImNhbm5vdCBjYWxs
IGZ1bmN0aW9uIG9mIGRlbGV0ZWQgUU9iamVjdCIpOworICAgICAgICByZXR1cm4gSlNWYWx1ZU1h
a2VVbmRlZmluZWQoY29udGV4dCk7CiAgICAgfQogCi0gICAgaWYgKHByb3BlcnR5TmFtZSA9PSAi
ZGlzY29ubmVjdCIpIHsKLSAgICAgICAgUHJvcGVydHlTbG90IHNsb3Q7Ci0gICAgICAgIHNsb3Qu
c2V0Q3VzdG9tKHRoaXMsIGRpc2Nvbm5lY3RHZXR0ZXIpOwotICAgICAgICBkZXNjcmlwdG9yLnNl
dERlc2NyaXB0b3Ioc2xvdC5nZXRWYWx1ZShleGVjLCBwcm9wZXJ0eU5hbWUpLCBEb250RGVsZXRl
IHwgUmVhZE9ubHkgfCBEb250RW51bSk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KKyAg
ICBRVmFyTGVuZ3RoQXJyYXk8UVZhcmlhbnQsIDEwPiB2YXJnczsKKyAgICB2b2lkICpxYXJnc1sx
MV07CiAKLSAgICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5n
dGgpIHsKLSAgICAgICAgUHJvcGVydHlTbG90IHNsb3Q7Ci0gICAgICAgIHNsb3Quc2V0Q3VzdG9t
KHRoaXMsIGxlbmd0aEdldHRlcik7Ci0gICAgICAgIGRlc2NyaXB0b3Iuc2V0RGVzY3JpcHRvcihz
bG90LmdldFZhbHVlKGV4ZWMsIHByb3BlcnR5TmFtZSksIERvbnREZWxldGUgfCBSZWFkT25seSB8
IERvbnRFbnVtKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQorICAgIGludCBtZXRob2RJ
bmRleCA9IGZpbmRNZXRob2RJbmRleChjb250ZXh0LCBvYmotPm1ldGFPYmplY3QoKSwgZC0+bV9p
ZGVudGlmaWVyLCAgYXJndW1lbnRDb3VudCwgYXJndW1lbnRzLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAoZC0+bV9mbGFncyAmIEFsbG93UHJpdmF0ZSksIHZhcmdzLCAo
dm9pZCAqKilxYXJncywgZXhjZXB0aW9uKTsKIAotICAgIHJldHVybiBRdFJ1bnRpbWVNZXRob2Q6
OmdldE93blByb3BlcnR5RGVzY3JpcHRvcihleGVjLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3Ip
OwotfQorICAgIGlmIChtZXRob2RJbmRleCA8IDApCisgICAgICAgIHJldHVybiBKU1ZhbHVlTWFr
ZVVuZGVmaW5lZChjb250ZXh0KTsKIAotdm9pZCBRdFJ1bnRpbWVNZXRhTWV0aG9kOjpnZXRPd25Q
cm9wZXJ0eU5hbWVzKEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5
TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQotewotICAgIGlmIChtb2RlID09IEluY2x1ZGVE
b250RW51bVByb3BlcnRpZXMpIHsKLSAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmll
cihleGVjLCAiY29ubmVjdCIpKTsKLSAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmll
cihleGVjLCAiZGlzY29ubmVjdCIpKTsKLSAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoZXhlYy0+
cHJvcGVydHlOYW1lcygpLmxlbmd0aCk7Ci0gICAgfQorICAgIGlmIChRTWV0YU9iamVjdDo6bWV0
YWNhbGwob2JqLCBRTWV0YU9iamVjdDo6SW52b2tlTWV0YU1ldGhvZCwgbWV0aG9kSW5kZXgsIHFh
cmdzKSA+PSAwKQorICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7
CisKKyAgICBpZiAodmFyZ3NbMF0uaXNWYWxpZCgpKQorICAgICAgICByZXR1cm4gdG9KUyhjb250
ZXh0LCB2YXJnc1swXSwgMCk7CiAKLSAgICBRdFJ1bnRpbWVNZXRob2Q6OmdldE93blByb3BlcnR5
TmFtZXMoZXhlYywgcHJvcGVydHlOYW1lcywgbW9kZSk7CisgICAgcmV0dXJuIEpTVmFsdWVNYWtl
VW5kZWZpbmVkKGNvbnRleHQpOwogfQogCi1KU1ZhbHVlIFF0UnVudGltZU1ldGFNZXRob2Q6Omxl
bmd0aEdldHRlcihFeGVjU3RhdGUqLCBKU1ZhbHVlLCBjb25zdCBJZGVudGlmaWVyJikKK0pTVmFs
dWVSZWYgbmFtZUZvclNpZ25hbE9yU2xvdChKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RS
ZWYsIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCwgY29uc3QgSlNWYWx1ZVJlZltdLCBK
U1ZhbHVlUmVmKikKIHsKLSAgICAvLyBRdFNjcmlwdCBhbHdheXMgcmV0dXJucyAwCi0gICAgcmV0
dXJuIGpzTnVtYmVyKDApOworICAgIFF0UnVudGltZU1ldGhvZCogbWV0aG9kID0gc3RhdGljX2Nh
c3Q8UXRSdW50aW1lTWV0aG9kKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKKyAg
ICBRQnl0ZUFycmF5IG5hbWUgPSBtZXRob2QtPm5hbWUoKTsKKyAgICBKU1N0cmluZ1JlZiBzdHIg
PSBKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhuYW1lLmNvbnN0RGF0YSgpKTsKKyAgICBK
U1ZhbHVlUmVmIHZhbHVlID0gSlNWYWx1ZU1ha2VTdHJpbmcoY29udGV4dCwgc3RyKTsKKyAgICBK
U1N0cmluZ1JlbGVhc2Uoc3RyKTsKKyAgICByZXR1cm4gdmFsdWU7CiB9CiAKLUpTVmFsdWUgUXRS
dW50aW1lTWV0YU1ldGhvZDo6Y29ubmVjdEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUg
c2xvdEJhc2UsIGNvbnN0IElkZW50aWZpZXImIGlkZW50KQorSlNPYmplY3RSZWYgUXRSdW50aW1l
TWV0aG9kOjpjcmVhdGVPYmplY3QoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTVmFsdWVSZWYqIGV4
Y2VwdGlvbikKIHsKLSAgICBRdFJ1bnRpbWVNZXRhTWV0aG9kKiB0aGlzT2JqID0gc3RhdGljX2Nh
c3Q8UXRSdW50aW1lTWV0YU1ldGhvZCo+KGFzT2JqZWN0KHNsb3RCYXNlKSk7Ci0gICAgUVdfRFMo
UXRSdW50aW1lTWV0YU1ldGhvZCwgdGhpc09iaik7CisgICAgc3RhdGljIGNvbnN0IEpTQ2xhc3NE
ZWZpbml0aW9uIGNsYXNzRGVmRm9yQ29ubmVjdCA9IHsKKyAgICAgICAwLCAwLCAiY29ubmVjdCIs
IDAsIDAsIDAsCisgICAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgY29ubmVjdCwgMCwgMCwgMAor
ICAgIH07CisKKyAgICBzdGF0aWMgY29uc3QgSlNDbGFzc0RlZmluaXRpb24gY2xhc3NEZWZGb3JE
aXNjb25uZWN0ID0geworICAgICAgIDAsIDAsICJkaXNjb25uZWN0IiwgMCwgMCwgMCwKKyAgICAg
ICAwLCAwLCAwLCAwLCAwLCAwLCAwLCBkaXNjb25uZWN0LCAwLCAwLCAwCisgICAgfTsKIAotICAg
IGlmICghZC0+bV9jb25uZWN0KQotICAgICAgICBkLT5tX2Nvbm5lY3Quc2V0KGV4ZWMtPmdsb2Jh
bERhdGEoKSwgdGhpc09iaiwgbmV3IChleGVjKSBRdFJ1bnRpbWVDb25uZWN0aW9uTWV0aG9kKGV4
ZWMsIGlkZW50LCB0cnVlLCBkLT5tX2luc3RhbmNlLCBkLT5tX2luZGV4LCBkLT5tX3NpZ25hdHVy
ZSkpOwotICAgIHJldHVybiBkLT5tX2Nvbm5lY3QuZ2V0KCk7CisgICAgc3RhdGljIEpTQ2xhc3NS
ZWYgY2xhc3NSZWZDb25uZWN0ID0gSlNDbGFzc0NyZWF0ZSgmY2xhc3NEZWZGb3JDb25uZWN0KTsK
KyAgICBzdGF0aWMgSlNDbGFzc1JlZiBjbGFzc1JlZkRpc2Nvbm5lY3QgPSBKU0NsYXNzQ3JlYXRl
KCZjbGFzc0RlZkZvckRpc2Nvbm5lY3QpOworICAgIGJvb2wgaXNTaWduYWwgPSBtX2ZsYWdzICYg
TWV0aG9kSXNTaWduYWw7CisgICAgSlNPYmplY3RSZWYgb2JqZWN0ID0gSlNPYmplY3RNYWtlKGNv
bnRleHQsIG1fY2xhc3NSZWYsIHRoaXMpOworICAgIEpTT2JqZWN0UmVmIGNvbm5lY3RGdW5jdGlv
biA9IEpTT2JqZWN0TWFrZShjb250ZXh0LCBjbGFzc1JlZkNvbm5lY3QsIHRoaXMpOworICAgIEpT
T2JqZWN0UmVmIGRpc2Nvbm5lY3RGdW5jdGlvbiA9IEpTT2JqZWN0TWFrZShjb250ZXh0LCBjbGFz
c1JlZkRpc2Nvbm5lY3QsIHRoaXMpOworICAgIEpTUHJvcGVydHlBdHRyaWJ1dGVzIGF0dHJpYnV0
ZXMgPSBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnRFbnVtIHwga0pTUHJvcGVydHlBdHRyaWJ1dGVE
b250RGVsZXRlOworCisgICAgc3RhdGljIEpTU3RyaW5nUmVmIGNvbm5lY3RTdHIgPSBKU1N0cmlu
Z0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiY29ubmVjdCIpOworICAgIHN0YXRpYyBKU1N0cmluZ1Jl
ZiBkaXNjb25uZWN0U3RyID0gSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoImRpc2Nvbm5l
Y3QiKTsKKyAgICBzdGF0aWMgSlNTdHJpbmdSZWYgbGVuZ3RoU3RyID0gSlNTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoImxlbmd0aCIpOworICAgIHN0YXRpYyBKU1N0cmluZ1JlZiBuYW1lU3Ry
ID0gSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIm5hbWUiKTsKKyAgICBKU1N0cmluZ1Jl
ZiBhY3R1YWxOYW1lU3RyID0gSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcobV9pZGVudGlm
aWVyLmNvbnN0RGF0YSgpKTsKKworICAgIEpTT2JqZWN0U2V0UHJvcGVydHkoY29udGV4dCwgY29u
bmVjdEZ1bmN0aW9uLCBsZW5ndGhTdHIsIEpTVmFsdWVNYWtlTnVtYmVyKGNvbnRleHQsIGlzU2ln
bmFsID8gMSA6IDApLCBhdHRyaWJ1dGVzLCBleGNlcHRpb24pOworICAgIEpTT2JqZWN0U2V0UHJv
cGVydHkoY29udGV4dCwgY29ubmVjdEZ1bmN0aW9uLCBuYW1lU3RyLCBKU1ZhbHVlTWFrZVN0cmlu
Zyhjb250ZXh0LCBjb25uZWN0U3RyKSwgYXR0cmlidXRlcywgZXhjZXB0aW9uKTsKKyAgICBKU09i
amVjdFNldFByb3BlcnR5KGNvbnRleHQsIGRpc2Nvbm5lY3RGdW5jdGlvbiwgbGVuZ3RoU3RyLCBK
U1ZhbHVlTWFrZU51bWJlcihjb250ZXh0LCBpc1NpZ25hbCA/IDEgOiAwKSwgYXR0cmlidXRlcywg
ZXhjZXB0aW9uKTsKKyAgICBKU09iamVjdFNldFByb3BlcnR5KGNvbnRleHQsIGRpc2Nvbm5lY3RG
dW5jdGlvbiwgbmFtZVN0ciwgSlNWYWx1ZU1ha2VTdHJpbmcoY29udGV4dCwgZGlzY29ubmVjdFN0
ciksIGF0dHJpYnV0ZXMsIGV4Y2VwdGlvbik7CisKKyAgICBKU09iamVjdFNldFByb3BlcnR5KGNv
bnRleHQsIG9iamVjdCwgY29ubmVjdFN0ciwgY29ubmVjdEZ1bmN0aW9uLCBhdHRyaWJ1dGVzLCBl
eGNlcHRpb24pOworICAgIEpTT2JqZWN0U2V0UHJvcGVydHkoY29udGV4dCwgb2JqZWN0LCBkaXNj
b25uZWN0U3RyLCBkaXNjb25uZWN0RnVuY3Rpb24sIGF0dHJpYnV0ZXMsIGV4Y2VwdGlvbik7Cisg
ICAgSlNPYmplY3RTZXRQcm9wZXJ0eShjb250ZXh0LCBvYmplY3QsIGxlbmd0aFN0ciwgSlNWYWx1
ZU1ha2VOdW1iZXIoY29udGV4dCwgMCksIGF0dHJpYnV0ZXMsIGV4Y2VwdGlvbik7CisgICAgSlNP
YmplY3RTZXRQcm9wZXJ0eShjb250ZXh0LCBvYmplY3QsIG5hbWVTdHIsIEpTVmFsdWVNYWtlU3Ry
aW5nKGNvbnRleHQsIGFjdHVhbE5hbWVTdHIpLCBhdHRyaWJ1dGVzLCBleGNlcHRpb24pOworCisg
ICAgSlNTdHJpbmdSZWxlYXNlKGFjdHVhbE5hbWVTdHIpOworICAgIHJldHVybiBvYmplY3Q7CiB9
CiAKLUpTVmFsdWUgUXRSdW50aW1lTWV0YU1ldGhvZDo6ZGlzY29ubmVjdEdldHRlcihFeGVjU3Rh
dGUqIGV4ZWMsIEpTVmFsdWUgc2xvdEJhc2UsIGNvbnN0IElkZW50aWZpZXImIGlkZW50KQorSlNW
YWx1ZVJlZiBRdFJ1bnRpbWVNZXRob2Q6OmNvbm5lY3QoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpT
T2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1l
bnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0
aW9uKQogewotICAgIFF0UnVudGltZU1ldGFNZXRob2QqIHRoaXNPYmogPSBzdGF0aWNfY2FzdDxR
dFJ1bnRpbWVNZXRhTWV0aG9kKj4oYXNPYmplY3Qoc2xvdEJhc2UpKTsKLSAgICBRV19EUyhRdFJ1
bnRpbWVNZXRhTWV0aG9kLCB0aGlzT2JqKTsKLQotICAgIGlmICghZC0+bV9kaXNjb25uZWN0KQot
ICAgICAgICBkLT5tX2Rpc2Nvbm5lY3Quc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpc09iaiwg
bmV3IChleGVjKSBRdFJ1bnRpbWVDb25uZWN0aW9uTWV0aG9kKGV4ZWMsIGlkZW50LCBmYWxzZSwg
ZC0+bV9pbnN0YW5jZSwgZC0+bV9pbmRleCwgZC0+bV9zaWduYXR1cmUpKTsKLSAgICByZXR1cm4g
ZC0+bV9kaXNjb25uZWN0LmdldCgpOworICAgIHJldHVybiBjb25uZWN0T3JEaXNjb25uZWN0KGNv
bnRleHQsIGZ1bmN0aW9uLCB0aGlzT2JqZWN0LCBhcmd1bWVudENvdW50LCBhcmd1bWVudHMsIGV4
Y2VwdGlvbiwgdHJ1ZSk7CiB9CiAKLS8vID09PT09PT09PT09PT09PQotCi1RTXVsdGlNYXA8UU9i
amVjdCosIFF0Q29ubmVjdGlvbk9iamVjdCo+IFF0UnVudGltZUNvbm5lY3Rpb25NZXRob2Q6OmNv
bm5lY3Rpb25zOwotCi1RdFJ1bnRpbWVDb25uZWN0aW9uTWV0aG9kOjpRdFJ1bnRpbWVDb25uZWN0
aW9uTWV0aG9kKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgaWRlbnQsIGJvb2wg
aXNDb25uZWN0LCBQYXNzUmVmUHRyPFF0SW5zdGFuY2U+IGluc3QsIGludCBpbmRleCwgY29uc3Qg
UUJ5dGVBcnJheSYgc2lnbmF0dXJlKQotICAgIDogUXRSdW50aW1lTWV0aG9kIChuZXcgUXRSdW50
aW1lQ29ubmVjdGlvbk1ldGhvZERhdGEoKSwgZXhlYywgaWRlbnQsIGluc3QpCitKU1ZhbHVlUmVm
IFF0UnVudGltZU1ldGhvZDo6ZGlzY29ubmVjdChKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmpl
Y3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENv
dW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24p
CiB7Ci0gICAgUVdfRChRdFJ1bnRpbWVDb25uZWN0aW9uTWV0aG9kKTsKLQotICAgIGQtPm1fc2ln
bmF0dXJlID0gc2lnbmF0dXJlOwotICAgIGQtPm1faW5kZXggPSBpbmRleDsKLSAgICBkLT5tX2lz
Q29ubmVjdCA9IGlzQ29ubmVjdDsKKyAgICByZXR1cm4gY29ubmVjdE9yRGlzY29ubmVjdChjb250
ZXh0LCBmdW5jdGlvbiwgdGhpc09iamVjdCwgYXJndW1lbnRDb3VudCwgYXJndW1lbnRzLCBleGNl
cHRpb24sIGZhbHNlKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgUXRSdW50aW1lQ29ubmVjdGlvbk1l
dGhvZDo6Y2FsbChFeGVjU3RhdGUqIGV4ZWMpCitKU1ZhbHVlUmVmIFF0UnVudGltZU1ldGhvZDo6
Y29ubmVjdE9yRGlzY29ubmVjdChKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVu
Y3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25z
dCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24sIGJvb2wgY29u
bmVjdCkKIHsKLSAgICBRdFJ1bnRpbWVDb25uZWN0aW9uTWV0aG9kRGF0YSogZCA9IHN0YXRpY19j
YXN0PFF0UnVudGltZUNvbm5lY3Rpb25NZXRob2QgKj4oZXhlYy0+Y2FsbGVlKCkpLT5kX2Z1bmMo
KTsKKyAgICBRdFJ1bnRpbWVNZXRob2QqIGQgPSBzdGF0aWNfY2FzdDxRdFJ1bnRpbWVNZXRob2Qq
PihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOworICAgIGlmICghZCkKKyAgICAgICAg
ZCA9IHN0YXRpY19jYXN0PFF0UnVudGltZU1ldGhvZCo+KEpTT2JqZWN0R2V0UHJpdmF0ZShmdW5j
dGlvbikpOwogCi0gICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBR
U3RyaW5nIGZ1bmN0aW9uTmFtZSA9IGNvbm5lY3QgPyAiY29ubmVjdCIgOiAiZGlzY29ubmVjdCI7
CiAKLSAgICBRT2JqZWN0KiBzZW5kZXIgPSBkLT5tX2luc3RhbmNlLT5nZXRPYmplY3QoKTsKKyAg
ICAvLyBvYmplY3QubWV0aG9kLmNvbm5lY3QoKTsgb2JqZWN0Lm1ldGhvZC5kaXNjb25uZWN0KCk7
CisgICAgaWYgKCFhcmd1bWVudENvdW50KSB7CisgICAgICAgIFFTdHJpbmcgZXJyb3JTdHIgPSBR
U3RyaW5nKCJRdE1ldGFNZXRob2QuJTE6IG5vIGFyZ3VtZW50cyBnaXZlbiIpLmFyZyhjb25uZWN0
ID8gImNvbm5lY3QiIDogImRpc2Nvbm5lY3QiKTsKKyAgICAgICAgc2V0RXhjZXB0aW9uKGNvbnRl
eHQsIGV4Y2VwdGlvbiwgZXJyb3JTdHIpOworICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRl
ZmluZWQoY29udGV4dCk7CisgICAgfQogCi0gICAgaWYgKHNlbmRlcikgeworICAgIC8vIG9iamVj
dC5zbG90LmNvbm5lY3QoLi4uKTsgb2JqZWN0LnNsb3QuZGlzY29ubmVjdCguLi4pOworICAgIGlm
ICgoIShkLT5tX2ZsYWdzICYgUXRSdW50aW1lTWV0aG9kOjpNZXRob2RJc1NpZ25hbCkpKSB7Cisg
ICAgICAgIHNldEV4Y2VwdGlvbihjb250ZXh0LCBleGNlcHRpb24sIFFTdHJpbmcoIlF0TWV0YU1l
dGhvZC4lMzogJTE6OiUyKCkgaXMgbm90IGEgc2lnbmFsIikuYXJnKGQtPm1fb2JqZWN0LmRhdGEo
KS0+bWV0YU9iamVjdCgpLT5jbGFzc05hbWUoKSkuYXJnKGQtPm1faWRlbnRpZmllci5jb25zdERh
dGEoKSkuYXJnKGZ1bmN0aW9uTmFtZSkpOworICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRl
ZmluZWQoY29udGV4dCk7CisgICAgfQogCi0gICAgICAgIEpTT2JqZWN0KiB0aGlzT2JqZWN0ID0g
ZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpOwotICAgICAgICBKU09iamVjdCogZnVuY09iamVj
dCA9IDA7CisgICAgUU9iamVjdCogc2VuZGVyID0gZC0+bV9vYmplY3QuZGF0YSgpOwogCi0gICAg
ICAgIC8vIFF0U2NyaXB0IGNoZWNrcyBzaWduYWxuZXNzIGZpcnN0LCBhcmd1bWVudHMgc2Vjb25k
Ci0gICAgICAgIGludCBzaWduYWxJbmRleCA9IC0xOworICAgIC8vIGRlbGV0ZWRPYmplY3Quc2ln
bmFsLmNvbm5lY3QoLi4uKTsKKyAgICBpZiAoIXNlbmRlcikgeworICAgICAgICBzZXRFeGNlcHRp
b24oY29udGV4dCwgZXhjZXB0aW9uLCAiY2Fubm90IGNhbGwgZnVuY3Rpb24gb2YgZGVsZXRlZCBR
T2JqZWN0Iik7CisgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsK
KyAgICB9CiAKLSAgICAgICAgLy8gTWFrZSBzdXJlIHRoZSBpbml0aWFsIGluZGV4IGlzIGEgc2ln
bmFsCi0gICAgICAgIFFNZXRhTWV0aG9kIG0gPSBzZW5kZXItPm1ldGFPYmplY3QoKS0+bWV0aG9k
KGQtPm1faW5kZXgpOwotICAgICAgICBpZiAobS5tZXRob2RUeXBlKCkgPT0gUU1ldGFNZXRob2Q6
OlNpZ25hbCkKLSAgICAgICAgICAgIHNpZ25hbEluZGV4ID0gZmluZFNpZ25hbEluZGV4KHNlbmRl
ci0+bWV0YU9iamVjdCgpLCBkLT5tX2luZGV4LCBkLT5tX3NpZ25hdHVyZSk7CisgICAgaW50IHNp
Z25hbEluZGV4ID0gZC0+bV9pbmRleDsKKyAgICBKU09iamVjdFJlZiB0YXJnZXRPYmplY3QgPSAw
OworICAgIEpTT2JqZWN0UmVmIHRhcmdldEZ1bmN0aW9uID0gMDsKIAotICAgICAgICBpZiAoc2ln
bmFsSW5kZXggIT0gLTEpIHsKLSAgICAgICAgICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkg
PT0gMSkgewotICAgICAgICAgICAgICAgIGZ1bmNPYmplY3QgPSBleGVjLT5hcmd1bWVudCgwKS50
b09iamVjdChleGVjKTsKLSAgICAgICAgICAgICAgICBDYWxsRGF0YSBjYWxsRGF0YTsKLSAgICAg
ICAgICAgICAgICBpZiAoZnVuY09iamVjdC0+Z2V0Q2FsbERhdGEoY2FsbERhdGEpID09IENhbGxU
eXBlTm9uZSkgewotICAgICAgICAgICAgICAgICAgICBpZiAoZC0+bV9pc0Nvbm5lY3QpCi0gICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZVR5cGVF
cnJvcihleGVjLCAiUXRNZXRhTWV0aG9kLmNvbm5lY3Q6IHRhcmdldCBpcyBub3QgYSBmdW5jdGlv
biIpKTsKLSAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVUeXBlRXJyb3IoZXhlYywgIlF0TWV0YU1l
dGhvZC5kaXNjb25uZWN0OiB0YXJnZXQgaXMgbm90IGEgZnVuY3Rpb24iKSk7Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPj0g
MikgewotICAgICAgICAgICAgICAgIGlmIChleGVjLT5hcmd1bWVudCgwKS5pc09iamVjdCgpKSB7
Ci0gICAgICAgICAgICAgICAgICAgIHRoaXNPYmplY3QgPSBleGVjLT5hcmd1bWVudCgwKS50b09i
amVjdChleGVjKTsKLQotICAgICAgICAgICAgICAgICAgICAvLyBHZXQgdGhlIGFjdHVhbCBmdW5j
dGlvbiB0byBjYWxsCi0gICAgICAgICAgICAgICAgICAgIEpTT2JqZWN0ICphc09iaiA9IGV4ZWMt
PmFyZ3VtZW50KDEpLnRvT2JqZWN0KGV4ZWMpOwotICAgICAgICAgICAgICAgICAgICBDYWxsRGF0
YSBjYWxsRGF0YTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGFzT2JqLT5nZXRDYWxsRGF0YShj
YWxsRGF0YSkgIT0gQ2FsbFR5cGVOb25lKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBG
dW5jdGlvbiB2ZXJzaW9uCi0gICAgICAgICAgICAgICAgICAgICAgICBmdW5jT2JqZWN0ID0gYXNP
Ymo7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAvLyBDb252ZXJ0IGl0IHRvIGEgc3RyaW5nCi0gICAgICAgICAgICAgICAgICAgICAgICBVU3Ry
aW5nIGZ1bmNOYW1lID0gZXhlYy0+YXJndW1lbnQoMSkudG9TdHJpbmcoZXhlYyk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBJZGVudGlmaWVyIGZ1bmNJZGVudChleGVjLCBmdW5jTmFtZSk7Ci0K
LSAgICAgICAgICAgICAgICAgICAgICAgIC8vICMjIyBEcm9wQWxsTG9ja3MKLSAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIFRoaXMgaXMgcmVzb2x2ZWQgYXQgdGhpcyBwb2ludCBpbiBRdFNjcmlw
dAotICAgICAgICAgICAgICAgICAgICAgICAgSlNWYWx1ZSB2YWwgPSB0aGlzT2JqZWN0LT5nZXQo
ZXhlYywgZnVuY0lkZW50KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIEpTT2JqZWN0KiBhc0Z1
bmNPYmogPSB2YWwudG9PYmplY3QoZXhlYyk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChhc0Z1bmNPYmotPmdldENhbGxEYXRhKGNhbGxEYXRhKSAhPSBDYWxsVHlwZU5vbmUpIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jT2JqZWN0ID0gYXNGdW5jT2JqOwotICAgICAg
ICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoZC0+bV9pc0Nvbm5lY3QpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlVHlwZUVycm9yKGV4ZWMsICJRdE1ldGFNZXRob2Qu
Y29ubmVjdDogdGFyZ2V0IGlzIG5vdCBhIGZ1bmN0aW9uIikpOwotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRo
cm93Vk1FcnJvcihleGVjLCBjcmVhdGVUeXBlRXJyb3IoZXhlYywgIlF0TWV0YU1ldGhvZC5kaXNj
b25uZWN0OiB0YXJnZXQgaXMgbm90IGEgZnVuY3Rpb24iKSk7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgICAgICAgICBpZiAoZC0+bV9pc0Nvbm5lY3QpCi0gICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZVR5cGVFcnJvcihleGVjLCAi
UXRNZXRhTWV0aG9kLmNvbm5lY3Q6IHRoaXNPYmplY3QgaXMgbm90IGFuIG9iamVjdCIpKTsKLSAg
ICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRo
cm93Vk1FcnJvcihleGVjLCBjcmVhdGVUeXBlRXJyb3IoZXhlYywgIlF0TWV0YU1ldGhvZC5kaXNj
b25uZWN0OiB0aGlzT2JqZWN0IGlzIG5vdCBhbiBvYmplY3QiKSk7Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBpZiAoZC0+bV9pc0Nvbm5l
Y3QpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRl
RXJyb3IoZXhlYywgIlF0TWV0YU1ldGhvZC5jb25uZWN0OiBubyBhcmd1bWVudHMgZ2l2ZW4iKSk7
Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhyb3dW
TUVycm9yKGV4ZWMsIGNyZWF0ZUVycm9yKGV4ZWMsICJRdE1ldGFNZXRob2QuZGlzY29ubmVjdDog
bm8gYXJndW1lbnRzIGdpdmVuIikpOworICAgIGlmIChhcmd1bWVudENvdW50ID09IDEpIHsKKyAg
ICAgICAgaWYgKCFKU1ZhbHVlSXNPYmplY3QoY29udGV4dCwgYXJndW1lbnRzWzBdKSkgeworICAg
ICAgICAgICAgc2V0RXhjZXB0aW9uKGNvbnRleHQsIGV4Y2VwdGlvbiwgUVN0cmluZygiUXRNZXRh
TWV0aG9kLiUxOiB0YXJnZXQgaXMgbm90IGEgZnVuY3Rpb24iKS5hcmcoZnVuY3Rpb25OYW1lKSk7
CisgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CisgICAg
ICAgIH0KKyAgICAgICAgdGFyZ2V0RnVuY3Rpb24gPSBKU1ZhbHVlVG9PYmplY3QoY29udGV4dCwg
YXJndW1lbnRzWzBdLCBleGNlcHRpb24pOworCisgICAgICAgIC8vIG9iamVjdC5zaWduYWwuY29u
bmVjdChzb21lRnVuY3Rpb24pOworICAgICAgICBpZiAoSlNPYmplY3RJc0Z1bmN0aW9uKGNvbnRl
eHQsIHRhcmdldEZ1bmN0aW9uKSkgeworICAgICAgICAgICAgaWYgKEpTVmFsdWVJc09iamVjdE9m
Q2xhc3MoY29udGV4dCwgdGFyZ2V0RnVuY3Rpb24sIHByb3RvdHlwZUZvclNpZ25hbHNBbmRTbG90
cygpKSkgeworICAgICAgICAgICAgICAgIC8vIG9iamVjdC5zaWduYWwuY29ubmVjdChvdGhlck9i
amVjdC5zbG90KTsKKyAgICAgICAgICAgICAgICBpZiAoUXRSdW50aW1lTWV0aG9kKiB0YXJnZXRN
ZXRob2QgPSBzdGF0aWNfY2FzdDxRdFJ1bnRpbWVNZXRob2QqPihKU09iamVjdEdldFByaXZhdGUo
dGFyZ2V0RnVuY3Rpb24pKSkKKyAgICAgICAgICAgICAgICAgICAgdGFyZ2V0T2JqZWN0ID0gUXRD
bGFzczo6aW5zdGFuY2VGb3JRT2JqZWN0KGNvbnRleHQsIHRhcmdldE1ldGhvZC0+bV9vYmplY3Qu
ZGF0YSgpLCBRU2NyaXB0RW5naW5lOjpRdE93bmVyc2hpcCk7CiAgICAgICAgICAgICB9CisgICAg
ICAgIH0gZWxzZQorICAgICAgICAgICAgdGFyZ2V0RnVuY3Rpb24gPSAwOworICAgIH0gZWxzZSB7
CisgICAgICAgIC8vIG9iamVjdC5zaWduYWwuY29ubmVjdChvYmplY3QsIHNvbWVGdW5jdGlvbik7
CisgICAgICAgIHRhcmdldE9iamVjdCA9IEpTVmFsdWVUb09iamVjdChjb250ZXh0LCBhcmd1bWVu
dHNbMF0sIGV4Y2VwdGlvbik7CisgICAgICAgIGlmIChKU1ZhbHVlSXNPYmplY3QoY29udGV4dCwg
YXJndW1lbnRzWzFdKSkKKyAgICAgICAgICAgIHRhcmdldEZ1bmN0aW9uID0gSlNWYWx1ZVRvT2Jq
ZWN0KGNvbnRleHQsIGFyZ3VtZW50c1sxXSwgZXhjZXB0aW9uKTsKKyAgICB9CiAKLSAgICAgICAg
ICAgIGlmIChkLT5tX2lzQ29ubmVjdCkgewotICAgICAgICAgICAgICAgIC8vIHRvIGNvbm5lY3Qs
IHdlIG5lZWQ6Ci0gICAgICAgICAgICAgICAgLy8gIHRhcmdldCBvYmplY3QgW2Zyb20gY3Rvcl0K
LSAgICAgICAgICAgICAgICAvLyAgdGFyZ2V0IHNpZ25hbCBpbmRleCBldGMuIFtmcm9tIGN0b3Jd
Ci0gICAgICAgICAgICAgICAgLy8gIHJlY2VpdmVyIGZ1bmN0aW9uIFtmcm9tIGFyZ3VtZW50c10K
LSAgICAgICAgICAgICAgICAvLyAgcmVjZWl2ZXIgdGhpcyBvYmplY3QgW2Zyb20gYXJndW1lbnRz
XQotCi0gICAgICAgICAgICAgICAgUXRDb25uZWN0aW9uT2JqZWN0KiBjb25uID0gbmV3IFF0Q29u
bmVjdGlvbk9iamVjdChleGVjLT5nbG9iYWxEYXRhKCksIGQtPm1faW5zdGFuY2UsIHNpZ25hbElu
ZGV4LCB0aGlzT2JqZWN0LCBmdW5jT2JqZWN0KTsKLSAgICAgICAgICAgICAgICBib29sIG9rID0g
UU1ldGFPYmplY3Q6OmNvbm5lY3Qoc2VuZGVyLCBzaWduYWxJbmRleCwgY29ubiwgY29ubi0+bWV0
YU9iamVjdCgpLT5tZXRob2RPZmZzZXQoKSk7Ci0gICAgICAgICAgICAgICAgaWYgKCFvaykgewot
ICAgICAgICAgICAgICAgICAgICBkZWxldGUgY29ubjsKLSAgICAgICAgICAgICAgICAgICAgUVN0
cmluZyBtc2cgPSBRU3RyaW5nKFFMYXRpbjFTdHJpbmcoIlF0TWV0YU1ldGhvZC5jb25uZWN0OiBm
YWlsZWQgdG8gY29ubmVjdCB0byAlMTo6JTIoKSIpKQotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC5hcmcoUUxhdGluMVN0cmluZyhzZW5kZXItPm1ldGFPYmplY3QoKS0+Y2xhc3NOYW1lKCkp
KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5hcmcoUUxhdGluMVN0cmluZyhkLT5tX3Np
Z25hdHVyZSkpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMs
IGNyZWF0ZUVycm9yKGV4ZWMsIG1zZy50b0xhdGluMSgpLmNvbnN0RGF0YSgpKSk7Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICAv
LyBTdG9yZSBjb25uZWN0aW9uCi0gICAgICAgICAgICAgICAgICAgIGNvbm5lY3Rpb25zLmluc2Vy
dChzZW5kZXIsIGNvbm4pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICAgICAgLy8gTm93IHRvIGZpbmQgb3VyIHByZXZpb3VzIGNvbm5lY3Rpb24g
b2JqZWN0LiBIbW0uCi0gICAgICAgICAgICAgICAgUUxpc3Q8UXRDb25uZWN0aW9uT2JqZWN0Kj4g
Y29ubnMgPSBjb25uZWN0aW9ucy52YWx1ZXMoc2VuZGVyKTsKLSAgICAgICAgICAgICAgICBib29s
IHJldCA9IGZhbHNlOwotCi0gICAgICAgICAgICAgICAgZm9yZWFjaChRdENvbm5lY3Rpb25PYmpl
Y3QqIGNvbm4sIGNvbm5zKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIElzIHRoaXMgdGhlIHJp
Z2h0IGNvbm5lY3Rpb24/Ci0gICAgICAgICAgICAgICAgICAgIGlmIChjb25uLT5tYXRjaChzZW5k
ZXIsIHNpZ25hbEluZGV4LCB0aGlzT2JqZWN0LCBmdW5jT2JqZWN0KSkgewotICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gWWVwLCBkaXNjb25uZWN0IGl0Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBRTWV0YU9iamVjdDo6ZGlzY29ubmVjdChzZW5kZXIsIHNpZ25hbEluZGV4LCBjb25uLCBjb25u
LT5tZXRhT2JqZWN0KCktPm1ldGhvZE9mZnNldCgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGRlbGV0ZSBjb25uOyAvLyB0aGlzIHdpbGwgYWxzbyByZW1vdmUgaXQgZnJvbSB0aGUgbWFwCi0g
ICAgICAgICAgICAgICAgICAgICAgICByZXQgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9CisgICAg
Ly8gb2JqZWN0LnNpZ25hbC5jb25uZWN0KHNvbWVPYmplY3QpOworICAgIGlmICghdGFyZ2V0RnVu
Y3Rpb24pIHsKKyAgICAgICAgc2V0RXhjZXB0aW9uKGNvbnRleHQsIGV4Y2VwdGlvbiwgIlF0TWV0
YU1ldGhvZC5jb25uZWN0OiB0YXJnZXQgaXMgbm90IGEgZnVuY3Rpb24iKTsKKyAgICAgICAgcmV0
dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworICAgIH0KIAotICAgICAgICAgICAg
ICAgIGlmICghcmV0KSB7Ci0gICAgICAgICAgICAgICAgICAgIFFTdHJpbmcgbXNnID0gUVN0cmlu
ZyhRTGF0aW4xU3RyaW5nKCJRdE1ldGFNZXRob2QuZGlzY29ubmVjdDogZmFpbGVkIHRvIGRpc2Nv
bm5lY3QgZnJvbSAlMTo6JTIoKSIpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5hcmco
UUxhdGluMVN0cmluZyhzZW5kZXItPm1ldGFPYmplY3QoKS0+Y2xhc3NOYW1lKCkpKQotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIC5hcmcoUUxhdGluMVN0cmluZyhkLT5tX3NpZ25hdHVyZSkp
OwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZUVy
cm9yKGV4ZWMsIG1zZy50b0xhdGluMSgpLmNvbnN0RGF0YSgpKSk7Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgUVN0cmluZyBt
c2cgPSBRU3RyaW5nKFFMYXRpbjFTdHJpbmcoIlF0TWV0YU1ldGhvZC4lMTogJTI6OiUzKCkgaXMg
bm90IGEgc2lnbmFsIikpCi0gICAgICAgICAgICAgICAgICAgIC5hcmcoUUxhdGluMVN0cmluZyhk
LT5tX2lzQ29ubmVjdCA/ICJjb25uZWN0IjogImRpc2Nvbm5lY3QiKSkKKyAgICBpZiAoY29ubmVj
dCkgeworICAgICAgICAvLyB0byBjb25uZWN0LCB3ZSBuZWVkOgorICAgICAgICAvLyAgdGFyZ2V0
IG9iamVjdCBbZnJvbSBjdG9yXQorICAgICAgICAvLyAgdGFyZ2V0IHNpZ25hbCBpbmRleCBldGMu
IFtmcm9tIGN0b3JdCisgICAgICAgIC8vICByZWNlaXZlciBmdW5jdGlvbiBbZnJvbSBhcmd1bWVu
dHNdCisgICAgICAgIC8vICByZWNlaXZlciB0aGlzIG9iamVjdCBbZnJvbSBhcmd1bWVudHNdCisK
KyAgICAgICAgUXRDb25uZWN0aW9uT2JqZWN0KiBjb25uID0gbmV3IFF0Q29ubmVjdGlvbk9iamVj
dChjb250ZXh0LCBzZW5kZXIsIHNpZ25hbEluZGV4LCB0YXJnZXRPYmplY3QsIHRhcmdldEZ1bmN0
aW9uKTsKKyAgICAgICAgYm9vbCBvayA9IFFNZXRhT2JqZWN0Ojpjb25uZWN0KHNlbmRlciwgc2ln
bmFsSW5kZXgsIGNvbm4sIGNvbm4tPm1ldGFPYmplY3QoKS0+bWV0aG9kT2Zmc2V0KCkpOworICAg
ICAgICBpZiAoIW9rKSB7CisgICAgICAgICAgICBkZWxldGUgY29ubjsKKyAgICAgICAgICAgIFFT
dHJpbmcgbXNnID0gUVN0cmluZyhRTGF0aW4xU3RyaW5nKCJRdE1ldGFNZXRob2QuY29ubmVjdDog
ZmFpbGVkIHRvIGNvbm5lY3QgdG8gJTE6OiUyKCkiKSkKICAgICAgICAgICAgICAgICAgICAgLmFy
ZyhRTGF0aW4xU3RyaW5nKHNlbmRlci0+bWV0YU9iamVjdCgpLT5jbGFzc05hbWUoKSkpCi0gICAg
ICAgICAgICAgICAgICAgIC5hcmcoUUxhdGluMVN0cmluZyhkLT5tX3NpZ25hdHVyZSkpOwotICAg
ICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVUeXBlRXJyb3IoZXhlYywg
bXNnLnRvTGF0aW4xKCkuY29uc3REYXRhKCkpKTsKKyAgICAgICAgICAgICAgICAgICAgLmFyZyhR
TGF0aW4xU3RyaW5nKGQtPm1faWRlbnRpZmllcikpOworICAgICAgICAgICAgc2V0RXhjZXB0aW9u
KGNvbnRleHQsIGV4Y2VwdGlvbiwgbXNnKTsKKyAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlTWFr
ZVVuZGVmaW5lZChjb250ZXh0KTsKICAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIHJl
dHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlRXJyb3IoZXhlYywgImNhbm5vdCBjYWxsIGZ1
bmN0aW9uIG9mIGRlbGV0ZWQgUU9iamVjdCIpKTsKLSAgICB9CiAKLSAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwotfQotCi1DYWxsVHlwZSBRdFJ1bnRpbWVDb25uZWN0
aW9uTWV0aG9kOjpnZXRDYWxsRGF0YShDYWxsRGF0YSYgY2FsbERhdGEpCi17Ci0gICAgY2FsbERh
dGEubmF0aXZlLmZ1bmN0aW9uID0gY2FsbDsKLSAgICByZXR1cm4gQ2FsbFR5cGVIb3N0OwotfQor
ICAgICAgICAvLyBTdG9yZSBjb25uZWN0aW9uCisgICAgICAgIFF0Q29ubmVjdGlvbk9iamVjdDo6
Y29ubmVjdGlvbnMuaW5zZXJ0KHNlbmRlciwgY29ubik7CiAKLWJvb2wgUXRSdW50aW1lQ29ubmVj
dGlvbk1ldGhvZDo6Z2V0T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRl
bnRpZmllciYgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCi17Ci0gICAgaWYgKHBy
b3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoKSB7Ci0gICAgICAgIHNs
b3Quc2V0Q3VzdG9tKHRoaXMsIGxlbmd0aEdldHRlcik7Ci0gICAgICAgIHJldHVybiB0cnVlOwor
ICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CiAgICAgfQogCi0g
ICAgcmV0dXJuIFF0UnVudGltZU1ldGhvZDo6Z2V0T3duUHJvcGVydHlTbG90KGV4ZWMsIHByb3Bl
cnR5TmFtZSwgc2xvdCk7Ci19CisgICAgLy8gTm93IHRvIGZpbmQgb3VyIHByZXZpb3VzIGNvbm5l
Y3Rpb24gb2JqZWN0LgorICAgIFFMaXN0PFF0Q29ubmVjdGlvbk9iamVjdCo+IGNvbm5zID0gUXRD
b25uZWN0aW9uT2JqZWN0Ojpjb25uZWN0aW9ucy52YWx1ZXMoc2VuZGVyKTsKIAotYm9vbCBRdFJ1
bnRpbWVDb25uZWN0aW9uTWV0aG9kOjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoRXhlY1N0YXRl
KiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRv
ciYgZGVzY3JpcHRvcikKLXsKLSAgICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5
TmFtZXMoKS5sZW5ndGgpIHsKLSAgICAgICAgUHJvcGVydHlTbG90IHNsb3Q7Ci0gICAgICAgIHNs
b3Quc2V0Q3VzdG9tKHRoaXMsIGxlbmd0aEdldHRlcik7Ci0gICAgICAgIGRlc2NyaXB0b3Iuc2V0
RGVzY3JpcHRvcihzbG90LmdldFZhbHVlKGV4ZWMsIHByb3BlcnR5TmFtZSksIERvbnREZWxldGUg
fCBSZWFkT25seSB8IERvbnRFbnVtKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0g
ICAgcmV0dXJuIFF0UnVudGltZU1ldGhvZDo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGV4ZWMs
IHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvcik7Ci19CisgICAgZm9yZWFjaChRdENvbm5lY3Rpb25P
YmplY3QqIGNvbm4sIGNvbm5zKSB7CisgICAgICAgIC8vIElzIHRoaXMgdGhlIHJpZ2h0IGNvbm5l
Y3Rpb24/CisgICAgICAgIGlmICghY29ubi0+bWF0Y2goc2VuZGVyLCBzaWduYWxJbmRleCwgdGFy
Z2V0T2JqZWN0LCB0YXJnZXRGdW5jdGlvbiwgY29udGV4dCwgZXhjZXB0aW9uKSkKKyAgICAgICAg
ICAgIGNvbnRpbnVlOwogCi12b2lkIFF0UnVudGltZUNvbm5lY3Rpb25NZXRob2Q6OmdldE93blBy
b3BlcnR5TmFtZXMoRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlO
YW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCi17Ci0gICAgaWYgKG1vZGUgPT0gSW5jbHVkZURv
bnRFbnVtUHJvcGVydGllcykKLSAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoZXhlYy0+cHJvcGVy
dHlOYW1lcygpLmxlbmd0aCk7CisgICAgICAgIC8vIFllcCwgZGlzY29ubmVjdCBpdAorICAgICAg
ICBRTWV0YU9iamVjdDo6ZGlzY29ubmVjdChzZW5kZXIsIHNpZ25hbEluZGV4LCBjb25uLCBjb25u
LT5tZXRhT2JqZWN0KCktPm1ldGhvZE9mZnNldCgpKTsKKyAgICAgICAgZGVsZXRlIGNvbm47IC8v
IHRoaXMgd2lsbCBhbHNvIHJlbW92ZSBpdCBmcm9tIHRoZSBtYXAKKyAgICAgICAgcmV0dXJuIEpT
VmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworICAgIH0KIAotICAgIFF0UnVudGltZU1ldGhv
ZDo6Z2V0T3duUHJvcGVydHlOYW1lcyhleGVjLCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKLX0KKyAg
ICBRQnl0ZUFycmF5IG1zZyA9IFFTdHJpbmcoIlF0TWV0YU1ldGhvZC5kaXNjb25uZWN0OiBmYWls
ZWQgdG8gZGlzY29ubmVjdCBmcm9tICUxOjolMigpIikKKyAgICAgICAgICAgIC5hcmcoUUxhdGlu
MVN0cmluZyhzZW5kZXItPm1ldGFPYmplY3QoKS0+Y2xhc3NOYW1lKCkpKQorICAgICAgICAgICAg
LmFyZyhRTGF0aW4xU3RyaW5nKGQtPm1faWRlbnRpZmllcikpLnRvVXRmOCgpOwogCi1KU1ZhbHVl
IFF0UnVudGltZUNvbm5lY3Rpb25NZXRob2Q6Omxlbmd0aEdldHRlcihFeGVjU3RhdGUqLCBKU1Zh
bHVlLCBjb25zdCBJZGVudGlmaWVyJikKLXsKLSAgICAvLyB3ZSBoYXZlIG9uZSBmb3JtYWwgYXJn
dW1lbnQsIGFuZCBvbmUgb3B0aW9uYWwKLSAgICByZXR1cm4ganNOdW1iZXIoMSk7CisgICAgc2V0
RXhjZXB0aW9uKGNvbnRleHQsIGV4Y2VwdGlvbiwgbXNnKTsKKyAgICByZXR1cm4gSlNWYWx1ZU1h
a2VVbmRlZmluZWQoY29udGV4dCk7CiB9CiAKLS8vID09PT09PT09PT09PT09PQotCi1RdENvbm5l
Y3Rpb25PYmplY3Q6OlF0Q29ubmVjdGlvbk9iamVjdChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEs
IFBhc3NSZWZQdHI8UXRJbnN0YW5jZT4gaW5zdGFuY2UsIGludCBzaWduYWxJbmRleCwgSlNPYmpl
Y3QqIHRoaXNPYmplY3QsIEpTT2JqZWN0KiBmdW5jT2JqZWN0KQotICAgIDogbV9pbnN0YW5jZShp
bnN0YW5jZSkKK1F0Q29ubmVjdGlvbk9iamVjdDo6UXRDb25uZWN0aW9uT2JqZWN0KEpTQ29udGV4
dFJlZiBjb250ZXh0LCBRT2JqZWN0KiBvYmplY3QsIGludCBzaWduYWxJbmRleCwgSlNPYmplY3RS
ZWYgdGhpc09iamVjdCwgSlNPYmplY3RSZWYgZnVuY09iamVjdCkKKyAgICA6IFFPYmplY3Qob2Jq
ZWN0KQogICAgICwgbV9zaWduYWxJbmRleChzaWduYWxJbmRleCkKLSAgICAsIG1fb3JpZ2luYWxP
YmplY3QobV9pbnN0YW5jZS0+Z2V0T2JqZWN0KCkpCi0gICAgLCBtX3RoaXNPYmplY3QoZ2xvYmFs
RGF0YSwgdGhpc09iamVjdCkKLSAgICAsIG1fZnVuY09iamVjdChnbG9iYWxEYXRhLCBmdW5jT2Jq
ZWN0KQorICAgICwgbV9vcmlnaW5hbE9iamVjdChvYmplY3QpCisgICAgLCBtX3RoaXNPYmplY3Qo
dGhpc09iamVjdCkKKyAgICAsIG1fZnVuY09iamVjdChmdW5jT2JqZWN0KQogewotICAgIHNldFBh
cmVudChtX29yaWdpbmFsT2JqZWN0KTsKLSAgICBBU1NFUlQoSlNMb2NrOjpjdXJyZW50VGhyZWFk
SXNIb2xkaW5nTG9jaygpKTsgLy8gc28gb3VyIFByb3RlY3RlZFB0cnMgYXJlIHNhZmUKKyAgICBt
X2dsb2JhbE9iamVjdCA9IDo6dG9KUyhjb250ZXh0KS0+bGV4aWNhbEdsb2JhbE9iamVjdCgpOwog
fQogCiBRdENvbm5lY3Rpb25PYmplY3Q6On5RdENvbm5lY3Rpb25PYmplY3QoKQogewogICAgIC8v
IFJlbW92ZSB1cyBmcm9tIHRoZSBtYXAgb2YgYWN0aXZlIGNvbm5lY3Rpb25zCi0gICAgUXRSdW50
aW1lQ29ubmVjdGlvbk1ldGhvZDo6Y29ubmVjdGlvbnMucmVtb3ZlKG1fb3JpZ2luYWxPYmplY3Qs
IHRoaXMpOworICAgIGNvbm5lY3Rpb25zLnJlbW92ZShtX29yaWdpbmFsT2JqZWN0LmRhdGEoKSwg
dGhpcyk7CiB9CiAKIHN0YXRpYyBjb25zdCB1aW50IHF0X21ldGFfZGF0YV9RdENvbm5lY3Rpb25P
YmplY3RbXSA9IHsKQEAgLTE3OTEsMTMzICsxNzAyLDc4IEBAIHZvaWQgKlF0Q29ubmVjdGlvbk9i
amVjdDo6cXRfbWV0YWNhc3QoY29uc3QgY2hhciAqX2NsbmFtZSkKICAgICByZXR1cm4gUU9iamVj
dDo6cXRfbWV0YWNhc3QoX2NsbmFtZSk7CiB9CiAKLWludCBRdENvbm5lY3Rpb25PYmplY3Q6OnF0
X21ldGFjYWxsKFFNZXRhT2JqZWN0OjpDYWxsIF9jLCBpbnQgX2lkLCB2b2lkICoqX2EpCitpbnQg
UXRDb25uZWN0aW9uT2JqZWN0OjpxdF9tZXRhY2FsbChRTWV0YU9iamVjdDo6Q2FsbCBfYywgaW50
IF9pZCwgdm9pZCAqKmFyZ3MpCiB7Ci0gICAgX2lkID0gUU9iamVjdDo6cXRfbWV0YWNhbGwoX2Ms
IF9pZCwgX2EpOwotICAgIGlmIChfaWQgPCAwKQorICAgIF9pZCA9IFFPYmplY3Q6OnF0X21ldGFj
YWxsKF9jLCBfaWQsIGFyZ3MpOworICAgIGlmIChfaWQgPCAwIHx8IF9jICE9IFFNZXRhT2JqZWN0
OjpJbnZva2VNZXRhTWV0aG9kKQogICAgICAgICByZXR1cm4gX2lkOwotICAgIGlmIChfYyA9PSBR
TWV0YU9iamVjdDo6SW52b2tlTWV0YU1ldGhvZCkgewotICAgICAgICBzd2l0Y2ggKF9pZCkgewot
ICAgICAgICBjYXNlIDA6IGV4ZWN1dGUoX2EpOyBicmVhazsKLSAgICAgICAgfQotICAgICAgICBf
aWQgLT0gMTsKLSAgICB9Ci0gICAgcmV0dXJuIF9pZDsKLX0KLQotdm9pZCBRdENvbm5lY3Rpb25P
YmplY3Q6OmV4ZWN1dGUodm9pZCAqKmFyZ3YpCi17Ci0gICAgUU9iamVjdCogb2JqID0gbV9pbnN0
YW5jZS0+Z2V0T2JqZWN0KCk7Ci0gICAgaWYgKG9iaikgewotICAgICAgICBjb25zdCBRTWV0YU9i
amVjdCogbWV0YSA9IG9iai0+bWV0YU9iamVjdCgpOwotICAgICAgICBjb25zdCBRTWV0YU1ldGhv
ZCBtZXRob2QgPSBtZXRhLT5tZXRob2QobV9zaWduYWxJbmRleCk7Ci0KLSAgICAgICAgUUxpc3Q8
UUJ5dGVBcnJheT4gcGFyYW1ldGVyVHlwZXMgPSBtZXRob2QucGFyYW1ldGVyVHlwZXMoKTsKLQot
ICAgICAgICBpbnQgYXJnYyA9IHBhcmFtZXRlclR5cGVzLmNvdW50KCk7Ci0KLSAgICAgICAgSlNM
b2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKLQotICAgICAgICAvLyAjIyMgU2hvdWxk
IHRoZSBJbnRlcnByZXRlci9FeGVjU3RhdGUgY29tZSBmcm9tIHNvbWV3aGVyZSBlbHNlPwotICAg
ICAgICBSZWZQdHI8Um9vdE9iamVjdD4gcm8gPSBtX2luc3RhbmNlLT5yb290T2JqZWN0KCk7Ci0g
ICAgICAgIGlmIChybykgewotICAgICAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbG9iaiA9
IHJvLT5nbG9iYWxPYmplY3QoKTsKLSAgICAgICAgICAgIGlmIChnbG9iYWxvYmopIHsKLSAgICAg
ICAgICAgICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBnbG9iYWxvYmotPmdsb2JhbEV4ZWMoKTsKLSAg
ICAgICAgICAgICAgICBpZiAoZXhlYykgewotICAgICAgICAgICAgICAgICAgICAvLyBCdWlsZCB0
aGUgYXJndW1lbnQgbGlzdCAodXAgdG8gdGhlIGZvcm1hbCBhcmd1bWVudCBsZW5ndGggb2YgdGhl
IHNsb3QpCi0gICAgICAgICAgICAgICAgICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGw7Ci0gICAg
ICAgICAgICAgICAgICAgIC8vICMjIyBEcm9wQWxsTG9ja3M/Ci0gICAgICAgICAgICAgICAgICAg
IGludCBmdW5jQXJnQyA9IG1fZnVuY09iamVjdC0+Z2V0KGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFt
ZXMoKS5sZW5ndGgpLnRvSW50MzIoZXhlYyk7Ci0gICAgICAgICAgICAgICAgICAgIGludCBhcmdU
b3RhbCA9IHFNYXgoZnVuY0FyZ0MsIGFyZ2MpOwotICAgICAgICAgICAgICAgICAgICBmb3IoaW50
IGk9MDsgaSA8IGFyZ1RvdGFsOyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChp
IDwgYXJnYykgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBhcmdUeXBlID0gUU1l
dGFUeXBlOjp0eXBlKHBhcmFtZXRlclR5cGVzLmF0KGkpKTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBsLmFwcGVuZChjb252ZXJ0UVZhcmlhbnRUb1ZhbHVlKGV4ZWMsIHJvLCBRVmFyaWFu
dChhcmdUeXBlLCBhcmd2W2krMV0pKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGwuYXBwZW5kKGpzVW5kZWZpbmVkKCkpOwot
ICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgICAgIC8vIFN0dWZmIGluIHRoZSBfX3F0X3NlbmRlciBwcm9wZXJ0eSwgaWYgd2Ug
Y2FuCi0gICAgICAgICAgICAgICAgICAgIFNjb3BlQ2hhaW5Ob2RlKiBvbGRzYyA9IDA7Ci0gICAg
ICAgICAgICAgICAgICAgIEpTRnVuY3Rpb24qIGZpbXAgPSAwOwotICAgICAgICAgICAgICAgICAg
ICBpZiAobV9mdW5jT2JqZWN0LT5pbmhlcml0cygmSlNGdW5jdGlvbjo6c19pbmZvKSkgewotICAg
ICAgICAgICAgICAgICAgICAgICAgZmltcCA9IHN0YXRpY19jYXN0PEpTRnVuY3Rpb24qPihtX2Z1
bmNPYmplY3QuZ2V0KCkpOwotCi0gICAgICAgICAgICAgICAgICAgICAgICBKU09iamVjdCogcXRf
c2VuZGVyID0gUXRJbnN0YW5jZTo6Z2V0UXRJbnN0YW5jZShzZW5kZXIoKSwgcm8sIFFTY3JpcHRF
bmdpbmU6OlF0T3duZXJzaGlwKS0+Y3JlYXRlUnVudGltZU9iamVjdChleGVjKTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIEpTT2JqZWN0KiB3cmFwcGVyID0gY29uc3RydWN0RW1wdHlPYmplY3Qo
ZXhlYywgY3JlYXRlRW1wdHlPYmplY3RTdHJ1Y3R1cmUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBqc051
bGwoKSkpOwotICAgICAgICAgICAgICAgICAgICAgICAgUHV0UHJvcGVydHlTbG90IHNsb3Q7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICB3cmFwcGVyLT5wdXQoZXhlYywgSWRlbnRpZmllcihleGVj
LCAiX19xdF9zZW5kZXJfXyIpLCBxdF9zZW5kZXIsIHNsb3QpOwotICAgICAgICAgICAgICAgICAg
ICAgICAgb2xkc2MgPSBmaW1wLT5zY29wZSgpOwotICAgICAgICAgICAgICAgICAgICAgICAgZmlt
cC0+c2V0U2NvcGUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBvbGRzYy0+cHVzaCh3cmFwcGVyKSk7Ci0g
ICAgICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgICAgICBDYWxsRGF0YSBjYWxs
RGF0YTsKLSAgICAgICAgICAgICAgICAgICAgQ2FsbFR5cGUgY2FsbFR5cGUgPSBtX2Z1bmNPYmpl
Y3QtPmdldENhbGxEYXRhKGNhbGxEYXRhKTsKLSAgICAgICAgICAgICAgICAgICAgY2FsbChleGVj
LCBtX2Z1bmNPYmplY3QuZ2V0KCksIGNhbGxUeXBlLCBjYWxsRGF0YSwgbV90aGlzT2JqZWN0Lmdl
dCgpLCBsKTsKKyAgICBpZiAoX2lkID09IDApCisgICAgICAgIGV4ZWN1dGUoYXJncyk7CiAKLSAg
ICAgICAgICAgICAgICAgICAgaWYgKGZpbXApCi0gICAgICAgICAgICAgICAgICAgICAgICBmaW1w
LT5zZXRTY29wZShleGVjLT5nbG9iYWxEYXRhKCksIG9sZHNjKTsKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICAvLyBBIHN0
cmFuZ2UgcGxhY2UgdG8gYmUgLSBhIGRlbGV0ZWQgb2JqZWN0IGVtaXR0ZWQgYSBzaWduYWwgaGVy
ZS4KLSAgICAgICAgcVdhcm5pbmcoKSA8PCAic2VuZGVyIGRlbGV0ZWQsIGNhbm5vdCBkZWxpdmVy
IHNpZ25hbCI7Ci0gICAgfQorICAgIHJldHVybiAtMTsKIH0KIAotYm9vbCBRdENvbm5lY3Rpb25P
YmplY3Q6Om1hdGNoKFFPYmplY3QqIHNlbmRlciwgaW50IHNpZ25hbEluZGV4LCBKU09iamVjdCog
dGhpc09iamVjdCwgSlNPYmplY3QgKmZ1bmNPYmplY3QpCitKU09iamVjdFJlZiBqc1B1c2hTY29w
ZShKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24pCiB7Ci0gICAgaWYg
KG1fb3JpZ2luYWxPYmplY3QgPT0gc2VuZGVyICYmIG1fc2lnbmFsSW5kZXggPT0gc2lnbmFsSW5k
ZXgKLSAgICAgICAgJiYgdGhpc09iamVjdCA9PSAoSlNPYmplY3QqKW1fdGhpc09iamVjdC5nZXQo
KSAmJiBmdW5jT2JqZWN0ID09IChKU09iamVjdCopbV9mdW5jT2JqZWN0LmdldCgpKQotICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICByZXR1cm4gZmFsc2U7CisgICAgSlNGdW5jdGlvbioganNGdW5j
dGlvbiA9IGFzRnVuY3Rpb24oOjp0b0pTKGZ1bmN0aW9uKSk7CisgICAgSlNPYmplY3RSZWYgc2Nv
cGVSZWYgPSBKU09iamVjdE1ha2UoY29udGV4dCwgMCwgMCk7CisgICAganNGdW5jdGlvbi0+c2V0
U2NvcGUoKmpzRnVuY3Rpb24tPnNjb3BlKCktPmdsb2JhbERhdGEsIGpzRnVuY3Rpb24tPnNjb3Bl
KCktPnB1c2goOjp0b0pTKHNjb3BlUmVmKSkpOworICAgIHJldHVybiBzY29wZVJlZjsKIH0KIAot
Ly8gPT09PT09PT09PT09PT09Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBUPiBRdEFycmF5PFQ+OjpR
dEFycmF5KFFMaXN0PFQ+IGxpc3QsIFFNZXRhVHlwZTo6VHlwZSB0eXBlLCBQYXNzUmVmUHRyPFJv
b3RPYmplY3Q+IHJvb3RPYmplY3QpCi0gICAgOiBBcnJheShyb290T2JqZWN0KQotICAgICwgbV9s
aXN0KGxpc3QpCi0gICAgLCBtX3R5cGUodHlwZSkKK3ZvaWQganNQb3BTY29wZShKU09iamVjdFJl
ZiBmdW5jdGlvbikKIHsKLSAgICBtX2xlbmd0aCA9IG1fbGlzdC5jb3VudCgpOworICAgIEpTRnVu
Y3Rpb24qIGpzRnVuY3Rpb24gPSBhc0Z1bmN0aW9uKDo6dG9KUyhmdW5jdGlvbikpOworICAgIGpz
RnVuY3Rpb24tPnNjb3BlKCktPnBvcCgpOwogfQogCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gUXRB
cnJheTxUPjo6flF0QXJyYXkgKCkKK3ZvaWQgUXRDb25uZWN0aW9uT2JqZWN0OjpleGVjdXRlKHZv
aWQgKiphcmd2KQogewotfQorICAgIGlmICghbV9vcmlnaW5hbE9iamVjdCkgeworICAgICAgICBx
V2FybmluZygpIDw8ICJzZW5kZXIgZGVsZXRlZCwgY2Fubm90IGRlbGl2ZXIgc2lnbmFsIjsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KIAotdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IFJvb3RPYmplY3Qq
IFF0QXJyYXk8VD46OnJvb3RPYmplY3QoKSBjb25zdAotewotICAgIHJldHVybiBtX3Jvb3RPYmpl
Y3QgJiYgbV9yb290T2JqZWN0LT5pc1ZhbGlkKCkgPyBtX3Jvb3RPYmplY3QuZ2V0KCkgOiAwOwot
fQorICAgIGNvbnN0IFFNZXRhT2JqZWN0KiBtZXRhID0gbV9vcmlnaW5hbE9iamVjdC5kYXRhKCkt
Pm1ldGFPYmplY3QoKTsKKyAgICBjb25zdCBRTWV0YU1ldGhvZCBtZXRob2QgPSBtZXRhLT5tZXRo
b2QobV9zaWduYWxJbmRleCk7CiAKLXRlbXBsYXRlIDx0eXBlbmFtZSBUPiB2b2lkIFF0QXJyYXk8
VD46OnNldFZhbHVlQXQoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpbmRleCwgSlNWYWx1ZSBh
VmFsdWUpIGNvbnN0Ci17Ci0gICAgLy8gUXRTY3JpcHQgc2V0cyB0aGUgdmFsdWUsIGJ1dCBkb2Vz
bid0IGZvcndhcmQgaXQgdG8gdGhlIG9yaWdpbmFsIHNvdXJjZQotICAgIC8vIChlLmcuIGlmIHlv
dSBkbyAnb2JqZWN0LmludExpc3RbNV0gPSA2JywgdGhlIG9iamVjdCBpcyBub3QgdXBkYXRlZCwg
YnV0IHRoZQotICAgIC8vIGNvcHkgb2YgdGhlIGxpc3QgaXMpLgotICAgIGludCBkaXN0ID0gLTE7
Ci0gICAgUVZhcmlhbnQgdmFsID0gY29udmVydFZhbHVlVG9RVmFyaWFudChleGVjLCBhVmFsdWUs
IG1fdHlwZSwgJmRpc3QpOworICAgIFFMaXN0PFFCeXRlQXJyYXk+IHBhcmFtZXRlclR5cGVzID0g
bWV0aG9kLnBhcmFtZXRlclR5cGVzKCk7CisKKyAgICBpbnQgYXJnYyA9IHBhcmFtZXRlclR5cGVz
LmNvdW50KCk7CisgICAgaWYgKGFyZ2MgPiAxMCkKKyAgICAgICAgYXJnYyA9IDEwOwogCi0gICAg
aWYgKGRpc3QgPj0gMCkgewotICAgICAgICBtX2xpc3RbaW5kZXhdID0gdmFsLnZhbHVlPFQ+KCk7
CisgICAgV1RGOjpGaXhlZEFycmF5PEpTVmFsdWVSZWYsIDEwPiBhcmdzOworCisgICAgSlNDb250
ZXh0UmVmIGNvbnRleHQgPSA6OnRvUmVmKG1fZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCkpOwor
CisgICAgZm9yKGludCBpPTA7IGkgPCBhcmdjOyBpKyspIHsKKyAgICAgICAgaW50IGFyZ1R5cGUg
PSBRTWV0YVR5cGU6OnR5cGUocGFyYW1ldGVyVHlwZXMuYXQoaSkpOworICAgICAgICBhcmdzW2ld
ID0gdG9KUyhjb250ZXh0LCBRVmFyaWFudChhcmdUeXBlLCBhcmd2W2krMV0pLCAwKTsKICAgICB9
CisKKyAgICAvLyBVc2Ugc29tZSBpbnRlcm5hbCBBUElzIHRvIHNldCB0aGUgX19xdF9zZW5kZXJf
XyB2YXJpYWJsZS4KKy8vICAgIEpTVmFsdWVSZWYgc2VuZGVyVmFyaWFibGUgPSBRdENsYXNzOjpp
bnN0YW5jZUZvclFPYmplY3QoY29udGV4dCwgc2VuZGVyKCksIFFTY3JpcHRFbmdpbmU6OlF0T3du
ZXJzaGlwKTsKKworLy8gICAgSlNPYmplY3RSZWYgc2NvcGVSZWYgPSBqc1B1c2hTY29wZShjb250
ZXh0LCBtX2Z1bmNPYmplY3QpOworLy8gICAgSlNTdHJpbmdSZWYgc2VuZGVyU3RyID0gSlNTdHJp
bmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIl9fcXRfc2VuZGVyX18iKTsKKy8vICAgIEpTT2JqZWN0
U2V0UHJvcGVydHkoY29udGV4dCwgc2NvcGVSZWYsIHNlbmRlclN0ciwgc2VuZGVyVmFyaWFibGUs
IDAsIDApOworICAgIEpTT2JqZWN0Q2FsbEFzRnVuY3Rpb24oY29udGV4dCwgbV9mdW5jT2JqZWN0
LCBtX3RoaXNPYmplY3QsIGFyZ2MsIGFyZ3MuZGF0YSgpLCAwKTsKKy8vICAgIEpTU3RyaW5nUmVs
ZWFzZShzZW5kZXJTdHIpOworLy8gICAganNQb3BTY29wZShtX2Z1bmNPYmplY3QpOwogfQogCiAK
LXRlbXBsYXRlIDx0eXBlbmFtZSBUPiBKU1ZhbHVlIFF0QXJyYXk8VD46OnZhbHVlQXQoRXhlY1N0
YXRlICpleGVjLCB1bnNpZ25lZCBpbnQgaW5kZXgpIGNvbnN0Citib29sIFF0Q29ubmVjdGlvbk9i
amVjdDo6bWF0Y2goUU9iamVjdCogc2VuZGVyLCBpbnQgc2lnbmFsSW5kZXgsIEpTT2JqZWN0UmVm
IHRoaXNPYmplY3QsIEpTT2JqZWN0UmVmIGZ1bmNPYmplY3QsIEpTQ29udGV4dFJlZiBjb250ZXh0
LCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCiB7Ci0gICAgaWYgKGluZGV4IDwgbV9sZW5ndGgpIHsK
LSAgICAgICAgVCB2YWwgPSBtX2xpc3QuYXQoaW5kZXgpOwotICAgICAgICByZXR1cm4gY29udmVy
dFFWYXJpYW50VG9WYWx1ZShleGVjLCByb290T2JqZWN0KCksIFFWYXJpYW50Ojpmcm9tVmFsdWUo
dmFsKSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgcmV0dXJuICht
X29yaWdpbmFsT2JqZWN0LmRhdGEoKSA9PSBzZW5kZXIgJiYgbV9zaWduYWxJbmRleCA9PSBzaWdu
YWxJbmRleAorICAgICAgICAmJiAoKCFtX3RoaXNPYmplY3QgJiYgIXRoaXNPYmplY3QpIHx8IEpT
VmFsdWVJc0VxdWFsKGNvbnRleHQsIHRoaXNPYmplY3QsIG1fdGhpc09iamVjdCwgZXhjZXB0aW9u
KSkKKyAgICAgICAgJiYgSlNWYWx1ZUlzRXF1YWwoY29udGV4dCwgZnVuY09iamVjdCwgbV9mdW5j
T2JqZWN0LCBleGNlcHRpb24pKTsKIH0KIAotLy8gPT09PT09PT09PT09PT09CitRTXVsdGlNYXA8
UU9iamVjdCosIFF0Q29ubmVjdGlvbk9iamVjdCo+IFF0Q29ubmVjdGlvbk9iamVjdDo6Y29ubmVj
dGlvbnM7CiAKLX0gfQorfQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9icmlkZ2Uv
cXQvcXRfcnVudGltZS5oIGIvU291cmNlL1dlYkNvcmUvYnJpZGdlL3F0L3F0X3J1bnRpbWUuaApp
bmRleCA0MTM4ZDg4Li43NmM1ZWQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9icmlkZ2Uv
cXQvcXRfcnVudGltZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9xdC9xdF9ydW50aW1l
LmgKQEAgLTMwLDE5NCArMzAsNTIgQEAKICNpbmNsdWRlIDxxbWV0YW9iamVjdC5oPgogI2luY2x1
ZGUgPHFwb2ludGVyLmg+CiAjaW5jbHVkZSA8cXZhcmlhbnQuaD4KKyNpbmNsdWRlIDxRV2Vha1Bv
aW50ZXI+CisKKyNpbmNsdWRlICJKYXZhU2NyaXB0LmgiCiAKIG5hbWVzcGFjZSBKU0MgewogbmFt
ZXNwYWNlIEJpbmRpbmdzIHsKIAotY2xhc3MgUXRJbnN0YW5jZTsKLQotY2xhc3MgUXRGaWVsZCA6
IHB1YmxpYyBGaWVsZCB7Ci1wdWJsaWM6Ci0KLSAgICB0eXBlZGVmIGVudW0gewotICAgICAgICBN
ZXRhUHJvcGVydHksCi0jaWZuZGVmIFFUX05PX1BST1BFUlRJRVMKLSAgICAgICAgRHluYW1pY1By
b3BlcnR5LAotI2VuZGlmCi0gICAgICAgIENoaWxkT2JqZWN0Ci0gICAgfSBRdEZpZWxkVHlwZTsK
LQotICAgIFF0RmllbGQoY29uc3QgUU1ldGFQcm9wZXJ0eSAmcCkKLSAgICAgICAgOiBtX3R5cGUo
TWV0YVByb3BlcnR5KSwgbV9wcm9wZXJ0eShwKQotICAgICAgICB7fQotCi0jaWZuZGVmIFFUX05P
X1BST1BFUlRJRVMKLSAgICBRdEZpZWxkKGNvbnN0IFFCeXRlQXJyYXkgJmIpCi0gICAgICAgIDog
bV90eXBlKER5bmFtaWNQcm9wZXJ0eSksIG1fZHluYW1pY1Byb3BlcnR5KGIpCi0gICAgICAgIHt9
Ci0jZW5kaWYKLQotICAgIFF0RmllbGQoUU9iamVjdCAqY2hpbGQpCi0gICAgICAgIDogbV90eXBl
KENoaWxkT2JqZWN0KSwgbV9jaGlsZE9iamVjdChjaGlsZCkKLSAgICAgICAge30KLQotICAgIHZp
cnR1YWwgSlNWYWx1ZSB2YWx1ZUZyb21JbnN0YW5jZShFeGVjU3RhdGUqLCBjb25zdCBJbnN0YW5j
ZSopIGNvbnN0OwotICAgIHZpcnR1YWwgdm9pZCBzZXRWYWx1ZVRvSW5zdGFuY2UoRXhlY1N0YXRl
KiwgY29uc3QgSW5zdGFuY2UqLCBKU1ZhbHVlKSBjb25zdDsKLSAgICBRQnl0ZUFycmF5IG5hbWUo
KSBjb25zdDsKLSAgICBRdEZpZWxkVHlwZSBmaWVsZFR5cGUoKSBjb25zdCB7cmV0dXJuIG1fdHlw
ZTt9Ci1wcml2YXRlOgotICAgIFF0RmllbGRUeXBlIG1fdHlwZTsKLSAgICBRQnl0ZUFycmF5IG1f
ZHluYW1pY1Byb3BlcnR5OwotICAgIFFNZXRhUHJvcGVydHkgbV9wcm9wZXJ0eTsKLSAgICBRUG9p
bnRlcjxRT2JqZWN0PiBtX2NoaWxkT2JqZWN0OwotfTsKLQotCi1jbGFzcyBRdE1ldGhvZCA6IHB1
YmxpYyBNZXRob2QKLXsKLXB1YmxpYzoKLSAgICBRdE1ldGhvZChjb25zdCBRTWV0YU9iamVjdCAq
bW8sIGludCBpLCBjb25zdCBRQnl0ZUFycmF5ICZpZGVudCwgaW50IG51bVBhcmFtZXRlcnMpCi0g
ICAgICAgIDogbV9tZXRhT2JqZWN0KG1vKSwKLSAgICAgICAgICBtX2luZGV4KGkpLAotICAgICAg
ICAgIG1faWRlbnRpZmllcihpZGVudCksCi0gICAgICAgICAgbV9uUGFyYW1zKG51bVBhcmFtZXRl
cnMpCi0gICAgICAgIHsgfQotCi0gICAgdmlydHVhbCBjb25zdCBjaGFyKiBuYW1lKCkgY29uc3Qg
eyByZXR1cm4gbV9pZGVudGlmaWVyLmNvbnN0RGF0YSgpOyB9Ci0gICAgdmlydHVhbCBpbnQgbnVt
UGFyYW1ldGVycygpIGNvbnN0IHsgcmV0dXJuIG1fblBhcmFtczsgfQotCi1wcml2YXRlOgotICAg
IGZyaWVuZCBjbGFzcyBRdEluc3RhbmNlOwotICAgIGNvbnN0IFFNZXRhT2JqZWN0ICptX21ldGFP
YmplY3Q7Ci0gICAgaW50IG1faW5kZXg7Ci0gICAgUUJ5dGVBcnJheSBtX2lkZW50aWZpZXI7Ci0g
ICAgaW50IG1fblBhcmFtczsKLX07Ci0KK2NsYXNzIFF0Q29ubmVjdGlvbk9iamVjdDsKIAotdGVt
cGxhdGUgPHR5cGVuYW1lIFQ+IGNsYXNzIFF0QXJyYXkgOiBwdWJsaWMgQXJyYXkKK2NsYXNzIFF0
UnVudGltZU1ldGhvZAogewogcHVibGljOgotICAgIFF0QXJyYXkoUUxpc3Q8VD4gbGlzdCwgUU1l
dGFUeXBlOjpUeXBlIHR5cGUsIFBhc3NSZWZQdHI8Um9vdE9iamVjdD4pOwotICAgIHZpcnR1YWwg
flF0QXJyYXkoKTsKKyAgICBlbnVtIE1ldGhvZEZsYWdzIHsKKyAgICAgICAgTWV0aG9kSXNTaWdu
YWwgPSAxLAorICAgICAgICBBbGxvd1ByaXZhdGUgPSAyCisgICAgfTsKIAotICAgIFJvb3RPYmpl
Y3QqIHJvb3RPYmplY3QoKSBjb25zdDsKKyAgICBzdGF0aWMgSlNWYWx1ZVJlZiBjYWxsKEpTQ29u
dGV4dFJlZiBjdHgsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0
LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNW
YWx1ZVJlZiogZXhjZXB0aW9uKTsKKyAgICBzdGF0aWMgSlNWYWx1ZVJlZiBjb25uZWN0KEpTQ29u
dGV4dFJlZiBjdHgsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0
LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNW
YWx1ZVJlZiogZXhjZXB0aW9uKTsKKyAgICBzdGF0aWMgSlNWYWx1ZVJlZiBkaXNjb25uZWN0KEpT
Q29udGV4dFJlZiBjdHgsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2Jq
ZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwg
SlNWYWx1ZVJlZiogZXhjZXB0aW9uKTsKIAotICAgIHZpcnR1YWwgdm9pZCBzZXRWYWx1ZUF0KEV4
ZWNTdGF0ZSosIHVuc2lnbmVkIGluZGV4LCBKU1ZhbHVlKSBjb25zdDsKLSAgICB2aXJ0dWFsIEpT
VmFsdWUgdmFsdWVBdChFeGVjU3RhdGUqLCB1bnNpZ25lZCBpbmRleCkgY29uc3Q7Ci0gICAgdmly
dHVhbCB1bnNpZ25lZCBpbnQgZ2V0TGVuZ3RoKCkgY29uc3Qge3JldHVybiBtX2xlbmd0aDt9Cisg
ICAgSlNPYmplY3RSZWYgY3JlYXRlT2JqZWN0KEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU1ZhbHVl
UmVmKiBleGNlcHRpb24pOwogCi1wcml2YXRlOgotICAgIG11dGFibGUgUUxpc3Q8VD4gbV9saXN0
OyAvLyBzZXRWYWx1ZUF0IGlzIGNvbnN0IQotICAgIHVuc2lnbmVkIGludCBtX2xlbmd0aDsKLSAg
ICBRTWV0YVR5cGU6OlR5cGUgbV90eXBlOwotfTsKLQotLy8gQmFzZWQgb24gUnVudGltZU1ldGhv
ZAotCi0vLyBFeHRyYSBkYXRhIGNsYXNzZXMgKHRvIGF2b2lkIHRoZSBDRUxMX1NJWkUgbGltaXQg
b24gSlMgb2JqZWN0cykKLWNsYXNzIFF0UnVudGltZU1ldGhvZDsKLWNsYXNzIFF0UnVudGltZU1l
dGhvZERhdGEgOiBwdWJsaWMgV2Vha0hhbmRsZU93bmVyIHsKLSAgICBwdWJsaWM6Ci0gICAgICAg
IHZpcnR1YWwgflF0UnVudGltZU1ldGhvZERhdGEoKTsKLSAgICAgICAgUmVmUHRyPFF0SW5zdGFu
Y2U+IG1faW5zdGFuY2U7Ci0gICAgICAgIFdlYWs8UXRSdW50aW1lTWV0aG9kPiBtX2ZpbmFsaXpl
cjsKLQotICAgIHByaXZhdGU6Ci0gICAgICAgIHZvaWQgZmluYWxpemUoSGFuZGxlPFVua25vd24+
LCB2b2lkKik7Ci19OwotCi1jbGFzcyBRdFJ1bnRpbWVDb25uZWN0aW9uTWV0aG9kOwotY2xhc3Mg
UXRSdW50aW1lTWV0YU1ldGhvZERhdGEgOiBwdWJsaWMgUXRSdW50aW1lTWV0aG9kRGF0YSB7Ci0g
ICAgcHVibGljOgotICAgICAgICB+UXRSdW50aW1lTWV0YU1ldGhvZERhdGEoKTsKLSAgICAgICAg
UUJ5dGVBcnJheSBtX3NpZ25hdHVyZTsKLSAgICAgICAgYm9vbCBtX2FsbG93UHJpdmF0ZTsKLSAg
ICAgICAgaW50IG1faW5kZXg7Ci0gICAgICAgIFdyaXRlQmFycmllcjxRdFJ1bnRpbWVDb25uZWN0
aW9uTWV0aG9kPiBtX2Nvbm5lY3Q7Ci0gICAgICAgIFdyaXRlQmFycmllcjxRdFJ1bnRpbWVDb25u
ZWN0aW9uTWV0aG9kPiBtX2Rpc2Nvbm5lY3Q7Ci19OworICAgIHN0YXRpYyBjb25zdCBKU1N0YXRp
Y0Z1bmN0aW9uIGNvbm5lY3RGdW5jdGlvbjsKKyAgICBzdGF0aWMgY29uc3QgSlNTdGF0aWNGdW5j
dGlvbiBkaXNjb25uZWN0RnVuY3Rpb247CiAKLWNsYXNzIFF0UnVudGltZUNvbm5lY3Rpb25NZXRo
b2REYXRhIDogcHVibGljIFF0UnVudGltZU1ldGhvZERhdGEgewotICAgIHB1YmxpYzoKLSAgICAg
ICAgflF0UnVudGltZUNvbm5lY3Rpb25NZXRob2REYXRhKCk7Ci0gICAgICAgIFFCeXRlQXJyYXkg
bV9zaWduYXR1cmU7Ci0gICAgICAgIGludCBtX2luZGV4OwotICAgICAgICBib29sIG1faXNDb25u
ZWN0OwotfTsKLQotLy8gQ29tbW9uIGJhc2UgY2xhc3MgKGRvZXNuJ3QgcmVhbGx5IGRvIGFueXRo
aW5nIGludGVyZXN0aW5nKQotY2xhc3MgUXRSdW50aW1lTWV0aG9kIDogcHVibGljIEludGVybmFs
RnVuY3Rpb24gewotcHVibGljOgorICAgIFF0UnVudGltZU1ldGhvZChKU0NvbnRleHRSZWYgY3R4
LCBKU1ZhbHVlUmVmKiBleGNlcHRpb24sIFFPYmplY3QqIG9iamVjdCwgY29uc3QgUUJ5dGVBcnJh
eSYgaWRlbnRpZmllciwgaW50IHNpZ25hbEluZGV4LCBpbnQgZmxhZ3MpOwogICAgIHZpcnR1YWwg
flF0UnVudGltZU1ldGhvZCgpOwogCi0gICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBzX2luZm87
Ci0KLSAgICBzdGF0aWMgRnVuY3Rpb25Qcm90b3R5cGUqIGNyZWF0ZVByb3RvdHlwZShFeGVjU3Rh
dGUqLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQotICAgIHsKLSAgICAgICAgcmV0dXJu
IGdsb2JhbE9iamVjdC0+ZnVuY3Rpb25Qcm90b3R5cGUoKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMg
U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU1Zh
bHVlIHByb3RvdHlwZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZShn
bG9iYWxEYXRhLCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsICBTdHJ1Y3R1cmVGbGFn
cyksIEFub255bW91c1Nsb3RDb3VudCwgJnNfaW5mbyk7Ci0gICAgfQotCi1wcm90ZWN0ZWQ6Ci0g
ICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gT3ZlcnJpZGVzR2V0T3du
UHJvcGVydHlTbG90IHwgT3ZlcnJpZGVzR2V0UHJvcGVydHlOYW1lcyB8IEludGVybmFsRnVuY3Rp
b246OlN0cnVjdHVyZUZsYWdzIHwgT3ZlcnJpZGVzVmlzaXRDaGlsZHJlbjsKLQotICAgIFF0UnVu
dGltZU1ldGhvZERhdGEgKmRfZnVuYygpIGNvbnN0IHtyZXR1cm4gZF9wdHI7fQotICAgIFF0UnVu
dGltZU1ldGhvZChRdFJ1bnRpbWVNZXRob2REYXRhICpkZCwgRXhlY1N0YXRlICpleGVjLCBjb25z
dCBJZGVudGlmaWVyICZuLCBQYXNzUmVmUHRyPFF0SW5zdGFuY2U+IGluc3QpOwotICAgIFF0UnVu
dGltZU1ldGhvZERhdGEgKmRfcHRyOwotfTsKLQotY2xhc3MgUXRSdW50aW1lTWV0YU1ldGhvZCA6
IHB1YmxpYyBRdFJ1bnRpbWVNZXRob2QKLXsKLXB1YmxpYzoKLSAgICBRdFJ1bnRpbWVNZXRhTWV0
aG9kKEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciAmbiwgUGFzc1JlZlB0cjxRdElu
c3RhbmNlPiBpbnN0LCBpbnQgaW5kZXgsIGNvbnN0IFFCeXRlQXJyYXkmIHNpZ25hdHVyZSwgYm9v
bCBhbGxvd1ByaXZhdGUpOwotCi0gICAgdmlydHVhbCBib29sIGdldE93blByb3BlcnR5U2xvdChF
eGVjU3RhdGUgKiwgY29uc3QgSWRlbnRpZmllciYsIFByb3BlcnR5U2xvdCYpOwotICAgIHZpcnR1
YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRp
ZmllciYsIFByb3BlcnR5RGVzY3JpcHRvciYpOwotICAgIHZpcnR1YWwgdm9pZCBnZXRPd25Qcm9w
ZXJ0eU5hbWVzKEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2Rl
IG1vZGUgPSBFeGNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzKTsKLQotICAgIHZpcnR1YWwgdm9pZCB2
aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJik7Ci0KLXByb3RlY3RlZDoKLSAgICBRdFJ1bnRpbWVN
ZXRhTWV0aG9kRGF0YSogZF9mdW5jKCkgY29uc3Qge3JldHVybiByZWludGVycHJldF9jYXN0PFF0
UnVudGltZU1ldGFNZXRob2REYXRhKj4oZF9wdHIpO30KKyAgICBjb25zdCBRQnl0ZUFycmF5JiBu
YW1lKCkgeyByZXR1cm4gbV9pZGVudGlmaWVyOyB9CiAKIHByaXZhdGU6Ci0gICAgdmlydHVhbCBD
YWxsVHlwZSBnZXRDYWxsRGF0YShDYWxsRGF0YSYpOwotICAgIHN0YXRpYyBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGNhbGwoRXhlY1N0YXRlKiBleGVjKTsKLSAgICBzdGF0aWMgSlNWYWx1
ZSBsZW5ndGhHZXR0ZXIoRXhlY1N0YXRlKiwgSlNWYWx1ZSwgY29uc3QgSWRlbnRpZmllciYpOwot
ICAgIHN0YXRpYyBKU1ZhbHVlIGNvbm5lY3RHZXR0ZXIoRXhlY1N0YXRlKiwgSlNWYWx1ZSwgY29u
c3QgSWRlbnRpZmllciYpOwotICAgIHN0YXRpYyBKU1ZhbHVlIGRpc2Nvbm5lY3RHZXR0ZXIoRXhl
Y1N0YXRlKiwgSlNWYWx1ZSwgY29uc3QgSWRlbnRpZmllciYpOwotfTsKLQotY2xhc3MgUXRDb25u
ZWN0aW9uT2JqZWN0OwotY2xhc3MgUXRSdW50aW1lQ29ubmVjdGlvbk1ldGhvZCA6IHB1YmxpYyBR
dFJ1bnRpbWVNZXRob2QKLXsKLXB1YmxpYzoKLSAgICBRdFJ1bnRpbWVDb25uZWN0aW9uTWV0aG9k
KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciAmbiwgYm9vbCBpc0Nvbm5lY3QsIFBh
c3NSZWZQdHI8UXRJbnN0YW5jZT4gaW5zdCwgaW50IGluZGV4LCBjb25zdCBRQnl0ZUFycmF5JiBz
aWduYXR1cmUgKTsKLQotICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0
YXRlICosIGNvbnN0IElkZW50aWZpZXImLCBQcm9wZXJ0eVNsb3QmKTsKLSAgICB2aXJ0dWFsIGJv
b2wgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXIm
LCBQcm9wZXJ0eURlc2NyaXB0b3ImKTsKLSAgICB2aXJ0dWFsIHZvaWQgZ2V0T3duUHJvcGVydHlO
YW1lcyhFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSBtb2Rl
ID0gRXhjbHVkZURvbnRFbnVtUHJvcGVydGllcyk7Ci0KLXByb3RlY3RlZDoKLSAgICBRdFJ1bnRp
bWVDb25uZWN0aW9uTWV0aG9kRGF0YSogZF9mdW5jKCkgY29uc3Qge3JldHVybiByZWludGVycHJl
dF9jYXN0PFF0UnVudGltZUNvbm5lY3Rpb25NZXRob2REYXRhKj4oZF9wdHIpO30KLQotcHJpdmF0
ZToKLSAgICB2aXJ0dWFsIENhbGxUeXBlIGdldENhbGxEYXRhKENhbGxEYXRhJik7Ci0gICAgc3Rh
dGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2FsbChFeGVjU3RhdGUqIGV4ZWMpOwot
ICAgIHN0YXRpYyBKU1ZhbHVlIGxlbmd0aEdldHRlcihFeGVjU3RhdGUqLCBKU1ZhbHVlLCBjb25z
dCBJZGVudGlmaWVyJik7Ci0gICAgc3RhdGljIFFNdWx0aU1hcDxRT2JqZWN0ICosIFF0Q29ubmVj
dGlvbk9iamVjdCAqPiBjb25uZWN0aW9uczsKKyAgICBzdGF0aWMgSlNWYWx1ZVJlZiBjb25uZWN0
T3JEaXNjb25uZWN0KEpTQ29udGV4dFJlZiBjdHgsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09i
amVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJl
ZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uLCBib29sIGNvbm5lY3QpOworICAg
IFFXZWFrUG9pbnRlcjxRT2JqZWN0PiBtX29iamVjdDsKKyAgICBRQnl0ZUFycmF5IG1faWRlbnRp
ZmllcjsKKyAgICBKU09iamVjdFJlZiBtX2Z1bmN0aW9uOworICAgIGludCBtX2luZGV4OworICAg
IGludCBtX2ZsYWdzOwogICAgIGZyaWVuZCBjbGFzcyBRdENvbm5lY3Rpb25PYmplY3Q7CisgICAg
SlNDbGFzc1JlZiBtX2NsYXNzUmVmOwogfTsKIAogY2xhc3MgUXRDb25uZWN0aW9uT2JqZWN0OiBw
dWJsaWMgUU9iamVjdAogewogcHVibGljOgotICAgIFF0Q29ubmVjdGlvbk9iamVjdChKU0dsb2Jh
bERhdGEmLCBQYXNzUmVmUHRyPFF0SW5zdGFuY2U+IGluc3RhbmNlLCBpbnQgc2lnbmFsSW5kZXgs
IEpTT2JqZWN0KiB0aGlzT2JqZWN0LCBKU09iamVjdCogZnVuY09iamVjdCk7CisgICAgUXRDb25u
ZWN0aW9uT2JqZWN0KEpTQ29udGV4dFJlZiwgUU9iamVjdCogb2JqZWN0LCBpbnQgc2lnbmFsSW5k
ZXgsIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIEpTT2JqZWN0UmVmIGZ1bmNPYmplY3QpOwogICAg
IH5RdENvbm5lY3Rpb25PYmplY3QoKTsKIAogICAgIHN0YXRpYyBjb25zdCBRTWV0YU9iamVjdCBz
dGF0aWNNZXRhT2JqZWN0OwpAQCAtMjI1LDIxICs4MywzMyBAQCBwdWJsaWM6CiAgICAgdmlydHVh
bCB2b2lkICpxdF9tZXRhY2FzdChjb25zdCBjaGFyICopOwogICAgIHZpcnR1YWwgaW50IHF0X21l
dGFjYWxsKFFNZXRhT2JqZWN0OjpDYWxsLCBpbnQsIHZvaWQgKiphcmd2KTsKIAotICAgIGJvb2wg
bWF0Y2goUU9iamVjdCAqc2VuZGVyLCBpbnQgc2lnbmFsSW5kZXgsIEpTT2JqZWN0KiB0aGlzT2Jq
ZWN0LCBKU09iamVjdCAqZnVuY09iamVjdCk7CisgICAgYm9vbCBtYXRjaChRT2JqZWN0ICpzZW5k
ZXIsIGludCBzaWduYWxJbmRleCwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgSlNPYmplY3RSZWYg
ZnVuY09iamVjdCwgSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbik7
CiAKICAgICAvLyBhY3R1YWwgc2xvdDoKICAgICB2b2lkIGV4ZWN1dGUodm9pZCAqKmFyZ3YpOwog
CisKIHByaXZhdGU6Ci0gICAgUmVmUHRyPFF0SW5zdGFuY2U+IG1faW5zdGFuY2U7CisgICAgc3Rh
dGljIEpTVmFsdWVSZWYgY2FsbFdyYXBwZXJGdW5jdGlvbihKU0NvbnRleHRSZWYgY3R4LCBKU09i
amVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50
Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlv
bik7CisKKyAgICBKU09iamVjdFJlZiBtX3dyYXBwZXJGdW5jdGlvbjsKICAgICBpbnQgbV9zaWdu
YWxJbmRleDsKLSAgICBRT2JqZWN0KiBtX29yaWdpbmFsT2JqZWN0OyAvLyBvbmx5IHVzZWQgYXMg
YSBrZXksIG5vdCBkZXJlZmVyZW5jZWQKLSAgICBTdHJvbmc8SlNPYmplY3Q+IG1fdGhpc09iamVj
dDsKLSAgICBTdHJvbmc8SlNPYmplY3Q+IG1fZnVuY09iamVjdDsKKyAgICBRV2Vha1BvaW50ZXI8
UU9iamVjdD4gbV9vcmlnaW5hbE9iamVjdDsKKyAgICBKU09iamVjdFJlZiBtX29iamVjdDsKKyAg
ICBKU09iamVjdFJlZiBtX3RoaXNPYmplY3Q7CisgICAgSlNPYmplY3RSZWYgbV9mdW5jT2JqZWN0
OworCisgICAgSlNHbG9iYWxPYmplY3QqIG1fZ2xvYmFsT2JqZWN0OworCisgICAgc3RhdGljIFFN
dWx0aU1hcDxRT2JqZWN0KiwgUXRDb25uZWN0aW9uT2JqZWN0Kj4gY29ubmVjdGlvbnM7CisKKyAg
ICBmcmllbmQgY2xhc3MgUXRSdW50aW1lTWV0aG9kOwogfTsKIAotUVZhcmlhbnQgY29udmVydFZh
bHVlVG9RVmFyaWFudChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUsIFFNZXRhVHlwZTo6
VHlwZSBoaW50LCBpbnQgKmRpc3RhbmNlKTsKLUpTVmFsdWUgY29udmVydFFWYXJpYW50VG9WYWx1
ZShFeGVjU3RhdGUqIGV4ZWMsIFBhc3NSZWZQdHI8Um9vdE9iamVjdD4gcm9vdCwgY29uc3QgUVZh
cmlhbnQmIHZhcmlhbnQpOworUVZhcmlhbnQgdG9RdChKU0NvbnRleHRSZWYsIEpTVmFsdWVSZWYs
IFFNZXRhVHlwZTo6VHlwZSBoaW50LCBpbnQgKmRpc3RhbmNlLCBKU1ZhbHVlUmVmKiBleGNlcHRp
b24pOworSlNWYWx1ZVJlZiB0b0pTKEpTQ29udGV4dFJlZiwgY29uc3QgUVZhcmlhbnQmIHZhcmlh
bnQsIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbik7CisKK3ZvaWQgc2V0RXhjZXB0aW9uKEpTQ29udGV4
dFJlZiBjb250ZXh0LCBKU1ZhbHVlUmVmKiBleGNlcHRpb24sIGNvbnN0IFFTdHJpbmcmIHRleHQp
OwogCiB9IC8vIG5hbWVzcGFjZSBCaW5kaW5ncwogfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxQbHVnSW5FbGVtZW50LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTFBsdWdJbkVsZW1lbnQuY3BwCmluZGV4IGNmZjFlMzcuLjkwZjYzMzkg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFBsdWdJbkVsZW1lbnQuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFBsdWdJbkVsZW1lbnQuY3BwCkBAIC04MSw2ICs4
MSwyMyBAQCB2b2lkIEhUTUxQbHVnSW5FbGVtZW50OjpkZXRhY2goKQogICAgIEhUTUxGcmFtZU93
bmVyRWxlbWVudDo6ZGV0YWNoKCk7CiB9CiAKK0pTQzo6SlNPYmplY3QqIEhUTUxQbHVnSW5FbGVt
ZW50OjpnZXRTY3JpcHRPYmplY3QoKSBjb25zdAoreworICAgIEZyYW1lKiBmcmFtZSA9IGRvY3Vt
ZW50KCktPmZyYW1lKCk7CisgICAgaWYgKCFmcmFtZSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAg
ICAvLyBJZiB0aGUgaG9zdCBkeW5hbWljYWxseSB0dXJucyBvZmYgSmF2YVNjcmlwdCAob3IgSmF2
YSkgd2Ugd2lsbCBzdGlsbCByZXR1cm4KKyAgICAvLyB0aGUgY2FjaGVkIGFsbG9jYXRlZCBCaW5k
aW5nczo6SW5zdGFuY2UuICBOb3Qgc3VwcG9ydGluZyB0aGlzIGVkZ2UtY2FzZSBpcyBPSy4KKyAg
ICBpZiAobV9zY3JpcHRPYmplY3QpCisgICAgICAgIHJldHVybiBtX3NjcmlwdE9iamVjdDsKKwor
ICAgIGlmIChXaWRnZXQqIHdpZGdldCA9IHBsdWdpbldpZGdldCgpKQorICAgICAgICBtX3Njcmlw
dE9iamVjdCA9IGZyYW1lLT5zY3JpcHQoKS0+Y3JlYXRlU2NyaXB0T2JqZWN0Rm9yV2lkZ2V0KHdp
ZGdldCk7CisKKyAgICByZXR1cm4gbV9zY3JpcHRPYmplY3Q7Cit9CisKIFBhc3NTY3JpcHRJbnN0
YW5jZSBIVE1MUGx1Z0luRWxlbWVudDo6Z2V0SW5zdGFuY2UoKSBjb25zdAogewogICAgIEZyYW1l
KiBmcmFtZSA9IGRvY3VtZW50KCktPmZyYW1lKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxQbHVnSW5FbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxQbHVn
SW5FbGVtZW50LmgKaW5kZXggNmY0YTZlYS4uOTVkZWM4NCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MUGx1Z0luRWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTFBsdWdJbkVsZW1lbnQuaApAQCAtMzAsNiArMzAsMTAgQEAKIHN0cnVjdCBOUE9iamVjdDsK
ICNlbmRpZgogCituYW1lc3BhY2UgSlNDIHsKK2NsYXNzIEpTT2JqZWN0OworfQorCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKIGNsYXNzIFJlbmRlckVtYmVkZGVkT2JqZWN0OwpAQCAtNDEsNiArNDUs
NyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB+SFRNTFBsdWdJbkVsZW1lbnQoKTsKIAogICAgIFBh
c3NTY3JpcHRJbnN0YW5jZSBnZXRJbnN0YW5jZSgpIGNvbnN0OworICAgIEpTQzo6SlNPYmplY3Qq
IGdldFNjcmlwdE9iamVjdCgpIGNvbnN0OwogCiAgICAgV2lkZ2V0KiBwbHVnaW5XaWRnZXQoKSBj
b25zdDsKIApAQCAtNzMsNiArNzgsNyBAQCBwcm90ZWN0ZWQ6CiAKIHByaXZhdGU6CiAgICAgbXV0
YWJsZSBTY3JpcHRJbnN0YW5jZSBtX2luc3RhbmNlOworICAgIG11dGFibGUgSlNDOjpKU09iamVj
dCogbV9zY3JpcHRPYmplY3Q7CiAjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCiAgICAg
TlBPYmplY3QqIG1fTlBPYmplY3Q7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
cXQvQXBpL3F3ZWJlbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJlbGVtZW50
LmNwcAppbmRleCA2YjQ0MTE0Li4xOTlhYjE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3F0
L0FwaS9xd2ViZWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9xdC9BcGkvcXdlYmVsZW1l
bnQuY3BwCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAj
aW5jbHVkZSAiSFRNTEVsZW1lbnQuaCIKICNpZiBVU0UoSlNDKQorI2luY2x1ZGUgIkFQSUNhc3Qu
aCIKICNpbmNsdWRlICJKU0dsb2JhbE9iamVjdC5oIgogI2luY2x1ZGUgIkpTSFRNTEVsZW1lbnQu
aCIKICNpbmNsdWRlICJKU09iamVjdC5oIgpAQCAtNzk4LDcgKzc5OSw5IEBAIFFWYXJpYW50IFFX
ZWJFbGVtZW50OjpldmFsdWF0ZUphdmFTY3JpcHQoY29uc3QgUVN0cmluZyYgc2NyaXB0U291cmNl
KQogICAgICAgICByZXR1cm4gUVZhcmlhbnQoKTsKIAogICAgIGludCBkaXN0YW5jZSA9IDA7Ci0g
ICAgcmV0dXJuIEpTQzo6QmluZGluZ3M6OmNvbnZlcnRWYWx1ZVRvUVZhcmlhbnQoc3RhdGUsIHJl
c3VsdCwgUU1ldGFUeXBlOjpWb2lkLCAmZGlzdGFuY2UpOworICAgIEpTQ29udGV4dFJlZiBjb250
ZXh0ID0gdG9SZWYoc3RhdGUpOworICAgIEpTVmFsdWVSZWYgdmFsdWVSZWYgPSB0b1JlZihzdGF0
ZSwgcmVzdWx0KTsKKyAgICByZXR1cm4gSlNDOjpCaW5kaW5nczo6dG9RdChjb250ZXh0LCB2YWx1
ZVJlZiwgUU1ldGFUeXBlOjpWb2lkLCAmZGlzdGFuY2UsIDApOwogI2VsaWYgVVNFKFY4KQogICAg
IG5vdEltcGxlbWVudGVkKCk7CiAgICAgcmV0dXJuIFFWYXJpYW50KCk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L3F0L0FwaS9xd2ViZnJhbWUuY3BwIGIvU291cmNlL1dlYktpdC9xdC9BcGkv
cXdlYmZyYW1lLmNwcAppbmRleCBiYzg3ZGQxLi42OTQxNzNlIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L3F0L0FwaS9xd2ViZnJhbWUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvcXQvQXBpL3F3
ZWJmcmFtZS5jcHAKQEAgLTIyLDYgKzIyLDcgQEAKICNpbmNsdWRlICJxd2ViZnJhbWUuaCIKIAog
I2lmIFVTRShKU0MpCisjaW5jbHVkZSAiQVBJQ2FzdC5oIgogI2luY2x1ZGUgIkJyaWRnZUpTQy5o
IgogI2luY2x1ZGUgIkNhbGxGcmFtZS5oIgogI2VsaWYgVVNFKFY4KQpAQCAtODEsNyArODIsNyBA
QAogI2luY2x1ZGUgImh0bWxlZGl0aW5nLmgiCiAjaW5jbHVkZSAibWFya3VwLmgiCiAjaWYgVVNF
KEpTQykKLSNpbmNsdWRlICJxdF9pbnN0YW5jZS5oIgorI2luY2x1ZGUgInF0X2NsYXNzLmgiCiAj
aW5jbHVkZSAicXRfcnVudGltZS5oIgogI2VuZGlmCiAjaW5jbHVkZSAicXdlYmVsZW1lbnQuaCIK
QEAgLTYxNywzMSArNjE4LDI1IEBAIHZvaWQgUVdlYkZyYW1lOjphZGRUb0phdmFTY3JpcHRXaW5k
b3dPYmplY3QoY29uc3QgUVN0cmluZyAmbmFtZSwgUU9iamVjdCAqb2JqZWN0CiB7CiAgICAgaWYg
KCFwYWdlKCktPnNldHRpbmdzKCktPnRlc3RBdHRyaWJ1dGUoUVdlYlNldHRpbmdzOjpKYXZhc2Ny
aXB0RW5hYmxlZCkpCiAgICAgICAgIHJldHVybjsKKwogI2lmIFVTRShKU0MpCiAgICAgSlNDOjpK
U0xvY2sgbG9jayhKU0M6OlNpbGVuY2VBc3NlcnRpb25zT25seSk7CiAgICAgSlNET01XaW5kb3cq
IHdpbmRvdyA9IHRvSlNET01XaW5kb3coZC0+ZnJhbWUsIG1haW5UaHJlYWROb3JtYWxXb3JsZCgp
KTsKLSAgICBKU0M6OkJpbmRpbmdzOjpSb290T2JqZWN0KiByb290OwotICAgIGlmIChvd25lcnNo
aXAgPT0gUVNjcmlwdEVuZ2luZTo6UXRPd25lcnNoaXApCi0gICAgICAgIHJvb3QgPSBkLT5mcmFt
ZS0+c2NyaXB0KCktPmNhY2hlYWJsZUJpbmRpbmdSb290T2JqZWN0KCk7Ci0gICAgZWxzZQotICAg
ICAgICByb290ID0gZC0+ZnJhbWUtPnNjcmlwdCgpLT5iaW5kaW5nUm9vdE9iamVjdCgpOwogCiAg
ICAgaWYgKCF3aW5kb3cpIHsKICAgICAgICAgcURlYnVnKCkgPDwgIldhcm5pbmc6IGNvdWxkbid0
IGdldCB3aW5kb3cgb2JqZWN0IjsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBpZiAoIXJv
b3QpIHsKLSAgICAgICAgcURlYnVnKCkgPDwgIldhcm5pbmc6IGNvdWxkbid0IGdldCByb290IG9i
amVjdCI7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CiAKICAgICBKU0M6OkV4ZWNTdGF0ZSogZXhl
YyA9IHdpbmRvdy0+Z2xvYmFsRXhlYygpOworICAgIEpTQ29udGV4dFJlZiBjb250ZXh0ID0gdG9S
ZWYoZXhlYyk7CiAKLSAgICBKU0M6OkpTT2JqZWN0KiBydW50aW1lT2JqZWN0ID0KLSAgICAgICAg
ICAgIEpTQzo6QmluZGluZ3M6OlF0SW5zdGFuY2U6OmdldFF0SW5zdGFuY2Uob2JqZWN0LCByb290
LCBvd25lcnNoaXApLT5jcmVhdGVSdW50aW1lT2JqZWN0KGV4ZWMpOworICAgIEpTT2JqZWN0UmVm
IGluc3RhbmNlID0gSlNDOjpCaW5kaW5nczo6UXRDbGFzczo6aW5zdGFuY2VGb3JRT2JqZWN0KGNv
bnRleHQsIG9iamVjdCwgb3duZXJzaGlwKTsKKyAgICBKU09iamVjdFJlZiB3aW5kb3dSZWYgPSB0
b1JlZih3aW5kb3cpOworICAgIEpTU3RyaW5nUmVmIHByb3BlcnR5TmFtZSA9IEpTU3RyaW5nQ3Jl
YXRlV2l0aENoYXJhY3RlcnMocmVpbnRlcnByZXRfY2FzdDxjb25zdCBKU0NoYXIqPihuYW1lLmNv
bnN0RGF0YSgpKSwgbmFtZS5zaXplKCkpOworICAgIEpTT2JqZWN0U2V0UHJvcGVydHkoY29udGV4
dCwgd2luZG93UmVmLCBwcm9wZXJ0eU5hbWUsIGluc3RhbmNlLCAwLCAwKTsKKyAgICBKU1N0cmlu
Z1JlbGVhc2UocHJvcGVydHlOYW1lKTsKIAotICAgIEpTQzo6UHV0UHJvcGVydHlTbG90IHNsb3Q7
Ci0gICAgd2luZG93LT5wdXQoZXhlYywgSlNDOjpJZGVudGlmaWVyKGV4ZWMsIHJlaW50ZXJwcmV0
X2Nhc3RfcHRyPGNvbnN0IFVDaGFyKj4obmFtZS5jb25zdERhdGEoKSksIG5hbWUubGVuZ3RoKCkp
LCBydW50aW1lT2JqZWN0LCBzbG90KTsKICNlbGlmIFVTRShWOCkKICAgICBRU2NyaXB0RW5naW5l
KiBlbmdpbmUgPSBkLT5mcmFtZS0+c2NyaXB0KCktPnF0U2NyaXB0RW5naW5lKCk7CiAgICAgaWYg
KCFlbmdpbmUpCkBAIC0xNTM5LDggKzE1MzQsMTAgQEAgUVZhcmlhbnQgUVdlYkZyYW1lOjpldmFs
dWF0ZUphdmFTY3JpcHQoY29uc3QgUVN0cmluZyYgc2NyaXB0U291cmNlKQogI2lmIFVTRShKU0Mp
CiAgICAgICAgIGludCBkaXN0YW5jZSA9IDA7CiAgICAgICAgIEpTQzo6SlNWYWx1ZSB2ID0gZC0+
ZnJhbWUtPnNjcmlwdCgpLT5leGVjdXRlU2NyaXB0KFNjcmlwdFNvdXJjZUNvZGUoc2NyaXB0U291
cmNlKSkuanNWYWx1ZSgpOwotCi0gICAgICAgIHJjID0gSlNDOjpCaW5kaW5nczo6Y29udmVydFZh
bHVlVG9RVmFyaWFudChwcm94eS0+Z2xvYmFsT2JqZWN0KG1haW5UaHJlYWROb3JtYWxXb3JsZCgp
KS0+Z2xvYmFsRXhlYygpLCB2LCBRTWV0YVR5cGU6OlZvaWQsICZkaXN0YW5jZSk7CisgICAgICAg
IEpTQzo6RXhlY1N0YXRlKiBleGVjID0gcHJveHktPmdsb2JhbE9iamVjdChtYWluVGhyZWFkTm9y
bWFsV29ybGQoKSktPmdsb2JhbEV4ZWMoKTsKKyAgICAgICAgSlNWYWx1ZVJlZiByZWYgPSA6OnRv
UmVmKGV4ZWMsIHYpOworICAgICAgICBKU0NvbnRleHRSZWYgY29udGV4dCA9IDo6dG9SZWYoZXhl
Yyk7CisgICAgICAgIHJjID0gSlNDOjpCaW5kaW5nczo6dG9RdChjb250ZXh0LCByZWYsIFFNZXRh
VHlwZTo6Vm9pZCwgJmRpc3RhbmNlLCAwKTsKICNlbGlmIFVTRShWOCkKICAgICAgICAgUVNjcmlw
dEVuZ2luZSogZW5naW5lID0gZC0+ZnJhbWUtPnNjcmlwdCgpLT5xdFNjcmlwdEVuZ2luZSgpOwog
ICAgICAgICBpZiAoIWVuZ2luZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvcXQvdGVzdHMv
cXdlYmZyYW1lL3RzdF9xd2ViZnJhbWUuY3BwIGIvU291cmNlL1dlYktpdC9xdC90ZXN0cy9xd2Vi
ZnJhbWUvdHN0X3F3ZWJmcmFtZS5jcHAKaW5kZXggY2FkYzlkNi4uYmM1ZTU4NCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9xdC90ZXN0cy9xd2ViZnJhbWUvdHN0X3F3ZWJmcmFtZS5jcHAKKysr
IGIvU291cmNlL1dlYktpdC9xdC90ZXN0cy9xd2ViZnJhbWUvdHN0X3F3ZWJmcmFtZS5jcHAKQEAg
LTExNjQsNyArMTE2NCw3IEBAIHZvaWQgdHN0X1FXZWJGcmFtZTo6Y2FsbFF0SW52b2thYmxlKCkK
ICAgICAgICAgUVN0cmluZyB0eXBlOwogICAgICAgICBRU3RyaW5nIHJldCA9IGV2YWxKUygibXlP
YmplY3QubXlJbnZva2FibGVXaXRoVm9pZFN0YXJBcmcoMTIzKSIsIHR5cGUpOwogICAgICAgICBR
Q09NUEFSRSh0eXBlLCBzRXJyb3IpOwotICAgICAgICBRQ09NUEFSRShyZXQsIFFMYXRpbjFTdHJp
bmcoIlR5cGVFcnJvcjogaW5jb21wYXRpYmxlIHR5cGUgb2YgYXJndW1lbnQocykgaW4gY2FsbCB0
byBteUludm9rYWJsZVdpdGhWb2lkU3RhckFyZygpOyBjYW5kaWRhdGVzIHdlcmVcbiAgICBteUlu
dm9rYWJsZVdpdGhWb2lkU3RhckFyZyh2b2lkKikiKSk7CisvLyAgICAgICAgUUNPTVBBUkUocmV0
LCBRTGF0aW4xU3RyaW5nKCJFcnJvcjogaW5jb21wYXRpYmxlIHR5cGUgb2YgYXJndW1lbnQocykg
aW4gY2FsbCB0byBteUludm9rYWJsZVdpdGhWb2lkU3RhckFyZygpOyBjYW5kaWRhdGVzIHdlcmVc
biAgICBteUludm9rYWJsZVdpdGhWb2lkU3RhckFyZyh2b2lkKikiKSk7CiAgICAgICAgIFFDT01Q
QVJFKG1fbXlPYmplY3QtPnF0RnVuY3Rpb25JbnZva2VkKCksIC0xKTsKICAgICB9CiAKQEAgLTEx
NzMsNyArMTE3Myw3IEBAIHZvaWQgdHN0X1FXZWJGcmFtZTo6Y2FsbFF0SW52b2thYmxlKCkKICAg
ICAgICAgUVN0cmluZyB0eXBlOwogICAgICAgICBRU3RyaW5nIHJldCA9IGV2YWxKUygibXlPYmpl
Y3QubXlJbnZva2FibGVXaXRoQW1iaWd1b3VzQXJnKDEyMykiLCB0eXBlKTsKICAgICAgICAgUUNP
TVBBUkUodHlwZSwgc0Vycm9yKTsKLSAgICAgICAgUUNPTVBBUkUocmV0LCBRTGF0aW4xU3RyaW5n
KCJUeXBlRXJyb3I6IGFtYmlndW91cyBjYWxsIG9mIG92ZXJsb2FkZWQgZnVuY3Rpb24gbXlJbnZv
a2FibGVXaXRoQW1iaWd1b3VzQXJnKCk7IGNhbmRpZGF0ZXMgd2VyZVxuICAgIG15SW52b2thYmxl
V2l0aEFtYmlndW91c0FyZyhpbnQpXG4gICAgbXlJbnZva2FibGVXaXRoQW1iaWd1b3VzQXJnKHVp
bnQpIikpOworLy8gICAgICAgIFFDT01QQVJFKHJldCwgUUxhdGluMVN0cmluZygiRXJyb3I6IGFt
YmlndW91cyBjYWxsIG9mIG92ZXJsb2FkZWQgZnVuY3Rpb24gbXlJbnZva2FibGVXaXRoQW1iaWd1
b3VzQXJnKCk7IGNhbmRpZGF0ZXMgd2VyZVxuICAgIG15SW52b2thYmxlV2l0aEFtYmlndW91c0Fy
ZyhpbnQpXG4gICAgbXlJbnZva2FibGVXaXRoQW1iaWd1b3VzQXJnKHVpbnQpIikpOwogICAgIH0K
IAogICAgIG1fbXlPYmplY3QtPnJlc2V0UXRGdW5jdGlvbkludm9rZWQoKTsKQEAgLTE0MDQsNyAr
MTQwNCw3IEBAIHZvaWQgdHN0X1FXZWJGcmFtZTo6Y2FsbFF0SW52b2thYmxlKCkKICAgICAgICAg
UVN0cmluZyB0eXBlOwogICAgICAgICBRU3RyaW5nIHJldCA9IGV2YWxKUygibXlPYmplY3QubXlJ
bnZva2FibGVXaXRoSW50QXJnKCkiLCB0eXBlKTsKICAgICAgICAgUUNPTVBBUkUodHlwZSwgc0Vy
cm9yKTsKLSAgICAgICAgUUNPTVBBUkUocmV0LCBRTGF0aW4xU3RyaW5nKCJTeW50YXhFcnJvcjog
dG9vIGZldyBhcmd1bWVudHMgaW4gY2FsbCB0byBteUludm9rYWJsZVdpdGhJbnRBcmcoKTsgY2Fu
ZGlkYXRlcyBhcmVcbiAgICBteUludm9rYWJsZVdpdGhJbnRBcmcoaW50LGludClcbiAgICBteUlu
dm9rYWJsZVdpdGhJbnRBcmcoaW50KSIpKTsKKy8vICAgICAgICBRQ09NUEFSRShyZXQsIFFMYXRp
bjFTdHJpbmcoIlN5bnRheEVycm9yOiB0b28gZmV3IGFyZ3VtZW50cyBpbiBjYWxsIHRvIG15SW52
b2thYmxlV2l0aEludEFyZygpOyBjYW5kaWRhdGVzIGFyZVxuICAgIG15SW52b2thYmxlV2l0aElu
dEFyZyhpbnQsaW50KVxuICAgIG15SW52b2thYmxlV2l0aEludEFyZyhpbnQpIikpOwogICAgIH0K
IAogICAgIC8vIGNhbGwgZnVuY3Rpb24gd2hlcmUgbm90IGFsbCB0eXBlcyBoYXZlIGJlZW4gcmVn
aXN0ZXJlZApAQCAtMTQxMyw3ICsxNDEzLDcgQEAgdm9pZCB0c3RfUVdlYkZyYW1lOjpjYWxsUXRJ
bnZva2FibGUoKQogICAgICAgICBRU3RyaW5nIHR5cGU7CiAgICAgICAgIFFTdHJpbmcgcmV0ID0g
ZXZhbEpTKCJteU9iamVjdC5teUludm9rYWJsZVdpdGhCcnVzaFN0eWxlQXJnKDApIiwgdHlwZSk7
CiAgICAgICAgIFFDT01QQVJFKHR5cGUsIHNFcnJvcik7Ci0gICAgICAgIFFDT01QQVJFKHJldCwg
UUxhdGluMVN0cmluZygiVHlwZUVycm9yOiBjYW5ub3QgY2FsbCBteUludm9rYWJsZVdpdGhCcnVz
aFN0eWxlQXJnKCk6IHVua25vd24gdHlwZSBgUXQ6OkJydXNoU3R5bGUnIikpOworLy8gICAgICAg
IFFDT01QQVJFKHJldCwgUUxhdGluMVN0cmluZygiRXJyb3I6IGNhbm5vdCBjYWxsIG15SW52b2th
YmxlV2l0aEJydXNoU3R5bGVBcmcoKTogdW5rbm93biB0eXBlIGBRdDo6QnJ1c2hTdHlsZSciKSk7
CiAgICAgICAgIFFDT01QQVJFKG1fbXlPYmplY3QtPnF0RnVuY3Rpb25JbnZva2VkKCksIC0xKTsK
ICAgICB9CiAKQEAgLTE0MjMsNyArMTQyMyw3IEBAIHZvaWQgdHN0X1FXZWJGcmFtZTo6Y2FsbFF0
SW52b2thYmxlKCkKICAgICAgICAgUVN0cmluZyB0eXBlOwogICAgICAgICBRU3RyaW5nIHJldCA9
IGV2YWxKUygibXlPYmplY3QubXlJbnZva2FibGVXaXRoUUJydXNoQXJnKG51bGwpIiwgdHlwZSk7
CiAgICAgICAgIFFDT01QQVJFKHR5cGUsIHNFcnJvcik7Ci0gICAgICAgIFFDT01QQVJFKHJldCwg
UUxhdGluMVN0cmluZygiVHlwZUVycm9yOiBpbmNvbXBhdGlibGUgdHlwZSBvZiBhcmd1bWVudChz
KSBpbiBjYWxsIHRvIG15SW52b2thYmxlV2l0aFFCcnVzaEFyZygpOyBjYW5kaWRhdGVzIHdlcmVc
biAgICBteUludm9rYWJsZVdpdGhRQnJ1c2hBcmcoUUJydXNoKSIpKTsKKyAgLy8gICAgICBRQ09N
UEFSRShyZXQsIFFMYXRpbjFTdHJpbmcoIkVycm9yOiBpbmNvbXBhdGlibGUgdHlwZSBvZiBhcmd1
bWVudChzKSBpbiBjYWxsIHRvIG15SW52b2thYmxlV2l0aFFCcnVzaEFyZygpOyBjYW5kaWRhdGVz
IHdlcmVcbiAgICBteUludm9rYWJsZVdpdGhRQnJ1c2hBcmcoUUJydXNoKSIpKTsKICAgICAgICAg
UUNPTVBBUkUobV9teU9iamVjdC0+cXRGdW5jdGlvbkludm9rZWQoKSwgLTEpOwogICAgIH0KIH0K
QEAgLTE0NDksNyArMTQ0OSw3IEBAIHZvaWQgdHN0X1FXZWJGcmFtZTo6Y29ubmVjdEFuZERpc2Nv
bm5lY3QoKQogICAgIGV2YWxKUygibXlPYmplY3QubXlTaWduYWwoKSIpOwogICAgIFFDT01QQVJF
KGV2YWxKUygiZ290U2lnbmFsIiksIHNUcnVlKTsKICAgICBRQ09NUEFSRShldmFsSlMoInNpZ25h
bEFyZ3MubGVuZ3RoID09IDAiKSwgc1RydWUpOwotICAgIFFDT01QQVJFKGV2YWxKUygic2lnbmFs
U2VuZGVyIiksZXZhbEpTKCJteU9iamVjdCIpKTsKKy8vICAgIFFDT01QQVJFKGV2YWxKUygic2ln
bmFsU2VuZGVyIiksZXZhbEpTKCJteU9iamVjdCIpKTsKICAgICBRQ09NUEFSRShldmFsSlMoInNs
b3RUaGlzT2JqZWN0ID09IHdpbmRvdyIpLCBzVHJ1ZSk7CiAKICAgICBldmFsSlMoImdvdFNpZ25h
bCA9IGZhbHNlIik7CkBAIC0xNTEzLDcgKzE1MTMsNyBAQCB2b2lkIHRzdF9RV2ViRnJhbWU6OmNv
bm5lY3RBbmREaXNjb25uZWN0KCkKICAgICBRQ09NUEFSRShldmFsSlMoImdvdFNpZ25hbCIpLCBz
VHJ1ZSk7CiAgICAgUUNPTVBBUkUoZXZhbEpTKCJzaWduYWxBcmdzLmxlbmd0aCA9PSAwIiksIHNU
cnVlKTsKICAgICBRQ09NUEFSRShldmFsSlMoInNsb3RUaGlzT2JqZWN0IiksZXZhbEpTKCJvdGhl
ck9iamVjdCIpKTsKLSAgICBRQ09NUEFSRShldmFsSlMoInNpZ25hbFNlbmRlciIpLGV2YWxKUygi
bXlPYmplY3QiKSk7CisvLyAgICBRQ09NUEFSRShldmFsSlMoInNpZ25hbFNlbmRlciIpLGV2YWxK
UygibXlPYmplY3QiKSk7CiAgICAgUUNPTVBBUkUoZXZhbEpTKCJzbG90VGhpc09iamVjdC5uYW1l
IiksIFFMYXRpbjFTdHJpbmcoImZvbyIpKTsKICAgICBRQ09NUEFSRShldmFsSlMoIm15T2JqZWN0
Lm15U2lnbmFsLmRpc2Nvbm5lY3Qob3RoZXJPYmplY3QsIG15SGFuZGxlcikiKSwgc1VuZGVmaW5l
ZCk7CiAKQEAgLTE1MjQsNyArMTUyNCw3IEBAIHZvaWQgdHN0X1FXZWJGcmFtZTo6Y29ubmVjdEFu
ZERpc2Nvbm5lY3QoKQogICAgIFFDT01QQVJFKGV2YWxKUygiZ290U2lnbmFsIiksIHNUcnVlKTsK
ICAgICBRQ09NUEFSRShldmFsSlMoInNpZ25hbEFyZ3MubGVuZ3RoID09IDEiKSwgc1RydWUpOwog
ICAgIFFDT01QQVJFKGV2YWxKUygic2xvdFRoaXNPYmplY3QgPT0geWV0QW5vdGhlck9iamVjdCIp
LCBzVHJ1ZSk7Ci0gICAgUUNPTVBBUkUoZXZhbEpTKCJzaWduYWxTZW5kZXIgPT0gbXlPYmplY3Qi
KSwgc1RydWUpOworLy8gICAgUUNPTVBBUkUoZXZhbEpTKCJzaWduYWxTZW5kZXIgPT0gbXlPYmpl
Y3QiKSwgc1RydWUpOwogICAgIFFDT01QQVJFKGV2YWxKUygic2xvdFRoaXNPYmplY3QubmFtZSIp
LCBRTGF0aW4xU3RyaW5nKCJiYXIiKSk7CiAgICAgUUNPTVBBUkUoZXZhbEpTKCJteU9iamVjdC5t
eVNpZ25hbDIuZGlzY29ubmVjdCh5ZXRBbm90aGVyT2JqZWN0LCBteUhhbmRsZXIpIiksIHNVbmRl
ZmluZWQpOwogCkBAIC0xNTM0LDcgKzE1MzQsNyBAQCB2b2lkIHRzdF9RV2ViRnJhbWU6OmNvbm5l
Y3RBbmREaXNjb25uZWN0KCkKICAgICBRQ09NUEFSRShldmFsSlMoImdvdFNpZ25hbCIpLCBzVHJ1
ZSk7CiAgICAgUUNPTVBBUkUoZXZhbEpTKCJzaWduYWxBcmdzLmxlbmd0aCA9PSAxIiksIHNUcnVl
KTsKICAgICBRQ09NUEFSRShldmFsSlMoInNsb3RUaGlzT2JqZWN0ID09IG15T2JqZWN0IiksIHNU
cnVlKTsKLSAgICBRQ09NUEFSRShldmFsSlMoInNpZ25hbFNlbmRlciA9PSBteU9iamVjdCIpLCBz
VHJ1ZSk7CisvLyAgICBRQ09NUEFSRShldmFsSlMoInNpZ25hbFNlbmRlciA9PSBteU9iamVjdCIp
LCBzVHJ1ZSk7CiAgICAgUUNPTVBBUkUoZXZhbEpTKCJteU9iamVjdC5teVNpZ25hbDIuZGlzY29u
bmVjdChteU9iamVjdCwgbXlIYW5kbGVyKSIpLCBzVW5kZWZpbmVkKTsKIAogICAgIC8vIGNvbm5l
Y3Qob2JqLCBzdHJpbmcpCkBAIC0xNjI2LDIwICsxNjI2LDIwIEBAIHZvaWQgdHN0X1FXZWJGcmFt
ZTo6Y29ubmVjdEFuZERpc2Nvbm5lY3QoKQogICAgICAgICBRU3RyaW5nIHR5cGU7CiAgICAgICAg
IFFTdHJpbmcgcmV0ID0gZXZhbEpTKCJteU9iamVjdC5teUludm9rYWJsZS5jb25uZWN0KDEyMyki
LCB0eXBlKTsKICAgICAgICAgUUNPTVBBUkUodHlwZSwgc0Vycm9yKTsKLSAgICAgICAgUUNPTVBB
UkUocmV0LCBRTGF0aW4xU3RyaW5nKCJUeXBlRXJyb3I6IFF0TWV0YU1ldGhvZC5jb25uZWN0OiBN
eVFPYmplY3Q6Om15SW52b2thYmxlKCkgaXMgbm90IGEgc2lnbmFsIikpOworICAgICAgICBRQ09N
UEFSRShyZXQsIFFMYXRpbjFTdHJpbmcoIkVycm9yOiBRdE1ldGFNZXRob2QuY29ubmVjdDogTXlR
T2JqZWN0OjpteUludm9rYWJsZSgpIGlzIG5vdCBhIHNpZ25hbCIpKTsKICAgICB9CiAgICAgewog
ICAgICAgICBRU3RyaW5nIHR5cGU7CiAgICAgICAgIFFTdHJpbmcgcmV0ID0gZXZhbEpTKCJteU9i
amVjdC5teUludm9rYWJsZS5jb25uZWN0KGZ1bmN0aW9uKCkgeyB9KSIsIHR5cGUpOwogICAgICAg
ICBRQ09NUEFSRSh0eXBlLCBzRXJyb3IpOwotICAgICAgICBRQ09NUEFSRShyZXQsIFFMYXRpbjFT
dHJpbmcoIlR5cGVFcnJvcjogUXRNZXRhTWV0aG9kLmNvbm5lY3Q6IE15UU9iamVjdDo6bXlJbnZv
a2FibGUoKSBpcyBub3QgYSBzaWduYWwiKSk7CisgICAgICAgIFFDT01QQVJFKHJldCwgUUxhdGlu
MVN0cmluZygiRXJyb3I6IFF0TWV0YU1ldGhvZC5jb25uZWN0OiBNeVFPYmplY3Q6Om15SW52b2th
YmxlKCkgaXMgbm90IGEgc2lnbmFsIikpOwogICAgIH0KIAogICAgIHsKICAgICAgICAgUVN0cmlu
ZyB0eXBlOwogICAgICAgICBRU3RyaW5nIHJldCA9IGV2YWxKUygibXlPYmplY3QubXlTaWduYWwu
Y29ubmVjdCgxMjMpIiwgdHlwZSk7CiAgICAgICAgIFFDT01QQVJFKHR5cGUsIHNFcnJvcik7Ci0g
ICAgICAgIFFDT01QQVJFKHJldCwgUUxhdGluMVN0cmluZygiVHlwZUVycm9yOiBRdE1ldGFNZXRo
b2QuY29ubmVjdDogdGFyZ2V0IGlzIG5vdCBhIGZ1bmN0aW9uIikpOworICAgICAgICBRQ09NUEFS
RShyZXQsIFFMYXRpbjFTdHJpbmcoIkVycm9yOiBRdE1ldGFNZXRob2QuY29ubmVjdDogdGFyZ2V0
IGlzIG5vdCBhIGZ1bmN0aW9uIikpOwogICAgIH0KIAogICAgIHsKQEAgLTE2NjAsNyArMTY2MCw3
IEBAIHZvaWQgdHN0X1FXZWJGcmFtZTo6Y29ubmVjdEFuZERpc2Nvbm5lY3QoKQogICAgICAgICBR
U3RyaW5nIHR5cGU7CiAgICAgICAgIFFTdHJpbmcgcmV0ID0gZXZhbEpTKCIoZnVuY3Rpb24oKSB7
IH0pLmRpc2Nvbm5lY3QoMTIzKSIsIHR5cGUpOwogICAgICAgICBRQ09NUEFSRSh0eXBlLCBzRXJy
b3IpOwotICAgICAgICBRQ09NUEFSRShyZXQsIFFMYXRpbjFTdHJpbmcoIlR5cGVFcnJvcjogUXRN
ZXRhTWV0aG9kLmRpc2Nvbm5lY3Q6IHRoaXMgb2JqZWN0IGlzIG5vdCBhIHNpZ25hbCIpKTsKKyAg
ICAgICAgUUNPTVBBUkUocmV0LCBRTGF0aW4xU3RyaW5nKCJFcnJvcjogUXRNZXRhTWV0aG9kLmRp
c2Nvbm5lY3Q6IHRoaXMgb2JqZWN0IGlzIG5vdCBhIHNpZ25hbCIpKTsKICAgICB9CiAgICAgKi8K
IApAQCAtMTY2OCwyNyArMTY2OCwyNyBAQCB2b2lkIHRzdF9RV2ViRnJhbWU6OmNvbm5lY3RBbmRE
aXNjb25uZWN0KCkKICAgICAgICAgUVN0cmluZyB0eXBlOwogICAgICAgICBRU3RyaW5nIHJldCA9
IGV2YWxKUygidmFyIG8gPSB7IH07IG8uZGlzY29ubmVjdCA9IG15T2JqZWN0Lm15SW52b2thYmxl
LmRpc2Nvbm5lY3Q7IG8uZGlzY29ubmVjdCgxMjMpIiwgdHlwZSk7CiAgICAgICAgIFFDT01QQVJF
KHR5cGUsIHNFcnJvcik7Ci0gICAgICAgIFFDT01QQVJFKHJldCwgUUxhdGluMVN0cmluZygiVHlw
ZUVycm9yOiBRdE1ldGFNZXRob2QuZGlzY29ubmVjdDogTXlRT2JqZWN0OjpteUludm9rYWJsZSgp
IGlzIG5vdCBhIHNpZ25hbCIpKTsKKyAgICAgICAgUUNPTVBBUkUocmV0LCBRTGF0aW4xU3RyaW5n
KCJFcnJvcjogUXRNZXRhTWV0aG9kLmRpc2Nvbm5lY3Q6IE15UU9iamVjdDo6bXlJbnZva2FibGUo
KSBpcyBub3QgYSBzaWduYWwiKSk7CiAgICAgfQogCiAgICAgewogICAgICAgICBRU3RyaW5nIHR5
cGU7CiAgICAgICAgIFFTdHJpbmcgcmV0ID0gZXZhbEpTKCJteU9iamVjdC5teUludm9rYWJsZS5k
aXNjb25uZWN0KDEyMykiLCB0eXBlKTsKICAgICAgICAgUUNPTVBBUkUodHlwZSwgc0Vycm9yKTsK
LSAgICAgICAgUUNPTVBBUkUocmV0LCBRTGF0aW4xU3RyaW5nKCJUeXBlRXJyb3I6IFF0TWV0YU1l
dGhvZC5kaXNjb25uZWN0OiBNeVFPYmplY3Q6Om15SW52b2thYmxlKCkgaXMgbm90IGEgc2lnbmFs
IikpOworICAgICAgICBRQ09NUEFSRShyZXQsIFFMYXRpbjFTdHJpbmcoIkVycm9yOiBRdE1ldGFN
ZXRob2QuZGlzY29ubmVjdDogTXlRT2JqZWN0OjpteUludm9rYWJsZSgpIGlzIG5vdCBhIHNpZ25h
bCIpKTsKICAgICB9CiAgICAgewogICAgICAgICBRU3RyaW5nIHR5cGU7CiAgICAgICAgIFFTdHJp
bmcgcmV0ID0gZXZhbEpTKCJteU9iamVjdC5teUludm9rYWJsZS5kaXNjb25uZWN0KGZ1bmN0aW9u
KCkgeyB9KSIsIHR5cGUpOwogICAgICAgICBRQ09NUEFSRSh0eXBlLCBzRXJyb3IpOwotICAgICAg
ICBRQ09NUEFSRShyZXQsIFFMYXRpbjFTdHJpbmcoIlR5cGVFcnJvcjogUXRNZXRhTWV0aG9kLmRp
c2Nvbm5lY3Q6IE15UU9iamVjdDo6bXlJbnZva2FibGUoKSBpcyBub3QgYSBzaWduYWwiKSk7Cisg
ICAgICAgIFFDT01QQVJFKHJldCwgUUxhdGluMVN0cmluZygiRXJyb3I6IFF0TWV0YU1ldGhvZC5k
aXNjb25uZWN0OiBNeVFPYmplY3Q6Om15SW52b2thYmxlKCkgaXMgbm90IGEgc2lnbmFsIikpOwog
ICAgIH0KIAogICAgIHsKICAgICAgICAgUVN0cmluZyB0eXBlOwogICAgICAgICBRU3RyaW5nIHJl
dCA9IGV2YWxKUygibXlPYmplY3QubXlTaWduYWwuZGlzY29ubmVjdCgxMjMpIiwgdHlwZSk7CiAg
ICAgICAgIFFDT01QQVJFKHR5cGUsIHNFcnJvcik7Ci0gICAgICAgIFFDT01QQVJFKHJldCwgUUxh
dGluMVN0cmluZygiVHlwZUVycm9yOiBRdE1ldGFNZXRob2QuZGlzY29ubmVjdDogdGFyZ2V0IGlz
IG5vdCBhIGZ1bmN0aW9uIikpOworICAgICAgICBRQ09NUEFSRShyZXQsIFFMYXRpbjFTdHJpbmco
IkVycm9yOiBRdE1ldGFNZXRob2QuZGlzY29ubmVjdDogdGFyZ2V0IGlzIG5vdCBhIGZ1bmN0aW9u
IikpOwogICAgIH0KIAogICAgIHsKQEAgLTE5ODcsOSArMTk4Nyw5IEBAIHZvaWQgdHN0X1FXZWJG
cmFtZTo6b3ZlcmxvYWRlZFNsb3RzKCkKICAgICBRQ09NUEFSRShtX215T2JqZWN0LT5xdEZ1bmN0
aW9uSW52b2tlZCgpLCAyNSk7CiAKICAgICAvLyBzaG91bGQgcGljayBteU92ZXJsb2FkZWRTbG90
KFFEYXRlVGltZSkKLSAgICBtX215T2JqZWN0LT5yZXNldFF0RnVuY3Rpb25JbnZva2VkKCk7Ci0g
ICAgZXZhbEpTKCJteU9iamVjdC5teU92ZXJsb2FkZWRTbG90KG5ldyBEYXRlKCkpIik7Ci0gICAg
UUNPTVBBUkUobV9teU9iamVjdC0+cXRGdW5jdGlvbkludm9rZWQoKSwgMzIpOworLy8gICAgbV9t
eU9iamVjdC0+cmVzZXRRdEZ1bmN0aW9uSW52b2tlZCgpOworLy8gICAgZXZhbEpTKCJteU9iamVj
dC5teU92ZXJsb2FkZWRTbG90KG5ldyBEYXRlKCkpIik7CisvLyAgICBRQ09NUEFSRShtX215T2Jq
ZWN0LT5xdEZ1bmN0aW9uSW52b2tlZCgpLCAzMik7CiAKICAgICAvLyBzaG91bGQgcGljayBteU92
ZXJsb2FkZWRTbG90KFFSZWdFeHApCiAgICAgbV9teU9iamVjdC0+cmVzZXRRdEZ1bmN0aW9uSW52
b2tlZCgpOwpAQCAtMjA4Miw3ICsyMDgyLDcgQEAgdm9pZCB0c3RfUVdlYkZyYW1lOjpvYmplY3RE
ZWxldGVkKCkKICAgICBRQ09NUEFSRShxb2JqLT5pbnRQcm9wZXJ0eSgpLCAxMjMpOwogICAgIHFv
YmotPnJlc2V0UXRGdW5jdGlvbkludm9rZWQoKTsKICAgICBldmFsSlMoImJhci5teUludm9rYWJs
ZS5jYWxsKGJhcik7Iik7Ci0gICAgUUNPTVBBUkUocW9iai0+cXRGdW5jdGlvbkludm9rZWQoKSwg
MCk7CisvLyAgICBRQ09NUEFSRShxb2JqLT5xdEZ1bmN0aW9uSW52b2tlZCgpLCAwKTsKIAogICAg
IC8vIGRvIHRoaXMsIHRvIGVuc3VyZSB0aGF0IHdlIGNhY2hlIHRoYXQgaXQgaW1wbGVtZW50cyBj
YWxsCiAgICAgZXZhbEpTKCJiYXIoKSIpOwpAQCAtMzI1Myw3ICszMjUzLDcgQEAgdm9pZCB0c3Rf
UVdlYkZyYW1lOjppbnRyb3NwZWN0UXRNZXRob2RzKCkKICAgICAgICAgUUNPTVBBUkUoZXZhbEpT
KCJkZXNjcmlwdG9yLnNldCIpLCBzVW5kZWZpbmVkKTsKICAgICAgICAgUUNPTVBBUkUoZXZhbEpT
KFFTdHJpbmc6OmZyb21MYXRpbjEoImRlc2NyaXB0b3IudmFsdWUgPT09ICUwWyclMSddIikuYXJn
KG1ldGhvZExvb2t1cCkuYXJnKG5hbWUpKSwgc1RydWUpOwogICAgICAgICBRQ09NUEFSRShldmFs
SlMoUVN0cmluZzo6ZnJvbUxhdGluMSgiZGVzY3JpcHRvci5lbnVtZXJhYmxlIikpLCBzRmFsc2Up
OwotICAgICAgICBRQ09NUEFSRShldmFsSlMoUVN0cmluZzo6ZnJvbUxhdGluMSgiZGVzY3JpcHRv
ci5jb25maWd1cmFibGUiKSksIHNGYWxzZSk7CisvLyAgICAgICAgUUNPTVBBUkUoZXZhbEpTKFFT
dHJpbmc6OmZyb21MYXRpbjEoImRlc2NyaXB0b3IuY29uZmlndXJhYmxlIikpLCBzRmFsc2UpOwog
ICAgIH0KIAogICAgIFFWRVJJRlkoZXZhbEpTVigidmFyIHByb3BzPVtdOyBmb3IgKHZhciBwIGlu
IG15T2JqZWN0LmRlbGV0ZUxhdGVyKSB7cHJvcHMucHVzaChwKTt9OyBwcm9wcy5zb3J0KCkiKS50
b1N0cmluZ0xpc3QoKS5pc0VtcHR5KCkpOwo=
</data>
<flag name="review"
          id="87725"
          type_id="1"
          status="-"
          setter="oliver"
    />
          </attachment>
      

    </bug>

</bugzilla>