<?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>38644</bug_id>
          
          <creation_ts>2010-05-06 07:10:32 -0700</creation_ts>
          <short_desc>Optimize access to the global object from a function that uses eval</short_desc>
          <delta_ts>2010-05-10 07:03:03 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Kent Hansen">kent.hansen</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>abarth</cc>
    
    <cc>eric</cc>
    
    <cc>ggaren</cc>
    
    <cc>oliver</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>221660</commentid>
    <comment_count>0</comment_count>
    <who name="Kent Hansen">kent.hansen</who>
    <bug_when>2010-05-06 07:10:32 -0700</bug_when>
    <thetext>The insertion of eval in the following script causes a slowdown of ~4x:

a = 123;
(function() {
  var i;
  eval(&quot;1&quot;);
  for (i = 0; i &lt; 100000; ++i) {
    a; a; a; a; a; a;
  }
})();

Similarly for the following script:

a = 123;
(function() {
  eval(&quot;1&quot;);
  (function() {
    for (var i = 0; i &lt; 100000; ++i) {
      a; a; a; a; a; a; a; a;
    }
  })();
})();

It would be nice if the eval didn&apos;t hurt performance so much.
The optimization should of course not break scripts like the following:

a = 2;
(function(code) {
  eval(code);
  return a + a;
})(&quot;var a = 4&quot;); // must return 8, not 4

Or like the following:

a = 2;
print((function() {
  eval(&quot;var a = 4&quot;);
  return function() {
    return a + a;
  }();
})()); // must return 8, not 4</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>222697</commentid>
    <comment_count>1</comment_count>
      <attachid>55432</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2010-05-07 16:46:59 -0700</bug_when>
    <thetext>Created attachment 55432
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>222698</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-05-07 16:49:21 -0700</bug_when>
    <thetext>Attachment 55432 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;, &apos;--no-squash&apos;]&quot; exit_code: 1
JavaScriptCore/interpreter/Interpreter.cpp:2073:  vm_throw is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Total errors found: 1 in 20 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>222705</commentid>
    <comment_count>3</comment_count>
      <attachid>55432</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2010-05-07 16:58:52 -0700</bug_when>
    <thetext>Comment on attachment 55432
Patch

I think you can share emit_op_resolve_global_dynamic.

+    requiresDynamicChecks = d()-&gt;functionExecutable-&gt;usesEval();

Maybe this should be |=, to avoid stomping other functions&apos; results.

&quot;requiresDynamicChecks&quot; sounds a bit too much like &quot;isDynamicScope&quot; to me. How about &quot;mayBecomeDynamicScope&quot;?

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>222710</commentid>
    <comment_count>4</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2010-05-07 17:05:15 -0700</bug_when>
    <thetext>Committed r58986: &lt;http://trac.webkit.org/changeset/58986&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>222737</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-05-07 18:02:11 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/58986 might have broken Qt Linux Release</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>222755</commentid>
    <comment_count>6</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-05-07 19:07:27 -0700</bug_when>
    <thetext>The tree is still on fire from this change:
http://build.webkit.org/console</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>222756</commentid>
    <comment_count>7</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-05-07 19:08:17 -0700</bug_when>
    <thetext>Oliver confirmed over IRC that he&apos;s looking into the test failures now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>223297</commentid>
    <comment_count>8</comment_count>
      <attachid>55432</attachid>
    <who name="Kent Hansen">kent.hansen</who>
    <bug_when>2010-05-10 07:03:03 -0700</bug_when>
    <thetext>Comment on attachment 55432
Patch

Cool, thanks for implementing this.

&gt; +    while (skip--) {
&gt; +        JSObject* o = *iter;
&gt; +        if (o-&gt;hasCustomProperties()) {
&gt; +            Identifier&amp; ident = codeBlock-&gt;identifier(property);
&gt; +            do {
&gt; +                PropertySlot slot(o);
&gt; +                if (o-&gt;getPropertySlot(callFrame, ident, slot)) {
&gt; +                    JSValue result = slot.getValue(callFrame, ident);
&gt; +                    exceptionValue = callFrame-&gt;globalData().exception;
&gt; +                    if (exceptionValue)
&gt; +                        return false;
&gt; +                    callFrame-&gt;r(dst) = JSValue(result);
&gt; +                    return true;
&gt; +                }
&gt; +                if (iter == end)
&gt; +                    break;
&gt; +                o = *iter;
&gt; +                ++iter;
&gt; +            } while (true);
&gt; +            exceptionValue = createUndefinedVariableError(callFrame, ident, vPC - codeBlock-&gt;instructions().begin(), codeBlock);
&gt; +            return false;
&gt; +        }
&gt; +        ++iter;
&gt; +    }

The property is looked up twice in the first scope object with custom properties now, since o is reassigned before ++iter.

Why is the lookup done dynamically for the whole scope chain in case there is just one object with custom properties? Wouldn&apos;t it still be possible to cache the property from the outer-most (global) scope and use that one when the dynamic lookup for the inner-most scope fails? This should enable the optimization to do some good in the following program:

a = 2;
(function(code) {
  eval(code);
  (function() {
    for (var i = 0; i &lt; 100000; ++i) {
      a; a; a; a; a; a; a; a;
    }
  })();
})(String.fromCharCode(0x76, 0x61, 0x72, 0x20, 0x63, 0x3D, 0x34)); // &quot;var c=4&quot;

If I replace &quot;eval(code)&quot; by &quot;eval(&apos;123&apos;)&quot; the caching kicks in, but that&apos;s a less interesting use case.

My naive patch:

diff --git a/JavaScriptCore/interpreter/Interpreter.cpp b/JavaScriptCore/interpreter/Interpreter.cpp
index 921dfdf..f777519 100644
--- a/JavaScriptCore/interpreter/Interpreter.cpp
+++ b/JavaScriptCore/interpreter/Interpreter.cpp
@@ -210,23 +210,15 @@ NEVER_INLINE bool Interpreter::resolveGlobalDynamic(CallFrame* callFrame, Instru
         JSObject* o = *iter;
         if (o-&gt;hasCustomProperties()) {
             Identifier&amp; ident = codeBlock-&gt;identifier(property);
-            do {
-                PropertySlot slot(o);
-                if (o-&gt;getPropertySlot(callFrame, ident, slot)) {
-                    JSValue result = slot.getValue(callFrame, ident);
-                    exceptionValue = callFrame-&gt;globalData().exception;
-                    if (exceptionValue)
-                        return false;
-                    callFrame-&gt;r(dst) = JSValue(result);
-                    return true;
-                }
-                if (iter == end)
-                    break;
-                o = *iter;
-                ++iter;
-            } while (true);
-            exceptionValue = createUndefinedVariableError(callFrame, ident, vPC - codeBlock-&gt;instructions().begin(), codeBlock);
-            return false;
+            PropertySlot slot(o);
+            if (o-&gt;getPropertySlot(callFrame, ident, slot)) {
+                JSValue result = slot.getValue(callFrame, ident);
+                exceptionValue = callFrame-&gt;globalData().exception;
+                if (exceptionValue)
+                    return false;
+                callFrame-&gt;r(dst) = JSValue(result);
+                return true;
+            }
         }
         ++iter;
     }</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>55432</attachid>
            <date>2010-05-07 16:46:59 -0700</date>
            <delta_ts>2010-05-10 07:03:03 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-38644-20100507164658.patch</filename>
            <type>text/plain</type>
            <size>39034</size>
            <attacher name="Oliver Hunt">oliver</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZyBiL0phdmFTY3JpcHRDb3JlL0No
YW5nZUxvZwppbmRleCA3MWFhODJkMGRkODQxZjQwOTE3NWI2ZGRhNzhiNTNhZDZiYzFlNDg0Li44
ZDAxZTU3ZDViMjYxNDYyMDNhZjYxZmE0YWUwMjUxMzcxNDllMjdlIDEwMDY0NAotLS0gYS9KYXZh
U2NyaXB0Q29yZS9DaGFuZ2VMb2cKKysrIGIvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsNjcgQEAKKzIwMTAtMDUtMDcgIE9saXZlciBIdW50ICA8b2xpdmVyQGFwcGxlLmNvbT4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBPcHRpbWl6
ZSBhY2Nlc3MgdG8gdGhlIGdsb2JhbCBvYmplY3QgZnJvbSBhIGZ1bmN0aW9uIHRoYXQgdXNlcyBl
dmFsCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zODY0
NAorCisgICAgICAgIEFkZCBvcF9yZXNvbHZlX2dsb2JhbF9keW5hbWljLCBhIHZhcmlhbnQgb2Yg
b3BfcmVzb2x2ZV9nbG9iYWwgdGhhdAorICAgICAgICBjaGVja3MgZWFjaCBub2RlIGluIHRoZSBz
Y29wZSBjaGFpbiBmb3IgZHluYW1pY2FsbHkgaW5zZXJ0ZWQgcHJvcGVydGllcworICAgICAgICBh
bmQgZmFsbHMgYmFjayB0byB0aGUgbm9ybWFsIHJlc29sdmUgbG9naWMgaW4gdGhhdCBjYXNlLgor
CisgICAgICAgICogSmF2YVNjcmlwdENvcmUuZXhwOgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVC
bG9jay5jcHA6CisgICAgICAgIChKU0M6OmlzR2xvYmFsUmVzb2x2ZSk6CisgICAgICAgIChKU0M6
OkNvZGVCbG9jazo6cHJpbnRTdHJ1Y3R1cmVzKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpk
dW1wKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpkZXJlZlN0cnVjdHVyZXMpOgorICAgICAg
ICAqIGJ5dGVjb2RlL09wY29kZS5oOgorICAgICAgICAqIGJ5dGVjb21waWxlci9CeXRlY29kZUdl
bmVyYXRvci5jcHA6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjpmaW5kU2NvcGVk
UHJvcGVydHkpOgorICAgICAgICAgICBOb3cgdGFrZSBhbiBhZGRpdGlvbmFsIHJlZmVyZW5jZSBw
YXJhbWV0ZXIgdG8gdXNlZCB0byBpbmRpY2F0ZSB0aGF0CisgICAgICAgICAgIHRoZXJlIHdlcmUg
bm9kZXMgdGhhdCBtYXkgZ2FpbiBkeW5hbWljIHByb3BlcnRpZXMKKyAgICAgICAgKEpTQzo6Qnl0
ZWNvZGVHZW5lcmF0b3I6OmVtaXRSZXNvbHZlKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5l
cmF0b3I6OmVtaXRSZXNvbHZlQmFzZSk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9y
OjplbWl0UmVzb2x2ZVdpdGhCYXNlKToKKyAgICAgICAgICAgZGVhbCB3aXRoIGFkZGl0aW9uYWwg
YXJndW1lbnQgdG8gZmluZFNjb3BlZFByb3BlcnR5CisgICAgICAgICogYnl0ZWNvbXBpbGVyL0J5
dGVjb2RlR2VuZXJhdG9yLmg6CisgICAgICAgICogYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5j
cHA6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uQ2FsbFJlc29sdmVOb2RlOjplbWl0Qnl0ZWNvZGUp
OgorICAgICAgICAoSlNDOjpQb3N0Zml4UmVzb2x2ZU5vZGU6OmVtaXRCeXRlY29kZSk6CisgICAg
ICAgIChKU0M6OlByZWZpeFJlc29sdmVOb2RlOjplbWl0Qnl0ZWNvZGUpOgorICAgICAgICAoSlND
OjpSZWFkTW9kaWZ5UmVzb2x2ZU5vZGU6OmVtaXRCeXRlY29kZSk6CisgICAgICAgIChKU0M6OkFz
c2lnblJlc29sdmVOb2RlOjplbWl0Qnl0ZWNvZGUpOgorICAgICAgICAgICBUaGVzZSBmdW5jdGlv
bnMgdXNlIGZpbmRTY29wZWRQcm9wZXJ0eSBkaXJlY3RseSBpbiBvcmRlciB0bworICAgICAgICAg
ICBvcHRpbWlzZSBsb29rdXAuICBUaGV5IGNhbm5vdCB0cml2aWFsbHkgaGFuZGxlIGFueSBkZWdy
ZWUgb2YKKyAgICAgICAgICAgZHluYW1pc20gaW4gdGhlIGxvb2t1cCBzbyB3ZSBqdXN0IGdpdmUg
dXAgaW4gc3VjaCBjYXNlLgorICAgICAgICAqIGludGVycHJldGVyL0ludGVycHJldGVyLmNwcDoK
KyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6OnJlc29sdmVHbG9iYWxEeW5hbWljKToKKyAgICAg
ICAgKEpTQzo6SW50ZXJwcmV0ZXI6OmV4ZWN1dGUpOgorICAgICAgICAoSlNDOjpJbnRlcnByZXRl
cjo6cHJpdmF0ZUV4ZWN1dGUpOgorICAgICAgICAqIGludGVycHJldGVyL0ludGVycHJldGVyLmg6
CisgICAgICAgICogaml0L0pJVC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBp
bGVNYWluUGFzcyk6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMp
OgorICAgICAgICAqIGppdC9KSVQuaDoKKyAgICAgICAgKiBqaXQvSklUT3Bjb2Rlcy5jcHA6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9yZXNvbHZlX2dsb2JhbCk6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdF9vcF9yZXNvbHZlX2dsb2JhbF9keW5hbWljKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0U2xvd19vcF9yZXNvbHZlX2dsb2JhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNs
b3dfb3BfcmVzb2x2ZV9nbG9iYWxfZHluYW1pYyk6CisgICAgICAgICAgIEhhcHBpbHkgcmVzb2x2
ZV9nbG9iYWxfZHluYW1pYyBjYW4gc2hhcmUgdGhlIHNsb3cgY2FzZSEKKyAgICAgICAgKiBqaXQv
SklUU3R1YnMuaDoKKyAgICAgICAgKEpTQzo6KToKKyAgICAgICAgKiBydW50aW1lL0pTQWN0aXZh
dGlvbi5jcHA6CisgICAgICAgIChKU0M6OkpTQWN0aXZhdGlvbjo6aXNEeW5hbWljU2NvcGUpOgor
ICAgICAgICAqIHJ1bnRpbWUvSlNBY3RpdmF0aW9uLmg6CisgICAgICAgICogcnVudGltZS9KU0ds
b2JhbE9iamVjdC5jcHA6CisgICAgICAgIChKU0M6OkpTR2xvYmFsT2JqZWN0Ojppc0R5bmFtaWNT
Y29wZSk6CisgICAgICAgICogcnVudGltZS9KU0dsb2JhbE9iamVjdC5oOgorICAgICAgICAqIHJ1
bnRpbWUvSlNTdGF0aWNTY29wZU9iamVjdC5jcHA6CisgICAgICAgIChKU0M6OkpTU3RhdGljU2Nv
cGVPYmplY3Q6OmlzRHluYW1pY1Njb3BlKToKKyAgICAgICAgKiBydW50aW1lL0pTU3RhdGljU2Nv
cGVPYmplY3QuaDoKKyAgICAgICAgKiBydW50aW1lL0pTVmFyaWFibGVPYmplY3QuaDoKKwogMjAx
MC0wNS0wNyAgR2VvZmZyZXkgR2FyZW4gIDxnZ2FyZW5AYXBwbGUuY29tPgogCiAgICAgICAgIFJl
dmlld2VkIGJ5IEdhdmluIEJhcnJhY2xvdWdoLgpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUv
SmF2YVNjcmlwdENvcmUuZXhwIGIvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZXhwCmlu
ZGV4IGMwOGI1NGQyYTJiNzRmYjhlM2I3OTU0ODFmMTJhOGRkNWVlYzdjOTQuLmU3NzAyOGRlNTA4
MTEwN2ZjYTg1ZWE2YjkwMzg0ZTBlYTFiMjYwYjMgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3Jl
L0phdmFTY3JpcHRDb3JlLmV4cAorKysgYi9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5l
eHAKQEAgLTQ1Nyw3ICs0NTcsNyBAQCBfX1pOSzNKU0MxMEpTRnVuY3Rpb24yM2lzSG9zdEZ1bmN0
aW9uTm9uSW5saW5lRXYKIF9fWk5LM0pTQzExSW50ZXJwcmV0ZXIxNHJldHJpZXZlQ2FsbGVyRVBO
U185RXhlY1N0YXRlRVBOU18xNkludGVybmFsRnVuY3Rpb25FCiBfX1pOSzNKU0MxMUludGVycHJl
dGVyMThyZXRyaWV2ZUxhc3RDYWxsZXJFUE5TXzlFeGVjU3RhdGVFUmlSbFJOU183VVN0cmluZ0VS
TlNfN0pTVmFsdWVFCiBfX1pOSzNKU0MxMlByb3BlcnR5U2xvdDE0ZnVuY3Rpb25HZXR0ZXJFUE5T
XzlFeGVjU3RhdGVFCi1fX1pOSzNKU0MxNEpTR2xvYmFsT2JqZWN0MTRpc0R5bmFtaWNTY29wZUV2
CitfX1pOSzNKU0MxNEpTR2xvYmFsT2JqZWN0MTRpc0R5bmFtaWNTY29wZUVSYgogX19aTkszSlND
MTZJbnRlcm5hbEZ1bmN0aW9uOWNsYXNzSW5mb0V2CiBfX1pOSzNKU0MxNkpTVmFyaWFibGVPYmpl
Y3QxNmlzVmFyaWFibGVPYmplY3RFdgogX19aTkszSlNDMTdEZWJ1Z2dlckNhbGxGcmFtZTEwdGhp
c09iamVjdEV2CmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2su
Y3BwIGIvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAppbmRleCBkNTZkMzI4
ODZjZWQzOWY2NDA5NWIxZGE5ZTdiNjI1NTA4OGY4ODMxLi5jZDE0YzM5NTNlOTA1OWM1Y2EzZWFj
YzliOTNhNmM3MDdlZTUzNmUwIDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9D
b2RlQmxvY2suY3BwCisrKyBiL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAK
QEAgLTE2MSw3ICsxNjEsNyBAQCB2b2lkIENvZGVCbG9jazo6cHJpbnRQdXRCeUlkT3AoRXhlY1N0
YXRlKiBleGVjLCBpbnQgbG9jYXRpb24sIFZlY3RvcjxJbnN0cnVjdGlvbgogI2lmIEVOQUJMRShK
SVQpCiBzdGF0aWMgYm9vbCBpc0dsb2JhbFJlc29sdmUoT3Bjb2RlSUQgb3Bjb2RlSUQpCiB7Ci0g
ICAgcmV0dXJuIG9wY29kZUlEID09IG9wX3Jlc29sdmVfZ2xvYmFsOworICAgIHJldHVybiBvcGNv
ZGVJRCA9PSBvcF9yZXNvbHZlX2dsb2JhbCB8fCBvcGNvZGVJRCA9PSBvcF9yZXNvbHZlX2dsb2Jh
bF9keW5hbWljOwogfQogCiBzdGF0aWMgYm9vbCBpc1Byb3BlcnR5QWNjZXNzKE9wY29kZUlEIG9w
Y29kZUlEKQpAQCAtMjk4LDYgKzI5OCwxMCBAQCB2b2lkIENvZGVCbG9jazo6cHJpbnRTdHJ1Y3R1
cmVzKGNvbnN0IEluc3RydWN0aW9uKiB2UEMpIGNvbnN0CiAgICAgICAgIHByaW50U3RydWN0dXJl
KCJyZXNvbHZlX2dsb2JhbCIsIHZQQywgNCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CisgICAg
aWYgKHZQQ1swXS51Lm9wY29kZSA9PSBpbnRlcnByZXRlci0+Z2V0T3Bjb2RlKG9wX3Jlc29sdmVf
Z2xvYmFsX2R5bmFtaWMpKSB7CisgICAgICAgIHByaW50U3RydWN0dXJlKCJyZXNvbHZlX2dsb2Jh
bF9keW5hbWljIiwgdlBDLCA0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KIAogICAgIC8vIFRo
ZXNlIG1faW5zdHJ1Y3Rpb25zIGRvZXNuJ3QgcmVmIFN0cnVjdHVyZXMuCiAgICAgQVNTRVJUKHZQ
Q1swXS51Lm9wY29kZSA9PSBpbnRlcnByZXRlci0+Z2V0T3Bjb2RlKG9wX2dldF9ieV9pZF9nZW5l
cmljKSB8fCB2UENbMF0udS5vcGNvZGUgPT0gaW50ZXJwcmV0ZXItPmdldE9wY29kZShvcF9wdXRf
YnlfaWRfZ2VuZXJpYykgfHwgdlBDWzBdLnUub3Bjb2RlID09IGludGVycHJldGVyLT5nZXRPcGNv
ZGUob3BfY2FsbCkgfHwgdlBDWzBdLnUub3Bjb2RlID09IGludGVycHJldGVyLT5nZXRPcGNvZGUo
b3BfY2FsbF9ldmFsKSB8fCB2UENbMF0udS5vcGNvZGUgPT0gaW50ZXJwcmV0ZXItPmdldE9wY29k
ZShvcF9jb25zdHJ1Y3QpKTsKQEAgLTY2Niw2ICs2NzAsMTUgQEAgdm9pZCBDb2RlQmxvY2s6OmR1
bXAoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBWZWN0b3I8SW5zdHJ1Y3Rpb24+Ojpjb25zdF9pdGVy
YXRvciYKICAgICAgICAgICAgIGl0ICs9IDI7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
fQorICAgICAgICBjYXNlIG9wX3Jlc29sdmVfZ2xvYmFsX2R5bmFtaWM6IHsKKyAgICAgICAgICAg
IGludCByMCA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgSlNWYWx1ZSBzY29wZSA9
IEpTVmFsdWUoKCsraXQpLT51LmpzQ2VsbCk7CisgICAgICAgICAgICBpbnQgaWQwID0gKCsraXQp
LT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQgZGVwdGggPSBpdFsyXS51Lm9wZXJhbmQ7Cisg
ICAgICAgICAgICBwcmludGYoIlslNGRdIHJlc29sdmVfZ2xvYmFsX2R5bmFtaWNcdCAlcywgJXMs
ICVzLCAlZFxuIiwgbG9jYXRpb24sIHJlZ2lzdGVyTmFtZShleGVjLCByMCkuZGF0YSgpLCB2YWx1
ZVRvU291cmNlU3RyaW5nKGV4ZWMsIHNjb3BlKS5hc2NpaSgpLCBpZE5hbWUoaWQwLCBtX2lkZW50
aWZpZXJzW2lkMF0pLmRhdGEoKSwgZGVwdGgpOworICAgICAgICAgICAgaXQgKz0gMzsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CiAgICAgICAgIGNhc2Ugb3BfZ2V0X3Njb3BlZF92YXI6
IHsKICAgICAgICAgICAgIGludCByMCA9ICgrK2l0KS0+dS5vcGVyYW5kOwogICAgICAgICAgICAg
aW50IGluZGV4ID0gKCsraXQpLT51Lm9wZXJhbmQ7CkBAIC0xMzkzLDcgKzE0MDYsNyBAQCB2b2lk
IENvZGVCbG9jazo6ZGVyZWZTdHJ1Y3R1cmVzKEluc3RydWN0aW9uKiB2UEMpIGNvbnN0CiAgICAg
ICAgIHZQQ1s0XS51LnN0cnVjdHVyZS0+ZGVyZWYoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
LSAgICBpZiAodlBDWzBdLnUub3Bjb2RlID09IGludGVycHJldGVyLT5nZXRPcGNvZGUob3BfcmVz
b2x2ZV9nbG9iYWwpKSB7CisgICAgaWYgKHZQQ1swXS51Lm9wY29kZSA9PSBpbnRlcnByZXRlci0+
Z2V0T3Bjb2RlKG9wX3Jlc29sdmVfZ2xvYmFsKSB8fCB2UENbMF0udS5vcGNvZGUgPT0gaW50ZXJw
cmV0ZXItPmdldE9wY29kZShvcF9yZXNvbHZlX2dsb2JhbF9keW5hbWljKSkgewogICAgICAgICBp
Zih2UENbNF0udS5zdHJ1Y3R1cmUpCiAgICAgICAgICAgICB2UENbNF0udS5zdHJ1Y3R1cmUtPmRl
cmVmKCk7CiAgICAgICAgIHJldHVybjsKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL09wY29kZS5oIGIvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3Bjb2RlLmgKaW5kZXggYjVh
OGMyZDEwZjU1YjE0M2UyMTk4NmYxODhhN2MxY2YzNjc5YmFlNS4uZDQ5YmVlM2M1NzljZTI4NjZl
ODA1YjljN2IxYmRiNDU3MjJjNWEyNSAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvT3Bjb2RlLmgKKysrIGIvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3Bjb2RlLmgKQEAgLTkx
LDYgKzkxLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIG1hY3JvKG9wX3Jlc29sdmUsIDMp
IFwKICAgICAgICAgbWFjcm8ob3BfcmVzb2x2ZV9za2lwLCA0KSBcCiAgICAgICAgIG1hY3JvKG9w
X3Jlc29sdmVfZ2xvYmFsLCA2KSBcCisgICAgICAgIG1hY3JvKG9wX3Jlc29sdmVfZ2xvYmFsX2R5
bmFtaWMsIDcpIFwKICAgICAgICAgbWFjcm8ob3BfZ2V0X3Njb3BlZF92YXIsIDQpIFwKICAgICAg
ICAgbWFjcm8ob3BfcHV0X3Njb3BlZF92YXIsIDQpIFwKICAgICAgICAgbWFjcm8ob3BfZ2V0X2ds
b2JhbF92YXIsIDQpIFwKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9C
eXRlY29kZUdlbmVyYXRvci5jcHAgYi9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNv
ZGVHZW5lcmF0b3IuY3BwCmluZGV4IGRiNzlkNjcwNjc4Yjc1ZmIwNzBkYmYzZjQyMzVhZTIxMzc3
NGE2MmEuLjExMzQyZGE2ZTkyNDRjNjE2NzMzNGY1ZTUwMDFkOGVhMDgxZGViN2IgMTAwNjQ0Ci0t
LSBhL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAKKysr
IGIvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcApAQCAt
OTkzLDcgKzk5Myw3IEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0TG9hZChS
ZWdpc3RlcklEKiBkc3QsIEpTVmFsdWUgdikKICAgICByZXR1cm4gY29uc3RhbnRJRDsKIH0KIAot
Ym9vbCBCeXRlY29kZUdlbmVyYXRvcjo6ZmluZFNjb3BlZFByb3BlcnR5KGNvbnN0IElkZW50aWZp
ZXImIHByb3BlcnR5LCBpbnQmIGluZGV4LCBzaXplX3QmIHN0YWNrRGVwdGgsIGJvb2wgZm9yV3Jp
dGluZywgSlNPYmplY3QqJiBnbG9iYWxPYmplY3QpCitib29sIEJ5dGVjb2RlR2VuZXJhdG9yOjpm
aW5kU2NvcGVkUHJvcGVydHkoY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHksIGludCYgaW5kZXgs
IHNpemVfdCYgc3RhY2tEZXB0aCwgYm9vbCBmb3JXcml0aW5nLCBib29sJiByZXF1aXJlc0R5bmFt
aWNDaGVja3MsIEpTT2JqZWN0KiYgZ2xvYmFsT2JqZWN0KQogewogICAgIC8vIENhc2VzIHdoZXJl
IHdlIGNhbm5vdCBzdGF0aWNhbGx5IG9wdGltaXplIHRoZSBsb29rdXAuCiAgICAgaWYgKHByb3Bl
cnR5ID09IHByb3BlcnR5TmFtZXMoKS5hcmd1bWVudHMgfHwgIWNhbk9wdGltaXplTm9uTG9jYWxz
KCkpIHsKQEAgLTEwMDksNyArMTAwOSw3IEBAIGJvb2wgQnl0ZWNvZGVHZW5lcmF0b3I6OmZpbmRT
Y29wZWRQcm9wZXJ0eShjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eSwgaW50JiBpbmRlCiAgICAg
fQogCiAgICAgc2l6ZV90IGRlcHRoID0gMDsKLSAgICAKKyAgICByZXF1aXJlc0R5bmFtaWNDaGVj
a3MgPSBmYWxzZTsKICAgICBTY29wZUNoYWluSXRlcmF0b3IgaXRlciA9IG1fc2NvcGVDaGFpbi0+
YmVnaW4oKTsKICAgICBTY29wZUNoYWluSXRlcmF0b3IgZW5kID0gbV9zY29wZUNoYWluLT5lbmQo
KTsKICAgICBmb3IgKDsgaXRlciAhPSBlbmQ7ICsraXRlciwgKytkZXB0aCkgewpAQCAtMTAzNCwx
MCArMTAzNCw5IEBAIGJvb2wgQnl0ZWNvZGVHZW5lcmF0b3I6OmZpbmRTY29wZWRQcm9wZXJ0eShj
b25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eSwgaW50JiBpbmRlCiAgICAgICAgICAgICAgICAgZ2xv
YmFsT2JqZWN0ID0gY3VycmVudFZhcmlhYmxlT2JqZWN0OwogICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKGN1cnJlbnRWYXJpYWJsZU9iamVjdC0+aXNEeW5h
bWljU2NvcGUoKSkKKyAgICAgICAgaWYgKGN1cnJlbnRWYXJpYWJsZU9iamVjdC0+aXNEeW5hbWlj
U2NvcGUocmVxdWlyZXNEeW5hbWljQ2hlY2tzKSkKICAgICAgICAgICAgIGJyZWFrOwogICAgIH0K
LQogICAgIC8vIENhbid0IGxvY2F0ZSB0aGUgcHJvcGVydHkgYnV0IHdlJ3JlIGFibGUgdG8gYXZv
aWQgYSBmZXcgbG9va3Vwcy4KICAgICBzdGFja0RlcHRoID0gZGVwdGg7CiAgICAgaW5kZXggPSBt
aXNzaW5nU3ltYm9sTWFya2VyKCk7CkBAIC0xMDYyLDcgKzEwNjEsOCBAQCBSZWdpc3RlcklEKiBC
eXRlY29kZUdlbmVyYXRvcjo6ZW1pdFJlc29sdmUoUmVnaXN0ZXJJRCogZHN0LCBjb25zdCBJZGVu
dGlmaWVyJiBwcgogICAgIHNpemVfdCBkZXB0aCA9IDA7CiAgICAgaW50IGluZGV4ID0gMDsKICAg
ICBKU09iamVjdCogZ2xvYmFsT2JqZWN0ID0gMDsKLSAgICBpZiAoIWZpbmRTY29wZWRQcm9wZXJ0
eShwcm9wZXJ0eSwgaW5kZXgsIGRlcHRoLCBmYWxzZSwgZ2xvYmFsT2JqZWN0KSAmJiAhZ2xvYmFs
T2JqZWN0KSB7CisgICAgYm9vbCByZXF1aXJlc0R5bmFtaWNDaGVja3MgPSBmYWxzZTsKKyAgICBp
ZiAoIWZpbmRTY29wZWRQcm9wZXJ0eShwcm9wZXJ0eSwgaW5kZXgsIGRlcHRoLCBmYWxzZSwgcmVx
dWlyZXNEeW5hbWljQ2hlY2tzLCBnbG9iYWxPYmplY3QpICYmICFnbG9iYWxPYmplY3QpIHsKICAg
ICAgICAgLy8gV2UgY2FuJ3Qgb3B0aW1pc2UgYXQgYWxsIDotKAogICAgICAgICBlbWl0T3Bjb2Rl
KG9wX3Jlc29sdmUpOwogICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoZHN0LT5pbmRleCgp
KTsKQEAgLTEwOTAsMTIgKzEwOTAsMjIgQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6
OmVtaXRSZXNvbHZlKFJlZ2lzdGVySUQqIGRzdCwgY29uc3QgSWRlbnRpZmllciYgcHIKICNlbHNl
CiAgICAgICAgIG1fY29kZUJsb2NrLT5hZGRHbG9iYWxSZXNvbHZlSW5zdHJ1Y3Rpb24oaW5zdHJ1
Y3Rpb25zKCkuc2l6ZSgpKTsKICNlbmRpZgotICAgICAgICBlbWl0T3Bjb2RlKG9wX3Jlc29sdmVf
Z2xvYmFsKTsKKyAgICAgICAgZW1pdE9wY29kZShyZXF1aXJlc0R5bmFtaWNDaGVja3MgPyBvcF9y
ZXNvbHZlX2dsb2JhbF9keW5hbWljIDogb3BfcmVzb2x2ZV9nbG9iYWwpOwogICAgICAgICBpbnN0
cnVjdGlvbnMoKS5hcHBlbmQoZHN0LT5pbmRleCgpKTsKICAgICAgICAgaW5zdHJ1Y3Rpb25zKCku
YXBwZW5kKGdsb2JhbE9iamVjdCk7CiAgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChhZGRD
b25zdGFudChwcm9wZXJ0eSkpOwogICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoMCk7CiAg
ICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZCgwKTsKKyAgICAgICAgaWYgKHJlcXVpcmVzRHlu
YW1pY0NoZWNrcykKKyAgICAgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChkZXB0aCk7Cisg
ICAgICAgIHJldHVybiBkc3Q7CisgICAgfQorCisgICAgaWYgKHJlcXVpcmVzRHluYW1pY0NoZWNr
cykgeworICAgICAgICAvLyBJZiB3ZSBnZXQgaGVyZSB3ZSBoYXZlIGV2YWwgbmVzdGVkIGluc2lk
ZSBhIHx3aXRofCBqdXN0IGdpdmUgdXAKKyAgICAgICAgZW1pdE9wY29kZShvcF9yZXNvbHZlKTsK
KyAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGRzdC0+aW5kZXgoKSk7CisgICAgICAgIGlu
c3RydWN0aW9ucygpLmFwcGVuZChhZGRDb25zdGFudChwcm9wZXJ0eSkpOwogICAgICAgICByZXR1
cm4gZHN0OwogICAgIH0KIApAQCAtMTE1MSw4ICsxMTYxLDkgQEAgUmVnaXN0ZXJJRCogQnl0ZWNv
ZGVHZW5lcmF0b3I6OmVtaXRSZXNvbHZlQmFzZShSZWdpc3RlcklEKiBkc3QsIGNvbnN0IElkZW50
aWZpZXIKICAgICBzaXplX3QgZGVwdGggPSAwOwogICAgIGludCBpbmRleCA9IDA7CiAgICAgSlNP
YmplY3QqIGdsb2JhbE9iamVjdCA9IDA7Ci0gICAgZmluZFNjb3BlZFByb3BlcnR5KHByb3BlcnR5
LCBpbmRleCwgZGVwdGgsIGZhbHNlLCBnbG9iYWxPYmplY3QpOwotICAgIGlmICghZ2xvYmFsT2Jq
ZWN0KSB7CisgICAgYm9vbCByZXF1aXJlc0R5bmFtaWNDaGVja3MgPSBmYWxzZTsKKyAgICBmaW5k
U2NvcGVkUHJvcGVydHkocHJvcGVydHksIGluZGV4LCBkZXB0aCwgZmFsc2UsIHJlcXVpcmVzRHlu
YW1pY0NoZWNrcywgZ2xvYmFsT2JqZWN0KTsKKyAgICBpZiAoIWdsb2JhbE9iamVjdCB8fCByZXF1
aXJlc0R5bmFtaWNDaGVja3MpIHsKICAgICAgICAgLy8gV2UgY2FuJ3Qgb3B0aW1pc2UgYXQgYWxs
IDotKAogICAgICAgICBlbWl0T3Bjb2RlKG9wX3Jlc29sdmVfYmFzZSk7CiAgICAgICAgIGluc3Ry
dWN0aW9ucygpLmFwcGVuZChkc3QtPmluZGV4KCkpOwpAQCAtMTE2OSw3ICsxMTgwLDggQEAgUmVn
aXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRSZXNvbHZlV2l0aEJhc2UoUmVnaXN0ZXJJ
RCogYmFzZURzdCwgUmVnaXN0ZXIKICAgICBzaXplX3QgZGVwdGggPSAwOwogICAgIGludCBpbmRl
eCA9IDA7CiAgICAgSlNPYmplY3QqIGdsb2JhbE9iamVjdCA9IDA7Ci0gICAgaWYgKCFmaW5kU2Nv
cGVkUHJvcGVydHkocHJvcGVydHksIGluZGV4LCBkZXB0aCwgZmFsc2UsIGdsb2JhbE9iamVjdCkg
fHwgIWdsb2JhbE9iamVjdCkgeworICAgIGJvb2wgcmVxdWlyZXNEeW5hbWljQ2hlY2tzID0gZmFs
c2U7CisgICAgaWYgKCFmaW5kU2NvcGVkUHJvcGVydHkocHJvcGVydHksIGluZGV4LCBkZXB0aCwg
ZmFsc2UsIHJlcXVpcmVzRHluYW1pY0NoZWNrcywgZ2xvYmFsT2JqZWN0KSB8fCAhZ2xvYmFsT2Jq
ZWN0IHx8IHJlcXVpcmVzRHluYW1pY0NoZWNrcykgewogICAgICAgICAvLyBXZSBjYW4ndCBvcHRp
bWlzZSBhdCBhbGwgOi0oCiAgICAgICAgIGVtaXRPcGNvZGUob3BfcmVzb2x2ZV93aXRoX2Jhc2Up
OwogICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoYmFzZURzdC0+aW5kZXgoKSk7CkBAIC0x
MjAxLDEyICsxMjEzLDE0IEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0UmVz
b2x2ZVdpdGhCYXNlKFJlZ2lzdGVySUQqIGJhc2VEc3QsIFJlZ2lzdGVyCiAjZWxzZQogICAgIG1f
Y29kZUJsb2NrLT5hZGRHbG9iYWxSZXNvbHZlSW5zdHJ1Y3Rpb24oaW5zdHJ1Y3Rpb25zKCkuc2l6
ZSgpKTsKICNlbmRpZgotICAgIGVtaXRPcGNvZGUob3BfcmVzb2x2ZV9nbG9iYWwpOworICAgIGVt
aXRPcGNvZGUocmVxdWlyZXNEeW5hbWljQ2hlY2tzID8gb3BfcmVzb2x2ZV9nbG9iYWxfZHluYW1p
YyA6IG9wX3Jlc29sdmVfZ2xvYmFsKTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQocHJvcERz
dC0+aW5kZXgoKSk7CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGdsb2JhbE9iamVjdCk7CiAg
ICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGFkZENvbnN0YW50KHByb3BlcnR5KSk7CiAgICAgaW5z
dHJ1Y3Rpb25zKCkuYXBwZW5kKDApOwogICAgIGluc3RydWN0aW9ucygpLmFwcGVuZCgwKTsKKyAg
ICBpZiAocmVxdWlyZXNEeW5hbWljQ2hlY2tzKQorICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBl
bmQoZGVwdGgpOwogICAgIHJldHVybiBiYXNlRHN0OwogfQogCmRpZmYgLS1naXQgYS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaCBiL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCmluZGV4IDkxOTE4M2U0NzY2M2UxMDE3
ZTgyNjZhYWFkZWU5YTY3MGYwMjk3OGMuLmRkNDZiMDRlODg1OWZiNDQwZjRjYjY0YTk5MzlkNGIw
ZTcxNmVjN2YgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29k
ZUdlbmVyYXRvci5oCisrKyBiL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdl
bmVyYXRvci5oCkBAIC0xMDYsNyArMTA2LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIC8v
CiAgICAgICAgIC8vIE5COiBkZXB0aCBkb2VzIF9ub3RfIGluY2x1ZGUgdGhlIGxvY2FsIHNjb3Bl
LiAgZWcuIGEgZGVwdGggb2YgMCByZWZlcnMKICAgICAgICAgLy8gdG8gdGhlIHNjb3BlIGNvbnRh
aW5pbmcgdGhpcyBjb2RlYmxvY2suCi0gICAgICAgIGJvb2wgZmluZFNjb3BlZFByb3BlcnR5KGNv
bnN0IElkZW50aWZpZXImLCBpbnQmIGluZGV4LCBzaXplX3QmIGRlcHRoLCBib29sIGZvcldyaXRp
bmcsIEpTT2JqZWN0KiYgZ2xvYmFsT2JqZWN0KTsKKyAgICAgICAgYm9vbCBmaW5kU2NvcGVkUHJv
cGVydHkoY29uc3QgSWRlbnRpZmllciYsIGludCYgaW5kZXgsIHNpemVfdCYgZGVwdGgsIGJvb2wg
Zm9yV3JpdGluZywgYm9vbCYgaW5jbHVkZXNEeW5hbWljU2NvcGVzLCBKU09iamVjdComIGdsb2Jh
bE9iamVjdCk7CiAKICAgICAgICAgLy8gUmV0dXJucyB0aGUgcmVnaXN0ZXIgc3RvcmluZyAidGhp
cyIKICAgICAgICAgUmVnaXN0ZXJJRCogdGhpc1JlZ2lzdGVyKCkgeyByZXR1cm4gJm1fdGhpc1Jl
Z2lzdGVyOyB9CmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvTm9kZXND
b2RlZ2VuLmNwcCBiL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3Bw
CmluZGV4IGFhZjJkZDFlNjI5MjQ1ZDM2ZDgxODE4MDJhN2U2ZjRjNzkyNGY0ODYuLmRmNjdkZmYx
Y2VhNGY0ZDllMWZmMWU2YzI0NGFlNGI4ZWVmM2VkN2IgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRD
b3JlL2J5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwCisrKyBiL0phdmFTY3JpcHRDb3JlL2J5
dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwCkBAIC0zNTEsNyArMzUxLDggQEAgUmVnaXN0ZXJJ
RCogRnVuY3Rpb25DYWxsUmVzb2x2ZU5vZGU6OmVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRv
ciYgZ2VuZXJhdG9yLAogICAgIGludCBpbmRleCA9IDA7CiAgICAgc2l6ZV90IGRlcHRoID0gMDsK
ICAgICBKU09iamVjdCogZ2xvYmFsT2JqZWN0ID0gMDsKLSAgICBpZiAoZ2VuZXJhdG9yLmZpbmRT
Y29wZWRQcm9wZXJ0eShtX2lkZW50LCBpbmRleCwgZGVwdGgsIGZhbHNlLCBnbG9iYWxPYmplY3Qp
ICYmIGluZGV4ICE9IG1pc3NpbmdTeW1ib2xNYXJrZXIoKSkgeworICAgIGJvb2wgcmVxdWlyZXNE
eW5hbWljQ2hlY2tzID0gZmFsc2U7CisgICAgaWYgKGdlbmVyYXRvci5maW5kU2NvcGVkUHJvcGVy
dHkobV9pZGVudCwgaW5kZXgsIGRlcHRoLCBmYWxzZSwgcmVxdWlyZXNEeW5hbWljQ2hlY2tzLCBn
bG9iYWxPYmplY3QpICYmIGluZGV4ICE9IG1pc3NpbmdTeW1ib2xNYXJrZXIoKSAmJiAhcmVxdWly
ZXNEeW5hbWljQ2hlY2tzKSB7CiAgICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiBmdW5jID0gZ2Vu
ZXJhdG9yLmVtaXRHZXRTY29wZWRWYXIoZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpLCBkZXB0aCwg
aW5kZXgsIGdsb2JhbE9iamVjdCk7CiAgICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiB0aGlzUmVn
aXN0ZXIgPSBnZW5lcmF0b3IuZW1pdExvYWQoZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpLCBqc051
bGwoKSk7CiAgICAgICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdENhbGwoZ2VuZXJhdG9yLmZpbmFs
RGVzdGluYXRpb24oZHN0LCBmdW5jLmdldCgpKSwgZnVuYy5nZXQoKSwgdGhpc1JlZ2lzdGVyLmdl
dCgpLCBtX2FyZ3MsIGRpdm90KCksIHN0YXJ0T2Zmc2V0KCksIGVuZE9mZnNldCgpKTsKQEAgLTUy
NCw3ICs1MjUsOCBAQCBSZWdpc3RlcklEKiBQb3N0Zml4UmVzb2x2ZU5vZGU6OmVtaXRCeXRlY29k
ZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpcwogICAgIGludCBpbmRleCA9IDA7
CiAgICAgc2l6ZV90IGRlcHRoID0gMDsKICAgICBKU09iamVjdCogZ2xvYmFsT2JqZWN0ID0gMDsK
LSAgICBpZiAoZ2VuZXJhdG9yLmZpbmRTY29wZWRQcm9wZXJ0eShtX2lkZW50LCBpbmRleCwgZGVw
dGgsIHRydWUsIGdsb2JhbE9iamVjdCkgJiYgaW5kZXggIT0gbWlzc2luZ1N5bWJvbE1hcmtlcigp
KSB7CisgICAgYm9vbCByZXF1aXJlc0R5bmFtaWNDaGVja3MgPSBmYWxzZTsKKyAgICBpZiAoZ2Vu
ZXJhdG9yLmZpbmRTY29wZWRQcm9wZXJ0eShtX2lkZW50LCBpbmRleCwgZGVwdGgsIHRydWUsIHJl
cXVpcmVzRHluYW1pY0NoZWNrcywgZ2xvYmFsT2JqZWN0KSAmJiBpbmRleCAhPSBtaXNzaW5nU3lt
Ym9sTWFya2VyKCkgJiYgIXJlcXVpcmVzRHluYW1pY0NoZWNrcykgewogICAgICAgICBSZWZQdHI8
UmVnaXN0ZXJJRD4gdmFsdWUgPSBnZW5lcmF0b3IuZW1pdEdldFNjb3BlZFZhcihnZW5lcmF0b3Iu
bmV3VGVtcG9yYXJ5KCksIGRlcHRoLCBpbmRleCwgZ2xvYmFsT2JqZWN0KTsKICAgICAgICAgUmVn
aXN0ZXJJRCogb2xkVmFsdWU7CiAgICAgICAgIGlmIChkc3QgPT0gZ2VuZXJhdG9yLmlnbm9yZWRS
ZXN1bHQoKSkgewpAQCAtNzEwLDcgKzcxMiw4IEBAIFJlZ2lzdGVySUQqIFByZWZpeFJlc29sdmVO
b2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0CiAg
ICAgaW50IGluZGV4ID0gMDsKICAgICBzaXplX3QgZGVwdGggPSAwOwogICAgIEpTT2JqZWN0KiBn
bG9iYWxPYmplY3QgPSAwOwotICAgIGlmIChnZW5lcmF0b3IuZmluZFNjb3BlZFByb3BlcnR5KG1f
aWRlbnQsIGluZGV4LCBkZXB0aCwgZmFsc2UsIGdsb2JhbE9iamVjdCkgJiYgaW5kZXggIT0gbWlz
c2luZ1N5bWJvbE1hcmtlcigpKSB7CisgICAgYm9vbCByZXF1aXJlc0R5bmFtaWNDaGVja3MgPSBm
YWxzZTsKKyAgICBpZiAoZ2VuZXJhdG9yLmZpbmRTY29wZWRQcm9wZXJ0eShtX2lkZW50LCBpbmRl
eCwgZGVwdGgsIGZhbHNlLCByZXF1aXJlc0R5bmFtaWNDaGVja3MsIGdsb2JhbE9iamVjdCkgJiYg
aW5kZXggIT0gbWlzc2luZ1N5bWJvbE1hcmtlcigpICYmICFyZXF1aXJlc0R5bmFtaWNDaGVja3Mp
IHsKICAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHByb3BEc3QgPSBnZW5lcmF0b3IuZW1pdEdl
dFNjb3BlZFZhcihnZW5lcmF0b3IudGVtcERlc3RpbmF0aW9uKGRzdCksIGRlcHRoLCBpbmRleCwg
Z2xvYmFsT2JqZWN0KTsKICAgICAgICAgZW1pdFByZUluY09yRGVjKGdlbmVyYXRvciwgcHJvcERz
dC5nZXQoKSwgbV9vcGVyYXRvcik7CiAgICAgICAgIGdlbmVyYXRvci5lbWl0UHV0U2NvcGVkVmFy
KGRlcHRoLCBpbmRleCwgcHJvcERzdC5nZXQoKSwgZ2xvYmFsT2JqZWN0KTsKQEAgLTExMzIsNyAr
MTEzNSw4IEBAIFJlZ2lzdGVySUQqIFJlYWRNb2RpZnlSZXNvbHZlTm9kZTo6ZW1pdEJ5dGVjb2Rl
KEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlCiAgICAgaW50IGluZGV4ID0gMDsKICAg
ICBzaXplX3QgZGVwdGggPSAwOwogICAgIEpTT2JqZWN0KiBnbG9iYWxPYmplY3QgPSAwOwotICAg
IGlmIChnZW5lcmF0b3IuZmluZFNjb3BlZFByb3BlcnR5KG1faWRlbnQsIGluZGV4LCBkZXB0aCwg
dHJ1ZSwgZ2xvYmFsT2JqZWN0KSAmJiBpbmRleCAhPSBtaXNzaW5nU3ltYm9sTWFya2VyKCkpIHsK
KyAgICBib29sIHJlcXVpcmVzRHluYW1pY0NoZWNrcyA9IGZhbHNlOworICAgIGlmIChnZW5lcmF0
b3IuZmluZFNjb3BlZFByb3BlcnR5KG1faWRlbnQsIGluZGV4LCBkZXB0aCwgdHJ1ZSwgcmVxdWly
ZXNEeW5hbWljQ2hlY2tzLCBnbG9iYWxPYmplY3QpICYmIGluZGV4ICE9IG1pc3NpbmdTeW1ib2xN
YXJrZXIoKSAmJiAhcmVxdWlyZXNEeW5hbWljQ2hlY2tzKSB7CiAgICAgICAgIFJlZlB0cjxSZWdp
c3RlcklEPiBzcmMxID0gZ2VuZXJhdG9yLmVtaXRHZXRTY29wZWRWYXIoZ2VuZXJhdG9yLnRlbXBE
ZXN0aW5hdGlvbihkc3QpLCBkZXB0aCwgaW5kZXgsIGdsb2JhbE9iamVjdCk7CiAgICAgICAgIFJl
Z2lzdGVySUQqIHJlc3VsdCA9IGVtaXRSZWFkTW9kaWZ5QXNzaWdubWVudChnZW5lcmF0b3IsIGdl
bmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCwgc3JjMS5nZXQoKSksIHNyYzEuZ2V0KCksIG1f
cmlnaHQsIG1fb3BlcmF0b3IsIE9wZXJhbmRUeXBlcyhSZXN1bHRUeXBlOjp1bmtub3duVHlwZSgp
LCBtX3JpZ2h0LT5yZXN1bHREZXNjcmlwdG9yKCkpKTsKICAgICAgICAgZ2VuZXJhdG9yLmVtaXRQ
dXRTY29wZWRWYXIoZGVwdGgsIGluZGV4LCByZXN1bHQsIGdsb2JhbE9iamVjdCk7CkBAIC0xMTYx
LDcgKzExNjUsOCBAQCBSZWdpc3RlcklEKiBBc3NpZ25SZXNvbHZlTm9kZTo6ZW1pdEJ5dGVjb2Rl
KEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdAogICAgIGludCBpbmRleCA9IDA7
CiAgICAgc2l6ZV90IGRlcHRoID0gMDsKICAgICBKU09iamVjdCogZ2xvYmFsT2JqZWN0ID0gMDsK
LSAgICBpZiAoZ2VuZXJhdG9yLmZpbmRTY29wZWRQcm9wZXJ0eShtX2lkZW50LCBpbmRleCwgZGVw
dGgsIHRydWUsIGdsb2JhbE9iamVjdCkgJiYgaW5kZXggIT0gbWlzc2luZ1N5bWJvbE1hcmtlcigp
KSB7CisgICAgYm9vbCByZXF1aXJlc0R5bmFtaWNDaGVja3MgPSBmYWxzZTsKKyAgICBpZiAoZ2Vu
ZXJhdG9yLmZpbmRTY29wZWRQcm9wZXJ0eShtX2lkZW50LCBpbmRleCwgZGVwdGgsIHRydWUsIHJl
cXVpcmVzRHluYW1pY0NoZWNrcywgZ2xvYmFsT2JqZWN0KSAmJiBpbmRleCAhPSBtaXNzaW5nU3lt
Ym9sTWFya2VyKCkgJiYgIXJlcXVpcmVzRHluYW1pY0NoZWNrcykgewogICAgICAgICBpZiAoZHN0
ID09IGdlbmVyYXRvci5pZ25vcmVkUmVzdWx0KCkpCiAgICAgICAgICAgICBkc3QgPSAwOwogICAg
ICAgICBSZWdpc3RlcklEKiB2YWx1ZSA9IGdlbmVyYXRvci5lbWl0Tm9kZShkc3QsIG1fcmlnaHQp
OwpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3Bw
IGIvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCmluZGV4IGU1M2Yy
MzY2OTU1ZWU5MmFjYTNiNjJkOTI3MmU0NDAzOTZmYTRkMTMuLjI1M2Q1Njk2ZTNmNWIwMDExNGJj
NzQwYTdiOWMwN2VmMmYwMTU4OTkgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL2ludGVycHJl
dGVyL0ludGVycHJldGVyLmNwcAorKysgYi9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRl
cnByZXRlci5jcHAKQEAgLTE5MSw2ICsxOTEsNzYgQEAgTkVWRVJfSU5MSU5FIGJvb2wgSW50ZXJw
cmV0ZXI6OnJlc29sdmVHbG9iYWwoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEluc3RydWN0aW9uKgog
ICAgIHJldHVybiBmYWxzZTsKIH0KIAorTkVWRVJfSU5MSU5FIGJvb2wgSW50ZXJwcmV0ZXI6OnJl
c29sdmVHbG9iYWxEeW5hbWljKENhbGxGcmFtZSogY2FsbEZyYW1lLCBJbnN0cnVjdGlvbiogdlBD
LCBKU1ZhbHVlJiBleGNlcHRpb25WYWx1ZSkKK3sKKyAgICBpbnQgZHN0ID0gdlBDWzFdLnUub3Bl
cmFuZDsKKyAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gc3RhdGljX2Nhc3Q8SlNH
bG9iYWxPYmplY3QqPih2UENbMl0udS5qc0NlbGwpOworICAgIEFTU0VSVChnbG9iYWxPYmplY3Qt
PmlzR2xvYmFsT2JqZWN0KCkpOworICAgIGludCBwcm9wZXJ0eSA9IHZQQ1szXS51Lm9wZXJhbmQ7
CisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSB2UENbNF0udS5zdHJ1Y3R1cmU7CisgICAgaW50
IG9mZnNldCA9IHZQQ1s1XS51Lm9wZXJhbmQ7CisgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBj
YWxsRnJhbWUtPmNvZGVCbG9jaygpOworICAgIGludCBza2lwID0gdlBDWzZdLnUub3BlcmFuZCAr
IGNvZGVCbG9jay0+bmVlZHNGdWxsU2NvcGVDaGFpbigpOworICAgIAorICAgIFNjb3BlQ2hhaW5O
b2RlKiBzY29wZUNoYWluID0gY2FsbEZyYW1lLT5zY29wZUNoYWluKCk7CisgICAgU2NvcGVDaGFp
bkl0ZXJhdG9yIGl0ZXIgPSBzY29wZUNoYWluLT5iZWdpbigpOworICAgIFNjb3BlQ2hhaW5JdGVy
YXRvciBlbmQgPSBzY29wZUNoYWluLT5lbmQoKTsKKyAgICBBU1NFUlQoaXRlciAhPSBlbmQpOwor
ICAgIHdoaWxlIChza2lwLS0pIHsKKyAgICAgICAgSlNPYmplY3QqIG8gPSAqaXRlcjsKKyAgICAg
ICAgaWYgKG8tPmhhc0N1c3RvbVByb3BlcnRpZXMoKSkgeworICAgICAgICAgICAgSWRlbnRpZmll
ciYgaWRlbnQgPSBjb2RlQmxvY2stPmlkZW50aWZpZXIocHJvcGVydHkpOworICAgICAgICAgICAg
ZG8geworICAgICAgICAgICAgICAgIFByb3BlcnR5U2xvdCBzbG90KG8pOworICAgICAgICAgICAg
ICAgIGlmIChvLT5nZXRQcm9wZXJ0eVNsb3QoY2FsbEZyYW1lLCBpZGVudCwgc2xvdCkpIHsKKyAg
ICAgICAgICAgICAgICAgICAgSlNWYWx1ZSByZXN1bHQgPSBzbG90LmdldFZhbHVlKGNhbGxGcmFt
ZSwgaWRlbnQpOworICAgICAgICAgICAgICAgICAgICBleGNlcHRpb25WYWx1ZSA9IGNhbGxGcmFt
ZS0+Z2xvYmFsRGF0YSgpLmV4Y2VwdGlvbjsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGV4Y2Vw
dGlvblZhbHVlKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICAgICAgICAgICAgICBjYWxsRnJhbWUtPnIoZHN0KSA9IEpTVmFsdWUocmVzdWx0KTsKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIGlmIChpdGVyID09IGVuZCkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgICAgbyA9ICppdGVyOworICAgICAgICAgICAgICAgICsraXRlcjsKKyAgICAgICAg
ICAgIH0gd2hpbGUgKHRydWUpOworICAgICAgICAgICAgZXhjZXB0aW9uVmFsdWUgPSBjcmVhdGVV
bmRlZmluZWRWYXJpYWJsZUVycm9yKGNhbGxGcmFtZSwgaWRlbnQsIHZQQyAtIGNvZGVCbG9jay0+
aW5zdHJ1Y3Rpb25zKCkuYmVnaW4oKSwgY29kZUJsb2NrKTsKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgfQorICAgICAgICArK2l0ZXI7CisgICAgfQorICAgIAorICAgIGlmIChz
dHJ1Y3R1cmUgPT0gZ2xvYmFsT2JqZWN0LT5zdHJ1Y3R1cmUoKSkgeworICAgICAgICBjYWxsRnJh
bWUtPnIoZHN0KSA9IEpTVmFsdWUoZ2xvYmFsT2JqZWN0LT5nZXREaXJlY3RPZmZzZXQob2Zmc2V0
KSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIElkZW50aWZpZXImIGlkZW50
ID0gY29kZUJsb2NrLT5pZGVudGlmaWVyKHByb3BlcnR5KTsKKyAgICBQcm9wZXJ0eVNsb3Qgc2xv
dChnbG9iYWxPYmplY3QpOworICAgIGlmIChnbG9iYWxPYmplY3QtPmdldFByb3BlcnR5U2xvdChj
YWxsRnJhbWUsIGlkZW50LCBzbG90KSkgeworICAgICAgICBKU1ZhbHVlIHJlc3VsdCA9IHNsb3Qu
Z2V0VmFsdWUoY2FsbEZyYW1lLCBpZGVudCk7CisgICAgICAgIGlmIChzbG90LmlzQ2FjaGVhYmxl
VmFsdWUoKSAmJiAhZ2xvYmFsT2JqZWN0LT5zdHJ1Y3R1cmUoKS0+aXNVbmNhY2hlYWJsZURpY3Rp
b25hcnkoKSAmJiBzbG90LnNsb3RCYXNlKCkgPT0gZ2xvYmFsT2JqZWN0KSB7CisgICAgICAgICAg
ICBpZiAodlBDWzRdLnUuc3RydWN0dXJlKQorICAgICAgICAgICAgICAgIHZQQ1s0XS51LnN0cnVj
dHVyZS0+ZGVyZWYoKTsKKyAgICAgICAgICAgIGdsb2JhbE9iamVjdC0+c3RydWN0dXJlKCktPnJl
ZigpOworICAgICAgICAgICAgdlBDWzRdID0gZ2xvYmFsT2JqZWN0LT5zdHJ1Y3R1cmUoKTsKKyAg
ICAgICAgICAgIHZQQ1s1XSA9IHNsb3QuY2FjaGVkT2Zmc2V0KCk7CisgICAgICAgICAgICBjYWxs
RnJhbWUtPnIoZHN0KSA9IEpTVmFsdWUocmVzdWx0KTsKKyAgICAgICAgICAgIHJldHVybiB0cnVl
OworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBleGNlcHRpb25WYWx1ZSA9IGNhbGxGcmFt
ZS0+Z2xvYmFsRGF0YSgpLmV4Y2VwdGlvbjsKKyAgICAgICAgaWYgKGV4Y2VwdGlvblZhbHVlKQor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBjYWxsRnJhbWUtPnIoZHN0KSA9IEpT
VmFsdWUocmVzdWx0KTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIGV4
Y2VwdGlvblZhbHVlID0gY3JlYXRlVW5kZWZpbmVkVmFyaWFibGVFcnJvcihjYWxsRnJhbWUsIGlk
ZW50LCB2UEMgLSBjb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmJlZ2luKCksIGNvZGVCbG9jayk7
CisgICAgcmV0dXJuIGZhbHNlOworfQorCiBORVZFUl9JTkxJTkUgdm9pZCBJbnRlcnByZXRlcjo6
cmVzb2x2ZUJhc2UoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEluc3RydWN0aW9uKiB2UEMpCiB7CiAg
ICAgaW50IGRzdCA9IHZQQ1sxXS51Lm9wZXJhbmQ7CkBAIC03OTksMTEgKzg2OSwxMiBAQCBKU1Zh
bHVlIEludGVycHJldGVyOjpleGVjdXRlKEV2YWxFeGVjdXRhYmxlKiBldmFsLCBDYWxsRnJhbWUq
IGNhbGxGcmFtZSwgSlNPYmplYwogICAgICAgICB9CiAgICAgfQogCi0gICAgeyAvLyBTY29wZSBm
b3IgQmF0Y2hlZFRyYW5zaXRpb25PcHRpbWl6ZXIKLQorICAgIHVuc2lnbmVkIG51bVZhcmlhYmxl
cyA9IGNvZGVCbG9jay0+bnVtVmFyaWFibGVzKCk7CisgICAgaW50IG51bUZ1bmN0aW9ucyA9IGNv
ZGVCbG9jay0+bnVtYmVyT2ZGdW5jdGlvbkRlY2xzKCk7CisgICAgaWYgKG51bVZhcmlhYmxlcyB8
fCBudW1GdW5jdGlvbnMpIHsKKyAgICAgICAgLy8gU2NvcGUgZm9yIEJhdGNoZWRUcmFuc2l0aW9u
T3B0aW1pemVyCiAgICAgICAgIEJhdGNoZWRUcmFuc2l0aW9uT3B0aW1pemVyIG9wdGltaXplcih2
YXJpYWJsZU9iamVjdCk7CiAKLSAgICAgICAgdW5zaWduZWQgbnVtVmFyaWFibGVzID0gY29kZUJs
b2NrLT5udW1WYXJpYWJsZXMoKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51
bVZhcmlhYmxlczsgKytpKSB7CiAgICAgICAgICAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVudCA9
IGNvZGVCbG9jay0+dmFyaWFibGUoaSk7CiAgICAgICAgICAgICBpZiAoIXZhcmlhYmxlT2JqZWN0
LT5oYXNQcm9wZXJ0eShjYWxsRnJhbWUsIGlkZW50KSkgewpAQCAtODEyLDEzICs4ODMsMTEgQEAg
SlNWYWx1ZSBJbnRlcnByZXRlcjo6ZXhlY3V0ZShFdmFsRXhlY3V0YWJsZSogZXZhbCwgQ2FsbEZy
YW1lKiBjYWxsRnJhbWUsIEpTT2JqZWMKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCi0gICAg
ICAgIGludCBudW1GdW5jdGlvbnMgPSBjb2RlQmxvY2stPm51bWJlck9mRnVuY3Rpb25EZWNscygp
OwogICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bUZ1bmN0aW9uczsgKytpKSB7CiAgICAg
ICAgICAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmN0aW9uID0gY29kZUJsb2NrLT5mdW5jdGlv
bkRlY2woaSk7CiAgICAgICAgICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdDsKICAgICAgICAgICAg
IHZhcmlhYmxlT2JqZWN0LT5wdXQoY2FsbEZyYW1lLCBmdW5jdGlvbi0+bmFtZSgpLCBmdW5jdGlv
bi0+bWFrZShjYWxsRnJhbWUsIHNjb3BlQ2hhaW4pLCBzbG90KTsKICAgICAgICAgfQotCiAgICAg
fQogCiAgICAgUmVnaXN0ZXIqIG9sZEVuZCA9IG1fcmVnaXN0ZXJGaWxlLmVuZCgpOwpAQCAtMTk4
OSw2ICsyMDU4LDI0IEBAIEpTVmFsdWUgSW50ZXJwcmV0ZXI6OnByaXZhdGVFeGVjdXRlKEV4ZWN1
dGlvbkZsYWcgZmxhZywgUmVnaXN0ZXJGaWxlKiByZWdpc3RlckZpCiAgICAgICAgIAogICAgICAg
ICBORVhUX0lOU1RSVUNUSU9OKCk7CiAgICAgfQorICAgIERFRklORV9PUENPREUob3BfcmVzb2x2
ZV9nbG9iYWxfZHluYW1pYykgeworICAgICAgICAvKiByZXNvbHZlX3NraXAgZHN0KHIpIGdsb2Jh
bE9iamVjdChjKSBwcm9wZXJ0eShpZCkgc3RydWN0dXJlKHNJRCkgb2Zmc2V0KG4pLCBkZXB0aChu
KQorICAgICAgICAgCisgICAgICAgICBQZXJmb3JtcyBhIGR5bmFtaWMgcHJvcGVydHkgbG9va3Vw
IGZvciB0aGUgZ2l2ZW4gcHJvcGVydHksIG9uIHRoZSBwcm92aWRlZAorICAgICAgICAgZ2xvYmFs
IG9iamVjdC4gIElmIHN0cnVjdHVyZSBtYXRjaGVzIHRoZSBTdHJ1Y3R1cmUgb2YgdGhlIGdsb2Jh
bCB0aGVuIHBlcmZvcm0KKyAgICAgICAgIGEgZmFzdCBsb29rdXAgdXNpbmcgdGhlIGNhc2Ugb2Zm
c2V0LCBvdGhlcndpc2UgZmFsbCBiYWNrIHRvIGEgZnVsbCByZXNvbHZlIGFuZAorICAgICAgICAg
Y2FjaGUgdGhlIG5ldyBzdHJ1Y3R1cmUgYW5kIG9mZnNldC4KKyAgICAgICAgIAorICAgICAgICAg
VGhpcyB3YWxrcyB0aHJvdWdoIG4gbGV2ZWxzIG9mIHRoZSBzY29wZSBjaGFpbiB0byB2ZXJpZnkg
dGhhdCBub25lIG9mIHRob3NlIGxldmVscworICAgICAgICAgaW4gdGhlIHNjb3BlIGNoYWluIGlu
Y2x1ZGUgZHluYW1pY2FsbHkgYWRkZWQgcHJvcGVydGllcy4KKyAgICAgICAgICovCisgICAgICAg
IGlmIChVTkxJS0VMWSghcmVzb2x2ZUdsb2JhbER5bmFtaWMoY2FsbEZyYW1lLCB2UEMsIGV4Y2Vw
dGlvblZhbHVlKSkpCisgICAgICAgICAgICBnb3RvIHZtX3Rocm93OworICAgICAgICAKKyAgICAg
ICAgdlBDICs9IE9QQ09ERV9MRU5HVEgob3BfcmVzb2x2ZV9nbG9iYWxfZHluYW1pYyk7CisgICAg
ICAgIAorICAgICAgICBORVhUX0lOU1RSVUNUSU9OKCk7CisgICAgfQogICAgIERFRklORV9PUENP
REUob3BfZ2V0X2dsb2JhbF92YXIpIHsKICAgICAgICAgLyogZ2V0X2dsb2JhbF92YXIgZHN0KHIp
IGdsb2JhbE9iamVjdChjKSBpbmRleChuKQogCkBAIC0yMDE2LDcgKzIxMDMsNyBAQCBKU1ZhbHVl
IEludGVycHJldGVyOjpwcml2YXRlRXhlY3V0ZShFeGVjdXRpb25GbGFnIGZsYWcsIFJlZ2lzdGVy
RmlsZSogcmVnaXN0ZXJGaQogICAgICAgICBzY29wZS0+cmVnaXN0ZXJBdChpbmRleCkgPSBKU1Zh
bHVlKGNhbGxGcmFtZS0+cih2YWx1ZSkuanNWYWx1ZSgpKTsKICAgICAgICAgdlBDICs9IE9QQ09E
RV9MRU5HVEgob3BfcHV0X2dsb2JhbF92YXIpOwogICAgICAgICBORVhUX0lOU1RSVUNUSU9OKCk7
Ci0gICAgfSAgICAgICAgICAgIAorICAgIH0KICAgICBERUZJTkVfT1BDT0RFKG9wX2dldF9zY29w
ZWRfdmFyKSB7CiAgICAgICAgIC8qIGdldF9zY29wZWRfdmFyIGRzdChyKSBpbmRleChuKSBza2lw
KG4pCiAKQEAgLTIwMzUsNyArMjEyMiw2IEBAIEpTVmFsdWUgSW50ZXJwcmV0ZXI6OnByaXZhdGVF
eGVjdXRlKEV4ZWN1dGlvbkZsYWcgZmxhZywgUmVnaXN0ZXJGaWxlKiByZWdpc3RlckZpCiAgICAg
ICAgICAgICArK2l0ZXI7CiAgICAgICAgICAgICBBU1NFUlQoaXRlciAhPSBlbmQpOwogICAgICAg
ICB9Ci0KICAgICAgICAgQVNTRVJUKCgqaXRlciktPmlzVmFyaWFibGVPYmplY3QoKSk7CiAgICAg
ICAgIEpTVmFyaWFibGVPYmplY3QqIHNjb3BlID0gc3RhdGljX2Nhc3Q8SlNWYXJpYWJsZU9iamVj
dCo+KCppdGVyKTsKICAgICAgICAgY2FsbEZyYW1lLT5yKGRzdCkgPSBzY29wZS0+cmVnaXN0ZXJB
dChpbmRleCk7CmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnBy
ZXRlci5oIGIvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuaAppbmRleCBj
ZjhiMzQyMTcxYjNjYWVlMjk0NGE0MzcwNzIzNjFmZmFjZWRhNDZhLi44Nzg0OWVhYzFmNzJmNzI5
NzcxMTRjYWY3NGFkMDI4YTg5YzZiMDQ2IDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9pbnRl
cnByZXRlci9JbnRlcnByZXRlci5oCisrKyBiL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0lu
dGVycHJldGVyLmgKQEAgLTEyNyw2ICsxMjcsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
TkVWRVJfSU5MSU5FIGJvb2wgcmVzb2x2ZShDYWxsRnJhbWUqLCBJbnN0cnVjdGlvbiosIEpTVmFs
dWUmIGV4Y2VwdGlvblZhbHVlKTsKICAgICAgICAgTkVWRVJfSU5MSU5FIGJvb2wgcmVzb2x2ZVNr
aXAoQ2FsbEZyYW1lKiwgSW5zdHJ1Y3Rpb24qLCBKU1ZhbHVlJiBleGNlcHRpb25WYWx1ZSk7CiAg
ICAgICAgIE5FVkVSX0lOTElORSBib29sIHJlc29sdmVHbG9iYWwoQ2FsbEZyYW1lKiwgSW5zdHJ1
Y3Rpb24qLCBKU1ZhbHVlJiBleGNlcHRpb25WYWx1ZSk7CisgICAgICAgIE5FVkVSX0lOTElORSBi
b29sIHJlc29sdmVHbG9iYWxEeW5hbWljKENhbGxGcmFtZSosIEluc3RydWN0aW9uKiwgSlNWYWx1
ZSYgZXhjZXB0aW9uVmFsdWUpOwogICAgICAgICBORVZFUl9JTkxJTkUgdm9pZCByZXNvbHZlQmFz
ZShDYWxsRnJhbWUqLCBJbnN0cnVjdGlvbiogdlBDKTsKICAgICAgICAgTkVWRVJfSU5MSU5FIGJv
b2wgcmVzb2x2ZUJhc2VBbmRQcm9wZXJ0eShDYWxsRnJhbWUqLCBJbnN0cnVjdGlvbiosIEpTVmFs
dWUmIGV4Y2VwdGlvblZhbHVlKTsKICAgICAgICAgTkVWRVJfSU5MSU5FIFNjb3BlQ2hhaW5Ob2Rl
KiBjcmVhdGVFeGNlcHRpb25TY29wZShDYWxsRnJhbWUqLCBjb25zdCBJbnN0cnVjdGlvbiogdlBD
KTsKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwIGIvSmF2YVNjcmlwdENv
cmUvaml0L0pJVC5jcHAKaW5kZXggZjdiMDZhMGUxMWJkM2E0NDQ5NDI0ZWE0NGZlOTVlOTBmOGQy
OGY5Ni4uMGE2OGFmNzI2YTc2ZjM2Y2I1MzU4ZjM2NTI5MzllMTQ3MTNjYmUyMyAxMDA2NDQKLS0t
IGEvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAKKysrIGIvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VC5jcHAKQEAgLTI5Nyw2ICsyOTcsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFz
cygpCiAgICAgICAgIERFRklORV9PUChvcF9yZXNvbHZlKQogICAgICAgICBERUZJTkVfT1Aob3Bf
cmVzb2x2ZV9iYXNlKQogICAgICAgICBERUZJTkVfT1Aob3BfcmVzb2x2ZV9nbG9iYWwpCisgICAg
ICAgIERFRklORV9PUChvcF9yZXNvbHZlX2dsb2JhbF9keW5hbWljKQogICAgICAgICBERUZJTkVf
T1Aob3BfcmVzb2x2ZV9za2lwKQogICAgICAgICBERUZJTkVfT1Aob3BfcmVzb2x2ZV93aXRoX2Jh
c2UpCiAgICAgICAgIERFRklORV9PUChvcF9yZXQpCkBAIC0zNjMsOSArMzY0LDcgQEAgdm9pZCBK
SVQ6OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKCkKICAgICBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rp
b25zQmVnaW4gPSBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYmVnaW4oKTsKIAogICAgIG1f
cHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbkluZGV4ID0gMDsKLSNpZiBVU0UoSlNWQUxVRTMyXzY0
KQogICAgIG1fZ2xvYmFsUmVzb2x2ZUluZm9JbmRleCA9IDA7Ci0jZW5kaWYKICAgICBtX2NhbGxM
aW5rSW5mb0luZGV4ID0gMDsKIAogICAgIGZvciAoVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciBpdGVyID0gbV9zbG93Q2FzZXMuYmVnaW4oKTsgaXRlciAhPSBtX3Nsb3dDYXNlcy5lbmQo
KTspIHsKQEAgLTQyNSw5ICs0MjQsOCBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2Fz
ZXMoKQogICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3BfcHJlX2luYykKICAgICAgICAgREVG
SU5FX1NMT1dDQVNFX09QKG9wX3B1dF9ieV9pZCkKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX09Q
KG9wX3B1dF9ieV92YWwpCi0jaWYgVVNFKEpTVkFMVUUzMl82NCkKICAgICAgICAgREVGSU5FX1NM
T1dDQVNFX09QKG9wX3Jlc29sdmVfZ2xvYmFsKQotI2VuZGlmCisgICAgICAgIERFRklORV9TTE9X
Q0FTRV9PUChvcF9yZXNvbHZlX2dsb2JhbF9keW5hbWljKQogICAgICAgICBERUZJTkVfU0xPV0NB
U0VfT1Aob3BfcnNoaWZ0KQogICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3BfdXJzaGlmdCkK
ICAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX3N0cmljdGVxKQpkaWZmIC0tZ2l0IGEvSmF2
YVNjcmlwdENvcmUvaml0L0pJVC5oIGIvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCmluZGV4IGE3
ZTg4OTAxM2Y1NDU5NTE4Mjg2OGZiYzk3ZjczYzVjZmI4YjQyYzQuLjAxOTQyMjIzZmJhN2RkYjc0
ZTc1MTA2Nzk5OWNkMGY0N2QwOTVmMjIgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVQuaAorKysgYi9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgKQEAgLTcxNyw3ICs3MTcsOCBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBlbWl0X29wX3B1dF9zZXR0ZXIoSW5zdHJ1Y3Rp
b24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX3Jlc29sdmUoSW5zdHJ1Y3Rpb24qKTsKICAgICAg
ICAgdm9pZCBlbWl0X29wX3Jlc29sdmVfYmFzZShJbnN0cnVjdGlvbiopOwotICAgICAgICB2b2lk
IGVtaXRfb3BfcmVzb2x2ZV9nbG9iYWwoSW5zdHJ1Y3Rpb24qKTsKKyAgICAgICAgdm9pZCBlbWl0
X29wX3Jlc29sdmVfZ2xvYmFsKEluc3RydWN0aW9uKiwgYm9vbCBkeW5hbWljID0gZmFsc2UpOwor
ICAgICAgICB2b2lkIGVtaXRfb3BfcmVzb2x2ZV9nbG9iYWxfZHluYW1pYyhJbnN0cnVjdGlvbiop
OwogICAgICAgICB2b2lkIGVtaXRfb3BfcmVzb2x2ZV9za2lwKEluc3RydWN0aW9uKik7CiAgICAg
ICAgIHZvaWQgZW1pdF9vcF9yZXNvbHZlX3dpdGhfYmFzZShJbnN0cnVjdGlvbiopOwogICAgICAg
ICB2b2lkIGVtaXRfb3BfcmV0KEluc3RydWN0aW9uKik7CkBAIC03ODIsNiArNzgzLDcgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfcHV0X2J5X2lkKEluc3RydWN0
aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwogICAgICAgICB2b2lkIGVt
aXRTbG93X29wX3B1dF9ieV92YWwoSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJik7CiAgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfcmVzb2x2ZV9nbG9iYWwoSW5z
dHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CisgICAgICAgIHZv
aWQgZW1pdFNsb3dfb3BfcmVzb2x2ZV9nbG9iYWxfZHluYW1pYyhJbnN0cnVjdGlvbiosIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKICAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9y
c2hpZnQoSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CiAg
ICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfc3RyaWN0ZXEoSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CiAgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfc3ViKElu
c3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwpkaWZmIC0tZ2l0
IGEvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwIGIvSmF2YVNjcmlwdENvcmUvaml0
L0pJVE9wY29kZXMuY3BwCmluZGV4IDJhZDc5YzY4YTQ5Y2U0ZDdjYzYwOTQ0OTE5NzZjZGM1ODIz
MDJmYzAuLjc0ZjcxOGMwMTZlZjdiMDkxYjJlYzcxY2YyMzkwOGJmZjA4MWFiYmIgMTAwNjQ0Ci0t
LSBhL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAorKysgYi9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUT3Bjb2Rlcy5jcHAKQEAgLTcwOSw3ICs3MDksNyBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9yZXNvbHZlX3NraXAoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBzdHVi
Q2FsbC5jYWxsKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpOwogfQogCi12b2lkIEpJ
VDo6ZW1pdF9vcF9yZXNvbHZlX2dsb2JhbChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQordm9pZCBKSVQ6OmVtaXRfb3BfcmVzb2x2ZV9nbG9iYWwoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgYm9vbCBkeW5hbWljKQogewogICAgIC8vIEZJWE1FOiBPcHRpbWl6ZSB0byB1
c2UgcGF0Y2hpbmcgaW5zdGVhZCBvZiBzbyBtYW55IG1lbW9yeSBhY2Nlc3Nlcy4KIApAQCAtNzMx
LDcgKzczMSw3IEBAIHZvaWQgSklUOjplbWl0X29wX3Jlc29sdmVfZ2xvYmFsKEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgbG9hZDMyKEJhc2VJbmRleChyZWdUMiwgcmVnVDMs
IFRpbWVzRWlnaHQpLCByZWdUMCk7IC8vIHBheWxvYWQKICAgICBsb2FkMzIoQmFzZUluZGV4KHJl
Z1QyLCByZWdUMywgVGltZXNFaWdodCwgNCksIHJlZ1QxKTsgLy8gdGFnCiAgICAgZW1pdFN0b3Jl
KGRzdCwgcmVnVDEsIHJlZ1QwKTsKLSAgICBtYXAobV9ieXRlY29kZUluZGV4ICsgT1BDT0RFX0xF
TkdUSChvcF9yZXNvbHZlX2dsb2JhbCksIGRzdCwgcmVnVDEsIHJlZ1QwKTsKKyAgICBtYXAobV9i
eXRlY29kZUluZGV4ICsgT1BDT0RFX0xFTkdUSChkeW5hbWljID8gb3BfcmVzb2x2ZV9nbG9iYWxf
ZHluYW1pYyA6IG9wX3Jlc29sdmVfZ2xvYmFsKSwgZHN0LCByZWdUMSwgcmVnVDApOwogfQogCiB2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcmVzb2x2ZV9nbG9iYWwoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKQEAgLTc1
MCw2ICs3NTAsMTkgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3Jlc29sdmVfZ2xvYmFsKEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG8KICAgICBzdHViQ2FsbC5jYWxs
KGRzdCk7CiB9CiAKK3ZvaWQgSklUOjplbWl0X29wX3Jlc29sdmVfZ2xvYmFsX2R5bmFtaWMoSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBpbnQgc2tpcCA9IGN1cnJlbnRJ
bnN0cnVjdGlvbls2XS51Lm9wZXJhbmQgKyBtX2NvZGVCbG9jay0+bmVlZHNGdWxsU2NvcGVDaGFp
bigpOworICAgIAorICAgIGVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKFJlZ2lzdGVyRmls
ZTo6U2NvcGVDaGFpbiwgcmVnVDApOworICAgIHdoaWxlIChza2lwLS0pIHsKKyAgICAgICAgbG9h
ZFB0cihBZGRyZXNzKHJlZ1QwLCBPQkpFQ1RfT0ZGU0VUT0YoU2NvcGVDaGFpbk5vZGUsIG9iamVj
dCkpLCByZWdUMSk7CisgICAgICAgIGFkZFNsb3dDYXNlKGNoZWNrU3RydWN0dXJlKHJlZ1QxLCBt
X2dsb2JhbERhdGEtPmFjdGl2YXRpb25TdHJ1Y3R1cmUuZ2V0KCkpKTsKKyAgICAgICAgbG9hZFB0
cihBZGRyZXNzKHJlZ1QwLCBPQkpFQ1RfT0ZGU0VUT0YoU2NvcGVDaGFpbk5vZGUsIG5leHQpKSwg
cmVnVDApOworICAgIH0KKyAgICBlbWl0X29wX3Jlc29sdmVfZ2xvYmFsKGN1cnJlbnRJbnN0cnVj
dGlvbiwgdHJ1ZSk7Cit9CisKIHZvaWQgSklUOjplbWl0X29wX25vdChJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQogewogICAgIHVuc2lnbmVkIGRzdCA9IGN1cnJlbnRJbnN0cnVjdGlv
blsxXS51Lm9wZXJhbmQ7CkBAIC0yMjQ0LDEyICsyMjU3LDEwIEBAIHZvaWQgSklUOjplbWl0X29w
X3Jlc29sdmVfc2tpcChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIHN0dWJD
YWxsLmNhbGwoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCk7CiB9CiAKLXZvaWQgSklU
OjplbWl0X29wX3Jlc29sdmVfZ2xvYmFsKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
Cit2b2lkIEpJVDo6ZW1pdF9vcF9yZXNvbHZlX2dsb2JhbChJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uLCBib29sKQogewogICAgIC8vIEZhc3QgY2FzZQogICAgIHZvaWQqIGdsb2JhbE9i
amVjdCA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51LmpzQ2VsbDsKLSAgICBJZGVudGlmaWVyKiBp
ZGVudCA9ICZtX2NvZGVCbG9jay0+aWRlbnRpZmllcihjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5v
cGVyYW5kKTsKLSAgICAKICAgICB1bnNpZ25lZCBjdXJyZW50SW5kZXggPSBtX2dsb2JhbFJlc29s
dmVJbmZvSW5kZXgrKzsKICAgICB2b2lkKiBzdHJ1Y3R1cmVBZGRyZXNzID0gJihtX2NvZGVCbG9j
ay0+Z2xvYmFsUmVzb2x2ZUluZm8oY3VycmVudEluZGV4KS5zdHJ1Y3R1cmUpOwogICAgIHZvaWQq
IG9mZnNldEFkZHIgPSAmKG1fY29kZUJsb2NrLT5nbG9iYWxSZXNvbHZlSW5mbyhjdXJyZW50SW5k
ZXgpLm9mZnNldCk7CkBAIC0yMjU3LDcgKzIyNjgsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9yZXNv
bHZlX2dsb2JhbChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIC8vIENoZWNr
IFN0cnVjdHVyZSBvZiBnbG9iYWwgb2JqZWN0CiAgICAgbW92ZShJbW1QdHIoZ2xvYmFsT2JqZWN0
KSwgcmVnVDApOwogICAgIGxvYWRQdHIoc3RydWN0dXJlQWRkcmVzcywgcmVnVDEpOwotICAgIEp1
bXAgbm9NYXRjaCA9IGJyYW5jaFB0cihOb3RFcXVhbCwgcmVnVDEsIEFkZHJlc3MocmVnVDAsIE9C
SkVDVF9PRkZTRVRPRihKU0NlbGwsIG1fc3RydWN0dXJlKSkpOyAvLyBTdHJ1Y3R1cmVzIGRvbid0
IG1hdGNoCisgICAgYWRkU2xvd0Nhc2UoYnJhbmNoUHRyKE5vdEVxdWFsLCByZWdUMSwgQWRkcmVz
cyhyZWdUMCwgT0JKRUNUX09GRlNFVE9GKEpTQ2VsbCwgbV9zdHJ1Y3R1cmUpKSkpOyAvLyBTdHJ1
Y3R1cmVzIGRvbid0IG1hdGNoCiAKICAgICAvLyBMb2FkIGNhY2hlZCBwcm9wZXJ0eQogICAgIC8v
IEFzc3VtZSB0aGF0IHRoZSBnbG9iYWwgb2JqZWN0IGFsd2F5cyB1c2VzIGV4dGVybmFsIHN0b3Jh
Z2UuCkBAIC0yMjY1LDE2ICsyMjc2LDM1IEBAIHZvaWQgSklUOjplbWl0X29wX3Jlc29sdmVfZ2xv
YmFsKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgbG9hZDMyKG9mZnNldEFk
ZHIsIHJlZ1QxKTsKICAgICBsb2FkUHRyKEJhc2VJbmRleChyZWdUMCwgcmVnVDEsIFNjYWxlUHRy
KSwgcmVnVDApOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9u
WzFdLnUub3BlcmFuZCk7Ci0gICAgSnVtcCBlbmQgPSBqdW1wKCk7Cit9CiAKLSAgICAvLyBTbG93
IGNhc2UKLSAgICBub01hdGNoLmxpbmsodGhpcyk7Cit2b2lkIEpJVDo6ZW1pdF9vcF9yZXNvbHZl
X2dsb2JhbF9keW5hbWljKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAg
aW50IHNraXAgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bNl0udS5vcGVyYW5kICsgbV9jb2RlQmxvY2st
Pm5lZWRzRnVsbFNjb3BlQ2hhaW4oKTsKKyAgICAKKyAgICBlbWl0R2V0RnJvbUNhbGxGcmFtZUhl
YWRlclB0cihSZWdpc3RlckZpbGU6OlNjb3BlQ2hhaW4sIHJlZ1QwKTsKKyAgICB3aGlsZSAoc2tp
cC0tKSB7CisgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgT0JKRUNUX09GRlNFVE9GKFNj
b3BlQ2hhaW5Ob2RlLCBvYmplY3QpKSwgcmVnVDEpOworICAgICAgICBhZGRTbG93Q2FzZShjaGVj
a1N0cnVjdHVyZShyZWdUMSwgbV9nbG9iYWxEYXRhLT5hY3RpdmF0aW9uU3RydWN0dXJlLmdldCgp
KSk7CisgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgT0JKRUNUX09GRlNFVE9GKFNjb3Bl
Q2hhaW5Ob2RlLCBuZXh0KSksIHJlZ1QwKTsKKyAgICB9CisgICAgZW1pdF9vcF9yZXNvbHZlX2ds
b2JhbChjdXJyZW50SW5zdHJ1Y3Rpb24sIHRydWUpOworfQorCit2b2lkIEpJVDo6ZW1pdFNsb3df
b3BfcmVzb2x2ZV9nbG9iYWwoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3sKKyAgICB1bnNpZ25lZCBkc3QgPSBj
dXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOworICAgIHZvaWQqIGdsb2JhbE9iamVjdCA9
IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51LmpzQ2VsbDsKKyAgICBJZGVudGlmaWVyKiBpZGVudCA9
ICZtX2NvZGVCbG9jay0+aWRlbnRpZmllcihjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5k
KTsKKyAgICAKKyAgICB1bnNpZ25lZCBjdXJyZW50SW5kZXggPSBtX2dsb2JhbFJlc29sdmVJbmZv
SW5kZXgrKzsKKyAgICAKKyAgICBsaW5rU2xvd0Nhc2UoaXRlcik7CiAgICAgSklUU3R1YkNhbGwg
c3R1YkNhbGwodGhpcywgY3RpX29wX3Jlc29sdmVfZ2xvYmFsKTsKICAgICBzdHViQ2FsbC5hZGRB
cmd1bWVudChJbW1QdHIoZ2xvYmFsT2JqZWN0KSk7CiAgICAgc3R1YkNhbGwuYWRkQXJndW1lbnQo
SW1tUHRyKGlkZW50KSk7CiAgICAgc3R1YkNhbGwuYWRkQXJndW1lbnQoSW1tMzIoY3VycmVudElu
ZGV4KSk7Ci0gICAgc3R1YkNhbGwuY2FsbChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5k
KTsKLSAgICBlbmQubGluayh0aGlzKTsKKyAgICBzdHViQ2FsbC5jYWxsKGRzdCk7CiB9CiAKIHZv
aWQgSklUOjplbWl0X29wX25vdChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAt
MjI5OSw3ICsyMzI5LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfamZhbHNlKEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiAKICAgICBpc05vblplcm8ubGluayh0aGlzKTsKICAgICBSRUNP
UkRfSlVNUF9UQVJHRVQodGFyZ2V0KTsKLX07Cit9CisKIHZvaWQgSklUOjplbWl0X29wX2plcV9u
dWxsKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgdW5zaWduZWQgc3Jj
ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKQEAgLTMwOTIsNiArMzEyMywyOSBA
QCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfdG9fanNudW1iZXIoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYQogCiAjZW5kaWYgLy8gVVNFKEpTVkFMVUUzMl82NCkK
IAordm9pZCBKSVQ6OmVtaXRTbG93X29wX3Jlc29sdmVfZ2xvYmFsX2R5bmFtaWMoSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYg
aXRlcikKK3sKKyAgICB1bnNpZ25lZCBkc3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVy
YW5kOworICAgIHZvaWQqIGdsb2JhbE9iamVjdCA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lmpz
Q2VsbDsKKyAgICBJZGVudGlmaWVyKiBpZGVudCA9ICZtX2NvZGVCbG9jay0+aWRlbnRpZmllcihj
dXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKTsKKyAgICBpbnQgc2tpcCA9IGN1cnJlbnRJ
bnN0cnVjdGlvbls2XS51Lm9wZXJhbmQgKyBtX2NvZGVCbG9jay0+bmVlZHNGdWxsU2NvcGVDaGFp
bigpOworICAgIHdoaWxlIChza2lwLS0pCisgICAgICAgIGxpbmtTbG93Q2FzZShpdGVyKTsKKyAg
ICBKSVRTdHViQ2FsbCByZXNvbHZlU3R1YkNhbGwodGhpcywgY3RpX29wX3Jlc29sdmUpOworICAg
IHJlc29sdmVTdHViQ2FsbC5hZGRBcmd1bWVudChJbW1QdHIoaWRlbnQpKTsKKyAgICByZXNvbHZl
U3R1YkNhbGwuY2FsbChkc3QpOworICAgIGVtaXRKdW1wU2xvd1RvSG90KGp1bXAoKSwgT1BDT0RF
X0xFTkdUSChvcF9yZXNvbHZlX2dsb2JhbF9keW5hbWljKSk7CisgICAgCisgICAgdW5zaWduZWQg
Y3VycmVudEluZGV4ID0gbV9nbG9iYWxSZXNvbHZlSW5mb0luZGV4Kys7CisgICAgCisgICAgbGlu
a1Nsb3dDYXNlKGl0ZXIpOyAvLyBXZSBtYW5hZ2VkIHRvIHNraXAgYWxsIHRoZSBub2RlcyBpbiB0
aGUgc2NvcGUgY2hhaW4sIGJ1dCB0aGUgY2FjaGUgbWlzc2VkLgorICAgIEpJVFN0dWJDYWxsIHN0
dWJDYWxsKHRoaXMsIGN0aV9vcF9yZXNvbHZlX2dsb2JhbCk7CisgICAgc3R1YkNhbGwuYWRkQXJn
dW1lbnQoSW1tUHRyKGdsb2JhbE9iamVjdCkpOworICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KElt
bVB0cihpZGVudCkpOworICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KEltbTMyKGN1cnJlbnRJbmRl
eCkpOworICAgIHN0dWJDYWxsLmNhbGwoZHN0KTsKK30KKwogLy8gRm9yIGJvdGggSlNWYWx1ZTMy
XzY0IGFuZCBKU1ZhbHVlMzIKICNpZiBFTkFCTEUoSklUX09QVElNSVpFX01PRCkKICNpZiBDUFUo
QVJNX1RSQURJVElPTkFMKQpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJz
LmggYi9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuaAppbmRleCBmZTRiY2ZiOGJlY2ZiZTRl
NjYzZWNiMzFmNWI1Yjk0Y2VlZWY2YWJjLi40OWJmMTc2MTI1OTNhZDM3ZjM3NjJjYzNmMDIyNGVi
ZDFmY2Q4NDcxIDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuaAorKysg
Yi9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuaApAQCAtMzM3LDYgKzMzNyw3IEBAIGV4dGVy
biAiQyIgewogICAgIEVuY29kZWRKU1ZhbHVlIEpJVF9TVFVCIGN0aV9vcF9yZXNvbHZlKFNUVUJf
QVJHU19ERUNMQVJBVElPTik7CiAgICAgRW5jb2RlZEpTVmFsdWUgSklUX1NUVUIgY3RpX29wX3Jl
c29sdmVfYmFzZShTVFVCX0FSR1NfREVDTEFSQVRJT04pOwogICAgIEVuY29kZWRKU1ZhbHVlIEpJ
VF9TVFVCIGN0aV9vcF9yZXNvbHZlX2dsb2JhbChTVFVCX0FSR1NfREVDTEFSQVRJT04pOworICAg
IEVuY29kZWRKU1ZhbHVlIEpJVF9TVFVCIGN0aV9vcF9yZXNvbHZlX2dsb2JhbF9keW5hbWljKFNU
VUJfQVJHU19ERUNMQVJBVElPTik7CiAgICAgRW5jb2RlZEpTVmFsdWUgSklUX1NUVUIgY3RpX29w
X3Jlc29sdmVfc2tpcChTVFVCX0FSR1NfREVDTEFSQVRJT04pOwogICAgIEVuY29kZWRKU1ZhbHVl
IEpJVF9TVFVCIGN0aV9vcF9yZXNvbHZlX3dpdGhfYmFzZShTVFVCX0FSR1NfREVDTEFSQVRJT04p
OwogICAgIEVuY29kZWRKU1ZhbHVlIEpJVF9TVFVCIGN0aV9vcF9yc2hpZnQoU1RVQl9BUkdTX0RF
Q0xBUkFUSU9OKTsKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBY3RpdmF0
aW9uLmNwcCBiL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBY3RpdmF0aW9uLmNwcAppbmRleCA4
NWU4YmJhYWZmNThiYTk0ZGI5OWFmOWJmZjBhMTJmM2M5YmQ5N2Y3Li5mNDY4ZmYxZTc0NWMwNTc4
ZDU2ZGI0YWE2MDRkMGE1ZWU0MzdhNjE1IDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTQWN0aXZhdGlvbi5jcHAKKysrIGIvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FjdGl2
YXRpb24uY3BwCkBAIC0xMzQsOSArMTM0LDEwIEBAIEpTT2JqZWN0KiBKU0FjdGl2YXRpb246OnRv
VGhpc09iamVjdChFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CiAgICAgcmV0dXJuIGV4ZWMtPmdsb2Jh
bFRoaXNWYWx1ZSgpOwogfQogCi1ib29sIEpTQWN0aXZhdGlvbjo6aXNEeW5hbWljU2NvcGUoKSBj
b25zdAorYm9vbCBKU0FjdGl2YXRpb246OmlzRHluYW1pY1Njb3BlKGJvb2wmIHJlcXVpcmVzRHlu
YW1pY0NoZWNrcykgY29uc3QKIHsKLSAgICByZXR1cm4gZCgpLT5mdW5jdGlvbkV4ZWN1dGFibGUt
PnVzZXNFdmFsKCk7CisgICAgcmVxdWlyZXNEeW5hbWljQ2hlY2tzID0gZCgpLT5mdW5jdGlvbkV4
ZWN1dGFibGUtPnVzZXNFdmFsKCk7CisgICAgcmV0dXJuIGZhbHNlOwogfQogCiBKU1ZhbHVlIEpT
QWN0aXZhdGlvbjo6YXJndW1lbnRzR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBzbG90
QmFzZSwgY29uc3QgSWRlbnRpZmllciYpCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTQWN0aXZhdGlvbi5oIGIvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FjdGl2YXRpb24u
aAppbmRleCBlY2U4NzUzNDdlOTFiMGE0YTQ0MGMyY2Y2ZWY2MmMzYWNkZWZhNTEyLi4xMGE4ZGJk
MTE3NmRlYjZlNDczN2IzN2RkNWNmNzM0YmNjMWVhMDcyIDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTQWN0aXZhdGlvbi5oCisrKyBiL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNBY3RpdmF0aW9uLmgKQEAgLTQ3LDcgKzQ3LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAg
ICAgdmlydHVhbCB2b2lkIG1hcmtDaGlsZHJlbihNYXJrU3RhY2smKTsKIAotICAgICAgICB2aXJ0
dWFsIGJvb2wgaXNEeW5hbWljU2NvcGUoKSBjb25zdDsKKyAgICAgICAgdmlydHVhbCBib29sIGlz
RHluYW1pY1Njb3BlKGJvb2wmIHJlcXVpcmVzRHluYW1pY0NoZWNrcykgY29uc3Q7CiAKICAgICAg
ICAgdmlydHVhbCBib29sIGlzQWN0aXZhdGlvbk9iamVjdCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7
IH0KIApkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5j
cHAgYi9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAppbmRleCA3NTY4
ZmZkZDMwMDA2ZTQ5OTFjN2E2NTQ5ZTE0YjNiNzU3ZTg0NTQ2Li43ZmQ0OTFhZTA2NTRmMzdiMzY3
YTRkM2Q2NTU4NjJkNWM4NzYyYWZkIDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTR2xvYmFsT2JqZWN0LmNwcAorKysgYi9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFs
T2JqZWN0LmNwcApAQCAtNDI2LDcgKzQyNiw3IEBAIEV4ZWNTdGF0ZSogSlNHbG9iYWxPYmplY3Q6
Omdsb2JhbEV4ZWMoKQogICAgIHJldHVybiBDYWxsRnJhbWU6OmNyZWF0ZShkKCktPmdsb2JhbENh
bGxGcmFtZSArIFJlZ2lzdGVyRmlsZTo6Q2FsbEZyYW1lSGVhZGVyU2l6ZSk7CiB9CiAKLWJvb2wg
SlNHbG9iYWxPYmplY3Q6OmlzRHluYW1pY1Njb3BlKCkgY29uc3QKK2Jvb2wgSlNHbG9iYWxPYmpl
Y3Q6OmlzRHluYW1pY1Njb3BlKGJvb2wmKSBjb25zdAogewogICAgIHJldHVybiB0cnVlOwogfQpk
aWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oIGIvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCmluZGV4IGRmOTQyY2Y3YjczYTFj
NzIxOWY1ZTY4MDFjNTJmNGEyMGVmZjZlZTUuLmUzOGRjNzkxYTdmN2Y3ZDlmZjI4ZDk1YmJlM2Zk
ODVmMDMxZTgyYzAgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxP
YmplY3QuaAorKysgYi9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgKQEAg
LTI1Niw3ICsyNTYsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICB2aXJ0dWFsIGJvb2wg
YWxsb3dzQWNjZXNzRnJvbShjb25zdCBKU0dsb2JhbE9iamVjdCopIGNvbnN0IHsgcmV0dXJuIHRy
dWU7IH0KIAotICAgICAgICB2aXJ0dWFsIGJvb2wgaXNEeW5hbWljU2NvcGUoKSBjb25zdDsKKyAg
ICAgICAgdmlydHVhbCBib29sIGlzRHluYW1pY1Njb3BlKGJvb2wmIHJlcXVpcmVzRHluYW1pY0No
ZWNrcykgY29uc3Q7CiAKICAgICAgICAgSGFzaFNldDxHbG9iYWxDb2RlQmxvY2sqPiYgY29kZUJs
b2NrcygpIHsgcmV0dXJuIGQoKS0+Y29kZUJsb2NrczsgfQogCmRpZmYgLS1naXQgYS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTU3RhdGljU2NvcGVPYmplY3QuY3BwIGIvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU1N0YXRpY1Njb3BlT2JqZWN0LmNwcAppbmRleCBhODc3ZWM2NDhjMWU0NWQwNGM3
MmYzOGQ1ZjNlMjZmZjU3ODEzOWU1Li5hZDEwMjE4MDkzODZmNjk1ZTdlMjI1MzhhYTNlZGYzNjU5
ODM4NGQzIDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RhdGljU2NvcGVP
YmplY3QuY3BwCisrKyBiL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdGF0aWNTY29wZU9iamVj
dC5jcHAKQEAgLTU4LDcgKzU4LDcgQEAgdm9pZCBKU1N0YXRpY1Njb3BlT2JqZWN0OjpwdXRXaXRo
QXR0cmlidXRlcyhFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXIKICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKIH0KIAotYm9vbCBKU1N0YXRpY1Njb3BlT2JqZWN0Ojppc0R5bmFt
aWNTY29wZSgpIGNvbnN0Citib29sIEpTU3RhdGljU2NvcGVPYmplY3Q6OmlzRHluYW1pY1Njb3Bl
KGJvb2wmKSBjb25zdAogewogICAgIHJldHVybiBmYWxzZTsKIH0KZGlmZiAtLWdpdCBhL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNTdGF0aWNTY29wZU9iamVjdC5oIGIvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU1N0YXRpY1Njb3BlT2JqZWN0LmgKaW5kZXggNGQxNTZkNDc1NmUzZDc0MTU3OGE2
ZGE2ODcyNzcxZjE3NmFjMzFiMC4uZGNlY2U5ZDk3MzQ2YzZlMzJmNDkwNjBmZGNhZjg4OGU5OGRh
NTBlOCAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0YXRpY1Njb3BlT2Jq
ZWN0LmgKKysrIGIvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0YXRpY1Njb3BlT2JqZWN0LmgK
QEAgLTUxLDcgKzUxLDcgQEAgbmFtZXNwYWNlIEpTQ3sKICAgICAgICAgfQogICAgICAgICB2aXJ0
dWFsIH5KU1N0YXRpY1Njb3BlT2JqZWN0KCk7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBtYXJrQ2hp
bGRyZW4oTWFya1N0YWNrJik7Ci0gICAgICAgIGJvb2wgaXNEeW5hbWljU2NvcGUoKSBjb25zdDsK
KyAgICAgICAgYm9vbCBpc0R5bmFtaWNTY29wZShib29sJiByZXF1aXJlc0R5bmFtaWNDaGVja3Mp
IGNvbnN0OwogICAgICAgICB2aXJ0dWFsIEpTT2JqZWN0KiB0b1RoaXNPYmplY3QoRXhlY1N0YXRl
KikgY29uc3Q7CiAgICAgICAgIHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0
YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIFByb3BlcnR5U2xvdCYpOwogICAgICAgICB2aXJ0dWFs
IHZvaWQgcHV0KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBKU1ZhbHVlLCBQdXRQcm9w
ZXJ0eVNsb3QmKTsKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNWYXJpYWJs
ZU9iamVjdC5oIGIvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1ZhcmlhYmxlT2JqZWN0LmgKaW5k
ZXggNmM2NzljZTA3MjBjNTg1OTdmMjlkNmJkMTBiZjBiYTlmOWJlMDIwMi4uZjJlZmNkZjM5ODlh
ZmZiMGIyZWY0YjY3NjVjZTVmOGM2YTA5MzlhZCAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU1ZhcmlhYmxlT2JqZWN0LmgKKysrIGIvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U1ZhcmlhYmxlT2JqZWN0LmgKQEAgLTUyLDcgKzUyLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgIHZpcnR1YWwgdm9pZCBnZXRPd25Qcm9wZXJ0eU5hbWVzKEV4ZWNTdGF0ZSosIFByb3BlcnR5
TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlIG1vZGUgPSBFeGNsdWRlRG9udEVudW1Qcm9wZXJ0
aWVzKTsKICAgICAgICAgCiAgICAgICAgIHZpcnR1YWwgYm9vbCBpc1ZhcmlhYmxlT2JqZWN0KCkg
Y29uc3Q7Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBpc0R5bmFtaWNTY29wZSgpIGNvbnN0ID0gMDsK
KyAgICAgICAgdmlydHVhbCBib29sIGlzRHluYW1pY1Njb3BlKGJvb2wmIHJlcXVpcmVzRHluYW1p
Y0NoZWNrcykgY29uc3QgPSAwOwogCiAgICAgICAgIFJlZ2lzdGVyJiByZWdpc3RlckF0KGludCBp
bmRleCkgY29uc3QgeyByZXR1cm4gZC0+cmVnaXN0ZXJzW2luZGV4XTsgfQogCg==
</data>
<flag name="review"
          id="39612"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
      

    </bug>

</bugzilla>