<?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>16901</bug_id>
          
          <creation_ts>2008-01-16 22:17:08 -0800</creation_ts>
          <short_desc>Convert remaining JS function objects to use the new PrototypeFunction class</short_desc>
          <delta_ts>2008-01-17 11:28:22 -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>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.4</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="Sam Weinig">sam</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>67436</commentid>
    <comment_count>0</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2008-01-16 22:17:08 -0800</bug_when>
    <thetext>There are a few remaining uses of custom JS function classes that should be converted to use the new static function based PrototypeFunction class.  The uniformity should help when making further optimizations of the function architecture.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>67438</commentid>
    <comment_count>1</comment_count>
      <attachid>18490</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2008-01-16 22:33:26 -0800</bug_when>
    <thetext>Created attachment 18490
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>67439</commentid>
    <comment_count>2</comment_count>
      <attachid>18491</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2008-01-16 22:34:24 -0800</bug_when>
    <thetext>Created attachment 18491
perhaps easier to review with No WS changes</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>67491</commentid>
    <comment_count>3</comment_count>
      <attachid>18490</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-01-17 09:17:54 -0800</bug_when>
    <thetext>Comment on attachment 18490
patch

 104     if (args.size() &gt; 0)
 105         b = args[0]-&gt;toBoolean(exec);
 106     else
 107         b = false;

I know this is not new code, but the check of args.size is entirely unnecessary because undefined already turns into false.

 116     if (args.isEmpty())
 117         return jsBoolean(false);
122118     return jsBoolean(args[0]-&gt;toBoolean(exec)); /* TODO: optimize for bool case */

Here too.

 48     // Functions
 49     JSValue* booleanProtoFuncToString(ExecState*, JSObject*, const List&amp;);
 50     JSValue* booleanProtoFuncValueOf(ExecState*, JSObject*, const List&amp;);

 49     // Functions
 50     JSValue* numberProtoFuncToString(ExecState*, JSObject*, const List&amp;);
 51     JSValue* numberProtoFuncToLocaleString(ExecState*, JSObject*, const List&amp;);
 52     JSValue* numberProtoFuncValueOf(ExecState*, JSObject*, const List&amp;);
 53     JSValue* numberProtoFuncToFixed(ExecState*, JSObject*, const List&amp;);
 54     JSValue* numberProtoFuncToExponential(ExecState*, JSObject*, const List&amp;);
 55     JSValue* numberProtoFuncToPrecision(ExecState*, JSObject*, const List&amp;);

 39     JSValue* regExpProtoFuncTest(ExecState*, JSObject*, const List&amp;);
 40     JSValue* regExpProtoFuncExec(ExecState*, JSObject*, const List&amp;);
 41     JSValue* regExpProtoFuncCompile(ExecState*, JSObject*, const List&amp;);
 42     JSValue* regExpProtoFuncToString(ExecState*, JSObject*, const List&amp;);

These need not be declared in the headers. I suggest the functions be given internal linkage.

 830 JSValue* globalFuncUnEscape(ExecState* exec, JSObject*, const List&amp; args)

This should not have a capital &quot;E&quot;. The word &quot;unescape&quot; is a single word.

 159     double parseIntOverflow(const char* s, int length, int radix);

Please omit the &quot;s&quot; here.

 91         UString pattern = args.isEmpty() ? UString(&quot;&quot;) : arg0-&gt;toString(exec);

In the future we should investigate if this can be changed to arg0-&gt;isUndefined() instead of args.isEmpty().

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>67503</commentid>
    <comment_count>4</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2008-01-17 11:28:22 -0800</bug_when>
    <thetext>Landed in r29588.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>18490</attachid>
            <date>2008-01-16 22:33:26 -0800</date>
            <delta_ts>2008-01-17 09:17:54 -0800</delta_ts>
            <desc>patch</desc>
            <filename>moreFunctions.diff</filename>
            <type>text/plain</type>
            <size>78606</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDI5NTUy
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsODYgQEAKKzIwMDgtMDEt
MTYgIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBGaXggZm9yIGh0dHA6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE2OTAxCisgICAgICAgIENvbnZlcnQgcmVtYWluaW5nIEpTIGZ1bmN0
aW9uIG9iamVjdHMgdG8gdXNlIHRoZSBuZXcgUHJvdG90eXBlRnVuY3Rpb24gY2xhc3MKKworICAg
ICAgICAtIE1vdmVzIEJvb2xlYW4sIEZ1bmN0aW9uLCBSZWdFeHAsIE51bWJlciwgT2JqZWN0IGFu
ZCBHbG9iYWwgZnVuY3Rpb25zIHRvIHRoZWlyCisgICAgICAgICAgb3duIHN0YXRpYyBmdW5jdGlv
biBpbXBsZW1lbnRhdGlvbnMgc28gdGhhdCB0aGV5IGNhbiBiZSB1c2VkIHdpdGggdGhlCisgICAg
ICAgICAgUHJvdG90eXBlRnVuY3Rpb24gY2xhc3MuICBTdW5TcGlkZXIgc2F5cyB0aGlzIGlzIDEu
MDAzeCBhcyBmYXN0LgorCisgICAgICAgICoga2pzL0pTR2xvYmFsT2JqZWN0LmNwcDoKKyAgICAg
ICAgKEtKUzo6SlNHbG9iYWxPYmplY3Q6OnJlc2V0KToKKyAgICAgICAgKiBranMvYXJyYXlfb2Jq
ZWN0Lmg6CisgICAgICAgICoga2pzL2Jvb2xfb2JqZWN0LmNwcDoKKyAgICAgICAgKEtKUzo6Qm9v
bGVhbkluc3RhbmNlOjpCb29sZWFuSW5zdGFuY2UpOgorICAgICAgICAoS0pTOjpCb29sZWFuUHJv
dG90eXBlOjpCb29sZWFuUHJvdG90eXBlKToKKyAgICAgICAgKEtKUzo6Ym9vbGVhblByb3RvRnVu
Y1RvU3RyaW5nKToKKyAgICAgICAgKEtKUzo6Ym9vbGVhblByb3RvRnVuY1ZhbHVlT2YpOgorICAg
ICAgICAoS0pTOjpCb29sZWFuT2JqZWN0SW1wOjpCb29sZWFuT2JqZWN0SW1wKToKKyAgICAgICAg
KEtKUzo6Qm9vbGVhbk9iamVjdEltcDo6aW1wbGVtZW50c0NvbnN0cnVjdCk6CisgICAgICAgIChL
SlM6OkJvb2xlYW5PYmplY3RJbXA6OmNvbnN0cnVjdCk6CisgICAgICAgIChLSlM6OkJvb2xlYW5P
YmplY3RJbXA6OmNhbGxBc0Z1bmN0aW9uKToKKyAgICAgICAgKiBranMvYm9vbF9vYmplY3QuaDoK
KyAgICAgICAgKEtKUzo6Qm9vbGVhbkluc3RhbmNlOjpjbGFzc0luZm8pOgorICAgICAgICAqIGtq
cy9lcnJvcl9vYmplY3QuY3BwOgorICAgICAgICAoS0pTOjpFcnJvclByb3RvdHlwZTo6RXJyb3JQ
cm90b3R5cGUpOgorICAgICAgICAoS0pTOjplcnJvclByb3RvRnVuY1RvU3RyaW5nKToKKyAgICAg
ICAgKiBranMvZXJyb3Jfb2JqZWN0Lmg6CisgICAgICAgICoga2pzL2Z1bmN0aW9uLmNwcDoKKyAg
ICAgICAgKEtKUzo6Z2xvYmFsRnVuY0V2YWwpOgorICAgICAgICAoS0pTOjpnbG9iYWxGdW5jUGFy
c2VJbnQpOgorICAgICAgICAoS0pTOjpnbG9iYWxGdW5jUGFyc2VGbG9hdCk6CisgICAgICAgIChL
SlM6Omdsb2JhbEZ1bmNJc05hTik6CisgICAgICAgIChLSlM6Omdsb2JhbEZ1bmNJc0Zpbml0ZSk6
CisgICAgICAgIChLSlM6Omdsb2JhbEZ1bmNEZWNvZGVVUkkpOgorICAgICAgICAoS0pTOjpnbG9i
YWxGdW5jRGVjb2RlVVJJQ29tcG9uZW50KToKKyAgICAgICAgKEtKUzo6Z2xvYmFsRnVuY0VuY29k
ZVVSSSk6CisgICAgICAgIChLSlM6Omdsb2JhbEZ1bmNFbmNvZGVVUklDb21wb25lbnQpOgorICAg
ICAgICAoS0pTOjpnbG9iYWxGdW5jRXNjYXBlKToKKyAgICAgICAgKEtKUzo6Z2xvYmFsRnVuY1Vu
RXNjYXBlKToKKyAgICAgICAgKEtKUzo6Z2xvYmFsRnVuY0tKU1ByaW50KToKKyAgICAgICAgKEtK
Uzo6UHJvdG90eXBlRnVuY3Rpb246OlByb3RvdHlwZUZ1bmN0aW9uKToKKyAgICAgICAgKiBranMv
ZnVuY3Rpb24uaDoKKyAgICAgICAgKiBranMvZnVuY3Rpb25fb2JqZWN0LmNwcDoKKyAgICAgICAg
KEtKUzo6RnVuY3Rpb25Qcm90b3R5cGU6OkZ1bmN0aW9uUHJvdG90eXBlKToKKyAgICAgICAgKEtK
Uzo6ZnVuY3Rpb25Qcm90b0Z1bmNUb1N0cmluZyk6CisgICAgICAgIChLSlM6OmZ1bmN0aW9uUHJv
dG9GdW5jQXBwbHkpOgorICAgICAgICAoS0pTOjpmdW5jdGlvblByb3RvRnVuY0NhbGwpOgorICAg
ICAgICAqIGtqcy9mdW5jdGlvbl9vYmplY3QuaDoKKyAgICAgICAgKiBranMvbnVtYmVyX29iamVj
dC5jcHA6CisgICAgICAgIChLSlM6Ok51bWJlclByb3RvdHlwZTo6TnVtYmVyUHJvdG90eXBlKToK
KyAgICAgICAgKEtKUzo6bnVtYmVyUHJvdG9GdW5jVG9TdHJpbmcpOgorICAgICAgICAoS0pTOjpu
dW1iZXJQcm90b0Z1bmNUb0xvY2FsZVN0cmluZyk6CisgICAgICAgIChLSlM6Om51bWJlclByb3Rv
RnVuY1ZhbHVlT2YpOgorICAgICAgICAoS0pTOjpudW1iZXJQcm90b0Z1bmNUb0ZpeGVkKToKKyAg
ICAgICAgKEtKUzo6bnVtYmVyUHJvdG9GdW5jVG9FeHBvbmVudGlhbCk6CisgICAgICAgIChLSlM6
Om51bWJlclByb3RvRnVuY1RvUHJlY2lzaW9uKToKKyAgICAgICAgKiBranMvbnVtYmVyX29iamVj
dC5oOgorICAgICAgICAoS0pTOjpOdW1iZXJJbnN0YW5jZTo6Y2xhc3NJbmZvKToKKyAgICAgICAg
KEtKUzo6TnVtYmVyT2JqZWN0SW1wOjpjbGFzc0luZm8pOgorICAgICAgICAoS0pTOjpOdW1iZXJP
YmplY3RJbXA6Oik6CisgICAgICAgICoga2pzL29iamVjdF9vYmplY3QuY3BwOgorICAgICAgICAo
S0pTOjpPYmplY3RQcm90b3R5cGU6Ok9iamVjdFByb3RvdHlwZSk6CisgICAgICAgIChLSlM6Om9i
amVjdFByb3RvRnVuY1ZhbHVlT2YpOgorICAgICAgICAoS0pTOjpvYmplY3RQcm90b0Z1bmNIYXNP
d25Qcm9wZXJ0eSk6CisgICAgICAgIChLSlM6Om9iamVjdFByb3RvRnVuY0lzUHJvdG90eXBlT2Yp
OgorICAgICAgICAoS0pTOjpvYmplY3RQcm90b0Z1bmNEZWZpbmVHZXR0ZXIpOgorICAgICAgICAo
S0pTOjpvYmplY3RQcm90b0Z1bmNEZWZpbmVTZXR0ZXIpOgorICAgICAgICAoS0pTOjpvYmplY3RQ
cm90b0Z1bmNMb29rdXBHZXR0ZXIpOgorICAgICAgICAoS0pTOjpvYmplY3RQcm90b0Z1bmNMb29r
dXBTZXR0ZXIpOgorICAgICAgICAoS0pTOjpvYmplY3RQcm90b0Z1bmNQcm9wZXJ0eUlzRW51bWVy
YWJsZSk6CisgICAgICAgIChLSlM6Om9iamVjdFByb3RvRnVuY1RvTG9jYWxlU3RyaW5nKToKKyAg
ICAgICAgKEtKUzo6b2JqZWN0UHJvdG9GdW5jVG9TdHJpbmcpOgorICAgICAgICAqIGtqcy9vYmpl
Y3Rfb2JqZWN0Lmg6CisgICAgICAgICoga2pzL3JlZ2V4cF9vYmplY3QuY3BwOgorICAgICAgICAo
S0pTOjpSZWdFeHBQcm90b3R5cGU6OlJlZ0V4cFByb3RvdHlwZSk6CisgICAgICAgIChLSlM6OnJl
Z0V4cFByb3RvRnVuY1Rlc3QpOgorICAgICAgICAoS0pTOjpyZWdFeHBQcm90b0Z1bmNFeGVjKToK
KyAgICAgICAgKEtKUzo6cmVnRXhwUHJvdG9GdW5jQ29tcGlsZSk6CisgICAgICAgIChLSlM6OnJl
Z0V4cFByb3RvRnVuY1RvU3RyaW5nKToKKyAgICAgICAgKiBranMvcmVnZXhwX29iamVjdC5oOgor
CiAyMDA4LTAxLTE2ICBDYW1lcm9uIFp3YXJpY2ggIDxjd3p3YXJpY2hAdXdhdGVybG9vLmNhPgog
CiAgICAgICAgIFJldmlld2VkIGJ5IE1hY2llaiAmIERhcmluLgpJbmRleDoga2pzL0pTR2xvYmFs
T2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBranMvSlNHbG9iYWxPYmplY3QuY3BwCShyZXZpc2lv
biAyOTU0MSkKKysrIGtqcy9KU0dsb2JhbE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIz
MSw3ICsyMzEsNyBAQCB2b2lkIEpTR2xvYmFsT2JqZWN0OjpyZXNldChKU1ZhbHVlKiBwcm90CiAg
ICAgZCgpLT5ib29sZWFuUHJvdG90eXBlID0gbmV3IEJvb2xlYW5Qcm90b3R5cGUoZXhlYywgZCgp
LT5vYmplY3RQcm90b3R5cGUsIGQoKS0+ZnVuY3Rpb25Qcm90b3R5cGUpOwogICAgIGQoKS0+bnVt
YmVyUHJvdG90eXBlID0gbmV3IE51bWJlclByb3RvdHlwZShleGVjLCBkKCktPm9iamVjdFByb3Rv
dHlwZSwgZCgpLT5mdW5jdGlvblByb3RvdHlwZSk7CiAgICAgZCgpLT5kYXRlUHJvdG90eXBlID0g
bmV3IERhdGVQcm90b3R5cGUoZXhlYywgZCgpLT5vYmplY3RQcm90b3R5cGUpOwotICAgIGQoKS0+
cmVnRXhwUHJvdG90eXBlID0gbmV3IFJlZ0V4cFByb3RvdHlwZShleGVjLCBkKCktPm9iamVjdFBy
b3RvdHlwZSwgZCgpLT5mdW5jdGlvblByb3RvdHlwZSk7OworICAgIGQoKS0+cmVnRXhwUHJvdG90
eXBlID0gbmV3IFJlZ0V4cFByb3RvdHlwZShleGVjLCBkKCktPm9iamVjdFByb3RvdHlwZSwgZCgp
LT5mdW5jdGlvblByb3RvdHlwZSk7CiAgICAgZCgpLT5lcnJvclByb3RvdHlwZSA9IG5ldyBFcnJv
clByb3RvdHlwZShleGVjLCBkKCktPm9iamVjdFByb3RvdHlwZSwgZCgpLT5mdW5jdGlvblByb3Rv
dHlwZSk7CiAgICAgCiAgICAgZCgpLT5ldmFsRXJyb3JQcm90b3R5cGUgPSBuZXcgTmF0aXZlRXJy
b3JQcm90b3R5cGUoZXhlYywgZCgpLT5lcnJvclByb3RvdHlwZSwgIkV2YWxFcnJvciIsICJFdmFs
RXJyb3IiKTsKQEAgLTMxMSwxOSArMzExLDE5IEBAIHZvaWQgSlNHbG9iYWxPYmplY3Q6OnJlc2V0
KEpTVmFsdWUqIHByb3QKIAogICAgIC8vIFNldCBnbG9iYWwgZnVuY3Rpb25zLgogCi0gICAgcHV0
RGlyZWN0RnVuY3Rpb24obmV3IEdsb2JhbEZ1bmNJbXAoZXhlYywgZCgpLT5mdW5jdGlvblByb3Rv
dHlwZSwgR2xvYmFsRnVuY0ltcDo6RXZhbCwgMSwgImV2YWwiKSwgRG9udEVudW0pOwotICAgIHB1
dERpcmVjdEZ1bmN0aW9uKG5ldyBHbG9iYWxGdW5jSW1wKGV4ZWMsIGQoKS0+ZnVuY3Rpb25Qcm90
b3R5cGUsIEdsb2JhbEZ1bmNJbXA6OlBhcnNlSW50LCAyLCAicGFyc2VJbnQiKSwgRG9udEVudW0p
OwotICAgIHB1dERpcmVjdEZ1bmN0aW9uKG5ldyBHbG9iYWxGdW5jSW1wKGV4ZWMsIGQoKS0+ZnVu
Y3Rpb25Qcm90b3R5cGUsIEdsb2JhbEZ1bmNJbXA6OlBhcnNlRmxvYXQsIDEsICJwYXJzZUZsb2F0
IiksIERvbnRFbnVtKTsKLSAgICBwdXREaXJlY3RGdW5jdGlvbihuZXcgR2xvYmFsRnVuY0ltcChl
eGVjLCBkKCktPmZ1bmN0aW9uUHJvdG90eXBlLCBHbG9iYWxGdW5jSW1wOjpJc05hTiwgMSwgImlz
TmFOIiksIERvbnRFbnVtKTsKLSAgICBwdXREaXJlY3RGdW5jdGlvbihuZXcgR2xvYmFsRnVuY0lt
cChleGVjLCBkKCktPmZ1bmN0aW9uUHJvdG90eXBlLCBHbG9iYWxGdW5jSW1wOjpJc0Zpbml0ZSwg
MSwgImlzRmluaXRlIiksIERvbnRFbnVtKTsKLSAgICBwdXREaXJlY3RGdW5jdGlvbihuZXcgR2xv
YmFsRnVuY0ltcChleGVjLCBkKCktPmZ1bmN0aW9uUHJvdG90eXBlLCBHbG9iYWxGdW5jSW1wOjpF
c2NhcGUsIDEsICJlc2NhcGUiKSwgRG9udEVudW0pOwotICAgIHB1dERpcmVjdEZ1bmN0aW9uKG5l
dyBHbG9iYWxGdW5jSW1wKGV4ZWMsIGQoKS0+ZnVuY3Rpb25Qcm90b3R5cGUsIEdsb2JhbEZ1bmNJ
bXA6OlVuRXNjYXBlLCAxLCAidW5lc2NhcGUiKSwgRG9udEVudW0pOwotICAgIHB1dERpcmVjdEZ1
bmN0aW9uKG5ldyBHbG9iYWxGdW5jSW1wKGV4ZWMsIGQoKS0+ZnVuY3Rpb25Qcm90b3R5cGUsIEds
b2JhbEZ1bmNJbXA6OkRlY29kZVVSSSwgMSwgImRlY29kZVVSSSIpLCBEb250RW51bSk7Ci0gICAg
cHV0RGlyZWN0RnVuY3Rpb24obmV3IEdsb2JhbEZ1bmNJbXAoZXhlYywgZCgpLT5mdW5jdGlvblBy
b3RvdHlwZSwgR2xvYmFsRnVuY0ltcDo6RGVjb2RlVVJJQ29tcG9uZW50LCAxLCAiZGVjb2RlVVJJ
Q29tcG9uZW50IiksIERvbnRFbnVtKTsKLSAgICBwdXREaXJlY3RGdW5jdGlvbihuZXcgR2xvYmFs
RnVuY0ltcChleGVjLCBkKCktPmZ1bmN0aW9uUHJvdG90eXBlLCBHbG9iYWxGdW5jSW1wOjpFbmNv
ZGVVUkksIDEsICJlbmNvZGVVUkkiKSwgRG9udEVudW0pOwotICAgIHB1dERpcmVjdEZ1bmN0aW9u
KG5ldyBHbG9iYWxGdW5jSW1wKGV4ZWMsIGQoKS0+ZnVuY3Rpb25Qcm90b3R5cGUsIEdsb2JhbEZ1
bmNJbXA6OkVuY29kZVVSSUNvbXBvbmVudCwgMSwgImVuY29kZVVSSUNvbXBvbmVudCIpLCBEb250
RW51bSk7CisgICAgcHV0RGlyZWN0RnVuY3Rpb24obmV3IFByb3RvdHlwZUZ1bmN0aW9uKGV4ZWMs
IGQoKS0+ZnVuY3Rpb25Qcm90b3R5cGUsIDEsICJldmFsIiwgZ2xvYmFsRnVuY0V2YWwpLCBEb250
RW51bSk7CisgICAgcHV0RGlyZWN0RnVuY3Rpb24obmV3IFByb3RvdHlwZUZ1bmN0aW9uKGV4ZWMs
IGQoKS0+ZnVuY3Rpb25Qcm90b3R5cGUsIDIsICJwYXJzZUludCIsIGdsb2JhbEZ1bmNQYXJzZUlu
dCksIERvbnRFbnVtKTsKKyAgICBwdXREaXJlY3RGdW5jdGlvbihuZXcgUHJvdG90eXBlRnVuY3Rp
b24oZXhlYywgZCgpLT5mdW5jdGlvblByb3RvdHlwZSwgMSwgInBhcnNlRmxvYXQiLCBnbG9iYWxG
dW5jUGFyc2VGbG9hdCksIERvbnRFbnVtKTsKKyAgICBwdXREaXJlY3RGdW5jdGlvbihuZXcgUHJv
dG90eXBlRnVuY3Rpb24oZXhlYywgZCgpLT5mdW5jdGlvblByb3RvdHlwZSwgMSwgImlzTmFOIiwg
Z2xvYmFsRnVuY0lzTmFOKSwgRG9udEVudW0pOworICAgIHB1dERpcmVjdEZ1bmN0aW9uKG5ldyBQ
cm90b3R5cGVGdW5jdGlvbihleGVjLCBkKCktPmZ1bmN0aW9uUHJvdG90eXBlLCAxLCAiaXNGaW5p
dGUiLCBnbG9iYWxGdW5jSXNGaW5pdGUpLCBEb250RW51bSk7CisgICAgcHV0RGlyZWN0RnVuY3Rp
b24obmV3IFByb3RvdHlwZUZ1bmN0aW9uKGV4ZWMsIGQoKS0+ZnVuY3Rpb25Qcm90b3R5cGUsIDEs
ICJlc2NhcGUiLCBnbG9iYWxGdW5jRXNjYXBlKSwgRG9udEVudW0pOworICAgIHB1dERpcmVjdEZ1
bmN0aW9uKG5ldyBQcm90b3R5cGVGdW5jdGlvbihleGVjLCBkKCktPmZ1bmN0aW9uUHJvdG90eXBl
LCAxLCAidW5lc2NhcGUiLCBnbG9iYWxGdW5jVW5Fc2NhcGUpLCBEb250RW51bSk7CisgICAgcHV0
RGlyZWN0RnVuY3Rpb24obmV3IFByb3RvdHlwZUZ1bmN0aW9uKGV4ZWMsIGQoKS0+ZnVuY3Rpb25Q
cm90b3R5cGUsIDEsICJkZWNvZGVVUkkiLCBnbG9iYWxGdW5jRGVjb2RlVVJJKSwgRG9udEVudW0p
OworICAgIHB1dERpcmVjdEZ1bmN0aW9uKG5ldyBQcm90b3R5cGVGdW5jdGlvbihleGVjLCBkKCkt
PmZ1bmN0aW9uUHJvdG90eXBlLCAxLCAiZGVjb2RlVVJJQ29tcG9uZW50IiwgZ2xvYmFsRnVuY0Rl
Y29kZVVSSUNvbXBvbmVudCksIERvbnRFbnVtKTsKKyAgICBwdXREaXJlY3RGdW5jdGlvbihuZXcg
UHJvdG90eXBlRnVuY3Rpb24oZXhlYywgZCgpLT5mdW5jdGlvblByb3RvdHlwZSwgMSwgImVuY29k
ZVVSSSIsIGdsb2JhbEZ1bmNFbmNvZGVVUkkpLCBEb250RW51bSk7CisgICAgcHV0RGlyZWN0RnVu
Y3Rpb24obmV3IFByb3RvdHlwZUZ1bmN0aW9uKGV4ZWMsIGQoKS0+ZnVuY3Rpb25Qcm90b3R5cGUs
IDEsICJlbmNvZGVVUklDb21wb25lbnQiLCBnbG9iYWxGdW5jRW5jb2RlVVJJQ29tcG9uZW50KSwg
RG9udEVudW0pOwogI2lmbmRlZiBOREVCVUcKLSAgICBwdXREaXJlY3RGdW5jdGlvbihuZXcgR2xv
YmFsRnVuY0ltcChleGVjLCBkKCktPmZ1bmN0aW9uUHJvdG90eXBlLCBHbG9iYWxGdW5jSW1wOjpL
SlNQcmludCwgMSwgImtqc3ByaW50IiksIERvbnRFbnVtKTsKKyAgICBwdXREaXJlY3RGdW5jdGlv
bihuZXcgUHJvdG90eXBlRnVuY3Rpb24oZXhlYywgZCgpLT5mdW5jdGlvblByb3RvdHlwZSwgMSwg
Imtqc3ByaW50IiwgZ2xvYmFsRnVuY0tKU1ByaW50KSwgRG9udEVudW0pOwogI2VuZGlmCiAKICAg
ICAvLyBTZXQgcHJvdG90eXBlLCBhbmQgYWxzbyBpbnNlcnQgdGhlIG9iamVjdCBwcm90b3R5cGUg
YXQgdGhlIGVuZCBvZiB0aGUgY2hhaW4uCkluZGV4OiBranMvYXJyYXlfb2JqZWN0LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0ga2pzL2FycmF5X29iamVjdC5oCShyZXZpc2lvbiAyOTU0MSkKKysrIGtqcy9hcnJh
eV9vYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMSw4ICsxLDYgQEAKLS8vIC0qLSBjLWJhc2lj
LW9mZnNldDogMiAtKi0KIC8qCi0gKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEtERSBsaWJy
YXJpZXMKICAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMCBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBr
ZGUub3JnKQotICogQ29weXJpZ2h0IChDKSAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwpJbmRleDoga2pzL2Jvb2xfb2JqZWN0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBranMvYm9vbF9vYmplY3QuY3BwCShyZXZpc2lvbiAyOTU0MSkKKysrIGtqcy9i
b29sX29iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsOCArMSw2IEBACi0vLyAtKi0gYy1i
YXNpYy1vZmZzZXQ6IDIgLSotCiAvKgotICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBLREUg
bGlicmFyaWVzCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDAgSGFycmkgUG9ydGVuIChwb3J0
ZW5Aa2RlLm9yZykKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDMgQXBwbGUgQ29tcHV0ZXIsIEluYy4K
KyAqICBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwpAQCAtMjgsMTQgKzI2LDE0IEBACiAjaW5jbHVkZSAi
b3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CiAKLXVzaW5nIG5hbWVz
cGFjZSBLSlM7CituYW1lc3BhY2UgS0pTIHsKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tIEJvb2xlYW5JbnN0YW5jZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogY29u
c3QgQ2xhc3NJbmZvIEJvb2xlYW5JbnN0YW5jZTo6aW5mbyA9IHsiQm9vbGVhbiIsIDAsIDB9Owog
Ci1Cb29sZWFuSW5zdGFuY2U6OkJvb2xlYW5JbnN0YW5jZShKU09iamVjdCAqcHJvdG8pCi0gIDog
SlNXcmFwcGVyT2JqZWN0KHByb3RvKQorQm9vbGVhbkluc3RhbmNlOjpCb29sZWFuSW5zdGFuY2Uo
SlNPYmplY3QqIHByb3RvKQorICAgIDogSlNXcmFwcGVyT2JqZWN0KHByb3RvKQogewogfQogCkBA
IC00Myw4MiArNDEsODEgQEAgQm9vbGVhbkluc3RhbmNlOjpCb29sZWFuSW5zdGFuY2UoSlNPYmpl
YwogCiAvLyBFQ01BIDE1LjYuNAogCi1Cb29sZWFuUHJvdG90eXBlOjpCb29sZWFuUHJvdG90eXBl
KEV4ZWNTdGF0ZSogZXhlYywgT2JqZWN0UHJvdG90eXBlKiBvYmplY3RQcm90bywgRnVuY3Rpb25Q
cm90b3R5cGUqIGZ1bmNQcm90bykKLSAgOiBCb29sZWFuSW5zdGFuY2Uob2JqZWN0UHJvdG8pCitC
b29sZWFuUHJvdG90eXBlOjpCb29sZWFuUHJvdG90eXBlKEV4ZWNTdGF0ZSogZXhlYywgT2JqZWN0
UHJvdG90eXBlKiBvYmplY3RQcm90b3R5cGUsIEZ1bmN0aW9uUHJvdG90eXBlKiBmdW5jdGlvblBy
b3RvdHlwZSkKKyAgICA6IEJvb2xlYW5JbnN0YW5jZShvYmplY3RQcm90b3R5cGUpCiB7Ci0gIHB1
dERpcmVjdEZ1bmN0aW9uKG5ldyBCb29sZWFuUHJvdG9GdW5jKGV4ZWMsIGZ1bmNQcm90bywgQm9v
bGVhblByb3RvRnVuYzo6VG9TdHJpbmcsIDAsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS50b1N0cmlu
ZyksIERvbnRFbnVtKTsKLSAgcHV0RGlyZWN0RnVuY3Rpb24obmV3IEJvb2xlYW5Qcm90b0Z1bmMo
ZXhlYywgZnVuY1Byb3RvLCBCb29sZWFuUHJvdG9GdW5jOjpWYWx1ZU9mLCAwLCBleGVjLT5wcm9w
ZXJ0eU5hbWVzKCkudmFsdWVPZiksICBEb250RW51bSk7Ci0gIHNldEludGVybmFsVmFsdWUoanNC
b29sZWFuKGZhbHNlKSk7CisgICAgc2V0SW50ZXJuYWxWYWx1ZShqc0Jvb2xlYW4oZmFsc2UpKTsK
KworICAgIHB1dERpcmVjdEZ1bmN0aW9uKG5ldyBQcm90b3R5cGVGdW5jdGlvbihleGVjLCBmdW5j
dGlvblByb3RvdHlwZSwgMCwgZXhlYy0+cHJvcGVydHlOYW1lcygpLnRvU3RyaW5nLCBib29sZWFu
UHJvdG9GdW5jVG9TdHJpbmcpLCBEb250RW51bSk7CisgICAgcHV0RGlyZWN0RnVuY3Rpb24obmV3
IFByb3RvdHlwZUZ1bmN0aW9uKGV4ZWMsIGZ1bmN0aW9uUHJvdG90eXBlLCAwLCBleGVjLT5wcm9w
ZXJ0eU5hbWVzKCkudmFsdWVPZiwgYm9vbGVhblByb3RvRnVuY1ZhbHVlT2YpLCBEb250RW51bSk7
CiB9CiAKIAotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEJvb2xlYW5Qcm90b0Z1
bmMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLSBGdW5jdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLy8gRUNNQSAx
NS42LjQuMiArIDE1LjYuNC4zCiAKLUJvb2xlYW5Qcm90b0Z1bmM6OkJvb2xlYW5Qcm90b0Z1bmMo
RXhlY1N0YXRlKiBleGVjLCBGdW5jdGlvblByb3RvdHlwZSogZnVuY1Byb3RvLCBpbnQgaSwgaW50
IGxlbiwgY29uc3QgSWRlbnRpZmllciYgbmFtZSkKLSAgOiBJbnRlcm5hbEZ1bmN0aW9uSW1wKGZ1
bmNQcm90bywgbmFtZSkKLSAgLCBpZChpKQorSlNWYWx1ZSogYm9vbGVhblByb3RvRnVuY1RvU3Ry
aW5nKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHRoaXNPYmosIGNvbnN0IExpc3QmKQogewot
ICBwdXREaXJlY3QoZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCwgbGVuLCBEb250RGVsZXRl
fFJlYWRPbmx5fERvbnRFbnVtKTsKLX0KKyAgICBpZiAoIXRoaXNPYmotPmluaGVyaXRzKCZCb29s
ZWFuSW5zdGFuY2U6OmluZm8pKQorICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBl
RXJyb3IpOwogCisgICAgSlNWYWx1ZSogdiA9IHN0YXRpY19jYXN0PEJvb2xlYW5JbnN0YW5jZSo+
KHRoaXNPYmopLT5pbnRlcm5hbFZhbHVlKCk7CisgICAgQVNTRVJUKHYpOwogCi0vLyBFQ01BIDE1
LjYuNC4yICsgMTUuNi40LjMKLUpTVmFsdWUgKkJvb2xlYW5Qcm90b0Z1bmM6OmNhbGxBc0Z1bmN0
aW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QgKnRoaXNPYmosIGNvbnN0IExpc3QgJi8qYXJn
cyovKQorICAgIHJldHVybiBqc1N0cmluZyh2LT50b1N0cmluZyhleGVjKSk7Cit9CitKU1ZhbHVl
KiBib29sZWFuUHJvdG9GdW5jVmFsdWVPZihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiB0aGlz
T2JqLCBjb25zdCBMaXN0JikKIHsKLSAgLy8gbm8gZ2VuZXJpYyBmdW5jdGlvbi4gInRoaXMiIGhh
cyB0byBiZSBhIEJvb2xlYW4gb2JqZWN0Ci0gIGlmICghdGhpc09iai0+aW5oZXJpdHMoJkJvb2xl
YW5JbnN0YW5jZTo6aW5mbykpCi0gICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9y
KTsKLQotICAvLyBleGVjdXRlICJ0b1N0cmluZygpIiBvciAidmFsdWVPZigpIiwgcmVzcGVjdGl2
ZWx5CisgICAgaWYgKCF0aGlzT2JqLT5pbmhlcml0cygmQm9vbGVhbkluc3RhbmNlOjppbmZvKSkK
KyAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9yKTsKIAotICBKU1ZhbHVl
ICp2ID0gc3RhdGljX2Nhc3Q8Qm9vbGVhbkluc3RhbmNlKj4odGhpc09iaiktPmludGVybmFsVmFs
dWUoKTsKLSAgQVNTRVJUKHYpOworICAgIEpTVmFsdWUqIHYgPSBzdGF0aWNfY2FzdDxCb29sZWFu
SW5zdGFuY2UqPih0aGlzT2JqKS0+aW50ZXJuYWxWYWx1ZSgpOworICAgIEFTU0VSVCh2KTsKIAot
ICBpZiAoaWQgPT0gVG9TdHJpbmcpCi0gICAgcmV0dXJuIGpzU3RyaW5nKHYtPnRvU3RyaW5nKGV4
ZWMpKTsKLSAgcmV0dXJuIGpzQm9vbGVhbih2LT50b0Jvb2xlYW4oZXhlYykpOyAvKiBUT0RPOiBv
cHRpbWl6ZSBmb3IgYm9vbCBjYXNlICovCisgICAgLy8gVE9ETzogb3B0aW1pemUgZm9yIGJvb2wg
Y2FzZQorICAgIHJldHVybiBqc0Jvb2xlYW4odi0+dG9Cb29sZWFuKGV4ZWMpKTsKIH0KIAogLy8g
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEJvb2xlYW5PYmplY3RJbXAgLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogCi1Cb29sZWFuT2JqZWN0SW1wOjpCb29sZWFuT2JqZWN0
SW1wKEV4ZWNTdGF0ZSogZXhlYywgRnVuY3Rpb25Qcm90b3R5cGUqIGZ1bmNQcm90bywgQm9vbGVh
blByb3RvdHlwZSogYm9vbGVhblByb3RvKQotICA6IEludGVybmFsRnVuY3Rpb25JbXAoZnVuY1By
b3RvKQorQm9vbGVhbk9iamVjdEltcDo6Qm9vbGVhbk9iamVjdEltcChFeGVjU3RhdGUqIGV4ZWMs
IEZ1bmN0aW9uUHJvdG90eXBlKiBmdW5jdGlvblByb3RvdHlwZSwgQm9vbGVhblByb3RvdHlwZSog
Ym9vbGVhblByb3RvdHlwZSkKKyAgICA6IEludGVybmFsRnVuY3Rpb25JbXAoZnVuY3Rpb25Qcm90
b3R5cGUpCiB7Ci0gIHB1dERpcmVjdChleGVjLT5wcm9wZXJ0eU5hbWVzKCkucHJvdG90eXBlLCBi
b29sZWFuUHJvdG8sIERvbnRFbnVtfERvbnREZWxldGV8UmVhZE9ubHkpOworICAgIHB1dERpcmVj
dChleGVjLT5wcm9wZXJ0eU5hbWVzKCkucHJvdG90eXBlLCBib29sZWFuUHJvdG90eXBlLCBEb250
RW51bSB8IERvbnREZWxldGUgfCBSZWFkT25seSk7CiAKLSAgLy8gbm8uIG9mIGFyZ3VtZW50cyBm
b3IgY29uc3RydWN0b3IKLSAgcHV0RGlyZWN0KGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgs
IGpzTnVtYmVyKDEpLCBSZWFkT25seXxEb250RGVsZXRlfERvbnRFbnVtKTsKKyAgICAvLyBuby4g
b2YgYXJndW1lbnRzIGZvciBjb25zdHJ1Y3RvcgorICAgIHB1dERpcmVjdChleGVjLT5wcm9wZXJ0
eU5hbWVzKCkubGVuZ3RoLCBqc051bWJlcigxKSwgUmVhZE9ubHkgfCBEb250RGVsZXRlIHwgRG9u
dEVudW0pOwogfQogCiAKIGJvb2wgQm9vbGVhbk9iamVjdEltcDo6aW1wbGVtZW50c0NvbnN0cnVj
dCgpIGNvbnN0CiB7Ci0gIHJldHVybiB0cnVlOworICAgIHJldHVybiB0cnVlOwogfQogCiAvLyBF
Q01BIDE1LjYuMgotSlNPYmplY3QgKkJvb2xlYW5PYmplY3RJbXA6OmNvbnN0cnVjdChFeGVjU3Rh
dGUgKmV4ZWMsIGNvbnN0IExpc3QgJmFyZ3MpCitKU09iamVjdCogQm9vbGVhbk9iamVjdEltcDo6
Y29uc3RydWN0KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgTGlzdCYgYXJncykKIHsKLSAgQm9vbGVh
bkluc3RhbmNlICpvYmoobmV3IEJvb2xlYW5JbnN0YW5jZShleGVjLT5sZXhpY2FsR2xvYmFsT2Jq
ZWN0KCktPmJvb2xlYW5Qcm90b3R5cGUoKSkpOwotCi0gIGJvb2wgYjsKLSAgaWYgKGFyZ3Muc2l6
ZSgpID4gMCkKLSAgICBiID0gYXJnc1swXS0+dG9Cb29sZWFuKGV4ZWMpOwotICBlbHNlCi0gICAg
YiA9IGZhbHNlOworICAgIEJvb2xlYW5JbnN0YW5jZSogb2JqKG5ldyBCb29sZWFuSW5zdGFuY2Uo
ZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5ib29sZWFuUHJvdG90eXBlKCkpKTsKIAotICBv
YmotPnNldEludGVybmFsVmFsdWUoanNCb29sZWFuKGIpKTsKKyAgICBib29sIGI7CisgICAgaWYg
KGFyZ3Muc2l6ZSgpID4gMCkKKyAgICAgICAgYiA9IGFyZ3NbMF0tPnRvQm9vbGVhbihleGVjKTsK
KyAgICBlbHNlCisgICAgICAgIGIgPSBmYWxzZTsKIAotICByZXR1cm4gb2JqOworICAgIG9iai0+
c2V0SW50ZXJuYWxWYWx1ZShqc0Jvb2xlYW4oYikpOworICAgIHJldHVybiBvYmo7CiB9CiAKIC8v
IEVDTUEgMTUuNi4xCi1KU1ZhbHVlICpCb29sZWFuT2JqZWN0SW1wOjpjYWxsQXNGdW5jdGlvbihF
eGVjU3RhdGUgKmV4ZWMsIEpTT2JqZWN0ICosIGNvbnN0IExpc3QgJmFyZ3MpCitKU1ZhbHVlKiBC
b29sZWFuT2JqZWN0SW1wOjpjYWxsQXNGdW5jdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0
KiwgY29uc3QgTGlzdCYgYXJncykKIHsKLSAgaWYgKGFyZ3MuaXNFbXB0eSgpKQotICAgIHJldHVy
biBqc0Jvb2xlYW4oZmFsc2UpOwotICBlbHNlCisgICAgaWYgKGFyZ3MuaXNFbXB0eSgpKQorICAg
ICAgICByZXR1cm4ganNCb29sZWFuKGZhbHNlKTsKICAgICByZXR1cm4ganNCb29sZWFuKGFyZ3Nb
MF0tPnRvQm9vbGVhbihleGVjKSk7IC8qIFRPRE86IG9wdGltaXplIGZvciBib29sIGNhc2UgKi8K
IH0KIAorfSAvLyBuYW1lc3BhY2UgS0pTCkluZGV4OiBranMvYm9vbF9vYmplY3QuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBranMvYm9vbF9vYmplY3QuaAkocmV2aXNpb24gMjk1NDEpCisrKyBranMvYm9vbF9v
YmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMSw3ICsxLDYgQEAKLS8vIC0qLSBjLWJhc2ljLW9m
ZnNldDogMiAtKi0KIC8qCi0gKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEtERSBsaWJyYXJp
ZXMKICAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMCBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUu
b3JnKQorICogIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCkBAIC0yNyw2MSArMjYsNDUgQEAKIAogbmFtZXNwYWNl
IEtKUyB7CiAKLSAgY2xhc3MgQm9vbGVhbkluc3RhbmNlIDogcHVibGljIEpTV3JhcHBlck9iamVj
dCB7Ci0gIHB1YmxpYzoKLSAgICBCb29sZWFuSW5zdGFuY2UoSlNPYmplY3QgKnByb3RvKTsKLQot
ICAgIHZpcnR1YWwgY29uc3QgQ2xhc3NJbmZvICpjbGFzc0luZm8oKSBjb25zdCB7IHJldHVybiAm
aW5mbzsgfQotICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8gaW5mbzsKLSAgfTsKLQotICAvKioK
LSAgICogQGludGVybmFsCi0gICAqCi0gICAqIFRoZSBpbml0aWFsIHZhbHVlIG9mIEJvb2xlYW4u
cHJvdG90eXBlIChhbmQgdGh1cyBhbGwgb2JqZWN0cyBjcmVhdGVkCi0gICAqIHdpdGggdGhlIEJv
b2xlYW4gY29uc3RydWN0b3IKLSAgICovCi0gIGNsYXNzIEJvb2xlYW5Qcm90b3R5cGUgOiBwdWJs
aWMgQm9vbGVhbkluc3RhbmNlIHsKLSAgcHVibGljOgotICAgIEJvb2xlYW5Qcm90b3R5cGUoRXhl
Y1N0YXRlICpleGVjLAotICAgICAgICAgICAgICAgICAgICAgICAgT2JqZWN0UHJvdG90eXBlICpv
YmplY3RQcm90bywKLSAgICAgICAgICAgICAgICAgICAgICAgIEZ1bmN0aW9uUHJvdG90eXBlICpm
dW5jUHJvdG8pOwotICB9OwotCi0gIC8qKgotICAgKiBAaW50ZXJuYWwKLSAgICoKLSAgICogQ2xh
c3MgdG8gaW1wbGVtZW50IGFsbCBtZXRob2RzIHRoYXQgYXJlIHByb3BlcnRpZXMgb2YgdGhlCi0g
ICAqIEJvb2xlYW4ucHJvdG90eXBlIG9iamVjdAotICAgKi8KLSAgY2xhc3MgQm9vbGVhblByb3Rv
RnVuYyA6IHB1YmxpYyBJbnRlcm5hbEZ1bmN0aW9uSW1wIHsKLSAgcHVibGljOgotICAgIEJvb2xl
YW5Qcm90b0Z1bmMoRXhlY1N0YXRlKiwgRnVuY3Rpb25Qcm90b3R5cGUqLCBpbnQgaSwgaW50IGxl
biwgY29uc3QgSWRlbnRpZmllciYpOwotCi0gICAgdmlydHVhbCBKU1ZhbHVlICpjYWxsQXNGdW5j
dGlvbihFeGVjU3RhdGUgKmV4ZWMsIEpTT2JqZWN0ICp0aGlzT2JqLCBjb25zdCBMaXN0ICZhcmdz
KTsKLQotICAgIGVudW0geyBUb1N0cmluZywgVmFsdWVPZiB9OwotICBwcml2YXRlOgotICAgIGlu
dCBpZDsKLSAgfTsKLQotICAvKioKLSAgICogQGludGVybmFsCi0gICAqCi0gICAqIFRoZSBpbml0
aWFsIHZhbHVlIG9mIHRoZSB0aGUgZ2xvYmFsIHZhcmlhYmxlJ3MgIkJvb2xlYW4iIHByb3BlcnR5
Ci0gICAqLwotICBjbGFzcyBCb29sZWFuT2JqZWN0SW1wIDogcHVibGljIEludGVybmFsRnVuY3Rp
b25JbXAgewotICAgIGZyaWVuZCBjbGFzcyBCb29sZWFuUHJvdG9GdW5jOwotICBwdWJsaWM6Ci0g
ICAgQm9vbGVhbk9iamVjdEltcChFeGVjU3RhdGUgKmV4ZWMsIEZ1bmN0aW9uUHJvdG90eXBlICpm
dW5jUHJvdG8sCi0gICAgICAgICAgICAgICAgICAgICBCb29sZWFuUHJvdG90eXBlICpib29sZWFu
UHJvdG8pOwotCi0gICAgdmlydHVhbCBib29sIGltcGxlbWVudHNDb25zdHJ1Y3QoKSBjb25zdDsK
LSAgICB2aXJ0dWFsIEpTT2JqZWN0ICpjb25zdHJ1Y3QoRXhlY1N0YXRlICpleGVjLCBjb25zdCBM
aXN0ICZhcmdzKTsKKyAgICBjbGFzcyBCb29sZWFuSW5zdGFuY2UgOiBwdWJsaWMgSlNXcmFwcGVy
T2JqZWN0IHsKKyAgICBwdWJsaWM6CisgICAgICAgIEJvb2xlYW5JbnN0YW5jZShKU09iamVjdCog
cHJvdG8pOworCisgICAgICAgIHZpcnR1YWwgY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8oKSBj
b25zdCB7IHJldHVybiAmaW5mbzsgfQorICAgICAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIGlu
Zm87CisgICAgfTsKKworICAgIC8qKgorICAgICAqIEBpbnRlcm5hbAorICAgICAqCisgICAgICog
VGhlIGluaXRpYWwgdmFsdWUgb2YgQm9vbGVhbi5wcm90b3R5cGUgKGFuZCB0aHVzIGFsbCBvYmpl
Y3RzIGNyZWF0ZWQKKyAgICAgKiB3aXRoIHRoZSBCb29sZWFuIGNvbnN0cnVjdG9yCisgICAgICov
CisgICAgY2xhc3MgQm9vbGVhblByb3RvdHlwZSA6IHB1YmxpYyBCb29sZWFuSW5zdGFuY2Ugewor
ICAgIHB1YmxpYzoKKyAgICAgICAgQm9vbGVhblByb3RvdHlwZShFeGVjU3RhdGUqLCBPYmplY3RQ
cm90b3R5cGUqLCBGdW5jdGlvblByb3RvdHlwZSopOworICAgIH07CisKKyAgICAvLyBGdW5jdGlv
bnMKKyAgICBKU1ZhbHVlKiBib29sZWFuUHJvdG9GdW5jVG9TdHJpbmcoRXhlY1N0YXRlKiwgSlNP
YmplY3QqLCBjb25zdCBMaXN0Jik7CisgICAgSlNWYWx1ZSogYm9vbGVhblByb3RvRnVuY1ZhbHVl
T2YoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBjb25zdCBMaXN0Jik7CisKKworICAgIC8qKgorICAg
ICAqIEBpbnRlcm5hbAorICAgICAqCisgICAgICogVGhlIGluaXRpYWwgdmFsdWUgb2YgdGhlIHRo
ZSBnbG9iYWwgdmFyaWFibGUncyAiQm9vbGVhbiIgcHJvcGVydHkKKyAgICAgKi8KKyAgICBjbGFz
cyBCb29sZWFuT2JqZWN0SW1wIDogcHVibGljIEludGVybmFsRnVuY3Rpb25JbXAgeworICAgIHB1
YmxpYzoKKyAgICAgICAgQm9vbGVhbk9iamVjdEltcChFeGVjU3RhdGUqLCBGdW5jdGlvblByb3Rv
dHlwZSosIEJvb2xlYW5Qcm90b3R5cGUqKTsKKworICAgICAgICB2aXJ0dWFsIGJvb2wgaW1wbGVt
ZW50c0NvbnN0cnVjdCgpIGNvbnN0OworICAgICAgICB2aXJ0dWFsIEpTT2JqZWN0KiBjb25zdHJ1
Y3QoRXhlY1N0YXRlKiwgY29uc3QgTGlzdCYpOwogCi0gICAgdmlydHVhbCBKU1ZhbHVlICpjYWxs
QXNGdW5jdGlvbihFeGVjU3RhdGUgKmV4ZWMsIEpTT2JqZWN0ICp0aGlzT2JqLCBjb25zdCBMaXN0
ICZhcmdzKTsKLSAgfTsKKyAgICAgICAgdmlydHVhbCBKU1ZhbHVlKiBjYWxsQXNGdW5jdGlvbihF
eGVjU3RhdGUqLCBKU09iamVjdCosIGNvbnN0IExpc3QmKTsKKyAgICB9OwogCi19IC8vIG5hbWVz
cGFjZQorfSAvLyBuYW1lc3BhY2UgS0pTCiAKLSNlbmRpZgorI2VuZGlmIC8vIEJPT0xfT0JKRUNU
X0hfCkluZGV4OiBranMvZXJyb3Jfb2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBranMvZXJyb3Jf
b2JqZWN0LmNwcAkocmV2aXNpb24gMjk1NDEpCisrKyBranMvZXJyb3Jfb2JqZWN0LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDEsMjUgKzQxLDE4IEBAIEVycm9ySW5zdGFuY2U6OkVycm9ySW5zdGFu
Y2UoSlNPYmplY3QqIHAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBFcnJvclBy
b3RvdHlwZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIC8vIEVDTUEgMTUuOS40Ci1F
cnJvclByb3RvdHlwZTo6RXJyb3JQcm90b3R5cGUoRXhlY1N0YXRlKiBleGVjLCBPYmplY3RQcm90
b3R5cGUqIG9iamVjdFByb3RvLCBGdW5jdGlvblByb3RvdHlwZSogZnVuY1Byb3RvKQotICAgIDog
SlNPYmplY3Qob2JqZWN0UHJvdG8pCitFcnJvclByb3RvdHlwZTo6RXJyb3JQcm90b3R5cGUoRXhl
Y1N0YXRlKiBleGVjLCBPYmplY3RQcm90b3R5cGUqIG9iamVjdFByb3RvdHlwZSwgRnVuY3Rpb25Q
cm90b3R5cGUqIGZ1bmN0aW9uUHJvdG90eXBlKQorICAgIDogSlNPYmplY3Qob2JqZWN0UHJvdG90
eXBlKQogewogICAgIC8vIFRoZSBjb25zdHJ1Y3RvciB3aWxsIGJlIGFkZGVkIGxhdGVyIGluIEVy
cm9yT2JqZWN0SW1wJ3MgY29uc3RydWN0b3IKIAogICAgIHB1dChleGVjLCBleGVjLT5wcm9wZXJ0
eU5hbWVzKCkubmFtZSwganNTdHJpbmcoIkVycm9yIiksIERvbnRFbnVtKTsKICAgICBwdXQoZXhl
YywgZXhlYy0+cHJvcGVydHlOYW1lcygpLm1lc3NhZ2UsIGpzU3RyaW5nKCJVbmtub3duIGVycm9y
IiksIERvbnRFbnVtKTsKLSAgICBwdXREaXJlY3RGdW5jdGlvbihuZXcgRXJyb3JQcm90b0Z1bmNU
b1N0cmluZyhleGVjLCBmdW5jUHJvdG8pLCBEb250RW51bSk7Ci19Ci0KLS8vIC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLSBFcnJvclByb3RvRnVuYyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCiAKLUVycm9yUHJvdG9GdW5jVG9TdHJpbmc6OkVycm9yUHJvdG9GdW5jVG9TdHJpbmco
RXhlY1N0YXRlKiBleGVjLCBGdW5jdGlvblByb3RvdHlwZSogZnVuY1Byb3RvKQotICAgIDogSW50
ZXJuYWxGdW5jdGlvbkltcChmdW5jUHJvdG8sIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS50b1N0cmlu
ZykKLXsKLSAgICBwdXREaXJlY3QoZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCwganNOdW1i
ZXIoMCksIERvbnREZWxldGV8UmVhZE9ubHl8RG9udEVudW0pOworICAgIHB1dERpcmVjdEZ1bmN0
aW9uKG5ldyBQcm90b3R5cGVGdW5jdGlvbihleGVjLCBmdW5jdGlvblByb3RvdHlwZSwgMCwgZXhl
Yy0+cHJvcGVydHlOYW1lcygpLnRvU3RyaW5nLCBlcnJvclByb3RvRnVuY1RvU3RyaW5nKSwgRG9u
dEVudW0pOwogfQogCi1KU1ZhbHVlKiBFcnJvclByb3RvRnVuY1RvU3RyaW5nOjpjYWxsQXNGdW5j
dGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiB0aGlzT2JqLCBjb25zdCBMaXN0JikKK0pT
VmFsdWUqIGVycm9yUHJvdG9GdW5jVG9TdHJpbmcoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCog
dGhpc09iaiwgY29uc3QgTGlzdCYpCiB7CiAgICAgVVN0cmluZyBzID0gIkVycm9yIjsKIApJbmRl
eDoga2pzL2Vycm9yX29iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtqcy9lcnJvcl9vYmplY3QuaAko
cmV2aXNpb24gMjk1NDEpCisrKyBranMvZXJyb3Jfb2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAg
LTM4LDEyICszOCw3IEBAIG5hbWVzcGFjZSBLSlMgewogICAgICAgICBFcnJvclByb3RvdHlwZShF
eGVjU3RhdGUqLCBPYmplY3RQcm90b3R5cGUqLCBGdW5jdGlvblByb3RvdHlwZSopOwogICAgIH07
CiAKLSAgICBjbGFzcyBFcnJvclByb3RvRnVuY1RvU3RyaW5nIDogcHVibGljIEludGVybmFsRnVu
Y3Rpb25JbXAgewotICAgIHB1YmxpYzoKLSAgICAgICAgRXJyb3JQcm90b0Z1bmNUb1N0cmluZyhF
eGVjU3RhdGUqLCBGdW5jdGlvblByb3RvdHlwZSopOwotCi0gICAgICAgIHZpcnR1YWwgSlNWYWx1
ZSogY2FsbEFzRnVuY3Rpb24oRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBjb25zdCBMaXN0Jik7Ci0g
ICAgfTsKKyAgICBKU1ZhbHVlKiBlcnJvclByb3RvRnVuY1RvU3RyaW5nKEV4ZWNTdGF0ZSosIEpT
T2JqZWN0KiwgY29uc3QgTGlzdCYpOwogCiAgICAgY2xhc3MgRXJyb3JPYmplY3RJbXAgOiBwdWJs
aWMgSW50ZXJuYWxGdW5jdGlvbkltcCB7CiAgICAgcHVibGljOgpJbmRleDoga2pzL2Z1bmN0aW9u
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBranMvZnVuY3Rpb24uY3BwCShyZXZpc2lvbiAyOTU0MSkKKysr
IGtqcy9mdW5jdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3MSwxNSArNDcxLDcgQEAgQWN0
aXZhdGlvbkltcDo6QWN0aXZhdGlvbkRhdGE6OkFjdGl2YXRpbwogewogfQogCi0vLyAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gR2xvYmFsRnVuYyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQotCi0KLUdsb2JhbEZ1bmNJbXA6Okdsb2JhbEZ1bmNJbXAoRXhlY1N0YXRl
KiBleGVjLCBGdW5jdGlvblByb3RvdHlwZSogZnVuY1Byb3RvLCBpbnQgaSwgaW50IGxlbiwgY29u
c3QgSWRlbnRpZmllciYgbmFtZSkKLSAgOiBJbnRlcm5hbEZ1bmN0aW9uSW1wKGZ1bmNQcm90bywg
bmFtZSkKLSAgLCBpZChpKQotewotICBwdXREaXJlY3QoZXhlYy0+cHJvcGVydHlOYW1lcygpLmxl
bmd0aCwgbGVuLCBEb250RGVsZXRlfFJlYWRPbmx5fERvbnRFbnVtKTsKLX0KKy8vIC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBHbG9iYWwgRnVuY3Rpb25zIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCiAKIHN0YXRpYyBKU1ZhbHVlKiBlbmNvZGUoRXhlY1N0YXRlKiBl
eGVjLCBjb25zdCBMaXN0JiBhcmdzLCBjb25zdCBjaGFyKiBkb19ub3RfZXNjYXBlKQogewpAQCAt
NzAwLDE2MSArNjkyLDE3MyBAQCBzdGF0aWMgZG91YmxlIHBhcnNlRmxvYXQoY29uc3QgVVN0cmlu
ZyYgCiAgICAgcmV0dXJuIHMudG9Eb3VibGUoIHRydWUgLyp0b2xlcmFudCovLCBmYWxzZSAvKiBO
YU4gZm9yIGVtcHR5IHN0cmluZyAqLyApOwogfQogCi1KU1ZhbHVlKiBHbG9iYWxGdW5jSW1wOjpj
YWxsQXNGdW5jdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiB0aGlzT2JqLCBjb25zdCBM
aXN0JiBhcmdzKQorSlNWYWx1ZSogZ2xvYmFsRnVuY0V2YWwoRXhlY1N0YXRlKiBleGVjLCBKU09i
amVjdCogdGhpc09iaiwgY29uc3QgTGlzdCYgYXJncykKIHsKLSAgSlNWYWx1ZSogcmVzID0ganNV
bmRlZmluZWQoKTsKLQotICBzdGF0aWMgY29uc3QgY2hhciBkb19ub3RfZXNjYXBlW10gPQotICAg
ICJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWiIKLSAgICAiYWJjZGVmZ2hpamtsbW5vcHFyc3R1
dnd4eXoiCi0gICAgIjAxMjM0NTY3ODkiCi0gICAgIiorLS4vQF8iOwotCi0gIHN0YXRpYyBjb25z
dCBjaGFyIGRvX25vdF9lc2NhcGVfd2hlbl9lbmNvZGluZ19VUklfY29tcG9uZW50W10gPQotICAg
ICJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWiIKLSAgICAiYWJjZGVmZ2hpamtsbW5vcHFyc3R1
dnd4eXoiCi0gICAgIjAxMjM0NTY3ODkiCi0gICAgIiEnKCkqLS5ffiI7Ci0gIHN0YXRpYyBjb25z
dCBjaGFyIGRvX25vdF9lc2NhcGVfd2hlbl9lbmNvZGluZ19VUklbXSA9Ci0gICAgIkFCQ0RFRkdI
SUpLTE1OT1BRUlNUVVZXWFlaIgotICAgICJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eiIKLSAg
ICAiMDEyMzQ1Njc4OSIKLSAgICAiISMkJicoKSorLC0uLzo7PT9AX34iOwotICBzdGF0aWMgY29u
c3QgY2hhciBkb19ub3RfdW5lc2NhcGVfd2hlbl9kZWNvZGluZ19VUklbXSA9Ci0gICAgIiMkJiss
Lzo7PT9AIjsKLQotICBzd2l0Y2ggKGlkKSB7Ci0gICAgY2FzZSBFdmFsOiB7IC8vIGV2YWwoKQot
ICAgICAgSlNWYWx1ZSogeCA9IGFyZ3NbMF07Ci0gICAgICBpZiAoIXgtPmlzU3RyaW5nKCkpCisg
ICAgSlNWYWx1ZSogeCA9IGFyZ3NbMF07CisgICAgaWYgKCF4LT5pc1N0cmluZygpKQogICAgICAg
ICByZXR1cm4geDsKLSAgICAgIGVsc2UgewotICAgICAgICBVU3RyaW5nIHMgPSB4LT50b1N0cmlu
ZyhleGVjKTsKLSAgICAgICAgCi0gICAgICAgIGludCBzb3VyY2VJZDsKLSAgICAgICAgaW50IGVy
ckxpbmU7Ci0gICAgICAgIFVTdHJpbmcgZXJyTXNnOwotICAgICAgICBSZWZQdHI8RXZhbE5vZGU+
IGV2YWxOb2RlID0gcGFyc2VyKCkucGFyc2U8RXZhbE5vZGU+KFVTdHJpbmcoKSwgMCwgcy5kYXRh
KCksIHMuc2l6ZSgpLCAmc291cmNlSWQsICZlcnJMaW5lLCAmZXJyTXNnKTsKLQotICAgICAgICBE
ZWJ1Z2dlciogZGJnID0gZXhlYy0+ZHluYW1pY0dsb2JhbE9iamVjdCgpLT5kZWJ1Z2dlcigpOwot
ICAgICAgICBpZiAoZGJnKSB7Ci0gICAgICAgICAgYm9vbCBjb250ID0gZGJnLT5zb3VyY2VQYXJz
ZWQoZXhlYywgc291cmNlSWQsIFVTdHJpbmcoKSwgcywgMCwgZXJyTGluZSwgZXJyTXNnKTsKLSAg
ICAgICAgICBpZiAoIWNvbnQpCisKKyAgICBVU3RyaW5nIHMgPSB4LT50b1N0cmluZyhleGVjKTsK
KworICAgIGludCBzb3VyY2VJZDsKKyAgICBpbnQgZXJyTGluZTsKKyAgICBVU3RyaW5nIGVyck1z
ZzsKKyAgICBSZWZQdHI8RXZhbE5vZGU+IGV2YWxOb2RlID0gcGFyc2VyKCkucGFyc2U8RXZhbE5v
ZGU+KFVTdHJpbmcoKSwgMCwgcy5kYXRhKCksIHMuc2l6ZSgpLCAmc291cmNlSWQsICZlcnJMaW5l
LCAmZXJyTXNnKTsKKworICAgIERlYnVnZ2VyKiBkYmcgPSBleGVjLT5keW5hbWljR2xvYmFsT2Jq
ZWN0KCktPmRlYnVnZ2VyKCk7CisgICAgaWYgKGRiZykgeworICAgICAgICBib29sIGNvbnQgPSBk
YmctPnNvdXJjZVBhcnNlZChleGVjLCBzb3VyY2VJZCwgVVN0cmluZygpLCBzLCAwLCBlcnJMaW5l
LCBlcnJNc2cpOworICAgICAgICBpZiAoIWNvbnQpCiAgICAgICAgICAgICByZXR1cm4ganNVbmRl
ZmluZWQoKTsKLSAgICAgICAgfQorICAgIH0KIAotICAgICAgICAvLyBubyBwcm9ncmFtIG5vZGUg
bWVhbnMgYSBzeW50YXggb2NjdXJyZWQKLSAgICAgICAgaWYgKCFldmFsTm9kZSkKLSAgICAgICAg
ICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBTeW50YXhFcnJvciwgZXJyTXNnLCBlcnJMaW5lLCBz
b3VyY2VJZCwgTlVMTCk7Ci0KLSAgICAgICAgYm9vbCBzd2l0Y2hHbG9iYWwgPSB0aGlzT2JqICYm
IHRoaXNPYmogIT0gZXhlYy0+ZHluYW1pY0dsb2JhbE9iamVjdCgpICYmIHRoaXNPYmotPmlzR2xv
YmFsT2JqZWN0KCk7Ci0KLSAgICAgICAgLy8gZW50ZXIgYSBuZXcgZXhlY3V0aW9uIGNvbnRleHQK
LSAgICAgICAgaWYgKCFzd2l0Y2hHbG9iYWwpCi0gICAgICAgICAgICBleGVjLT5keW5hbWljR2xv
YmFsT2JqZWN0KCktPnRlYXJPZmZBY3RpdmF0aW9uKGV4ZWMpOwotICAgICAgICAKLSAgICAgICAg
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHN3aXRjaEdsb2JhbCA/IHN0YXRpY19jYXN0
PEpTR2xvYmFsT2JqZWN0Kj4odGhpc09iaikgOiBleGVjLT5keW5hbWljR2xvYmFsT2JqZWN0KCk7
Ci0gICAgICAgIEV4ZWNTdGF0ZSBuZXdFeGVjKGdsb2JhbE9iamVjdCwgZXZhbE5vZGUuZ2V0KCks
IGV4ZWMpOwotICAgICAgICAgIAotICAgICAgICBpZiAoc3dpdGNoR2xvYmFsKSB7Ci0gICAgICAg
ICAgICBuZXdFeGVjLnB1c2hTY29wZSh0aGlzT2JqKTsKLSAgICAgICAgICAgIG5ld0V4ZWMuc2V0
VmFyaWFibGVPYmplY3Qoc3RhdGljX2Nhc3Q8SlNHbG9iYWxPYmplY3QqPih0aGlzT2JqKSk7Ci0g
ICAgICAgIH0KLSAgICAgICAgSlNWYWx1ZSogdmFsdWUgPSBldmFsTm9kZS0+ZXhlY3V0ZSgmbmV3
RXhlYyk7Ci0gICAgICAgIGlmIChzd2l0Y2hHbG9iYWwpCi0gICAgICAgICAgICBuZXdFeGVjLnBv
cFNjb3BlKCk7Ci0KLSAgICAgICAgaWYgKG5ld0V4ZWMuY29tcGxldGlvblR5cGUoKSA9PSBUaHJv
dykgewotICAgICAgICAgICAgZXhlYy0+c2V0RXhjZXB0aW9uKHZhbHVlKTsKLSAgICAgICAgICAg
IHJldHVybiB2YWx1ZTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gdmFsdWUgPyB2YWx1ZSA6
IGpzVW5kZWZpbmVkKCk7Ci0gICAgICB9CisgICAgLy8gbm8gcHJvZ3JhbSBub2RlIG1lYW5zIGEg
c3ludGF4IG9jY3VycmVkCisgICAgaWYgKCFldmFsTm9kZSkKKyAgICAgICAgcmV0dXJuIHRocm93
RXJyb3IoZXhlYywgU3ludGF4RXJyb3IsIGVyck1zZywgZXJyTGluZSwgc291cmNlSWQsIE5VTEwp
OworCisgICAgYm9vbCBzd2l0Y2hHbG9iYWwgPSB0aGlzT2JqICYmIHRoaXNPYmogIT0gZXhlYy0+
ZHluYW1pY0dsb2JhbE9iamVjdCgpICYmIHRoaXNPYmotPmlzR2xvYmFsT2JqZWN0KCk7CisKKyAg
ICAvLyBlbnRlciBhIG5ldyBleGVjdXRpb24gY29udGV4dAorICAgIGlmICghc3dpdGNoR2xvYmFs
KQorICAgICAgICBleGVjLT5keW5hbWljR2xvYmFsT2JqZWN0KCktPnRlYXJPZmZBY3RpdmF0aW9u
KGV4ZWMpOworCisgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHN3aXRjaEdsb2Jh
bCA/IHN0YXRpY19jYXN0PEpTR2xvYmFsT2JqZWN0Kj4odGhpc09iaikgOiBleGVjLT5keW5hbWlj
R2xvYmFsT2JqZWN0KCk7CisgICAgRXhlY1N0YXRlIG5ld0V4ZWMoZ2xvYmFsT2JqZWN0LCBldmFs
Tm9kZS5nZXQoKSwgZXhlYyk7CisKKyAgICBpZiAoc3dpdGNoR2xvYmFsKSB7CisgICAgICAgIG5l
d0V4ZWMucHVzaFNjb3BlKHRoaXNPYmopOworICAgICAgICBuZXdFeGVjLnNldFZhcmlhYmxlT2Jq
ZWN0KHN0YXRpY19jYXN0PEpTR2xvYmFsT2JqZWN0Kj4odGhpc09iaikpOworICAgIH0KKworICAg
IEpTVmFsdWUqIHZhbHVlID0gZXZhbE5vZGUtPmV4ZWN1dGUoJm5ld0V4ZWMpOworICAgIGlmIChz
d2l0Y2hHbG9iYWwpCisgICAgICAgIG5ld0V4ZWMucG9wU2NvcGUoKTsKKworICAgIGlmIChuZXdF
eGVjLmNvbXBsZXRpb25UeXBlKCkgPT0gVGhyb3cpIHsKKyAgICAgICAgZXhlYy0+c2V0RXhjZXB0
aW9uKHZhbHVlKTsKKyAgICAgICAgcmV0dXJuIHZhbHVlOwogICAgIH0KLSAgY2FzZSBQYXJzZUlu
dDoKLSAgICByZXMgPSBqc051bWJlcihwYXJzZUludChhcmdzWzBdLT50b1N0cmluZyhleGVjKSwg
YXJnc1sxXS0+dG9JbnQzMihleGVjKSkpOwotICAgIGJyZWFrOwotICBjYXNlIFBhcnNlRmxvYXQ6
Ci0gICAgcmVzID0ganNOdW1iZXIocGFyc2VGbG9hdChhcmdzWzBdLT50b1N0cmluZyhleGVjKSkp
OwotICAgIGJyZWFrOwotICBjYXNlIElzTmFOOgotICAgIHJlcyA9IGpzQm9vbGVhbihpc25hbihh
cmdzWzBdLT50b051bWJlcihleGVjKSkpOwotICAgIGJyZWFrOwotICBjYXNlIElzRmluaXRlOiB7
CisKKyAgICByZXR1cm4gdmFsdWUgPyB2YWx1ZSA6IGpzVW5kZWZpbmVkKCk7Cit9CisKK0pTVmFs
dWUqIGdsb2JhbEZ1bmNQYXJzZUludChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgY29uc3Qg
TGlzdCYgYXJncykKK3sKKyAgICByZXR1cm4ganNOdW1iZXIocGFyc2VJbnQoYXJnc1swXS0+dG9T
dHJpbmcoZXhlYyksIGFyZ3NbMV0tPnRvSW50MzIoZXhlYykpKTsKK30KKworSlNWYWx1ZSogZ2xv
YmFsRnVuY1BhcnNlRmxvYXQoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIGNvbnN0IExpc3Qm
IGFyZ3MpCit7CisgICAgcmV0dXJuIGpzTnVtYmVyKHBhcnNlRmxvYXQoYXJnc1swXS0+dG9TdHJp
bmcoZXhlYykpKTsKK30KKworSlNWYWx1ZSogZ2xvYmFsRnVuY0lzTmFOKEV4ZWNTdGF0ZSogZXhl
YywgSlNPYmplY3QqLCBjb25zdCBMaXN0JiBhcmdzKQoreworICAgIHJldHVybiBqc0Jvb2xlYW4o
aXNuYW4oYXJnc1swXS0+dG9OdW1iZXIoZXhlYykpKTsKK30KKworSlNWYWx1ZSogZ2xvYmFsRnVu
Y0lzRmluaXRlKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBjb25zdCBMaXN0JiBhcmdzKQor
ewogICAgIGRvdWJsZSBuID0gYXJnc1swXS0+dG9OdW1iZXIoZXhlYyk7Ci0gICAgcmVzID0ganNC
b29sZWFuKCFpc25hbihuKSAmJiAhaXNpbmYobikpOwotICAgIGJyZWFrOwotICB9Ci0gIGNhc2Ug
RGVjb2RlVVJJOgotICAgIHJlcyA9IGRlY29kZShleGVjLCBhcmdzLCBkb19ub3RfdW5lc2NhcGVf
d2hlbl9kZWNvZGluZ19VUkksIHRydWUpOwotICAgIGJyZWFrOwotICBjYXNlIERlY29kZVVSSUNv
bXBvbmVudDoKLSAgICByZXMgPSBkZWNvZGUoZXhlYywgYXJncywgIiIsIHRydWUpOwotICAgIGJy
ZWFrOwotICBjYXNlIEVuY29kZVVSSToKLSAgICByZXMgPSBlbmNvZGUoZXhlYywgYXJncywgZG9f
bm90X2VzY2FwZV93aGVuX2VuY29kaW5nX1VSSSk7Ci0gICAgYnJlYWs7Ci0gIGNhc2UgRW5jb2Rl
VVJJQ29tcG9uZW50OgotICAgIHJlcyA9IGVuY29kZShleGVjLCBhcmdzLCBkb19ub3RfZXNjYXBl
X3doZW5fZW5jb2RpbmdfVVJJX2NvbXBvbmVudCk7Ci0gICAgYnJlYWs7Ci0gIGNhc2UgRXNjYXBl
OgotICAgIHsKLSAgICAgIFVTdHJpbmcgciA9ICIiLCBzLCBzdHIgPSBhcmdzWzBdLT50b1N0cmlu
ZyhleGVjKTsKLSAgICAgIGNvbnN0IFVDaGFyKiBjID0gc3RyLmRhdGEoKTsKLSAgICAgIGZvciAo
aW50IGsgPSAwOyBrIDwgc3RyLnNpemUoKTsgaysrLCBjKyspIHsKKyAgICByZXR1cm4ganNCb29s
ZWFuKCFpc25hbihuKSAmJiAhaXNpbmYobikpOworfQorCitKU1ZhbHVlKiBnbG9iYWxGdW5jRGVj
b2RlVVJJKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBjb25zdCBMaXN0JiBhcmdzKQorewor
ICAgIHN0YXRpYyBjb25zdCBjaGFyIGRvX25vdF91bmVzY2FwZV93aGVuX2RlY29kaW5nX1VSSVtd
ID0KKyAgICAgICAgIiMkJissLzo7PT9AIjsKKworICAgIHJldHVybiBkZWNvZGUoZXhlYywgYXJn
cywgZG9fbm90X3VuZXNjYXBlX3doZW5fZGVjb2RpbmdfVVJJLCB0cnVlKTsKK30KKworSlNWYWx1
ZSogZ2xvYmFsRnVuY0RlY29kZVVSSUNvbXBvbmVudChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0
KiwgY29uc3QgTGlzdCYgYXJncykKK3sKKyAgICByZXR1cm4gZGVjb2RlKGV4ZWMsIGFyZ3MsICIi
LCB0cnVlKTsKK30KKworSlNWYWx1ZSogZ2xvYmFsRnVuY0VuY29kZVVSSShFeGVjU3RhdGUqIGV4
ZWMsIEpTT2JqZWN0KiwgY29uc3QgTGlzdCYgYXJncykKK3sKKyAgICBzdGF0aWMgY29uc3QgY2hh
ciBkb19ub3RfZXNjYXBlX3doZW5fZW5jb2RpbmdfVVJJW10gPQorICAgICAgICAiQUJDREVGR0hJ
SktMTU5PUFFSU1RVVldYWVoiCisgICAgICAgICJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eiIK
KyAgICAgICAgIjAxMjM0NTY3ODkiCisgICAgICAgICIhIyQmJygpKissLS4vOjs9P0BffiI7CisK
KyAgICByZXR1cm4gZW5jb2RlKGV4ZWMsIGFyZ3MsIGRvX25vdF9lc2NhcGVfd2hlbl9lbmNvZGlu
Z19VUkkpOworfQorCitKU1ZhbHVlKiBnbG9iYWxGdW5jRW5jb2RlVVJJQ29tcG9uZW50KEV4ZWNT
dGF0ZSogZXhlYywgSlNPYmplY3QqLCBjb25zdCBMaXN0JiBhcmdzKQoreworICAgIHN0YXRpYyBj
b25zdCBjaGFyIGRvX25vdF9lc2NhcGVfd2hlbl9lbmNvZGluZ19VUklfY29tcG9uZW50W10gPQor
ICAgICAgICAiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoiCisgICAgICAgICJhYmNkZWZnaGlq
a2xtbm9wcXJzdHV2d3h5eiIKKyAgICAgICAgIjAxMjM0NTY3ODkiCisgICAgICAgICIhJygpKi0u
X34iOworCisgICAgcmV0dXJuIGVuY29kZShleGVjLCBhcmdzLCBkb19ub3RfZXNjYXBlX3doZW5f
ZW5jb2RpbmdfVVJJX2NvbXBvbmVudCk7Cit9CisKK0pTVmFsdWUqIGdsb2JhbEZ1bmNFc2NhcGUo
RXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIGNvbnN0IExpc3QmIGFyZ3MpCit7CisgICAgc3Rh
dGljIGNvbnN0IGNoYXIgZG9fbm90X2VzY2FwZVtdID0KKyAgICAgICAgIkFCQ0RFRkdISUpLTE1O
T1BRUlNUVVZXWFlaIgorICAgICAgICAiYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoiCisgICAg
ICAgICIwMTIzNDU2Nzg5IgorICAgICAgICAiKistLi9AXyI7CisKKyAgICBVU3RyaW5nIHIgPSAi
Iiwgcywgc3RyID0gYXJnc1swXS0+dG9TdHJpbmcoZXhlYyk7CisgICAgY29uc3QgVUNoYXIqIGMg
PSBzdHIuZGF0YSgpOworICAgIGZvciAoaW50IGsgPSAwOyBrIDwgc3RyLnNpemUoKTsgaysrLCBj
KyspIHsKICAgICAgICAgaW50IHUgPSBjLT51YzsKICAgICAgICAgaWYgKHUgPiAyNTUpIHsKLSAg
ICAgICAgICBjaGFyIHRtcFs3XTsKLSAgICAgICAgICBzcHJpbnRmKHRtcCwgIiUldSUwNFgiLCB1
KTsKLSAgICAgICAgICBzID0gVVN0cmluZyh0bXApOwotICAgICAgICB9IGVsc2UgaWYgKHUgIT0g
MCAmJiBzdHJjaHIoZG9fbm90X2VzY2FwZSwgKGNoYXIpdSkpIHsKLSAgICAgICAgICBzID0gVVN0
cmluZyhjLCAxKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBjaGFyIHRtcFs0XTsKLSAg
ICAgICAgICBzcHJpbnRmKHRtcCwgIiUlJTAyWCIsIHUpOwotICAgICAgICAgIHMgPSBVU3RyaW5n
KHRtcCk7CisgICAgICAgICAgICBjaGFyIHRtcFs3XTsKKyAgICAgICAgICAgIHNwcmludGYodG1w
LCAiJSV1JTA0WCIsIHUpOworICAgICAgICAgICAgcyA9IFVTdHJpbmcodG1wKTsKKyAgICAgICAg
fSBlbHNlIGlmICh1ICE9IDAgJiYgc3RyY2hyKGRvX25vdF9lc2NhcGUsIChjaGFyKXUpKQorICAg
ICAgICAgICAgcyA9IFVTdHJpbmcoYywgMSk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAg
Y2hhciB0bXBbNF07CisgICAgICAgICAgICBzcHJpbnRmKHRtcCwgIiUlJTAyWCIsIHUpOworICAg
ICAgICAgICAgcyA9IFVTdHJpbmcodG1wKTsKICAgICAgICAgfQogICAgICAgICByICs9IHM7Ci0g
ICAgICB9Ci0gICAgICByZXMgPSBqc1N0cmluZyhyKTsKLSAgICAgIGJyZWFrOwogICAgIH0KLSAg
Y2FzZSBVbkVzY2FwZToKLSAgICB7Ci0gICAgICBVU3RyaW5nIHMgPSAiIiwgc3RyID0gYXJnc1sw
XS0+dG9TdHJpbmcoZXhlYyk7Ci0gICAgICBpbnQgayA9IDAsIGxlbiA9IHN0ci5zaXplKCk7Ci0g
ICAgICB3aGlsZSAoayA8IGxlbikgeworCisgICAgcmV0dXJuIGpzU3RyaW5nKHIpOworfQorCitK
U1ZhbHVlKiBnbG9iYWxGdW5jVW5Fc2NhcGUoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIGNv
bnN0IExpc3QmIGFyZ3MpCit7CisgICAgVVN0cmluZyBzID0gIiIsIHN0ciA9IGFyZ3NbMF0tPnRv
U3RyaW5nKGV4ZWMpOworICAgIGludCBrID0gMCwgbGVuID0gc3RyLnNpemUoKTsKKyAgICB3aGls
ZSAoayA8IGxlbikgewogICAgICAgICBjb25zdCBVQ2hhciogYyA9IHN0ci5kYXRhKCkgKyBrOwog
ICAgICAgICBVQ2hhciB1OwotICAgICAgICBpZiAoKmMgPT0gVUNoYXIoJyUnKSAmJiBrIDw9IGxl
biAtIDYgJiYgKihjKzEpID09IFVDaGFyKCd1JykpIHsKLSAgICAgICAgICBpZiAoTGV4ZXI6Omlz
SGV4RGlnaXQoKGMrMiktPnVjKSAmJiBMZXhlcjo6aXNIZXhEaWdpdCgoYyszKS0+dWMpICYmCi0g
ICAgICAgICAgICAgIExleGVyOjppc0hleERpZ2l0KChjKzQpLT51YykgJiYgTGV4ZXI6OmlzSGV4
RGlnaXQoKGMrNSktPnVjKSkgewotICAgICAgICAgIHUgPSBMZXhlcjo6Y29udmVydFVuaWNvZGUo
KGMrMiktPnVjLCAoYyszKS0+dWMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAoYys0KS0+dWMsIChjKzUpLT51Yyk7Ci0gICAgICAgICAgYyA9ICZ1OwotICAgICAgICAgIGsg
Kz0gNTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAoKmMgPT0gVUNoYXIoJyUnKSAm
JiBrIDw9IGxlbiAtIDMgJiYKLSAgICAgICAgICAgICAgICAgICBMZXhlcjo6aXNIZXhEaWdpdCgo
YysxKS0+dWMpICYmIExleGVyOjppc0hleERpZ2l0KChjKzIpLT51YykpIHsKLSAgICAgICAgICB1
ID0gVUNoYXIoTGV4ZXI6OmNvbnZlcnRIZXgoKGMrMSktPnVjLCAoYysyKS0+dWMpKTsKLSAgICAg
ICAgICBjID0gJnU7Ci0gICAgICAgICAgayArPSAyOworICAgICAgICBpZiAoKmMgPT0gVUNoYXIo
JyUnKSAmJiBrIDw9IGxlbiAtIDYgJiYgKihjICsgMSkgPT0gVUNoYXIoJ3UnKSkgeworICAgICAg
ICAgICAgaWYgKExleGVyOjppc0hleERpZ2l0KChjICsgMiktPnVjKSAmJiBMZXhlcjo6aXNIZXhE
aWdpdCgoYyArIDMpLT51YykgJiYgTGV4ZXI6OmlzSGV4RGlnaXQoKGMgKyA0KS0+dWMpICYmIExl
eGVyOjppc0hleERpZ2l0KChjICsgNSktPnVjKSkgeworICAgICAgICAgICAgICAgIHUgPSBMZXhl
cjo6Y29udmVydFVuaWNvZGUoKGMgKyAyKS0+dWMsIChjICsgMyktPnVjLCAoYyArIDQpLT51Yywg
KGMgKyA1KS0+dWMpOworICAgICAgICAgICAgICAgIGMgPSAmdTsKKyAgICAgICAgICAgICAgICBr
ICs9IDU7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAoKmMgPT0gVUNoYXIoJyUn
KSAmJiBrIDw9IGxlbiAtIDMgJiYgTGV4ZXI6OmlzSGV4RGlnaXQoKGMgKyAxKS0+dWMpICYmIExl
eGVyOjppc0hleERpZ2l0KChjICsgMiktPnVjKSkgeworICAgICAgICAgICAgdSA9IFVDaGFyKExl
eGVyOjpjb252ZXJ0SGV4KChjKzEpLT51YywgKGMrMiktPnVjKSk7CisgICAgICAgICAgICBjID0g
JnU7CisgICAgICAgICAgICBrICs9IDI7CiAgICAgICAgIH0KICAgICAgICAgaysrOwogICAgICAg
ICBzICs9IFVTdHJpbmcoYywgMSk7Ci0gICAgICB9Ci0gICAgICByZXMgPSBqc1N0cmluZyhzKTsK
LSAgICAgIGJyZWFrOwogICAgIH0KKworICAgIHJldHVybiBqc1N0cmluZyhzKTsKK30KKwogI2lm
bmRlZiBOREVCVUcKLSAgY2FzZSBLSlNQcmludDoKK0pTVmFsdWUqIGdsb2JhbEZ1bmNLSlNQcmlu
dChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgY29uc3QgTGlzdCYgYXJncykKK3sKICAgICBw
dXRzKGFyZ3NbMF0tPnRvU3RyaW5nKGV4ZWMpLmFzY2lpKCkpOwotICAgIGJyZWFrOwotI2VuZGlm
Ci0gIH0KLQotICByZXR1cm4gcmVzOworICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQorI2Vu
ZGlmCiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBQcm90b3R5cGVGdW5jdGlv
biAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKQEAgLTg2Niw2ICs4NzAsMTQgQEAg
UHJvdG90eXBlRnVuY3Rpb246OlByb3RvdHlwZUZ1bmN0aW9uKEV4ZQogICAgIHB1dChleGVjLCBl
eGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoLCBqc051bWJlcihsZW4pLCBEb250RGVsZXRlIHwg
UmVhZE9ubHkgfCBEb250RW51bSk7CiB9CiAKK1Byb3RvdHlwZUZ1bmN0aW9uOjpQcm90b3R5cGVG
dW5jdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEZ1bmN0aW9uUHJvdG90eXBlKiBmdW5jdGlvblByb3Rv
dHlwZSwgaW50IGxlbiwgY29uc3QgSWRlbnRpZmllciYgbmFtZSwgSlNNZW1iZXJGdW5jdGlvbiBm
dW5jdGlvbikKKyAgICA6IEludGVybmFsRnVuY3Rpb25JbXAoZnVuY3Rpb25Qcm90b3R5cGUsIG5h
bWUpCisgICAgLCBtX2Z1bmN0aW9uKGZ1bmN0aW9uKQoreworICAgIEFTU0VSVF9BUkcoZnVuY3Rp
b24sIGZ1bmN0aW9uKTsKKyAgICBwdXQoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0
aCwganNOdW1iZXIobGVuKSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5IHwgRG9udEVudW0pOworfQor
CiBKU1ZhbHVlKiBQcm90b3R5cGVGdW5jdGlvbjo6Y2FsbEFzRnVuY3Rpb24oRXhlY1N0YXRlKiBl
eGVjLCBKU09iamVjdCogdGhpc09iaiwgY29uc3QgTGlzdCYgYXJncykKIHsKICAgICByZXR1cm4g
bV9mdW5jdGlvbihleGVjLCB0aGlzT2JqLCBhcmdzKTsKSW5kZXg6IGtqcy9mdW5jdGlvbi5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIGtqcy9mdW5jdGlvbi5oCShyZXZpc2lvbiAyOTU0MSkKKysrIGtqcy9mdW5j
dGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC01NiwyMCArNTYsNiBAQCBuYW1lc3BhY2UgS0pTIHsK
ICAgICBJZGVudGlmaWVyIG1fbmFtZTsKICAgfTsKIAotICAvKioKLSAgICogQGludGVybmFsCi0g
ICAqCi0gICAqIFRoZSBpbml0aWFsIHZhbHVlIG9mIEZ1bmN0aW9uLnByb3RvdHlwZSAoYW5kIHRo
dXMgYWxsIG9iamVjdHMgY3JlYXRlZAotICAgKiB3aXRoIHRoZSBGdW5jdGlvbiBjb25zdHJ1Y3Rv
cikKLSAgICovCi0gIGNsYXNzIEZ1bmN0aW9uUHJvdG90eXBlIDogcHVibGljIEludGVybmFsRnVu
Y3Rpb25JbXAgewotICBwdWJsaWM6Ci0gICAgRnVuY3Rpb25Qcm90b3R5cGUoRXhlY1N0YXRlICpl
eGVjKTsKLSAgICB2aXJ0dWFsIH5GdW5jdGlvblByb3RvdHlwZSgpOwotCi0gICAgdmlydHVhbCBK
U1ZhbHVlICpjYWxsQXNGdW5jdGlvbihFeGVjU3RhdGUgKmV4ZWMsIEpTT2JqZWN0ICp0aGlzT2Jq
LCBjb25zdCBMaXN0ICZhcmdzKTsKLSAgfTsKLQogICBjbGFzcyBGdW5jdGlvbkltcCA6IHB1Ymxp
YyBJbnRlcm5hbEZ1bmN0aW9uSW1wIHsKICAgICBmcmllbmQgY2xhc3MgQWN0aXZhdGlvbkltcDsK
ICAgcHVibGljOgpAQCAtMTQzLDYgKzEyOSw3IEBAIG5hbWVzcGFjZSBLSlMgewogICAgIHR5cGVk
ZWYgS0pTOjpKU1ZhbHVlKiAoKkpTTWVtYmVyRnVuY3Rpb24pKEV4ZWNTdGF0ZSosIEpTT2JqZWN0
KiwgY29uc3QgTGlzdCYpOwogCiAgICAgUHJvdG90eXBlRnVuY3Rpb24oRXhlY1N0YXRlKiwgaW50
IGxlbiwgY29uc3QgSWRlbnRpZmllciYsIEpTTWVtYmVyRnVuY3Rpb24pOworICAgIFByb3RvdHlw
ZUZ1bmN0aW9uKEV4ZWNTdGF0ZSosIEZ1bmN0aW9uUHJvdG90eXBlKiwgaW50IGxlbiwgY29uc3Qg
SWRlbnRpZmllciYsIEpTTWVtYmVyRnVuY3Rpb24pOwogCiAgICAgdmlydHVhbCBKU1ZhbHVlKiBj
YWxsQXNGdW5jdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiB0aGlzT2JqLCBjb25zdCBM
aXN0Jik7CiAKQEAgLTE1MCwyMiArMTM3LDI2IEBAIG5hbWVzcGFjZSBLSlMgewogICAgIGNvbnN0
IEpTTWVtYmVyRnVuY3Rpb24gbV9mdW5jdGlvbjsKICAgfTsKIAotICBjbGFzcyBHbG9iYWxGdW5j
SW1wIDogcHVibGljIEludGVybmFsRnVuY3Rpb25JbXAgewotICBwdWJsaWM6Ci0gICAgR2xvYmFs
RnVuY0ltcChFeGVjU3RhdGUqLCBGdW5jdGlvblByb3RvdHlwZSosIGludCBpLCBpbnQgbGVuLCBj
b25zdCBJZGVudGlmaWVyJik7Ci0gICAgdmlydHVhbCBKU1ZhbHVlKiBjYWxsQXNGdW5jdGlvbihF
eGVjU3RhdGUqLCBKU09iamVjdCogdGhpc09iaiwgY29uc3QgTGlzdCYgYXJncyk7Ci0gICAgZW51
bSB7IEV2YWwsIFBhcnNlSW50LCBQYXJzZUZsb2F0LCBJc05hTiwgSXNGaW5pdGUsIEVzY2FwZSwg
VW5Fc2NhcGUsCi0gICAgICAgICAgIERlY29kZVVSSSwgRGVjb2RlVVJJQ29tcG9uZW50LCBFbmNv
ZGVVUkksIEVuY29kZVVSSUNvbXBvbmVudAorCisgICAgLy8gR2xvYmFsIEZ1bmN0aW9ucworCisg
ICAgSlNWYWx1ZSogZ2xvYmFsRnVuY0V2YWwoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBjb25zdCBM
aXN0Jik7CisgICAgSlNWYWx1ZSogZ2xvYmFsRnVuY1BhcnNlSW50KEV4ZWNTdGF0ZSosIEpTT2Jq
ZWN0KiwgY29uc3QgTGlzdCYpOworICAgIEpTVmFsdWUqIGdsb2JhbEZ1bmNQYXJzZUZsb2F0KEV4
ZWNTdGF0ZSosIEpTT2JqZWN0KiwgY29uc3QgTGlzdCYpOworICAgIEpTVmFsdWUqIGdsb2JhbEZ1
bmNJc05hTihFeGVjU3RhdGUqLCBKU09iamVjdCosIGNvbnN0IExpc3QmKTsKKyAgICBKU1ZhbHVl
KiBnbG9iYWxGdW5jSXNGaW5pdGUoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBjb25zdCBMaXN0Jik7
CisgICAgSlNWYWx1ZSogZ2xvYmFsRnVuY0RlY29kZVVSSShFeGVjU3RhdGUqLCBKU09iamVjdCos
IGNvbnN0IExpc3QmKTsKKyAgICBKU1ZhbHVlKiBnbG9iYWxGdW5jRGVjb2RlVVJJQ29tcG9uZW50
KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgY29uc3QgTGlzdCYpOworICAgIEpTVmFsdWUqIGdsb2Jh
bEZ1bmNFbmNvZGVVUkkoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBjb25zdCBMaXN0Jik7CisgICAg
SlNWYWx1ZSogZ2xvYmFsRnVuY0VuY29kZVVSSUNvbXBvbmVudChFeGVjU3RhdGUqLCBKU09iamVj
dCosIGNvbnN0IExpc3QmKTsKKyAgICBKU1ZhbHVlKiBnbG9iYWxGdW5jRXNjYXBlKEV4ZWNTdGF0
ZSosIEpTT2JqZWN0KiwgY29uc3QgTGlzdCYpOworICAgIEpTVmFsdWUqIGdsb2JhbEZ1bmNVbkVz
Y2FwZShFeGVjU3RhdGUqLCBKU09iamVjdCosIGNvbnN0IExpc3QmKTsKICNpZm5kZWYgTkRFQlVH
Ci0gICAgICAgICAgICwgS0pTUHJpbnQKKyAgICBKU1ZhbHVlKiBnbG9iYWxGdW5jS0pTUHJpbnQo
RXhlY1N0YXRlKiwgSlNPYmplY3QqLCBjb25zdCBMaXN0Jik7CiAjZW5kaWYKLX07Ci0gIHByaXZh
dGU6Ci0gICAgaW50IGlkOwotICB9OwogCi0gIHN0YXRpYyBjb25zdCBkb3VibGUgbWFudGlzc2FP
dmVyZmxvd0xvd2VyQm91bmQgPSA5MDA3MTk5MjU0NzQwOTkyLjA7Ci0gIGRvdWJsZSBwYXJzZUlu
dE92ZXJmbG93KGNvbnN0IGNoYXIqIHMsIGludCBsZW5ndGgsIGludCByYWRpeCk7CisgICAgc3Rh
dGljIGNvbnN0IGRvdWJsZSBtYW50aXNzYU92ZXJmbG93TG93ZXJCb3VuZCA9IDkwMDcxOTkyNTQ3
NDA5OTIuMDsKKyAgICBkb3VibGUgcGFyc2VJbnRPdmVyZmxvdyhjb25zdCBjaGFyKiBzLCBpbnQg
bGVuZ3RoLCBpbnQgcmFkaXgpOwogCiB9IC8vIG5hbWVzcGFjZQogCkluZGV4OiBranMvZnVuY3Rp
b25fb2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBranMvZnVuY3Rpb25fb2JqZWN0LmNwcAkocmV2
aXNpb24gMjk1NDEpCisrKyBranMvZnVuY3Rpb25fb2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzYsMjMgKzM2LDIwIEBACiAjaW5jbHVkZSA8c3RyaW5nLmg+CiAjaW5jbHVkZSA8d3RmL0Fz
c2VydGlvbnMuaD4KIAotdXNpbmcgbmFtZXNwYWNlIEtKUzsKK25hbWVzcGFjZSBLSlMgewogCiAv
LyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRnVuY3Rpb25Qcm90b3R5cGUgLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQogCi1GdW5jdGlvblByb3RvdHlwZTo6RnVuY3Rpb25Qcm90b3R5
cGUoRXhlY1N0YXRlICpleGVjKQorRnVuY3Rpb25Qcm90b3R5cGU6OkZ1bmN0aW9uUHJvdG90eXBl
KEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgc3RhdGljIGNvbnN0IElkZW50aWZpZXIqIGFwcGx5UHJv
cGVydHlOYW1lID0gbmV3IElkZW50aWZpZXIoImFwcGx5Iik7CiAgIHN0YXRpYyBjb25zdCBJZGVu
dGlmaWVyKiBjYWxsUHJvcGVydHlOYW1lID0gbmV3IElkZW50aWZpZXIoImNhbGwiKTsKIAogICBw
dXREaXJlY3QoZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCwganNOdW1iZXIoMCksIERvbnRE
ZWxldGUgfCBSZWFkT25seSB8IERvbnRFbnVtKTsKLSAgcHV0RGlyZWN0RnVuY3Rpb24obmV3IEZ1
bmN0aW9uUHJvdG9GdW5jKGV4ZWMsIHRoaXMsIEZ1bmN0aW9uUHJvdG9GdW5jOjpUb1N0cmluZywg
MCwgZXhlYy0+cHJvcGVydHlOYW1lcygpLnRvU3RyaW5nKSwgRG9udEVudW0pOwotICBwdXREaXJl
Y3RGdW5jdGlvbihuZXcgRnVuY3Rpb25Qcm90b0Z1bmMoZXhlYywgdGhpcywgRnVuY3Rpb25Qcm90
b0Z1bmM6OkFwcGx5LCAyLCAqYXBwbHlQcm9wZXJ0eU5hbWUpLCBEb250RW51bSk7Ci0gIHB1dERp
cmVjdEZ1bmN0aW9uKG5ldyBGdW5jdGlvblByb3RvRnVuYyhleGVjLCB0aGlzLCBGdW5jdGlvblBy
b3RvRnVuYzo6Q2FsbCwgMSwgKmNhbGxQcm9wZXJ0eU5hbWUpLCBEb250RW51bSk7Ci19CiAKLUZ1
bmN0aW9uUHJvdG90eXBlOjp+RnVuY3Rpb25Qcm90b3R5cGUoKQoteworICBwdXREaXJlY3RGdW5j
dGlvbihuZXcgUHJvdG90eXBlRnVuY3Rpb24oZXhlYywgdGhpcywgMCwgZXhlYy0+cHJvcGVydHlO
YW1lcygpLnRvU3RyaW5nLCBmdW5jdGlvblByb3RvRnVuY1RvU3RyaW5nKSwgRG9udEVudW0pOwor
ICBwdXREaXJlY3RGdW5jdGlvbihuZXcgUHJvdG90eXBlRnVuY3Rpb24oZXhlYywgdGhpcywgMiwg
KmFwcGx5UHJvcGVydHlOYW1lLCBmdW5jdGlvblByb3RvRnVuY0FwcGx5KSwgRG9udEVudW0pOwor
ICBwdXREaXJlY3RGdW5jdGlvbihuZXcgUHJvdG90eXBlRnVuY3Rpb24oZXhlYywgdGhpcywgMSwg
KmNhbGxQcm9wZXJ0eU5hbWUsIGZ1bmN0aW9uUHJvdG9GdW5jQ2FsbCksIERvbnRFbnVtKTsKIH0K
IAogLy8gRUNNQSAxNS4zLjQKQEAgLTYzLDg5ICs2MCw3MyBAQCBKU1ZhbHVlICpGdW5jdGlvblBy
b3RvdHlwZTo6Y2FsbEFzRnVuY3RpCiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LSBGdW5jdGlvblByb3RvRnVuYyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLUZ1bmN0aW9u
UHJvdG9GdW5jOjpGdW5jdGlvblByb3RvRnVuYyhFeGVjU3RhdGUqIGV4ZWMsIEZ1bmN0aW9uUHJv
dG90eXBlKiBmdW5jUHJvdG8sIGludCBpLCBpbnQgbGVuLCBjb25zdCBJZGVudGlmaWVyJiBuYW1l
KQotICA6IEludGVybmFsRnVuY3Rpb25JbXAoZnVuY1Byb3RvLCBuYW1lKQotICAsIGlkKGkpCi17
Ci0gIHB1dERpcmVjdChleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoLCBsZW4sIERvbnREZWxl
dGUgfCBSZWFkT25seSB8IERvbnRFbnVtKTsKLX0KLQotSlNWYWx1ZSogRnVuY3Rpb25Qcm90b0Z1
bmM6OmNhbGxBc0Z1bmN0aW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHRoaXNPYmosIGNv
bnN0IExpc3QgJmFyZ3MpCitKU1ZhbHVlKiBmdW5jdGlvblByb3RvRnVuY1RvU3RyaW5nKEV4ZWNT
dGF0ZSogZXhlYywgSlNPYmplY3QqIHRoaXNPYmosIGNvbnN0IExpc3QmKQogewotICBKU1ZhbHVl
KiByZXN1bHQgPSBOVUxMOwotCi0gIHN3aXRjaCAoaWQpIHsKLSAgY2FzZSBUb1N0cmluZzoKICAg
ICBpZiAoIXRoaXNPYmogfHwgIXRoaXNPYmotPmluaGVyaXRzKCZJbnRlcm5hbEZ1bmN0aW9uSW1w
OjppbmZvKSkgewogI2lmbmRlZiBOREVCVUcKLSAgICAgIGZwcmludGYoc3RkZXJyLCJhdHRlbXB0
ZWQgdG9TdHJpbmcoKSBjYWxsIG9uIG51bGwgb3Igbm9uLWZ1bmN0aW9uIG9iamVjdFxuIik7Cisg
ICAgICAgIGZwcmludGYoc3RkZXJyLCJhdHRlbXB0ZWQgdG9TdHJpbmcoKSBjYWxsIG9uIG51bGwg
b3Igbm9uLWZ1bmN0aW9uIG9iamVjdFxuIik7CiAjZW5kaWYKLSAgICAgIHJldHVybiB0aHJvd0Vy
cm9yKGV4ZWMsIFR5cGVFcnJvcik7CisgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5
cGVFcnJvcik7CiAgICAgfQorCiAgICAgaWYgKHRoaXNPYmotPmluaGVyaXRzKCZGdW5jdGlvbklt
cDo6aW5mbykpIHsKLSAgICAgICAgRnVuY3Rpb25JbXAgKmZpID0gc3RhdGljX2Nhc3Q8RnVuY3Rp
b25JbXAqPih0aGlzT2JqKTsKLSAgICAgICAgcmV0dXJuIGpzU3RyaW5nKCJmdW5jdGlvbiAiICsg
ZmktPmZ1bmN0aW9uTmFtZSgpLnVzdHJpbmcoKSArICIoIiArCi0gICAgICAgICAgICAgICAgICAg
ICAgICBmaS0+Ym9keS0+cGFyYW1TdHJpbmcoKSArICIpICIgKyBmaS0+Ym9keS0+dG9TdHJpbmco
KSk7Ci0gICAgIH0gZWxzZSBpZiAodGhpc09iai0+aW5oZXJpdHMoJkludGVybmFsRnVuY3Rpb25J
bXA6OmluZm8pICYmCi0gICAgICAgICAgICAgICAgIXN0YXRpY19jYXN0PEludGVybmFsRnVuY3Rp
b25JbXAqPih0aGlzT2JqKS0+ZnVuY3Rpb25OYW1lKCkuaXNOdWxsKCkpIHsKLSAgICAgICByZXN1
bHQgPSBqc1N0cmluZygiXG5mdW5jdGlvbiAiICsgc3RhdGljX2Nhc3Q8SW50ZXJuYWxGdW5jdGlv
bkltcCo+KHRoaXNPYmopLT5mdW5jdGlvbk5hbWUoKS51c3RyaW5nKCkgKyAiKCkge1xuIgotICAg
ICAgICAgICAgICAgICAgICAgICAiICAgIFtuYXRpdmUgY29kZV1cbn1cbiIpOwotICAgIH0gZWxz
ZSB7Ci0gICAgICByZXN1bHQgPSBqc1N0cmluZygiW2Z1bmN0aW9uXSIpOworICAgICAgICBGdW5j
dGlvbkltcCogZmkgPSBzdGF0aWNfY2FzdDxGdW5jdGlvbkltcCo+KHRoaXNPYmopOworICAgICAg
ICByZXR1cm4ganNTdHJpbmcoImZ1bmN0aW9uICIgKyBmaS0+ZnVuY3Rpb25OYW1lKCkudXN0cmlu
ZygpICsgIigiICsgZmktPmJvZHktPnBhcmFtU3RyaW5nKCkgKyAiKSAiICsgZmktPmJvZHktPnRv
U3RyaW5nKCkpOwogICAgIH0KLSAgICBicmVhazsKLSAgY2FzZSBBcHBseTogewotICAgIEpTVmFs
dWUgKnRoaXNBcmcgPSBhcmdzWzBdOwotICAgIEpTVmFsdWUgKmFyZ0FycmF5ID0gYXJnc1sxXTsK
LSAgICBKU09iamVjdCAqZnVuYyA9IHRoaXNPYmo7CiAKLSAgICBpZiAoIWZ1bmMtPmltcGxlbWVu
dHNDYWxsKCkpCi0gICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3IpOworICAg
IGlmICh0aGlzT2JqLT5pbmhlcml0cygmSW50ZXJuYWxGdW5jdGlvbkltcDo6aW5mbykgJiYgIXN0
YXRpY19jYXN0PEludGVybmFsRnVuY3Rpb25JbXAqPih0aGlzT2JqKS0+ZnVuY3Rpb25OYW1lKCku
aXNOdWxsKCkpCisgICAgICAgIHJldHVybiBqc1N0cmluZygiXG5mdW5jdGlvbiAiICsgc3RhdGlj
X2Nhc3Q8SW50ZXJuYWxGdW5jdGlvbkltcCo+KHRoaXNPYmopLT5mdW5jdGlvbk5hbWUoKS51c3Ry
aW5nKCkgKyAiKCkge1xuICAgIFtuYXRpdmUgY29kZV1cbn1cbiIpOwogCi0gICAgSlNPYmplY3Qg
KmFwcGx5VGhpczsKKyAgICByZXR1cm4ganNTdHJpbmcoIltmdW5jdGlvbl0iKTsKK30KKworSlNW
YWx1ZSogZnVuY3Rpb25Qcm90b0Z1bmNBcHBseShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiB0
aGlzT2JqLCBjb25zdCBMaXN0JiBhcmdzKQoreworICAgIGlmICghdGhpc09iai0+aW1wbGVtZW50
c0NhbGwoKSkKKyAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9yKTsKKwor
ICAgIEpTVmFsdWUqIHRoaXNBcmcgPSBhcmdzWzBdOworICAgIEpTVmFsdWUqIGFyZ0FycmF5ID0g
YXJnc1sxXTsKKworICAgIEpTT2JqZWN0KiBhcHBseVRoaXM7CiAgICAgaWYgKHRoaXNBcmctPmlz
VW5kZWZpbmVkT3JOdWxsKCkpCi0gICAgICBhcHBseVRoaXMgPSBleGVjLT5keW5hbWljR2xvYmFs
T2JqZWN0KCk7CisgICAgICAgIGFwcGx5VGhpcyA9IGV4ZWMtPmR5bmFtaWNHbG9iYWxPYmplY3Qo
KTsKICAgICBlbHNlCi0gICAgICBhcHBseVRoaXMgPSB0aGlzQXJnLT50b09iamVjdChleGVjKTsK
KyAgICAgICAgYXBwbHlUaGlzID0gdGhpc0FyZy0+dG9PYmplY3QoZXhlYyk7CiAKICAgICBMaXN0
IGFwcGx5QXJnczsKICAgICBpZiAoIWFyZ0FycmF5LT5pc1VuZGVmaW5lZE9yTnVsbCgpKSB7Ci0g
ICAgICBpZiAoYXJnQXJyYXktPmlzT2JqZWN0KCkgJiYKLSAgICAgICAgICAgKHN0YXRpY19jYXN0
PEpTT2JqZWN0ICo+KGFyZ0FycmF5KS0+aW5oZXJpdHMoJkFycmF5SW5zdGFuY2U6OmluZm8pIHx8
Ci0gICAgICAgICAgICBzdGF0aWNfY2FzdDxKU09iamVjdCAqPihhcmdBcnJheSktPmluaGVyaXRz
KCZBcmd1bWVudHM6OmluZm8pKSkgewotCi0gICAgICAgIEpTT2JqZWN0ICphcmdBcnJheU9iaiA9
IHN0YXRpY19jYXN0PEpTT2JqZWN0ICo+KGFyZ0FycmF5KTsKLSAgICAgICAgdW5zaWduZWQgaW50
IGxlbmd0aCA9IGFyZ0FycmF5T2JqLT5nZXQoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLmxl
bmd0aCktPnRvVUludDMyKGV4ZWMpOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsg
aSA8IGxlbmd0aDsgaSsrKQotICAgICAgICAgIGFwcGx5QXJncy5hcHBlbmQoYXJnQXJyYXlPYmot
PmdldChleGVjLGkpKTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgICAgcmV0dXJuIHRocm93
RXJyb3IoZXhlYywgVHlwZUVycm9yKTsKLSAgICB9Ci0gICAgcmVzdWx0ID0gZnVuYy0+Y2FsbChl
eGVjLGFwcGx5VGhpcyxhcHBseUFyZ3MpOworICAgICAgICBpZiAoYXJnQXJyYXktPmlzT2JqZWN0
KCkgJiYKKyAgICAgICAgICAgIChzdGF0aWNfY2FzdDxKU09iamVjdCo+KGFyZ0FycmF5KS0+aW5o
ZXJpdHMoJkFycmF5SW5zdGFuY2U6OmluZm8pIHx8CisgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8
SlNPYmplY3QqPihhcmdBcnJheSktPmluaGVyaXRzKCZBcmd1bWVudHM6OmluZm8pKSkgeworCisg
ICAgICAgICAgICBKU09iamVjdCogYXJnQXJyYXlPYmogPSBzdGF0aWNfY2FzdDxKU09iamVjdCo+
KGFyZ0FycmF5KTsKKyAgICAgICAgICAgIHVuc2lnbmVkIGludCBsZW5ndGggPSBhcmdBcnJheU9i
ai0+Z2V0KGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgpLT50b1VJbnQzMihleGVj
KTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKysp
CisgICAgICAgICAgICAgICAgYXBwbHlBcmdzLmFwcGVuZChhcmdBcnJheU9iai0+Z2V0KGV4ZWMs
IGkpKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVj
LCBUeXBlRXJyb3IpOwogICAgIH0KLSAgICBicmVhazsKLSAgY2FzZSBDYWxsOiB7Ci0gICAgSlNW
YWx1ZSAqdGhpc0FyZyA9IGFyZ3NbMF07Ci0gICAgSlNPYmplY3QgKmZ1bmMgPSB0aGlzT2JqOwog
Ci0gICAgaWYgKCFmdW5jLT5pbXBsZW1lbnRzQ2FsbCgpKQotICAgICAgcmV0dXJuIHRocm93RXJy
b3IoZXhlYywgVHlwZUVycm9yKTsKKyAgICByZXR1cm4gdGhpc09iai0+Y2FsbChleGVjLCBhcHBs
eVRoaXMsIGFwcGx5QXJncyk7Cit9CisKK0pTVmFsdWUqIGZ1bmN0aW9uUHJvdG9GdW5jQ2FsbChF
eGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiB0aGlzT2JqLCBjb25zdCBMaXN0JiBhcmdzKQorewor
ICAgIGlmICghdGhpc09iai0+aW1wbGVtZW50c0NhbGwoKSkKKyAgICAgICAgcmV0dXJuIHRocm93
RXJyb3IoZXhlYywgVHlwZUVycm9yKTsKKworICAgIEpTVmFsdWUqIHRoaXNBcmcgPSBhcmdzWzBd
OwogCi0gICAgSlNPYmplY3QgKmNhbGxUaGlzOworICAgIEpTT2JqZWN0KiBjYWxsVGhpczsKICAg
ICBpZiAodGhpc0FyZy0+aXNVbmRlZmluZWRPck51bGwoKSkKLSAgICAgIGNhbGxUaGlzID0gZXhl
Yy0+ZHluYW1pY0dsb2JhbE9iamVjdCgpOworICAgICAgICBjYWxsVGhpcyA9IGV4ZWMtPmR5bmFt
aWNHbG9iYWxPYmplY3QoKTsKICAgICBlbHNlCi0gICAgICBjYWxsVGhpcyA9IHRoaXNBcmctPnRv
T2JqZWN0KGV4ZWMpOworICAgICAgICBjYWxsVGhpcyA9IHRoaXNBcmctPnRvT2JqZWN0KGV4ZWMp
OwogCiAgICAgTGlzdCBhcmdzVGFpbDsKICAgICBhcmdzLmdldFNsaWNlKDEsIGFyZ3NUYWlsKTsK
LSAgICByZXN1bHQgPSBmdW5jLT5jYWxsKGV4ZWMsIGNhbGxUaGlzLCBhcmdzVGFpbCk7Ci0gICAg
fQotICAgIGJyZWFrOwotICB9Ci0KLSAgcmV0dXJuIHJlc3VsdDsKKyAgICByZXR1cm4gdGhpc09i
ai0+Y2FsbChleGVjLCBjYWxsVGhpcywgYXJnc1RhaWwpOwogfQogCiAvLyAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0gRnVuY3Rpb25PYmplY3RJbXAgLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQpAQCAtMTU5LDEwICsxNDAsNiBAQCBGdW5jdGlvbk9iamVjdEltcDo6RnVuY3Rpb25P
YmplY3RJbXAoRXhlCiAgIHB1dERpcmVjdChleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoLCBq
c051bWJlcigxKSwgUmVhZE9ubHl8RG9udERlbGV0ZXxEb250RW51bSk7CiB9CiAKLUZ1bmN0aW9u
T2JqZWN0SW1wOjp+RnVuY3Rpb25PYmplY3RJbXAoKQotewotfQotCiBib29sIEZ1bmN0aW9uT2Jq
ZWN0SW1wOjppbXBsZW1lbnRzQ29uc3RydWN0KCkgY29uc3QKIHsKICAgcmV0dXJuIHRydWU7CkBA
IC0yNjQsMyArMjQxLDUgQEAgSlNWYWx1ZSogRnVuY3Rpb25PYmplY3RJbXA6OmNhbGxBc0Z1bmN0
aQogewogICByZXR1cm4gY29uc3RydWN0KGV4ZWMsIGFyZ3MpOwogfQorCit9IC8vIG5hbWVzcGFj
ZSBLSlMKSW5kZXg6IGtqcy9mdW5jdGlvbl9vYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBranMvZnVu
Y3Rpb25fb2JqZWN0LmgJKHJldmlzaW9uIDI5NTQxKQorKysga2pzL2Z1bmN0aW9uX29iamVjdC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yOCwzOSArMjgsMzggQEAKIAogbmFtZXNwYWNlIEtKUyB7CiAK
LSAgLyoqCi0gICAqIEBpbnRlcm5hbAotICAgKgotICAgKiBDbGFzcyB0byBpbXBsZW1lbnQgYWxs
IG1ldGhvZHMgdGhhdCBhcmUgcHJvcGVydGllcyBvZiB0aGUKLSAgICogRnVuY3Rpb24ucHJvdG90
eXBlIG9iamVjdAotICAgKi8KLSAgY2xhc3MgRnVuY3Rpb25Qcm90b0Z1bmMgOiBwdWJsaWMgSW50
ZXJuYWxGdW5jdGlvbkltcCB7Ci0gIHB1YmxpYzoKLSAgICBGdW5jdGlvblByb3RvRnVuYyhFeGVj
U3RhdGUqLCBGdW5jdGlvblByb3RvdHlwZSosIGludCBpLCBpbnQgbGVuLCBjb25zdCBJZGVudGlm
aWVyJik7Ci0KLSAgICB2aXJ0dWFsIEpTVmFsdWUgKmNhbGxBc0Z1bmN0aW9uKEV4ZWNTdGF0ZSAq
ZXhlYywgSlNPYmplY3QgKnRoaXNPYmosIGNvbnN0IExpc3QgJmFyZ3MpOwotCi0gICAgZW51bSB7
IFRvU3RyaW5nLCBBcHBseSwgQ2FsbCB9OwotICBwcml2YXRlOgotICAgIGludCBpZDsKLSAgfTsK
LQotICAvKioKLSAgICogQGludGVybmFsCi0gICAqCi0gICAqIFRoZSBpbml0aWFsIHZhbHVlIG9m
IHRoZSB0aGUgZ2xvYmFsIHZhcmlhYmxlJ3MgIkZ1bmN0aW9uIiBwcm9wZXJ0eQotICAgKi8KLSAg
Y2xhc3MgRnVuY3Rpb25PYmplY3RJbXAgOiBwdWJsaWMgSW50ZXJuYWxGdW5jdGlvbkltcCB7Ci0g
IHB1YmxpYzoKLSAgICBGdW5jdGlvbk9iamVjdEltcChFeGVjU3RhdGUqLCBGdW5jdGlvblByb3Rv
dHlwZSopOwotICAgIHZpcnR1YWwgfkZ1bmN0aW9uT2JqZWN0SW1wKCk7Ci0KLSAgICB2aXJ0dWFs
IGJvb2wgaW1wbGVtZW50c0NvbnN0cnVjdCgpIGNvbnN0OwotICAgIHZpcnR1YWwgSlNPYmplY3Qq
IGNvbnN0cnVjdChFeGVjU3RhdGUqLCBjb25zdCBMaXN0JiBhcmdzKTsKLSAgICB2aXJ0dWFsIEpT
T2JqZWN0KiBjb25zdHJ1Y3QoRXhlY1N0YXRlKiwgY29uc3QgTGlzdCYgYXJncywgY29uc3QgSWRl
bnRpZmllciYgZnVuY3Rpb25OYW1lLCBjb25zdCBVU3RyaW5nJiBzb3VyY2VVUkwsIGludCBsaW5l
TnVtYmVyKTsKLSAgICB2aXJ0dWFsIEpTVmFsdWUqIGNhbGxBc0Z1bmN0aW9uKEV4ZWNTdGF0ZSos
IEpTT2JqZWN0KiB0aGlzT2JqLCBjb25zdCBMaXN0JiBhcmdzKTsKLSAgfTsKKyAgICAvKioKKyAg
ICAgKiBAaW50ZXJuYWwKKyAgICAgKgorICAgICAqIFRoZSBpbml0aWFsIHZhbHVlIG9mIEZ1bmN0
aW9uLnByb3RvdHlwZSAoYW5kIHRodXMgYWxsIG9iamVjdHMgY3JlYXRlZAorICAgICAqIHdpdGgg
dGhlIEZ1bmN0aW9uIGNvbnN0cnVjdG9yKQorICAgICAqLworICAgIGNsYXNzIEZ1bmN0aW9uUHJv
dG90eXBlIDogcHVibGljIEludGVybmFsRnVuY3Rpb25JbXAgeworICAgIHB1YmxpYzoKKyAgICAg
ICAgRnVuY3Rpb25Qcm90b3R5cGUoRXhlY1N0YXRlKik7CisKKyAgICAgICAgdmlydHVhbCBKU1Zh
bHVlKiBjYWxsQXNGdW5jdGlvbihFeGVjU3RhdGUqLCBKU09iamVjdCosIGNvbnN0IExpc3QmKTsK
KyAgICB9OworCisgICAgSlNWYWx1ZSogZnVuY3Rpb25Qcm90b0Z1bmNUb1N0cmluZyhFeGVjU3Rh
dGUqLCBKU09iamVjdCosIGNvbnN0IExpc3QmKTsKKyAgICBKU1ZhbHVlKiBmdW5jdGlvblByb3Rv
RnVuY0FwcGx5KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgY29uc3QgTGlzdCYpOworICAgIEpTVmFs
dWUqIGZ1bmN0aW9uUHJvdG9GdW5jQ2FsbChFeGVjU3RhdGUqLCBKU09iamVjdCosIGNvbnN0IExp
c3QmKTsKKworICAgIC8qKgorICAgICAqIEBpbnRlcm5hbAorICAgICAqCisgICAgICogVGhlIGlu
aXRpYWwgdmFsdWUgb2YgdGhlIHRoZSBnbG9iYWwgdmFyaWFibGUncyAiRnVuY3Rpb24iIHByb3Bl
cnR5CisgICAgICovCisgICAgY2xhc3MgRnVuY3Rpb25PYmplY3RJbXAgOiBwdWJsaWMgSW50ZXJu
YWxGdW5jdGlvbkltcCB7CisgICAgcHVibGljOgorICAgICAgICBGdW5jdGlvbk9iamVjdEltcChF
eGVjU3RhdGUqLCBGdW5jdGlvblByb3RvdHlwZSopOworCisgICAgICAgIHZpcnR1YWwgYm9vbCBp
bXBsZW1lbnRzQ29uc3RydWN0KCkgY29uc3Q7CisgICAgICAgIHZpcnR1YWwgSlNPYmplY3QqIGNv
bnN0cnVjdChFeGVjU3RhdGUqLCBjb25zdCBMaXN0Jik7CisgICAgICAgIHZpcnR1YWwgSlNPYmpl
Y3QqIGNvbnN0cnVjdChFeGVjU3RhdGUqLCBjb25zdCBMaXN0JiwgY29uc3QgSWRlbnRpZmllciYg
ZnVuY3Rpb25OYW1lLCBjb25zdCBVU3RyaW5nJiBzb3VyY2VVUkwsIGludCBsaW5lTnVtYmVyKTsK
KyAgICAgICAgdmlydHVhbCBKU1ZhbHVlKiBjYWxsQXNGdW5jdGlvbihFeGVjU3RhdGUqLCBKU09i
amVjdCosIGNvbnN0IExpc3QmKTsKKyAgICB9OwogCi19IC8vIG5hbWVzcGFjZQorfSAvLyBuYW1l
c3BhY2UgS0pTCiAKICNlbmRpZiAvLyBfRlVOQ1RJT05fT0JKRUNUX0hfCkluZGV4OiBranMvbnVt
YmVyX29iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga2pzL251bWJlcl9vYmplY3QuY3BwCShyZXZp
c2lvbiAyOTU0MSkKKysrIGtqcy9udW1iZXJfb2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDEsMzQgKzQxLDI5IEBAIE51bWJlckluc3RhbmNlOjpOdW1iZXJJbnN0YW5jZShKU09iamVjdCoK
ICAgICA6IEpTV3JhcHBlck9iamVjdChwcm90bykKIHsKIH0KKwogLy8gLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tIE51bWJlclByb3RvdHlwZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KIAogLy8gRUNNQSAxNS43LjQKIAotTnVtYmVyUHJvdG90eXBlOjpOdW1iZXJQcm90b3R5cGUo
RXhlY1N0YXRlKiBleGVjLCBPYmplY3RQcm90b3R5cGUqIG9ialByb3RvLCBGdW5jdGlvblByb3Rv
dHlwZSogZnVuY1Byb3RvKQotICAgIDogTnVtYmVySW5zdGFuY2Uob2JqUHJvdG8pCitOdW1iZXJQ
cm90b3R5cGU6Ok51bWJlclByb3RvdHlwZShFeGVjU3RhdGUqIGV4ZWMsIE9iamVjdFByb3RvdHlw
ZSogb2JqZWN0UHJvdG90eXBlLCBGdW5jdGlvblByb3RvdHlwZSogZnVuY3Rpb25Qcm90b3R5cGUp
CisgICAgOiBOdW1iZXJJbnN0YW5jZShvYmplY3RQcm90b3R5cGUpCiB7CiAgICAgc2V0SW50ZXJu
YWxWYWx1ZShqc051bWJlcigwKSk7CiAKICAgICAvLyBUaGUgY29uc3RydWN0b3Igd2lsbCBiZSBh
ZGRlZCBsYXRlciwgYWZ0ZXIgTnVtYmVyT2JqZWN0SW1wIGhhcyBiZWVuIGNvbnN0cnVjdGVkCiAK
LSAgICBwdXREaXJlY3RGdW5jdGlvbihuZXcgTnVtYmVyUHJvdG9GdW5jKGV4ZWMsIGZ1bmNQcm90
bywgTnVtYmVyUHJvdG9GdW5jOjpUb1N0cmluZywgICAgICAgMSwgZXhlYy0+cHJvcGVydHlOYW1l
cygpLnRvU3RyaW5nKSwgRG9udEVudW0pOwotICAgIHB1dERpcmVjdEZ1bmN0aW9uKG5ldyBOdW1i
ZXJQcm90b0Z1bmMoZXhlYywgZnVuY1Byb3RvLCBOdW1iZXJQcm90b0Z1bmM6OlRvTG9jYWxlU3Ry
aW5nLCAwLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkudG9Mb2NhbGVTdHJpbmcpLCBEb250RW51bSk7
Ci0gICAgcHV0RGlyZWN0RnVuY3Rpb24obmV3IE51bWJlclByb3RvRnVuYyhleGVjLCBmdW5jUHJv
dG8sIE51bWJlclByb3RvRnVuYzo6VmFsdWVPZiwgICAgICAgIDAsIGV4ZWMtPnByb3BlcnR5TmFt
ZXMoKS52YWx1ZU9mKSwgRG9udEVudW0pOwotICAgIHB1dERpcmVjdEZ1bmN0aW9uKG5ldyBOdW1i
ZXJQcm90b0Z1bmMoZXhlYywgZnVuY1Byb3RvLCBOdW1iZXJQcm90b0Z1bmM6OlRvRml4ZWQsICAg
ICAgICAxLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkudG9GaXhlZCksIERvbnRFbnVtKTsKLSAgICBw
dXREaXJlY3RGdW5jdGlvbihuZXcgTnVtYmVyUHJvdG9GdW5jKGV4ZWMsIGZ1bmNQcm90bywgTnVt
YmVyUHJvdG9GdW5jOjpUb0V4cG9uZW50aWFsLCAgMSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLnRv
RXhwb25lbnRpYWwpLCBEb250RW51bSk7Ci0gICAgcHV0RGlyZWN0RnVuY3Rpb24obmV3IE51bWJl
clByb3RvRnVuYyhleGVjLCBmdW5jUHJvdG8sIE51bWJlclByb3RvRnVuYzo6VG9QcmVjaXNpb24s
ICAgIDEsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS50b1ByZWNpc2lvbiksIERvbnRFbnVtKTsKKyAg
ICBwdXREaXJlY3RGdW5jdGlvbihuZXcgUHJvdG90eXBlRnVuY3Rpb24oZXhlYywgZnVuY3Rpb25Q
cm90b3R5cGUsIDEsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS50b1N0cmluZywgbnVtYmVyUHJvdG9G
dW5jVG9TdHJpbmcpLCBEb250RW51bSk7CisgICAgcHV0RGlyZWN0RnVuY3Rpb24obmV3IFByb3Rv
dHlwZUZ1bmN0aW9uKGV4ZWMsIGZ1bmN0aW9uUHJvdG90eXBlLCAwLCBleGVjLT5wcm9wZXJ0eU5h
bWVzKCkudG9Mb2NhbGVTdHJpbmcsIG51bWJlclByb3RvRnVuY1RvTG9jYWxlU3RyaW5nKSwgRG9u
dEVudW0pOworICAgIHB1dERpcmVjdEZ1bmN0aW9uKG5ldyBQcm90b3R5cGVGdW5jdGlvbihleGVj
LCBmdW5jdGlvblByb3RvdHlwZSwgMCwgZXhlYy0+cHJvcGVydHlOYW1lcygpLnZhbHVlT2YsIG51
bWJlclByb3RvRnVuY1ZhbHVlT2YpLCBEb250RW51bSk7CisgICAgcHV0RGlyZWN0RnVuY3Rpb24o
bmV3IFByb3RvdHlwZUZ1bmN0aW9uKGV4ZWMsIGZ1bmN0aW9uUHJvdG90eXBlLCAxLCBleGVjLT5w
cm9wZXJ0eU5hbWVzKCkudG9GaXhlZCwgbnVtYmVyUHJvdG9GdW5jVG9GaXhlZCksIERvbnRFbnVt
KTsKKyAgICBwdXREaXJlY3RGdW5jdGlvbihuZXcgUHJvdG90eXBlRnVuY3Rpb24oZXhlYywgZnVu
Y3Rpb25Qcm90b3R5cGUsIDEsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS50b0V4cG9uZW50aWFsLCBu
dW1iZXJQcm90b0Z1bmNUb0V4cG9uZW50aWFsKSwgRG9udEVudW0pOworICAgIHB1dERpcmVjdEZ1
bmN0aW9uKG5ldyBQcm90b3R5cGVGdW5jdGlvbihleGVjLCBmdW5jdGlvblByb3RvdHlwZSwgMSwg
ZXhlYy0+cHJvcGVydHlOYW1lcygpLnRvUHJlY2lzaW9uLCBudW1iZXJQcm90b0Z1bmNUb1ByZWNp
c2lvbiksIERvbnRFbnVtKTsKIH0KIAorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
IEZ1bmN0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotLy8gLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tIE51bWJlclByb3RvRnVuYyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KLQotTnVtYmVyUHJvdG9GdW5jOjpOdW1iZXJQcm90b0Z1bmMoRXhlY1N0YXRlKiBleGVj
LCBGdW5jdGlvblByb3RvdHlwZSogZnVuY1Byb3RvLCBpbnQgaSwgaW50IGxlbiwgY29uc3QgSWRl
bnRpZmllciYgbmFtZSkKLSAgICA6IEludGVybmFsRnVuY3Rpb25JbXAoZnVuY1Byb3RvLCBuYW1l
KQotICAgICwgaWQoaSkKLXsKLSAgICBwdXREaXJlY3QoZXhlYy0+cHJvcGVydHlOYW1lcygpLmxl
bmd0aCwgbGVuLCBEb250RGVsZXRlfFJlYWRPbmx5fERvbnRFbnVtKTsKLX0KKy8vIEVDTUEgMTUu
Ny40LjIgLSAxNS43LjQuNwogCiBzdGF0aWMgVVN0cmluZyBpbnRlZ2VyX3BhcnRfbm9leHAoZG91
YmxlIGQpCiB7CkBAIC0xNDAsOCArMTM1LDE0IEBAIHN0YXRpYyBkb3VibGUgaW50UG93MTAoaW50
IGUpCiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGRvdWJsZT4ocmVzdWx0KTsKIH0KIAotc3RhdGlj
IEpTVmFsdWUqIG51bWJlclRvU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSogdiwgY29u
c3QgTGlzdCYgYXJncykKKworSlNWYWx1ZSogbnVtYmVyUHJvdG9GdW5jVG9TdHJpbmcoRXhlY1N0
YXRlKiBleGVjLCBKU09iamVjdCogdGhpc09iaiwgY29uc3QgTGlzdCYgYXJncykKIHsKKyAgICBp
ZiAoIXRoaXNPYmotPmluaGVyaXRzKCZOdW1iZXJJbnN0YW5jZTo6aW5mbykpCisgICAgICAgIHJl
dHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvcik7CisKKyAgICBKU1ZhbHVlKiB2ID0gc3Rh
dGljX2Nhc3Q8TnVtYmVySW5zdGFuY2UqPih0aGlzT2JqKS0+aW50ZXJuYWxWYWx1ZSgpOworCiAg
ICAgZG91YmxlIHJhZGl4QXNEb3VibGUgPSBhcmdzWzBdLT50b0ludGVnZXIoZXhlYyk7IC8vIG5h
biAtPiAwCiAgICAgaWYgKHJhZGl4QXNEb3VibGUgPT0gMTAgfHwgYXJnc1swXS0+aXNVbmRlZmlu
ZWQoKSkKICAgICAgICAgcmV0dXJuIGpzU3RyaW5nKHYtPnRvU3RyaW5nKGV4ZWMpKTsKQEAgLTIw
MCw4ICsyMDEsMzAgQEAgc3RhdGljIEpTVmFsdWUqIG51bWJlclRvU3RyaW5nKEV4ZWNTdGF0ZQog
ICAgIHJldHVybiBqc1N0cmluZyhzdGFydE9mUmVzdWx0U3RyaW5nKTsKIH0KIAotc3RhdGljIEpT
VmFsdWUqIG51bWJlclRvRml4ZWQoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlKiB2LCBjb25zdCBM
aXN0JiBhcmdzKQorSlNWYWx1ZSogbnVtYmVyUHJvdG9GdW5jVG9Mb2NhbGVTdHJpbmcoRXhlY1N0
YXRlKiBleGVjLCBKU09iamVjdCogdGhpc09iaiwgY29uc3QgTGlzdCYpCiB7CisgICAgaWYgKCF0
aGlzT2JqLT5pbmhlcml0cygmTnVtYmVySW5zdGFuY2U6OmluZm8pKQorICAgICAgICByZXR1cm4g
dGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3IpOworCisgICAgLy8gVE9ETworICAgIHJldHVybiBq
c1N0cmluZyhzdGF0aWNfY2FzdDxOdW1iZXJJbnN0YW5jZSo+KHRoaXNPYmopLT5pbnRlcm5hbFZh
bHVlKCktPnRvU3RyaW5nKGV4ZWMpKTsKK30KKworSlNWYWx1ZSogbnVtYmVyUHJvdG9GdW5jVmFs
dWVPZihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiB0aGlzT2JqLCBjb25zdCBMaXN0JikKK3sK
KyAgICBpZiAoIXRoaXNPYmotPmluaGVyaXRzKCZOdW1iZXJJbnN0YW5jZTo6aW5mbykpCisgICAg
ICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvcik7CisKKyAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8TnVtYmVySW5zdGFuY2UqPih0aGlzT2JqKS0+aW50ZXJuYWxWYWx1ZSgpLT50b0pT
TnVtYmVyKGV4ZWMpOworfQorCitKU1ZhbHVlKiBudW1iZXJQcm90b0Z1bmNUb0ZpeGVkKEV4ZWNT
dGF0ZSogZXhlYywgSlNPYmplY3QqIHRoaXNPYmosIGNvbnN0IExpc3QmIGFyZ3MpCit7CisgICAg
aWYgKCF0aGlzT2JqLT5pbmhlcml0cygmTnVtYmVySW5zdGFuY2U6OmluZm8pKQorICAgICAgICBy
ZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3IpOworCisgICAgSlNWYWx1ZSogdiA9IHN0
YXRpY19jYXN0PE51bWJlckluc3RhbmNlKj4odGhpc09iaiktPmludGVybmFsVmFsdWUoKTsKKwog
ICAgIEpTVmFsdWUqIGZyYWN0aW9uRGlnaXRzID0gYXJnc1swXTsKICAgICBkb3VibGUgZGYgPSBm
cmFjdGlvbkRpZ2l0cy0+dG9JbnRlZ2VyKGV4ZWMpOwogICAgIGlmICghKGRmID49IDAgJiYgZGYg
PD0gMjApKQpAQCAtMjgxLDggKzMwNCwxMyBAQCB2b2lkIGV4cG9uZW50aWFsUGFydFRvU3RyaW5n
KGNoYXIqIGJ1ZiwgCiAgICAgYnVmW2krK10gPSBzdGF0aWNfY2FzdDxjaGFyPignMCcgKyBleHBv
bmVudGlhbCAlIDEwKTsKIH0KIAotc3RhdGljIEpTVmFsdWUqIG51bWJlclRvRXhwb25lbnRpYWwo
RXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlKiB2LCBjb25zdCBMaXN0JiBhcmdzKQorSlNWYWx1ZSog
bnVtYmVyUHJvdG9GdW5jVG9FeHBvbmVudGlhbChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiB0
aGlzT2JqLCBjb25zdCBMaXN0JiBhcmdzKQogeworICAgIGlmICghdGhpc09iai0+aW5oZXJpdHMo
Jk51bWJlckluc3RhbmNlOjppbmZvKSkKKyAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywg
VHlwZUVycm9yKTsKKworICAgIEpTVmFsdWUqIHYgPSBzdGF0aWNfY2FzdDxOdW1iZXJJbnN0YW5j
ZSo+KHRoaXNPYmopLT5pbnRlcm5hbFZhbHVlKCk7CisKICAgICBkb3VibGUgeCA9IHYtPnRvTnVt
YmVyKGV4ZWMpOwogCiAgICAgaWYgKGlzbmFuKHgpIHx8IGlzaW5mKHgpKQpAQCAtMzQ2LDkgKzM3
NCwxNCBAQCBzdGF0aWMgSlNWYWx1ZSogbnVtYmVyVG9FeHBvbmVudGlhbChFeGVjCiAKICAgICBy
ZXR1cm4ganNTdHJpbmcoYnVmKTsKIH0KLSAgICAKLXN0YXRpYyBKU1ZhbHVlKiBudW1iZXJUb1By
ZWNpc2lvbihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUqIHYsIGNvbnN0IExpc3QmIGFyZ3MpCisK
K0pTVmFsdWUqIG51bWJlclByb3RvRnVuY1RvUHJlY2lzaW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNP
YmplY3QqIHRoaXNPYmosIGNvbnN0IExpc3QmIGFyZ3MpCiB7CisgICAgaWYgKCF0aGlzT2JqLT5p
bmhlcml0cygmTnVtYmVySW5zdGFuY2U6OmluZm8pKQorICAgICAgICByZXR1cm4gdGhyb3dFcnJv
cihleGVjLCBUeXBlRXJyb3IpOworCisgICAgSlNWYWx1ZSogdiA9IHN0YXRpY19jYXN0PE51bWJl
ckluc3RhbmNlKj4odGhpc09iaiktPmludGVybmFsVmFsdWUoKTsKKwogICAgIGRvdWJsZSBkb3Vi
bGVQcmVjaXNpb24gPSBhcmdzWzBdLT50b0ludGVnZXJQcmVzZXJ2ZU5hTihleGVjKTsKICAgICBk
b3VibGUgeCA9IHYtPnRvTnVtYmVyKGV4ZWMpOwogICAgIGlmIChhcmdzWzBdLT5pc1VuZGVmaW5l
ZCgpIHx8IGlzbmFuKHgpIHx8IGlzaW5mKHgpKQpAQCAtNDA5LDMxICs0NDIsNiBAQCBzdGF0aWMg
SlNWYWx1ZSogbnVtYmVyVG9QcmVjaXNpb24oRXhlY1N0CiAgICAgcmV0dXJuIGpzU3RyaW5nKHMg
KyAiMC4iICsgY2hhcl9zZXF1ZW5jZSgnMCcsIC0oZSArIDEpKSArIG0pOwogfQogCi0vLyBFQ01B
IDE1LjcuNC4yIC0gMTUuNy40LjcKLUpTVmFsdWUqIE51bWJlclByb3RvRnVuYzo6Y2FsbEFzRnVu
Y3Rpb24oRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogdGhpc09iaiwgY29uc3QgTGlzdCYgYXJn
cykKLXsKLSAgICAvLyBubyBnZW5lcmljIGZ1bmN0aW9uLiAidGhpcyIgaGFzIHRvIGJlIGEgTnVt
YmVyIG9iamVjdAotICAgIGlmICghdGhpc09iai0+aW5oZXJpdHMoJk51bWJlckluc3RhbmNlOjpp
bmZvKSkKLSAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9yKTsKLQotICAg
IEpTVmFsdWUqIHYgPSBzdGF0aWNfY2FzdDxOdW1iZXJJbnN0YW5jZSo+KHRoaXNPYmopLT5pbnRl
cm5hbFZhbHVlKCk7Ci0gICAgc3dpdGNoIChpZCkgewotICAgIGNhc2UgVG9TdHJpbmc6Ci0gICAg
ICAgIHJldHVybiBudW1iZXJUb1N0cmluZyhleGVjLCB2LCBhcmdzKTsKLSAgICBjYXNlIFRvTG9j
YWxlU3RyaW5nOiAvKiBUT0RPICovCi0gICAgICAgIHJldHVybiBqc1N0cmluZyh2LT50b1N0cmlu
ZyhleGVjKSk7Ci0gICAgY2FzZSBWYWx1ZU9mOgotICAgICAgICByZXR1cm4gdi0+dG9KU051bWJl
cihleGVjKTsKLSAgICBjYXNlIFRvRml4ZWQ6Ci0gICAgICAgIHJldHVybiBudW1iZXJUb0ZpeGVk
KGV4ZWMsIHYsIGFyZ3MpOwotICAgIGNhc2UgVG9FeHBvbmVudGlhbDoKLSAgICAgICAgcmV0dXJu
IG51bWJlclRvRXhwb25lbnRpYWwoZXhlYywgdiwgYXJncyk7Ci0gICAgY2FzZSBUb1ByZWNpc2lv
bjoKLSAgICAgICAgcmV0dXJuIG51bWJlclRvUHJlY2lzaW9uKGV4ZWMsIHYsIGFyZ3MpOwotICAg
IH0KLSAgICByZXR1cm4gMDsKLX0KLQogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
IE51bWJlck9iamVjdEltcCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogY29uc3Qg
Q2xhc3NJbmZvIE51bWJlck9iamVjdEltcDo6aW5mbyA9IHsgIkZ1bmN0aW9uIiwgJkludGVybmFs
RnVuY3Rpb25JbXA6OmluZm8sICZudW1iZXJUYWJsZSB9OwpJbmRleDoga2pzL251bWJlcl9vYmpl
Y3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBranMvbnVtYmVyX29iamVjdC5oCShyZXZpc2lvbiAyOTU0MSkK
KysrIGtqcy9udW1iZXJfb2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDcwICsyNyw1OCBA
QAogCiBuYW1lc3BhY2UgS0pTIHsKIAotICBjbGFzcyBOdW1iZXJJbnN0YW5jZSA6IHB1YmxpYyBK
U1dyYXBwZXJPYmplY3QgewotICBwdWJsaWM6Ci0gICAgTnVtYmVySW5zdGFuY2UoSlNPYmplY3Qg
KnByb3RvKTsKLQotICAgIHZpcnR1YWwgY29uc3QgQ2xhc3NJbmZvICpjbGFzc0luZm8oKSBjb25z
dCB7IHJldHVybiAmaW5mbzsgfQotICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8gaW5mbzsKLSAg
fTsKLQotICAvKioKLSAgICogQGludGVybmFsCi0gICAqCi0gICAqIFRoZSBpbml0aWFsIHZhbHVl
IG9mIE51bWJlci5wcm90b3R5cGUgKGFuZCB0aHVzIGFsbCBvYmplY3RzIGNyZWF0ZWQKLSAgICog
d2l0aCB0aGUgTnVtYmVyIGNvbnN0cnVjdG9yCi0gICAqLwotICBjbGFzcyBOdW1iZXJQcm90b3R5
cGUgOiBwdWJsaWMgTnVtYmVySW5zdGFuY2UgewotICBwdWJsaWM6Ci0gICAgTnVtYmVyUHJvdG90
eXBlKEV4ZWNTdGF0ZSAqZXhlYywKLSAgICAgICAgICAgICAgICAgICAgICAgT2JqZWN0UHJvdG90
eXBlICpvYmpQcm90bywKLSAgICAgICAgICAgICAgICAgICAgICAgRnVuY3Rpb25Qcm90b3R5cGUg
KmZ1bmNQcm90byk7Ci0gIH07Ci0KLSAgLyoqCi0gICAqIEBpbnRlcm5hbAotICAgKgotICAgKiBD
bGFzcyB0byBpbXBsZW1lbnQgYWxsIG1ldGhvZHMgdGhhdCBhcmUgcHJvcGVydGllcyBvZiB0aGUK
LSAgICogTnVtYmVyLnByb3RvdHlwZSBvYmplY3QKLSAgICovCi0gIGNsYXNzIE51bWJlclByb3Rv
RnVuYyA6IHB1YmxpYyBJbnRlcm5hbEZ1bmN0aW9uSW1wIHsKLSAgcHVibGljOgotICAgIE51bWJl
clByb3RvRnVuYyhFeGVjU3RhdGUqLCBGdW5jdGlvblByb3RvdHlwZSosIGludCBpLCBpbnQgbGVu
LCBjb25zdCBJZGVudGlmaWVyJik7Ci0KLSAgICB2aXJ0dWFsIEpTVmFsdWUgKmNhbGxBc0Z1bmN0
aW9uKEV4ZWNTdGF0ZSAqZXhlYywgSlNPYmplY3QgKnRoaXNPYmosIGNvbnN0IExpc3QgJmFyZ3Mp
OwotCi0gICAgZW51bSB7IFRvU3RyaW5nLCBUb0xvY2FsZVN0cmluZywgVmFsdWVPZiwgVG9GaXhl
ZCwgVG9FeHBvbmVudGlhbCwgVG9QcmVjaXNpb24gfTsKLSAgcHJpdmF0ZToKLSAgICBpbnQgaWQ7
Ci0gIH07Ci0KLSAgLyoqCi0gICAqIEBpbnRlcm5hbAotICAgKgotICAgKiBUaGUgaW5pdGlhbCB2
YWx1ZSBvZiB0aGUgdGhlIGdsb2JhbCB2YXJpYWJsZSdzICJOdW1iZXIiIHByb3BlcnR5Ci0gICAq
LwotICBjbGFzcyBOdW1iZXJPYmplY3RJbXAgOiBwdWJsaWMgSW50ZXJuYWxGdW5jdGlvbkltcCB7
Ci0gIHB1YmxpYzoKLSAgICBOdW1iZXJPYmplY3RJbXAoRXhlY1N0YXRlICpleGVjLAotICAgICAg
ICAgICAgICAgICAgICBGdW5jdGlvblByb3RvdHlwZSAqZnVuY1Byb3RvLAotICAgICAgICAgICAg
ICAgICAgICBOdW1iZXJQcm90b3R5cGUgKm51bWJlclByb3RvKTsKLQotICAgIHZpcnR1YWwgYm9v
bCBpbXBsZW1lbnRzQ29uc3RydWN0KCkgY29uc3Q7Ci0gICAgdmlydHVhbCBKU09iamVjdCAqY29u
c3RydWN0KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgTGlzdCAmYXJncyk7Ci0KLSAgICB2aXJ0dWFs
IEpTVmFsdWUgKmNhbGxBc0Z1bmN0aW9uKEV4ZWNTdGF0ZSAqZXhlYywgSlNPYmplY3QgKnRoaXNP
YmosIGNvbnN0IExpc3QgJmFyZ3MpOwotCi0gICAgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoRXhl
Y1N0YXRlICosIGNvbnN0IElkZW50aWZpZXImLCBQcm9wZXJ0eVNsb3QmKTsKLSAgICBKU1ZhbHVl
ICpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKLQot
ICAgIHZpcnR1YWwgY29uc3QgQ2xhc3NJbmZvICpjbGFzc0luZm8oKSBjb25zdCB7IHJldHVybiAm
aW5mbzsgfQotICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8gaW5mbzsKLSAgICBlbnVtIHsgTmFO
VmFsdWUsIE5lZ0luZmluaXR5LCBQb3NJbmZpbml0eSwgTWF4VmFsdWUsIE1pblZhbHVlIH07Cisg
ICAgY2xhc3MgTnVtYmVySW5zdGFuY2UgOiBwdWJsaWMgSlNXcmFwcGVyT2JqZWN0IHsKKyAgICBw
dWJsaWM6CisgICAgICAgIE51bWJlckluc3RhbmNlKEpTT2JqZWN0KiBwcm90b3R5cGUpOworCisg
ICAgICAgIHZpcnR1YWwgY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8oKSBjb25zdCB7IHJldHVy
biAmaW5mbzsgfQorICAgICAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIGluZm87CisgICAgfTsK
KworICAgIC8qKgorICAgICAqIEBpbnRlcm5hbAorICAgICAqCisgICAgICogVGhlIGluaXRpYWwg
dmFsdWUgb2YgTnVtYmVyLnByb3RvdHlwZSAoYW5kIHRodXMgYWxsIG9iamVjdHMgY3JlYXRlZAor
ICAgICAqIHdpdGggdGhlIE51bWJlciBjb25zdHJ1Y3RvcgorICAgICAqLworICAgIGNsYXNzIE51
bWJlclByb3RvdHlwZSA6IHB1YmxpYyBOdW1iZXJJbnN0YW5jZSB7CisgICAgcHVibGljOgorICAg
ICAgICBOdW1iZXJQcm90b3R5cGUoRXhlY1N0YXRlKiwgT2JqZWN0UHJvdG90eXBlKiwgRnVuY3Rp
b25Qcm90b3R5cGUqKTsKKyAgICB9OworCisgICAgLy8gRnVuY3Rpb25zCisgICAgSlNWYWx1ZSog
bnVtYmVyUHJvdG9GdW5jVG9TdHJpbmcoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBjb25zdCBMaXN0
Jik7CisgICAgSlNWYWx1ZSogbnVtYmVyUHJvdG9GdW5jVG9Mb2NhbGVTdHJpbmcoRXhlY1N0YXRl
KiwgSlNPYmplY3QqLCBjb25zdCBMaXN0Jik7CisgICAgSlNWYWx1ZSogbnVtYmVyUHJvdG9GdW5j
VmFsdWVPZihFeGVjU3RhdGUqLCBKU09iamVjdCosIGNvbnN0IExpc3QmKTsKKyAgICBKU1ZhbHVl
KiBudW1iZXJQcm90b0Z1bmNUb0ZpeGVkKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgY29uc3QgTGlz
dCYpOworICAgIEpTVmFsdWUqIG51bWJlclByb3RvRnVuY1RvRXhwb25lbnRpYWwoRXhlY1N0YXRl
KiwgSlNPYmplY3QqLCBjb25zdCBMaXN0Jik7CisgICAgSlNWYWx1ZSogbnVtYmVyUHJvdG9GdW5j
VG9QcmVjaXNpb24oRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBjb25zdCBMaXN0Jik7CisKKyAgICAv
KioKKyAgICAgKiBAaW50ZXJuYWwKKyAgICAgKgorICAgICAqIFRoZSBpbml0aWFsIHZhbHVlIG9m
IHRoZSB0aGUgZ2xvYmFsIHZhcmlhYmxlJ3MgIk51bWJlciIgcHJvcGVydHkKKyAgICAgKi8KKyAg
ICBjbGFzcyBOdW1iZXJPYmplY3RJbXAgOiBwdWJsaWMgSW50ZXJuYWxGdW5jdGlvbkltcCB7Cisg
ICAgcHVibGljOgorICAgICAgICBOdW1iZXJPYmplY3RJbXAoRXhlY1N0YXRlKiwgRnVuY3Rpb25Q
cm90b3R5cGUqLCBOdW1iZXJQcm90b3R5cGUqKTsKKworICAgICAgICB2aXJ0dWFsIGJvb2wgaW1w
bGVtZW50c0NvbnN0cnVjdCgpIGNvbnN0OworICAgICAgICB2aXJ0dWFsIEpTT2JqZWN0KiBjb25z
dHJ1Y3QoRXhlY1N0YXRlKiwgY29uc3QgTGlzdCYpOworCisgICAgICAgIHZpcnR1YWwgSlNWYWx1
ZSogY2FsbEFzRnVuY3Rpb24oRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBjb25zdCBMaXN0Jik7CisK
KyAgICAgICAgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRp
ZmllciYsIFByb3BlcnR5U2xvdCYpOworICAgICAgICBKU1ZhbHVlKiBnZXRWYWx1ZVByb3BlcnR5
KEV4ZWNTdGF0ZSosIGludCB0b2tlbikgY29uc3Q7CisKKyAgICAgICAgdmlydHVhbCBjb25zdCBD
bGFzc0luZm8qIGNsYXNzSW5mbygpIGNvbnN0IHsgcmV0dXJuICZpbmZvOyB9CisgICAgICAgIHN0
YXRpYyBjb25zdCBDbGFzc0luZm8gaW5mbzsKIAotICAgIEpTT2JqZWN0ICpjb25zdHJ1Y3QoY29u
c3QgTGlzdCAmKTsKLSAgfTsKKyAgICAgICAgZW51bSB7IE5hTlZhbHVlLCBOZWdJbmZpbml0eSwg
UG9zSW5maW5pdHksIE1heFZhbHVlLCBNaW5WYWx1ZSB9OwogCi19IC8vIG5hbWVzcGFjZQorICAg
ICAgICBKU09iamVjdCogY29uc3RydWN0KGNvbnN0IExpc3QmKTsKKyAgICB9OwogCi0jZW5kaWYK
K30gLy8gbmFtZXNwYWNlIEtKUworCisjZW5kaWYgLy8gTlVNQkVSX09CSkVDVF9IXwpJbmRleDog
a2pzL29iamVjdF9vYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtqcy9vYmplY3Rfb2JqZWN0LmNw
cAkocmV2aXNpb24gMjk1NDEpCisrKyBranMvb2JqZWN0X29iamVjdC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNyArMSw2IEBACi0vLyAtKi0gYy1iYXNpYy1vZmZzZXQ6IDIgLSotCiAvKgotICog
IFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBLREUgbGlicmFyaWVzCiAgKiAgQ29weXJpZ2h0IChD
KSAxOTk5LTIwMDAgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKKyAqICBDb3B5cmlnaHQg
KEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqICBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAg
KiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1
YmxpYwpAQCAtMjcsMTIgKzI2LDEyIEBACiAjaW5jbHVkZSAiZnVuY3Rpb25fb2JqZWN0LmgiCiAj
aW5jbHVkZSA8c3RkaW8uaD4KIAotdXNpbmcgbmFtZXNwYWNlIEtKUzsKK25hbWVzcGFjZSBLSlMg
ewogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gT2JqZWN0UHJvdG90eXBlIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLU9iamVjdFByb3RvdHlwZTo6T2JqZWN0
UHJvdG90eXBlKEV4ZWNTdGF0ZSogZXhlYywgRnVuY3Rpb25Qcm90b3R5cGUqIGZ1bmNQcm90bykK
LSAgOiBKU09iamVjdCgpIC8vIFtbUHJvdG90eXBlXV0gaXMgbnVsbAorT2JqZWN0UHJvdG90eXBl
OjpPYmplY3RQcm90b3R5cGUoRXhlY1N0YXRlKiBleGVjLCBGdW5jdGlvblByb3RvdHlwZSogZnVu
Y3Rpb25Qcm90b3R5cGUpCisgICAgOiBKU09iamVjdCgpIC8vIFtbUHJvdG90eXBlXV0gaXMgbnVs
bAogewogICAgIHN0YXRpYyBjb25zdCBJZGVudGlmaWVyKiBoYXNPd25Qcm9wZXJ0eVByb3BlcnR5
TmFtZSA9IG5ldyBJZGVudGlmaWVyKCJoYXNPd25Qcm9wZXJ0eSIpOwogICAgIHN0YXRpYyBjb25z
dCBJZGVudGlmaWVyKiBwcm9wZXJ0eUlzRW51bWVyYWJsZVByb3BlcnR5TmFtZSA9IG5ldyBJZGVu
dGlmaWVyKCJwcm9wZXJ0eUlzRW51bWVyYWJsZSIpOwpAQCAtNDIsMTEzICs0MSwxMjYgQEAgT2Jq
ZWN0UHJvdG90eXBlOjpPYmplY3RQcm90b3R5cGUoRXhlY1N0YQogICAgIHN0YXRpYyBjb25zdCBJ
ZGVudGlmaWVyKiBsb29rdXBHZXR0ZXJQcm9wZXJ0eU5hbWUgPSBuZXcgSWRlbnRpZmllcigiX19s
b29rdXBHZXR0ZXJfXyIpOwogICAgIHN0YXRpYyBjb25zdCBJZGVudGlmaWVyKiBsb29rdXBTZXR0
ZXJQcm9wZXJ0eU5hbWUgPSBuZXcgSWRlbnRpZmllcigiX19sb29rdXBTZXR0ZXJfXyIpOwogCi0g
ICAgcHV0RGlyZWN0RnVuY3Rpb24obmV3IE9iamVjdFByb3RvRnVuYyhleGVjLCBmdW5jUHJvdG8s
IE9iamVjdFByb3RvRnVuYzo6VG9TdHJpbmcsIDAsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS50b1N0
cmluZyksIERvbnRFbnVtKTsKLSAgICBwdXREaXJlY3RGdW5jdGlvbihuZXcgT2JqZWN0UHJvdG9G
dW5jKGV4ZWMsIGZ1bmNQcm90bywgT2JqZWN0UHJvdG9GdW5jOjpUb0xvY2FsZVN0cmluZywgMCwg
ZXhlYy0+cHJvcGVydHlOYW1lcygpLnRvTG9jYWxlU3RyaW5nKSwgRG9udEVudW0pOwotICAgIHB1
dERpcmVjdEZ1bmN0aW9uKG5ldyBPYmplY3RQcm90b0Z1bmMoZXhlYywgZnVuY1Byb3RvLCBPYmpl
Y3RQcm90b0Z1bmM6OlZhbHVlT2YsIDAsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS52YWx1ZU9mKSwg
RG9udEVudW0pOwotICAgIHB1dERpcmVjdEZ1bmN0aW9uKG5ldyBPYmplY3RQcm90b0Z1bmMoZXhl
YywgZnVuY1Byb3RvLCBPYmplY3RQcm90b0Z1bmM6Okhhc093blByb3BlcnR5LCAxLCAqaGFzT3du
UHJvcGVydHlQcm9wZXJ0eU5hbWUpLCBEb250RW51bSk7Ci0gICAgcHV0RGlyZWN0RnVuY3Rpb24o
bmV3IE9iamVjdFByb3RvRnVuYyhleGVjLCBmdW5jUHJvdG8sIE9iamVjdFByb3RvRnVuYzo6UHJv
cGVydHlJc0VudW1lcmFibGUsIDEsICpwcm9wZXJ0eUlzRW51bWVyYWJsZVByb3BlcnR5TmFtZSks
IERvbnRFbnVtKTsKLSAgICBwdXREaXJlY3RGdW5jdGlvbihuZXcgT2JqZWN0UHJvdG9GdW5jKGV4
ZWMsIGZ1bmNQcm90bywgT2JqZWN0UHJvdG9GdW5jOjpJc1Byb3RvdHlwZU9mLCAxLCAqaXNQcm90
b3R5cGVPZlByb3BlcnR5TmFtZSksIERvbnRFbnVtKTsKKyAgICBwdXREaXJlY3RGdW5jdGlvbihu
ZXcgUHJvdG90eXBlRnVuY3Rpb24oZXhlYywgZnVuY3Rpb25Qcm90b3R5cGUsIDAsIGV4ZWMtPnBy
b3BlcnR5TmFtZXMoKS50b1N0cmluZywgb2JqZWN0UHJvdG9GdW5jVG9TdHJpbmcpLCBEb250RW51
bSk7CisgICAgcHV0RGlyZWN0RnVuY3Rpb24obmV3IFByb3RvdHlwZUZ1bmN0aW9uKGV4ZWMsIGZ1
bmN0aW9uUHJvdG90eXBlLCAwLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkudG9Mb2NhbGVTdHJpbmcs
IG9iamVjdFByb3RvRnVuY1RvTG9jYWxlU3RyaW5nKSwgRG9udEVudW0pOworICAgIHB1dERpcmVj
dEZ1bmN0aW9uKG5ldyBQcm90b3R5cGVGdW5jdGlvbihleGVjLCBmdW5jdGlvblByb3RvdHlwZSwg
MCwgZXhlYy0+cHJvcGVydHlOYW1lcygpLnZhbHVlT2YsIG9iamVjdFByb3RvRnVuY1ZhbHVlT2Yp
LCBEb250RW51bSk7CisgICAgcHV0RGlyZWN0RnVuY3Rpb24obmV3IFByb3RvdHlwZUZ1bmN0aW9u
KGV4ZWMsIGZ1bmN0aW9uUHJvdG90eXBlLCAxLCAqaGFzT3duUHJvcGVydHlQcm9wZXJ0eU5hbWUs
IG9iamVjdFByb3RvRnVuY0hhc093blByb3BlcnR5KSwgRG9udEVudW0pOworICAgIHB1dERpcmVj
dEZ1bmN0aW9uKG5ldyBQcm90b3R5cGVGdW5jdGlvbihleGVjLCBmdW5jdGlvblByb3RvdHlwZSwg
MSwgKnByb3BlcnR5SXNFbnVtZXJhYmxlUHJvcGVydHlOYW1lLCBvYmplY3RQcm90b0Z1bmNQcm9w
ZXJ0eUlzRW51bWVyYWJsZSksIERvbnRFbnVtKTsKKyAgICBwdXREaXJlY3RGdW5jdGlvbihuZXcg
UHJvdG90eXBlRnVuY3Rpb24oZXhlYywgZnVuY3Rpb25Qcm90b3R5cGUsIDEsICppc1Byb3RvdHlw
ZU9mUHJvcGVydHlOYW1lLCBvYmplY3RQcm90b0Z1bmNJc1Byb3RvdHlwZU9mKSwgRG9udEVudW0p
OwogCiAgICAgLy8gTW96aWxsYSBleHRlbnNpb25zCi0gICAgcHV0RGlyZWN0RnVuY3Rpb24obmV3
IE9iamVjdFByb3RvRnVuYyhleGVjLCBmdW5jUHJvdG8sIE9iamVjdFByb3RvRnVuYzo6RGVmaW5l
R2V0dGVyLCAyLCAqZGVmaW5lR2V0dGVyUHJvcGVydHlOYW1lKSwgRG9udEVudW0pOwotICAgIHB1
dERpcmVjdEZ1bmN0aW9uKG5ldyBPYmplY3RQcm90b0Z1bmMoZXhlYywgZnVuY1Byb3RvLCBPYmpl
Y3RQcm90b0Z1bmM6OkRlZmluZVNldHRlciwgMiwgKmRlZmluZVNldHRlclByb3BlcnR5TmFtZSks
IERvbnRFbnVtKTsKLSAgICBwdXREaXJlY3RGdW5jdGlvbihuZXcgT2JqZWN0UHJvdG9GdW5jKGV4
ZWMsIGZ1bmNQcm90bywgT2JqZWN0UHJvdG9GdW5jOjpMb29rdXBHZXR0ZXIsIDEsICpsb29rdXBH
ZXR0ZXJQcm9wZXJ0eU5hbWUpLCBEb250RW51bSk7Ci0gICAgcHV0RGlyZWN0RnVuY3Rpb24obmV3
IE9iamVjdFByb3RvRnVuYyhleGVjLCBmdW5jUHJvdG8sIE9iamVjdFByb3RvRnVuYzo6TG9va3Vw
U2V0dGVyLCAxLCAqbG9va3VwU2V0dGVyUHJvcGVydHlOYW1lKSwgRG9udEVudW0pOworICAgIHB1
dERpcmVjdEZ1bmN0aW9uKG5ldyBQcm90b3R5cGVGdW5jdGlvbihleGVjLCBmdW5jdGlvblByb3Rv
dHlwZSwgMiwgKmRlZmluZUdldHRlclByb3BlcnR5TmFtZSwgb2JqZWN0UHJvdG9GdW5jRGVmaW5l
R2V0dGVyKSwgRG9udEVudW0pOworICAgIHB1dERpcmVjdEZ1bmN0aW9uKG5ldyBQcm90b3R5cGVG
dW5jdGlvbihleGVjLCBmdW5jdGlvblByb3RvdHlwZSwgMiwgKmRlZmluZVNldHRlclByb3BlcnR5
TmFtZSwgb2JqZWN0UHJvdG9GdW5jRGVmaW5lU2V0dGVyKSwgRG9udEVudW0pOworICAgIHB1dERp
cmVjdEZ1bmN0aW9uKG5ldyBQcm90b3R5cGVGdW5jdGlvbihleGVjLCBmdW5jdGlvblByb3RvdHlw
ZSwgMSwgKmxvb2t1cEdldHRlclByb3BlcnR5TmFtZSwgb2JqZWN0UHJvdG9GdW5jTG9va3VwR2V0
dGVyKSwgRG9udEVudW0pOworICAgIHB1dERpcmVjdEZ1bmN0aW9uKG5ldyBQcm90b3R5cGVGdW5j
dGlvbihleGVjLCBmdW5jdGlvblByb3RvdHlwZSwgMSwgKmxvb2t1cFNldHRlclByb3BlcnR5TmFt
ZSwgb2JqZWN0UHJvdG9GdW5jTG9va3VwU2V0dGVyKSwgRG9udEVudW0pOwogfQogCiAKLS8vIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBPYmplY3RQcm90b0Z1bmMgLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBG
dW5jdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotT2JqZWN0UHJvdG9G
dW5jOjpPYmplY3RQcm90b0Z1bmMoRXhlY1N0YXRlKiBleGVjLCBGdW5jdGlvblByb3RvdHlwZSog
ZnVuY1Byb3RvLCBpbnQgaSwgaW50IGxlbiwgY29uc3QgSWRlbnRpZmllciYgbmFtZSkKLSAgOiBJ
bnRlcm5hbEZ1bmN0aW9uSW1wKGZ1bmNQcm90bywgbmFtZSkKLSAgLCBpZChpKQorLy8gRUNNQSAx
NS4yLjQuMiwgMTUuMi40LjQsIDE1LjIuNC41LCAxNS4yLjQuNworCitKU1ZhbHVlKiBvYmplY3RQ
cm90b0Z1bmNWYWx1ZU9mKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiB0aGlzT2JqLCBjb25zdCBMaXN0
JikKIHsKLSAgcHV0RGlyZWN0KGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgsIGxlbiwgRG9u
dERlbGV0ZXxSZWFkT25seXxEb250RW51bSk7CisgICAgcmV0dXJuIHRoaXNPYmo7CiB9CiAKK0pT
VmFsdWUqIG9iamVjdFByb3RvRnVuY0hhc093blByb3BlcnR5KEV4ZWNTdGF0ZSogZXhlYywgSlNP
YmplY3QqIHRoaXNPYmosIGNvbnN0IExpc3QmIGFyZ3MpCit7CisgICAgcmV0dXJuIGpzQm9vbGVh
bih0aGlzT2JqLT5oYXNPd25Qcm9wZXJ0eShleGVjLCBJZGVudGlmaWVyKGFyZ3NbMF0tPnRvU3Ry
aW5nKGV4ZWMpKSkpOworfQogCi0vLyBFQ01BIDE1LjIuNC4yLCAxNS4yLjQuNCwgMTUuMi40LjUs
IDE1LjIuNC43CitKU1ZhbHVlKiBvYmplY3RQcm90b0Z1bmNJc1Byb3RvdHlwZU9mKEV4ZWNTdGF0
ZSosIEpTT2JqZWN0KiB0aGlzT2JqLCBjb25zdCBMaXN0JiBhcmdzKQoreworICAgIGlmICghYXJn
c1swXS0+aXNPYmplY3QoKSkKKyAgICAgICAgcmV0dXJuIGpzQm9vbGVhbihmYWxzZSk7CisKKyAg
ICBKU1ZhbHVlKiB2ID0gc3RhdGljX2Nhc3Q8SlNPYmplY3QqPihhcmdzWzBdKS0+cHJvdG90eXBl
KCk7CisKKyAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICBpZiAoIXYtPmlzT2JqZWN0KCkpCisg
ICAgICAgICAgICByZXR1cm4ganNCb29sZWFuKGZhbHNlKTsKKyAgICAgICAgaWYgKHRoaXNPYmog
PT0gc3RhdGljX2Nhc3Q8SlNPYmplY3QqPih2KSkLCisgICAgICAgICAgICByZXR1cm4ganNCb29s
ZWFuKHRydWUpOworICAgICAgICB2ID0gc3RhdGljX2Nhc3Q8SlNPYmplY3QqPih2KS0+cHJvdG90
eXBlKCk7CisgICAgfQorfQorCitKU1ZhbHVlKiBvYmplY3RQcm90b0Z1bmNEZWZpbmVHZXR0ZXIo
RXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogdGhpc09iaiwgY29uc3QgTGlzdCYgYXJncykKK3sK
KyAgICBpZiAoIWFyZ3NbMV0tPmlzT2JqZWN0KCkgfHwgIXN0YXRpY19jYXN0PEpTT2JqZWN0Kj4o
YXJnc1sxXSktPmltcGxlbWVudHNDYWxsKCkpCisgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4
ZWMsIFN5bnRheEVycm9yLCAiaW52YWxpZCBnZXR0ZXIgdXNhZ2UiKTsKKworICAgIHRoaXNPYmot
PmRlZmluZUdldHRlcihleGVjLCBJZGVudGlmaWVyKGFyZ3NbMF0tPnRvU3RyaW5nKGV4ZWMpKSwg
c3RhdGljX2Nhc3Q8SlNPYmplY3QgKj4oYXJnc1sxXSkpOworICAgIHJldHVybiBqc1VuZGVmaW5l
ZCgpOworfQorCitKU1ZhbHVlKiBvYmplY3RQcm90b0Z1bmNEZWZpbmVTZXR0ZXIoRXhlY1N0YXRl
KiBleGVjLCBKU09iamVjdCogdGhpc09iaiwgY29uc3QgTGlzdCYgYXJncykKK3sKKyAgICBpZiAo
IWFyZ3NbMV0tPmlzT2JqZWN0KCkgfHwgIXN0YXRpY19jYXN0PEpTT2JqZWN0Kj4oYXJnc1sxXSkt
PmltcGxlbWVudHNDYWxsKCkpCisgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFN5bnRh
eEVycm9yLCAiaW52YWxpZCBzZXR0ZXIgdXNhZ2UiKTsKKworICAgIHRoaXNPYmotPmRlZmluZVNl
dHRlcihleGVjLCBJZGVudGlmaWVyKGFyZ3NbMF0tPnRvU3RyaW5nKGV4ZWMpKSwgc3RhdGljX2Nh
c3Q8SlNPYmplY3QgKj4oYXJnc1sxXSkpOworICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworfQog
Ci1KU1ZhbHVlICpPYmplY3RQcm90b0Z1bmM6OmNhbGxBc0Z1bmN0aW9uKEV4ZWNTdGF0ZSAqZXhl
YywgSlNPYmplY3QgKnRoaXNPYmosIGNvbnN0IExpc3QgJmFyZ3MpCitKU1ZhbHVlKiBvYmplY3RQ
cm90b0Z1bmNMb29rdXBHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogdGhpc09iaiwg
Y29uc3QgTGlzdCYgYXJncykKIHsKLSAgICBzd2l0Y2ggKGlkKSB7Ci0gICAgICAgIGNhc2UgVmFs
dWVPZjoKLSAgICAgICAgICAgIHJldHVybiB0aGlzT2JqOwotICAgICAgICBjYXNlIEhhc093blBy
b3BlcnR5OgotICAgICAgICAgICAgcmV0dXJuIGpzQm9vbGVhbih0aGlzT2JqLT5oYXNPd25Qcm9w
ZXJ0eShleGVjLCBJZGVudGlmaWVyKGFyZ3NbMF0tPnRvU3RyaW5nKGV4ZWMpKSkpOwotICAgICAg
ICBjYXNlIElzUHJvdG90eXBlT2Y6IHsKLSAgICAgICAgICAgIGlmICghYXJnc1swXS0+aXNPYmpl
Y3QoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4ganNCb29sZWFuKGZhbHNlKTsKLSAgICAgICAg
IAotICAgICAgICAgICAgSlNWYWx1ZSAqdiA9IHN0YXRpY19jYXN0PEpTT2JqZWN0ICo+KGFyZ3Nb
MF0pLT5wcm90b3R5cGUoKTsKLQotICAgICAgICAgICAgd2hpbGUgKHRydWUpIHsKLSAgICAgICAg
ICAgICAgICBpZiAoIXYtPmlzT2JqZWN0KCkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBq
c0Jvb2xlYW4oZmFsc2UpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGlmICh0
aGlzT2JqID09IHN0YXRpY19jYXN0PEpTT2JqZWN0ICo+KHYpKQsKLSAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGpzQm9vbGVhbih0cnVlKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAg
ICAgICB2ID0gc3RhdGljX2Nhc3Q8SlNPYmplY3QgKj4odiktPnByb3RvdHlwZSgpOwotICAgICAg
ICAgICAgfQorICAgIElkZW50aWZpZXIgcHJvcGVydHlOYW1lID0gSWRlbnRpZmllcihhcmdzWzBd
LT50b1N0cmluZyhleGVjKSk7CisgICAgSlNPYmplY3QqIG9iaiA9IHRoaXNPYmo7CisgICAgd2hp
bGUgKHRydWUpIHsKKyAgICAgICAgSlNWYWx1ZSogdiA9IG9iai0+Z2V0RGlyZWN0KHByb3BlcnR5
TmFtZSk7CisgICAgICAgIGlmICh2KSB7CisgICAgICAgICAgICBpZiAodi0+dHlwZSgpICE9IEdl
dHRlclNldHRlclR5cGUpCisgICAgICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Cisg
ICAgICAgICAgICBKU09iamVjdCogZnVuY09iaiA9IHN0YXRpY19jYXN0PEdldHRlclNldHRlcklt
cCo+KHYpLT5nZXRHZXR0ZXIoKTsKKyAgICAgICAgICAgIGlmICghZnVuY09iaikKKyAgICAgICAg
ICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICAgICAgICAgIHJldHVybiBmdW5jT2Jq
OwogICAgICAgICB9Ci0gICAgICAgIGNhc2UgRGVmaW5lR2V0dGVyOiAKLSAgICAgICAgY2FzZSBE
ZWZpbmVTZXR0ZXI6IHsKLSAgICAgICAgICAgIGlmICghYXJnc1sxXS0+aXNPYmplY3QoKSB8fAot
ICAgICAgICAgICAgICAgICFzdGF0aWNfY2FzdDxKU09iamVjdCAqPihhcmdzWzFdKS0+aW1wbGVt
ZW50c0NhbGwoKSkgewotICAgICAgICAgICAgICAgIGlmIChpZCA9PSBEZWZpbmVHZXR0ZXIpCi0g
ICAgICAgICAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFN5bnRheEVycm9yLCAi
aW52YWxpZCBnZXR0ZXIgdXNhZ2UiKTsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAg
ICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFN5bnRheEVycm9yLCAiaW52YWxpZCBz
ZXR0ZXIgdXNhZ2UiKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKGlkID09IERl
ZmluZUdldHRlcikKLSAgICAgICAgICAgICAgICB0aGlzT2JqLT5kZWZpbmVHZXR0ZXIoZXhlYywg
SWRlbnRpZmllcihhcmdzWzBdLT50b1N0cmluZyhleGVjKSksIHN0YXRpY19jYXN0PEpTT2JqZWN0
ICo+KGFyZ3NbMV0pKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB0aGlzT2Jq
LT5kZWZpbmVTZXR0ZXIoZXhlYywgSWRlbnRpZmllcihhcmdzWzBdLT50b1N0cmluZyhleGVjKSks
IHN0YXRpY19jYXN0PEpTT2JqZWN0ICo+KGFyZ3NbMV0pKTsKKworICAgICAgICBpZiAoIW9iai0+
cHJvdG90eXBlKCkgfHwgIW9iai0+cHJvdG90eXBlKCktPmlzT2JqZWN0KCkpCiAgICAgICAgICAg
ICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICAgICAgb2JqID0gc3RhdGljX2Nhc3Q8SlNPYmpl
Y3QqPihvYmotPnByb3RvdHlwZSgpKTsKKyAgICB9Cit9CisKK0pTVmFsdWUqIG9iamVjdFByb3Rv
RnVuY0xvb2t1cFNldHRlcihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiB0aGlzT2JqLCBjb25z
dCBMaXN0JiBhcmdzKQoreworICAgIElkZW50aWZpZXIgcHJvcGVydHlOYW1lID0gSWRlbnRpZmll
cihhcmdzWzBdLT50b1N0cmluZyhleGVjKSk7CisgICAgSlNPYmplY3QqIG9iaiA9IHRoaXNPYmo7
CisgICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAgSlNWYWx1ZSogdiA9IG9iai0+Z2V0RGlyZWN0
KHByb3BlcnR5TmFtZSk7CisgICAgICAgIGlmICh2KSB7CisgICAgICAgICAgICBpZiAodi0+dHlw
ZSgpICE9IEdldHRlclNldHRlclR5cGUpCisgICAgICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZp
bmVkKCk7CisgICAgICAgICAgICBKU09iamVjdCogZnVuY09iaiA9IHN0YXRpY19jYXN0PEdldHRl
clNldHRlckltcCo+KHYpLT5nZXRTZXR0ZXIoKTsKKyAgICAgICAgICAgIGlmICghZnVuY09iaikK
KyAgICAgICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICAgICAgICAgIHJldHVy
biBmdW5jT2JqOwogICAgICAgICB9Ci0gICAgICAgIGNhc2UgTG9va3VwR2V0dGVyOgotICAgICAg
ICBjYXNlIExvb2t1cFNldHRlcjogewotICAgICAgICAgICAgSWRlbnRpZmllciBwcm9wZXJ0eU5h
bWUgPSBJZGVudGlmaWVyKGFyZ3NbMF0tPnRvU3RyaW5nKGV4ZWMpKTsKLSAgICAgICAgICAgIAot
ICAgICAgICAgICAgSlNPYmplY3QgKm9iaiA9IHRoaXNPYmo7Ci0gICAgICAgICAgICB3aGlsZSAo
dHJ1ZSkgewotICAgICAgICAgICAgICAgIEpTVmFsdWUgKnYgPSBvYmotPmdldERpcmVjdChwcm9w
ZXJ0eU5hbWUpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGlmICh2KSB7Ci0g
ICAgICAgICAgICAgICAgICAgIGlmICh2LT50eXBlKCkgIT0gR2V0dGVyU2V0dGVyVHlwZSkKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotCi0gICAgICAgICAg
ICAgICAgICAgIEpTT2JqZWN0ICpmdW5jT2JqOwotICAgICAgICAgICAgICAgICAgICAgICAgCi0g
ICAgICAgICAgICAgICAgICAgIGlmIChpZCA9PSBMb29rdXBHZXR0ZXIpCi0gICAgICAgICAgICAg
ICAgICAgICAgICBmdW5jT2JqID0gc3RhdGljX2Nhc3Q8R2V0dGVyU2V0dGVySW1wICo+KHYpLT5n
ZXRHZXR0ZXIoKTsKLSAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAg
ICAgICAgZnVuY09iaiA9IHN0YXRpY19jYXN0PEdldHRlclNldHRlckltcCAqPih2KS0+Z2V0U2V0
dGVyKCk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIGlmICghZnVuY09i
aikKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgICAg
ICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZnVuY09i
ajsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAg
aWYgKCFvYmotPnByb3RvdHlwZSgpIHx8ICFvYmotPnByb3RvdHlwZSgpLT5pc09iamVjdCgpKQot
ICAgICAgICAgICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICAgICAgICAgICAg
ICAKLSAgICAgICAgICAgICAgICBvYmogPSBzdGF0aWNfY2FzdDxKU09iamVjdCAqPihvYmotPnBy
b3RvdHlwZSgpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBjYXNlIFByb3Bl
cnR5SXNFbnVtZXJhYmxlOgotICAgICAgICAgICAgcmV0dXJuIGpzQm9vbGVhbih0aGlzT2JqLT5w
cm9wZXJ0eUlzRW51bWVyYWJsZShleGVjLCBJZGVudGlmaWVyKGFyZ3NbMF0tPnRvU3RyaW5nKGV4
ZWMpKSkpOwotICAgICAgICBjYXNlIFRvTG9jYWxlU3RyaW5nOgotICAgICAgICAgICAgcmV0dXJu
IGpzU3RyaW5nKHRoaXNPYmotPnRvU3RyaW5nKGV4ZWMpKTsKLSAgICAgICAgY2FzZSBUb1N0cmlu
ZzoKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBqc1N0cmluZygiW29iamVj
dCAiICsgdGhpc09iai0+Y2xhc3NOYW1lKCkgKyAiXSIpOworCisgICAgICAgIGlmICghb2JqLT5w
cm90b3R5cGUoKSB8fCAhb2JqLT5wcm90b3R5cGUoKS0+aXNPYmplY3QoKSkKKyAgICAgICAgICAg
IHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgICAgICBvYmogPSBzdGF0aWNfY2FzdDxKU09iamVj
dCo+KG9iai0+cHJvdG90eXBlKCkpOwogICAgIH0KIH0KIAorSlNWYWx1ZSogb2JqZWN0UHJvdG9G
dW5jUHJvcGVydHlJc0VudW1lcmFibGUoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogdGhpc09i
aiwgY29uc3QgTGlzdCYgYXJncykKK3sKKyAgICByZXR1cm4ganNCb29sZWFuKHRoaXNPYmotPnBy
b3BlcnR5SXNFbnVtZXJhYmxlKGV4ZWMsIElkZW50aWZpZXIoYXJnc1swXS0+dG9TdHJpbmcoZXhl
YykpKSk7Cit9CisKK0pTVmFsdWUqIG9iamVjdFByb3RvRnVuY1RvTG9jYWxlU3RyaW5nKEV4ZWNT
dGF0ZSogZXhlYywgSlNPYmplY3QqIHRoaXNPYmosIGNvbnN0IExpc3QmKQoreworICAgIHJldHVy
biBqc1N0cmluZyh0aGlzT2JqLT50b1N0cmluZyhleGVjKSk7Cit9CisKK0pTVmFsdWUqIG9iamVj
dFByb3RvRnVuY1RvU3RyaW5nKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiB0aGlzT2JqLCBjb25zdCBM
aXN0JikKK3sKKyAgICByZXR1cm4ganNTdHJpbmcoIltvYmplY3QgIiArIHRoaXNPYmotPmNsYXNz
TmFtZSgpICsgIl0iKTsKK30KKwogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIE9i
amVjdE9iamVjdEltcCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBPYmplY3RP
YmplY3RJbXA6Ok9iamVjdE9iamVjdEltcChFeGVjU3RhdGUqIGV4ZWMsIE9iamVjdFByb3RvdHlw
ZSogb2JqUHJvdG8sIEZ1bmN0aW9uUHJvdG90eXBlKiBmdW5jUHJvdG8pCkBAIC0xOTEsMyArMjAz
LDQgQEAgSlNWYWx1ZSogT2JqZWN0T2JqZWN0SW1wOjpjYWxsQXNGdW5jdGlvbgogICAgIHJldHVy
biBjb25zdHJ1Y3QoZXhlYywgYXJncyk7CiB9CiAKK30gLy8gbmFtZXNwYWNlIEtKUwpJbmRleDog
a2pzL29iamVjdF9vYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBranMvb2JqZWN0X29iamVjdC5oCShy
ZXZpc2lvbiAyOTU0MSkKKysrIGtqcy9vYmplY3Rfb2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAg
LTEsNyArMSw2IEBACi0vLyAtKi0gYy1iYXNpYy1vZmZzZXQ6IDIgLSotCiAvKgotICogIFRoaXMg
ZmlsZSBpcyBwYXJ0IG9mIHRoZSBLREUgbGlicmFyaWVzCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5
LTIwMDAgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKKyAqICBDb3B5cmlnaHQgKEMpIDIw
MDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqICBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwpA
QCAtMjYsNTQgKzI1LDQyIEBACiAKIG5hbWVzcGFjZSBLSlMgewogCi0gIGNsYXNzIEZ1bmN0aW9u
UHJvdG90eXBlOworICAgIC8qKgorICAgICAqIEBpbnRlcm5hbAorICAgICAqCisgICAgICogVGhl
IGluaXRpYWwgdmFsdWUgb2YgT2JqZWN0LnByb3RvdHlwZSAoYW5kIHRodXMgYWxsIG9iamVjdHMg
Y3JlYXRlZAorICAgICAqIHdpdGggdGhlIE9iamVjdCBjb25zdHJ1Y3RvcgorICAgICAqLworICAg
IGNsYXNzIE9iamVjdFByb3RvdHlwZSA6IHB1YmxpYyBKU09iamVjdCB7CisgICAgcHVibGljOgor
ICAgICAgICBPYmplY3RQcm90b3R5cGUoRXhlY1N0YXRlKiwgRnVuY3Rpb25Qcm90b3R5cGUqKTsK
KyAgICB9OworCisgICAgSlNWYWx1ZSogb2JqZWN0UHJvdG9GdW5jVmFsdWVPZihFeGVjU3RhdGUq
LCBKU09iamVjdCosIGNvbnN0IExpc3QmKTsKKyAgICBKU1ZhbHVlKiBvYmplY3RQcm90b0Z1bmNI
YXNPd25Qcm9wZXJ0eShFeGVjU3RhdGUqLCBKU09iamVjdCosIGNvbnN0IExpc3QmKTsKKyAgICBK
U1ZhbHVlKiBvYmplY3RQcm90b0Z1bmNJc1Byb3RvdHlwZU9mKEV4ZWNTdGF0ZSosIEpTT2JqZWN0
KiwgY29uc3QgTGlzdCYpOworICAgIEpTVmFsdWUqIG9iamVjdFByb3RvRnVuY0RlZmluZUdldHRl
cihFeGVjU3RhdGUqLCBKU09iamVjdCosIGNvbnN0IExpc3QmKTsKKyAgICBKU1ZhbHVlKiBvYmpl
Y3RQcm90b0Z1bmNEZWZpbmVTZXR0ZXIoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBjb25zdCBMaXN0
Jik7CisgICAgSlNWYWx1ZSogb2JqZWN0UHJvdG9GdW5jTG9va3VwR2V0dGVyKEV4ZWNTdGF0ZSos
IEpTT2JqZWN0KiwgY29uc3QgTGlzdCYpOworICAgIEpTVmFsdWUqIG9iamVjdFByb3RvRnVuY0xv
b2t1cFNldHRlcihFeGVjU3RhdGUqLCBKU09iamVjdCosIGNvbnN0IExpc3QmKTsKKyAgICBKU1Zh
bHVlKiBvYmplY3RQcm90b0Z1bmNQcm9wZXJ0eUlzRW51bWVyYWJsZShFeGVjU3RhdGUqLCBKU09i
amVjdCosIGNvbnN0IExpc3QmKTsKKyAgICBKU1ZhbHVlKiBvYmplY3RQcm90b0Z1bmNUb0xvY2Fs
ZVN0cmluZyhFeGVjU3RhdGUqLCBKU09iamVjdCosIGNvbnN0IExpc3QmKTsKKyAgICBKU1ZhbHVl
KiBvYmplY3RQcm90b0Z1bmNUb1N0cmluZyhFeGVjU3RhdGUqLCBKU09iamVjdCosIGNvbnN0IExp
c3QmKTsKKworICAgIC8qKgorICAgICAqIEBpbnRlcm5hbAorICAgICAqCisgICAgICogVGhlIGlu
aXRpYWwgdmFsdWUgb2YgdGhlIHRoZSBnbG9iYWwgdmFyaWFibGUncyAiT2JqZWN0IiBwcm9wZXJ0
eQorICAgICAqLworICAgIGNsYXNzIE9iamVjdE9iamVjdEltcCA6IHB1YmxpYyBJbnRlcm5hbEZ1
bmN0aW9uSW1wIHsKKyAgICBwdWJsaWM6CisgICAgICAgIE9iamVjdE9iamVjdEltcChFeGVjU3Rh
dGUqLCBPYmplY3RQcm90b3R5cGUqLCBGdW5jdGlvblByb3RvdHlwZSopOworCisgICAgICAgIHZp
cnR1YWwgYm9vbCBpbXBsZW1lbnRzQ29uc3RydWN0KCkgY29uc3Q7CisgICAgICAgIHZpcnR1YWwg
SlNPYmplY3QqIGNvbnN0cnVjdChFeGVjU3RhdGUqLCBjb25zdCBMaXN0Jik7CisgICAgICAgIHZp
cnR1YWwgSlNWYWx1ZSogY2FsbEFzRnVuY3Rpb24oRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBjb25z
dCBMaXN0Jik7CisgICAgfTsKIAotICAvKioKLSAgICogQGludGVybmFsCi0gICAqCi0gICAqIFRo
ZSBpbml0aWFsIHZhbHVlIG9mIE9iamVjdC5wcm90b3R5cGUgKGFuZCB0aHVzIGFsbCBvYmplY3Rz
IGNyZWF0ZWQKLSAgICogd2l0aCB0aGUgT2JqZWN0IGNvbnN0cnVjdG9yCi0gICAqLwotICBjbGFz
cyBPYmplY3RQcm90b3R5cGUgOiBwdWJsaWMgSlNPYmplY3QgewotICBwdWJsaWM6Ci0gICAgT2Jq
ZWN0UHJvdG90eXBlKEV4ZWNTdGF0ZSAqZXhlYywgRnVuY3Rpb25Qcm90b3R5cGUgKmZ1bmNQcm90
byk7Ci0gIH07Ci0KLSAgLyoqCi0gICAqIEBpbnRlcm5hbAotICAgKgotICAgKiBDbGFzcyB0byBp
bXBsZW1lbnQgYWxsIG1ldGhvZHMgdGhhdCBhcmUgcHJvcGVydGllcyBvZiB0aGUKLSAgICogT2Jq
ZWN0LnByb3RvdHlwZSBvYmplY3QKLSAgICovCi0gIGNsYXNzIE9iamVjdFByb3RvRnVuYyA6IHB1
YmxpYyBJbnRlcm5hbEZ1bmN0aW9uSW1wIHsKLSAgcHVibGljOgotICAgIE9iamVjdFByb3RvRnVu
YyhFeGVjU3RhdGUqIGV4ZWMsIEZ1bmN0aW9uUHJvdG90eXBlKiBmdW5jUHJvdG8sIGludCBpLCBp
bnQgbGVuLCBjb25zdCBJZGVudGlmaWVyJik7Ci0KLSAgICB2aXJ0dWFsIEpTVmFsdWUgKmNhbGxB
c0Z1bmN0aW9uKEV4ZWNTdGF0ZSAqLCBKU09iamVjdCAqLCBjb25zdCBMaXN0ICZhcmdzKTsKLQot
ICAgIGVudW0geyBUb1N0cmluZywgVG9Mb2NhbGVTdHJpbmcsIFZhbHVlT2YsIEhhc093blByb3Bl
cnR5LCBJc1Byb3RvdHlwZU9mLCBQcm9wZXJ0eUlzRW51bWVyYWJsZSwKLSAgICAgICAgICAgRGVm
aW5lR2V0dGVyLCBEZWZpbmVTZXR0ZXIsIExvb2t1cEdldHRlciwgTG9va3VwU2V0dGVyIH07Ci0g
IHByaXZhdGU6Ci0gICAgaW50IGlkOwotICB9OwotCi0gIC8qKgotICAgKiBAaW50ZXJuYWwKLSAg
ICoKLSAgICogVGhlIGluaXRpYWwgdmFsdWUgb2YgdGhlIHRoZSBnbG9iYWwgdmFyaWFibGUncyAi
T2JqZWN0IiBwcm9wZXJ0eQotICAgKi8KLSAgY2xhc3MgT2JqZWN0T2JqZWN0SW1wIDogcHVibGlj
IEludGVybmFsRnVuY3Rpb25JbXAgewotICBwdWJsaWM6Ci0KLSAgICBPYmplY3RPYmplY3RJbXAo
RXhlY1N0YXRlICpleGVjLAotICAgICAgICAgICAgICAgICAgICBPYmplY3RQcm90b3R5cGUgKm9i
alByb3RvLAotICAgICAgICAgICAgICAgICAgICBGdW5jdGlvblByb3RvdHlwZSAqZnVuY1Byb3Rv
KTsKLQotICAgIHZpcnR1YWwgYm9vbCBpbXBsZW1lbnRzQ29uc3RydWN0KCkgY29uc3Q7Ci0gICAg
dmlydHVhbCBKU09iamVjdCAqY29uc3RydWN0KEV4ZWNTdGF0ZSAqLCBjb25zdCBMaXN0ICZhcmdz
KTsKLSAgICB2aXJ0dWFsIEpTVmFsdWUgKmNhbGxBc0Z1bmN0aW9uKEV4ZWNTdGF0ZSAqLCBKU09i
amVjdCAqLCBjb25zdCBMaXN0ICZhcmdzKTsKLSAgfTsKK30gLy8gbmFtZXNwYWNlIEtKUwogCi19
IC8vIG5hbWVzcGFjZQotCi0jZW5kaWYKKyNlbmRpZiAvLyBfT0JKRUNUX09CSkVDVF9IXwpJbmRl
eDoga2pzL3JlZ2V4cF9vYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtqcy9yZWdleHBfb2JqZWN0
LmNwcAkocmV2aXNpb24gMjk1NDEpCisrKyBranMvcmVnZXhwX29iamVjdC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAwIEhh
cnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA3
IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMs
IDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAqICBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFs
IFB1YmxpYwpAQCAtNDMsODQgKzQzLDgyIEBAIG5hbWVzcGFjZSBLSlMgewogCiBjb25zdCBDbGFz
c0luZm8gUmVnRXhwUHJvdG90eXBlOjppbmZvID0geyAiUmVnRXhwUHJvdG90eXBlIiwgMCwgMCB9
OwogCi1SZWdFeHBQcm90b3R5cGU6OlJlZ0V4cFByb3RvdHlwZShFeGVjU3RhdGUgKmV4ZWMsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPYmplY3RQcm90b3R5cGUgKm9i
alByb3RvLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRnVuY3Rpb25Q
cm90b3R5cGUgKmZ1bmNQcm90bykKLSAgOiBKU09iamVjdChvYmpQcm90bykKK1JlZ0V4cFByb3Rv
dHlwZTo6UmVnRXhwUHJvdG90eXBlKEV4ZWNTdGF0ZSogZXhlYywgT2JqZWN0UHJvdG90eXBlKiBv
YmplY3RQcm90b3R5cGUsIEZ1bmN0aW9uUHJvdG90eXBlKiBmdW5jdGlvblByb3RvdHlwZSkKKyAg
ICA6IEpTT2JqZWN0KG9iamVjdFByb3RvdHlwZSkKIHsKLSAgc3RhdGljIGNvbnN0IElkZW50aWZp
ZXIqIGNvbXBpbGVQcm9wZXJ0eU5hbWUgPSBuZXcgSWRlbnRpZmllcigiY29tcGlsZSIpOwotICBz
dGF0aWMgY29uc3QgSWRlbnRpZmllciogZXhlY1Byb3BlcnR5TmFtZSA9IG5ldyBJZGVudGlmaWVy
KCJleGVjIik7Ci0gIHN0YXRpYyBjb25zdCBJZGVudGlmaWVyKiB0ZXN0UHJvcGVydHlOYW1lID0g
bmV3IElkZW50aWZpZXIoInRlc3QiKTsKKyAgICBzdGF0aWMgY29uc3QgSWRlbnRpZmllciogY29t
cGlsZVByb3BlcnR5TmFtZSA9IG5ldyBJZGVudGlmaWVyKCJjb21waWxlIik7CisgICAgc3RhdGlj
IGNvbnN0IElkZW50aWZpZXIqIGV4ZWNQcm9wZXJ0eU5hbWUgPSBuZXcgSWRlbnRpZmllcigiZXhl
YyIpOworICAgIHN0YXRpYyBjb25zdCBJZGVudGlmaWVyKiB0ZXN0UHJvcGVydHlOYW1lID0gbmV3
IElkZW50aWZpZXIoInRlc3QiKTsKIAotICBwdXREaXJlY3RGdW5jdGlvbihuZXcgUmVnRXhwUHJv
dG9GdW5jKGV4ZWMsIGZ1bmNQcm90bywgUmVnRXhwUHJvdG9GdW5jOjpDb21waWxlLCAwLCAqY29t
cGlsZVByb3BlcnR5TmFtZSksIERvbnRFbnVtKTsKLSAgcHV0RGlyZWN0RnVuY3Rpb24obmV3IFJl
Z0V4cFByb3RvRnVuYyhleGVjLCBmdW5jUHJvdG8sIFJlZ0V4cFByb3RvRnVuYzo6RXhlYywgMCwg
KmV4ZWNQcm9wZXJ0eU5hbWUpLCBEb250RW51bSk7Ci0gIHB1dERpcmVjdEZ1bmN0aW9uKG5ldyBS
ZWdFeHBQcm90b0Z1bmMoZXhlYywgZnVuY1Byb3RvLCBSZWdFeHBQcm90b0Z1bmM6OlRlc3QsIDAs
ICp0ZXN0UHJvcGVydHlOYW1lKSwgRG9udEVudW0pOwotICBwdXREaXJlY3RGdW5jdGlvbihuZXcg
UmVnRXhwUHJvdG9GdW5jKGV4ZWMsIGZ1bmNQcm90bywgUmVnRXhwUHJvdG9GdW5jOjpUb1N0cmlu
ZywgMCwgZXhlYy0+cHJvcGVydHlOYW1lcygpLnRvU3RyaW5nKSwgRG9udEVudW0pOworICAgIHB1
dERpcmVjdEZ1bmN0aW9uKG5ldyBQcm90b3R5cGVGdW5jdGlvbihleGVjLCBmdW5jdGlvblByb3Rv
dHlwZSwgMCwgKmNvbXBpbGVQcm9wZXJ0eU5hbWUsIHJlZ0V4cFByb3RvRnVuY0NvbXBpbGUpLCBE
b250RW51bSk7CisgICAgcHV0RGlyZWN0RnVuY3Rpb24obmV3IFByb3RvdHlwZUZ1bmN0aW9uKGV4
ZWMsIGZ1bmN0aW9uUHJvdG90eXBlLCAwLCAqZXhlY1Byb3BlcnR5TmFtZSwgcmVnRXhwUHJvdG9G
dW5jRXhlYyksIERvbnRFbnVtKTsKKyAgICBwdXREaXJlY3RGdW5jdGlvbihuZXcgUHJvdG90eXBl
RnVuY3Rpb24oZXhlYywgZnVuY3Rpb25Qcm90b3R5cGUsIDAsICp0ZXN0UHJvcGVydHlOYW1lLCBy
ZWdFeHBQcm90b0Z1bmNUZXN0KSwgRG9udEVudW0pOworICAgIHB1dERpcmVjdEZ1bmN0aW9uKG5l
dyBQcm90b3R5cGVGdW5jdGlvbihleGVjLCBmdW5jdGlvblByb3RvdHlwZSwgMCwgZXhlYy0+cHJv
cGVydHlOYW1lcygpLnRvU3RyaW5nLCByZWdFeHBQcm90b0Z1bmNUb1N0cmluZyksIERvbnRFbnVt
KTsKIH0KIAotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFJlZ0V4cFByb3RvRnVu
YyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLSBGdW5jdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgCitKU1Zh
bHVlKiByZWdFeHBQcm90b0Z1bmNUZXN0KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHRoaXNP
YmosIGNvbnN0IExpc3QmIGFyZ3MpCit7CisgICAgaWYgKCF0aGlzT2JqLT5pbmhlcml0cygmUmVn
RXhwSW1wOjppbmZvKSkKKyAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9y
KTsKIAotUmVnRXhwUHJvdG9GdW5jOjpSZWdFeHBQcm90b0Z1bmMoRXhlY1N0YXRlKiBleGVjLCBG
dW5jdGlvblByb3RvdHlwZSogZnVuY1Byb3RvLCBpbnQgaSwgaW50IGxlbiwgY29uc3QgSWRlbnRp
ZmllciYgbmFtZSkKLSAgIDogSW50ZXJuYWxGdW5jdGlvbkltcChmdW5jUHJvdG8sIG5hbWUpLCBp
ZChpKQorICAgIHJldHVybiBzdGF0aWNfY2FzdDxSZWdFeHBJbXAqPih0aGlzT2JqKS0+dGVzdChl
eGVjLCBhcmdzKTsKK30KKworSlNWYWx1ZSogcmVnRXhwUHJvdG9GdW5jRXhlYyhFeGVjU3RhdGUq
IGV4ZWMsIEpTT2JqZWN0KiB0aGlzT2JqLCBjb25zdCBMaXN0JiBhcmdzKQogewotICBwdXREaXJl
Y3QoZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCwgbGVuLCBEb250RGVsZXRlIHwgUmVhZE9u
bHkgfCBEb250RW51bSk7CisgICAgaWYgKCF0aGlzT2JqLT5pbmhlcml0cygmUmVnRXhwSW1wOjpp
bmZvKSkKKyAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9yKTsKKworICAg
IHJldHVybiBzdGF0aWNfY2FzdDxSZWdFeHBJbXAqPih0aGlzT2JqKS0+ZXhlYyhleGVjLCBhcmdz
KTsKIH0KIAotSlNWYWx1ZSAqUmVnRXhwUHJvdG9GdW5jOjpjYWxsQXNGdW5jdGlvbihFeGVjU3Rh
dGUgKmV4ZWMsIEpTT2JqZWN0ICp0aGlzT2JqLCBjb25zdCBMaXN0ICZhcmdzKQorSlNWYWx1ZSog
cmVnRXhwUHJvdG9GdW5jQ29tcGlsZShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiB0aGlzT2Jq
LCBjb25zdCBMaXN0JiBhcmdzKQogewotICBpZiAoIXRoaXNPYmotPmluaGVyaXRzKCZSZWdFeHBJ
bXA6OmluZm8pKSB7Ci0gICAgaWYgKHRoaXNPYmotPmluaGVyaXRzKCZSZWdFeHBQcm90b3R5cGU6
OmluZm8pKSB7Ci0gICAgICBzd2l0Y2ggKGlkKSB7Ci0gICAgICAgIGNhc2UgVG9TdHJpbmc6IHJl
dHVybiBqc1N0cmluZygiLy8iKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIHRo
cm93RXJyb3IoZXhlYywgVHlwZUVycm9yKTsKLSAgfQorICAgIGlmICghdGhpc09iai0+aW5oZXJp
dHMoJlJlZ0V4cEltcDo6aW5mbykpCisgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5
cGVFcnJvcik7CiAKLSAgICBzd2l0Y2ggKGlkKSB7Ci0gICAgICAgIGNhc2UgVGVzdDoKLSAgICAg
ICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxSZWdFeHBJbXAqPih0aGlzT2JqKS0+dGVzdChleGVj
LCBhcmdzKTsKLSAgICAgICAgY2FzZSBFeGVjOgotICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19j
YXN0PFJlZ0V4cEltcCo+KHRoaXNPYmopLT5leGVjKGV4ZWMsIGFyZ3MpOwotICBjYXNlIENvbXBp
bGU6Ci0gIHsKICAgICBSZWZQdHI8UmVnRXhwPiByZWdFeHA7CiAgICAgSlNWYWx1ZSogYXJnMCA9
IGFyZ3NbMF07CiAgICAgSlNWYWx1ZSogYXJnMSA9IGFyZ3NbMV07CiAgICAgCiAgICAgaWYgKGFy
ZzAtPmlzT2JqZWN0KCZSZWdFeHBJbXA6OmluZm8pKSB7Ci0gICAgICBpZiAoIWFyZzEtPmlzVW5k
ZWZpbmVkKCkpCi0gICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvciwgIkNh
bm5vdCBzdXBwbHkgZmxhZ3Mgd2hlbiBjb25zdHJ1Y3Rpbmcgb25lIFJlZ0V4cCBmcm9tIGFub3Ro
ZXIuIik7Ci0gICAgICByZWdFeHAgPSBzdGF0aWNfY2FzdDxSZWdFeHBJbXAqPihhcmcwKS0+cmVn
RXhwKCk7CisgICAgICAgIGlmICghYXJnMS0+aXNVbmRlZmluZWQoKSkKKyAgICAgICAgICAgIHJl
dHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvciwgIkNhbm5vdCBzdXBwbHkgZmxhZ3Mgd2hl
biBjb25zdHJ1Y3Rpbmcgb25lIFJlZ0V4cCBmcm9tIGFub3RoZXIuIik7CisgICAgICAgIHJlZ0V4
cCA9IHN0YXRpY19jYXN0PFJlZ0V4cEltcCo+KGFyZzApLT5yZWdFeHAoKTsKICAgICB9IGVsc2Ug
ewotICAgICAgVVN0cmluZyBwYXR0ZXJuID0gYXJncy5pc0VtcHR5KCkgPyBVU3RyaW5nKCIiKSA6
IGFyZzAtPnRvU3RyaW5nKGV4ZWMpOwotICAgICAgVVN0cmluZyBmbGFncyA9IGFyZzEtPmlzVW5k
ZWZpbmVkKCkgPyBVU3RyaW5nKCIiKSA6IGFyZzEtPnRvU3RyaW5nKGV4ZWMpOwotICAgICAgcmVn
RXhwID0gbmV3IFJlZ0V4cChwYXR0ZXJuLCBmbGFncyk7CisgICAgICAgIFVTdHJpbmcgcGF0dGVy
biA9IGFyZ3MuaXNFbXB0eSgpID8gVVN0cmluZygiIikgOiBhcmcwLT50b1N0cmluZyhleGVjKTsK
KyAgICAgICAgVVN0cmluZyBmbGFncyA9IGFyZzEtPmlzVW5kZWZpbmVkKCkgPyBVU3RyaW5nKCIi
KSA6IGFyZzEtPnRvU3RyaW5nKGV4ZWMpOworICAgICAgICByZWdFeHAgPSBuZXcgUmVnRXhwKHBh
dHRlcm4sIGZsYWdzKTsKICAgICB9CiAKICAgICBpZiAoIXJlZ0V4cC0+aXNWYWxpZCgpKQotICAg
ICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgU3ludGF4RXJyb3IsIFVTdHJpbmcoIkludmFsaWQg
cmVndWxhciBleHByZXNzaW9uOiAiKS5hcHBlbmQocmVnRXhwLT5lcnJvck1lc3NhZ2UoKSkpOwor
ICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBTeW50YXhFcnJvciwgVVN0cmluZygiSW52
YWxpZCByZWd1bGFyIGV4cHJlc3Npb246ICIpLmFwcGVuZChyZWdFeHAtPmVycm9yTWVzc2FnZSgp
KSk7CiAKICAgICBzdGF0aWNfY2FzdDxSZWdFeHBJbXAqPih0aGlzT2JqKS0+c2V0UmVnRXhwKHJl
Z0V4cC5yZWxlYXNlKCkpOwogICAgIHN0YXRpY19jYXN0PFJlZ0V4cEltcCo+KHRoaXNPYmopLT5w
dXQoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLmxhc3RJbmRleCwganNOdW1iZXIoMCksIERv
bnREZWxldGV8RG9udEVudW0pOwogICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICB9Ci0gIGNh
c2UgVG9TdHJpbmc6Ci0gICAgVVN0cmluZyByZXN1bHQgPSAiLyIgKyB0aGlzT2JqLT5nZXQoZXhl
YywgZXhlYy0+cHJvcGVydHlOYW1lcygpLnNvdXJjZSktPnRvU3RyaW5nKGV4ZWMpICsgIi8iOwot
ICAgIGlmICh0aGlzT2JqLT5nZXQoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLmdsb2JhbCkt
PnRvQm9vbGVhbihleGVjKSkgewotICAgICAgcmVzdWx0ICs9ICJnIjsKLSAgICB9Ci0gICAgaWYg
KHRoaXNPYmotPmdldChleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuaWdub3JlQ2FzZSktPnRv
Qm9vbGVhbihleGVjKSkgewotICAgICAgcmVzdWx0ICs9ICJpIjsKLSAgICB9Ci0gICAgaWYgKHRo
aXNPYmotPmdldChleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubXVsdGlsaW5lKS0+dG9Cb29s
ZWFuKGV4ZWMpKSB7Ci0gICAgICByZXN1bHQgKz0gIm0iOworfQorCitKU1ZhbHVlKiByZWdFeHBQ
cm90b0Z1bmNUb1N0cmluZyhFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiB0aGlzT2JqLCBjb25z
dCBMaXN0JikKK3sKKyAgICBpZiAoIXRoaXNPYmotPmluaGVyaXRzKCZSZWdFeHBJbXA6OmluZm8p
KSB7CisgICAgICAgIGlmICh0aGlzT2JqLT5pbmhlcml0cygmUmVnRXhwUHJvdG90eXBlOjppbmZv
KSkKKyAgICAgICAgICAgIHJldHVybiBqc1N0cmluZygiLy8iKTsKKyAgICAgICAgcmV0dXJuIHRo
cm93RXJyb3IoZXhlYywgVHlwZUVycm9yKTsKICAgICB9CisKKyAgICBVU3RyaW5nIHJlc3VsdCA9
ICIvIiArIHRoaXNPYmotPmdldChleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuc291cmNlKS0+
dG9TdHJpbmcoZXhlYykgKyAiLyI7CisgICAgaWYgKHRoaXNPYmotPmdldChleGVjLCBleGVjLT5w
cm9wZXJ0eU5hbWVzKCkuZ2xvYmFsKS0+dG9Cb29sZWFuKGV4ZWMpKQorICAgICAgICByZXN1bHQg
Kz0gImciOworICAgIGlmICh0aGlzT2JqLT5nZXQoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygp
Lmlnbm9yZUNhc2UpLT50b0Jvb2xlYW4oZXhlYykpCisgICAgICAgIHJlc3VsdCArPSAiaSI7Cisg
ICAgaWYgKHRoaXNPYmotPmdldChleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubXVsdGlsaW5l
KS0+dG9Cb29sZWFuKGV4ZWMpKQorICAgICAgICByZXN1bHQgKz0gIm0iOwogICAgIHJldHVybiBq
c1N0cmluZyhyZXN1bHQpOwotICB9CiAKLSAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgcmV0
dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LSBSZWdFeHBJbXAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkluZGV4OiBr
anMvcmVnZXhwX29iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtqcy9yZWdleHBfb2JqZWN0LmgJKHJl
dmlzaW9uIDI5NTQxKQorKysga2pzL3JlZ2V4cF9vYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAt
MSw2ICsxLDYgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDAgSGFycmkgUG9ydGVu
IChwb3J0ZW5Aa2RlLm9yZykKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDcgQXBwbGUgSW5j
LiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwMywgMjAwNywgMjAw
OCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICogIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCkBA
IC0zMSwyMCArMzEsMTUgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgY2xhc3MgUmVnRXhwUHJvdG90
eXBlIDogcHVibGljIEpTT2JqZWN0IHsKICAgICBwdWJsaWM6CiAgICAgICAgIFJlZ0V4cFByb3Rv
dHlwZShFeGVjU3RhdGUqLCBPYmplY3RQcm90b3R5cGUqLCBGdW5jdGlvblByb3RvdHlwZSopOwor
CiAgICAgICAgIHZpcnR1YWwgY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8oKSBjb25zdCB7IHJl
dHVybiAmaW5mbzsgfQogICAgICAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIGluZm87CiAgICAg
fTsKIAotICAgIGNsYXNzIFJlZ0V4cFByb3RvRnVuYyA6IHB1YmxpYyBJbnRlcm5hbEZ1bmN0aW9u
SW1wIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIGVudW0geyBDb21waWxlLCBFeGVjLCBUZXN0LCBU
b1N0cmluZyB9OwotCi0gICAgICAgIFJlZ0V4cFByb3RvRnVuYyhFeGVjU3RhdGUqLCBGdW5jdGlv
blByb3RvdHlwZSosIGludCBpZCwgaW50IGxlbiwgY29uc3QgSWRlbnRpZmllciYpOwotICAgICAg
ICB2aXJ0dWFsIEpTVmFsdWUqIGNhbGxBc0Z1bmN0aW9uKEV4ZWNTdGF0ZSosIEpTT2JqZWN0Kiwg
Y29uc3QgTGlzdCYpOwotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgaW50IGlkOwotICAgIH07Cisg
ICAgSlNWYWx1ZSogcmVnRXhwUHJvdG9GdW5jVGVzdChFeGVjU3RhdGUqLCBKU09iamVjdCosIGNv
bnN0IExpc3QmKTsKKyAgICBKU1ZhbHVlKiByZWdFeHBQcm90b0Z1bmNFeGVjKEV4ZWNTdGF0ZSos
IEpTT2JqZWN0KiwgY29uc3QgTGlzdCYpOworICAgIEpTVmFsdWUqIHJlZ0V4cFByb3RvRnVuY0Nv
bXBpbGUoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBjb25zdCBMaXN0Jik7CisgICAgSlNWYWx1ZSog
cmVnRXhwUHJvdG9GdW5jVG9TdHJpbmcoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBjb25zdCBMaXN0
Jik7CiAKICAgICBjbGFzcyBSZWdFeHBJbXAgOiBwdWJsaWMgSlNPYmplY3QgewogICAgIHB1Ymxp
YzoK
</data>
<flag name="review"
          id="8095"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>18491</attachid>
            <date>2008-01-16 22:34:24 -0800</date>
            <delta_ts>2008-01-16 22:34:24 -0800</delta_ts>
            <desc>perhaps easier to review with No WS changes</desc>
            <filename>moreFunctionsNOWS.diff</filename>
            <type>text/plain</type>
            <size>67983</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IGtqcy9hcnJheV9vYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBranMvYXJyYXlfb2JqZWN0
LmgJKHJldmlzaW9uIDI5NTQxKQorKysga2pzL2FycmF5X29iamVjdC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDYgKzEsNCBAQAotLy8gLSotIGMtYmFzaWMtb2Zmc2V0OiAyIC0qLQogLyoKLSAqICBU
aGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgS0RFIGxpYnJhcmllcwogICogIENvcHlyaWdodCAoQykg
MTk5OS0yMDAwIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCiAgKiBDb3B5cmlnaHQgKEMp
IDIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKSW5kZXg6IGtqcy9yZWdl
eHBfb2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBranMvcmVnZXhwX29iamVjdC5jcHAJKHJldmlz
aW9uIDI5NTQxKQorKysga2pzL3JlZ2V4cF9vYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDYgKzEsNiBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMCBIYXJyaSBQb3J0ZW4g
KHBvcnRlbkBrZGUub3JnKQotICogIENvcHlyaWdodCAoQykgMjAwMywgMjAwNyBBcHBsZSBJbmMu
IEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA3LCAyMDA4
IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKQEAg
LTQzLDQ4ICs0Myw0MiBAQAogCiBjb25zdCBDbGFzc0luZm8gUmVnRXhwUHJvdG90eXBlOjppbmZv
ID0geyAiUmVnRXhwUHJvdG90eXBlIiwgMCwgMCB9OwogCi1SZWdFeHBQcm90b3R5cGU6OlJlZ0V4
cFByb3RvdHlwZShFeGVjU3RhdGUgKmV4ZWMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBPYmplY3RQcm90b3R5cGUgKm9ialByb3RvLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgRnVuY3Rpb25Qcm90b3R5cGUgKmZ1bmNQcm90bykKLSAgOiBK
U09iamVjdChvYmpQcm90bykKK1JlZ0V4cFByb3RvdHlwZTo6UmVnRXhwUHJvdG90eXBlKEV4ZWNT
dGF0ZSogZXhlYywgT2JqZWN0UHJvdG90eXBlKiBvYmplY3RQcm90b3R5cGUsIEZ1bmN0aW9uUHJv
dG90eXBlKiBmdW5jdGlvblByb3RvdHlwZSkKKyAgICA6IEpTT2JqZWN0KG9iamVjdFByb3RvdHlw
ZSkKIHsKICAgc3RhdGljIGNvbnN0IElkZW50aWZpZXIqIGNvbXBpbGVQcm9wZXJ0eU5hbWUgPSBu
ZXcgSWRlbnRpZmllcigiY29tcGlsZSIpOwogICBzdGF0aWMgY29uc3QgSWRlbnRpZmllciogZXhl
Y1Byb3BlcnR5TmFtZSA9IG5ldyBJZGVudGlmaWVyKCJleGVjIik7CiAgIHN0YXRpYyBjb25zdCBJ
ZGVudGlmaWVyKiB0ZXN0UHJvcGVydHlOYW1lID0gbmV3IElkZW50aWZpZXIoInRlc3QiKTsKIAot
ICBwdXREaXJlY3RGdW5jdGlvbihuZXcgUmVnRXhwUHJvdG9GdW5jKGV4ZWMsIGZ1bmNQcm90bywg
UmVnRXhwUHJvdG9GdW5jOjpDb21waWxlLCAwLCAqY29tcGlsZVByb3BlcnR5TmFtZSksIERvbnRF
bnVtKTsKLSAgcHV0RGlyZWN0RnVuY3Rpb24obmV3IFJlZ0V4cFByb3RvRnVuYyhleGVjLCBmdW5j
UHJvdG8sIFJlZ0V4cFByb3RvRnVuYzo6RXhlYywgMCwgKmV4ZWNQcm9wZXJ0eU5hbWUpLCBEb250
RW51bSk7Ci0gIHB1dERpcmVjdEZ1bmN0aW9uKG5ldyBSZWdFeHBQcm90b0Z1bmMoZXhlYywgZnVu
Y1Byb3RvLCBSZWdFeHBQcm90b0Z1bmM6OlRlc3QsIDAsICp0ZXN0UHJvcGVydHlOYW1lKSwgRG9u
dEVudW0pOwotICBwdXREaXJlY3RGdW5jdGlvbihuZXcgUmVnRXhwUHJvdG9GdW5jKGV4ZWMsIGZ1
bmNQcm90bywgUmVnRXhwUHJvdG9GdW5jOjpUb1N0cmluZywgMCwgZXhlYy0+cHJvcGVydHlOYW1l
cygpLnRvU3RyaW5nKSwgRG9udEVudW0pOworICAgIHB1dERpcmVjdEZ1bmN0aW9uKG5ldyBQcm90
b3R5cGVGdW5jdGlvbihleGVjLCBmdW5jdGlvblByb3RvdHlwZSwgMCwgKmNvbXBpbGVQcm9wZXJ0
eU5hbWUsIHJlZ0V4cFByb3RvRnVuY0NvbXBpbGUpLCBEb250RW51bSk7CisgICAgcHV0RGlyZWN0
RnVuY3Rpb24obmV3IFByb3RvdHlwZUZ1bmN0aW9uKGV4ZWMsIGZ1bmN0aW9uUHJvdG90eXBlLCAw
LCAqZXhlY1Byb3BlcnR5TmFtZSwgcmVnRXhwUHJvdG9GdW5jRXhlYyksIERvbnRFbnVtKTsKKyAg
ICBwdXREaXJlY3RGdW5jdGlvbihuZXcgUHJvdG90eXBlRnVuY3Rpb24oZXhlYywgZnVuY3Rpb25Q
cm90b3R5cGUsIDAsICp0ZXN0UHJvcGVydHlOYW1lLCByZWdFeHBQcm90b0Z1bmNUZXN0KSwgRG9u
dEVudW0pOworICAgIHB1dERpcmVjdEZ1bmN0aW9uKG5ldyBQcm90b3R5cGVGdW5jdGlvbihleGVj
LCBmdW5jdGlvblByb3RvdHlwZSwgMCwgZXhlYy0+cHJvcGVydHlOYW1lcygpLnRvU3RyaW5nLCBy
ZWdFeHBQcm90b0Z1bmNUb1N0cmluZyksIERvbnRFbnVtKTsKIH0KIAotLy8gLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tIFJlZ0V4cFByb3RvRnVuYyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KLQotUmVnRXhwUHJvdG9GdW5jOjpSZWdFeHBQcm90b0Z1bmMoRXhlY1N0YXRlKiBleGVj
LCBGdW5jdGlvblByb3RvdHlwZSogZnVuY1Byb3RvLCBpbnQgaSwgaW50IGxlbiwgY29uc3QgSWRl
bnRpZmllciYgbmFtZSkKLSAgIDogSW50ZXJuYWxGdW5jdGlvbkltcChmdW5jUHJvdG8sIG5hbWUp
LCBpZChpKQorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEZ1bmN0aW9ucyAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAKK0pTVmFsdWUqIHJlZ0V4cFByb3RvRnVuY1Rl
c3QoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogdGhpc09iaiwgY29uc3QgTGlzdCYgYXJncykK
IHsKLSAgcHV0RGlyZWN0KGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgsIGxlbiwgRG9udERl
bGV0ZSB8IFJlYWRPbmx5IHwgRG9udEVudW0pOworICAgIGlmICghdGhpc09iai0+aW5oZXJpdHMo
JlJlZ0V4cEltcDo6aW5mbykpCisgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVF
cnJvcik7CisKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8UmVnRXhwSW1wKj4odGhpc09iaiktPnRl
c3QoZXhlYywgYXJncyk7CiB9CiAKLUpTVmFsdWUgKlJlZ0V4cFByb3RvRnVuYzo6Y2FsbEFzRnVu
Y3Rpb24oRXhlY1N0YXRlICpleGVjLCBKU09iamVjdCAqdGhpc09iaiwgY29uc3QgTGlzdCAmYXJn
cykKK0pTVmFsdWUqIHJlZ0V4cFByb3RvRnVuY0V4ZWMoRXhlY1N0YXRlKiBleGVjLCBKU09iamVj
dCogdGhpc09iaiwgY29uc3QgTGlzdCYgYXJncykKIHsKLSAgaWYgKCF0aGlzT2JqLT5pbmhlcml0
cygmUmVnRXhwSW1wOjppbmZvKSkgewotICAgIGlmICh0aGlzT2JqLT5pbmhlcml0cygmUmVnRXhw
UHJvdG90eXBlOjppbmZvKSkgewotICAgICAgc3dpdGNoIChpZCkgewotICAgICAgICBjYXNlIFRv
U3RyaW5nOiByZXR1cm4ganNTdHJpbmcoIi8vIik7Ci0gICAgICB9Ci0gICAgfQotICAgIAorICAg
IGlmICghdGhpc09iai0+aW5oZXJpdHMoJlJlZ0V4cEltcDo6aW5mbykpCiAgICAgcmV0dXJuIHRo
cm93RXJyb3IoZXhlYywgVHlwZUVycm9yKTsKLSAgfQogCi0gICAgc3dpdGNoIChpZCkgewotICAg
ICAgICBjYXNlIFRlc3Q6Ci0gICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8UmVnRXhwSW1w
Kj4odGhpc09iaiktPnRlc3QoZXhlYywgYXJncyk7Ci0gICAgICAgIGNhc2UgRXhlYzoKICAgICAg
ICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxSZWdFeHBJbXAqPih0aGlzT2JqKS0+ZXhlYyhleGVj
LCBhcmdzKTsKLSAgY2FzZSBDb21waWxlOgotICB7Cit9CisKK0pTVmFsdWUqIHJlZ0V4cFByb3Rv
RnVuY0NvbXBpbGUoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogdGhpc09iaiwgY29uc3QgTGlz
dCYgYXJncykKK3sKKyAgICBpZiAoIXRoaXNPYmotPmluaGVyaXRzKCZSZWdFeHBJbXA6OmluZm8p
KQorICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3IpOworCiAgICAgUmVm
UHRyPFJlZ0V4cD4gcmVnRXhwOwogICAgIEpTVmFsdWUqIGFyZzAgPSBhcmdzWzBdOwogICAgIEpT
VmFsdWUqIGFyZzEgPSBhcmdzWzFdOwpAQCAtMTA1LDIwICs5OSwyNCBAQAogICAgIHN0YXRpY19j
YXN0PFJlZ0V4cEltcCo+KHRoaXNPYmopLT5zZXRSZWdFeHAocmVnRXhwLnJlbGVhc2UoKSk7CiAg
ICAgc3RhdGljX2Nhc3Q8UmVnRXhwSW1wKj4odGhpc09iaiktPnB1dChleGVjLCBleGVjLT5wcm9w
ZXJ0eU5hbWVzKCkubGFzdEluZGV4LCBqc051bWJlcigwKSwgRG9udERlbGV0ZXxEb250RW51bSk7
CiAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Cit9CisKK0pTVmFsdWUqIHJlZ0V4cFByb3RvRnVu
Y1RvU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHRoaXNPYmosIGNvbnN0IExpc3Qm
KQoreworICAgIGlmICghdGhpc09iai0+aW5oZXJpdHMoJlJlZ0V4cEltcDo6aW5mbykpIHsKKyAg
ICAgICAgaWYgKHRoaXNPYmotPmluaGVyaXRzKCZSZWdFeHBQcm90b3R5cGU6OmluZm8pKQorICAg
ICAgICAgICAgcmV0dXJuIGpzU3RyaW5nKCIvLyIpOworICAgICAgICByZXR1cm4gdGhyb3dFcnJv
cihleGVjLCBUeXBlRXJyb3IpOwogICB9Ci0gIGNhc2UgVG9TdHJpbmc6CisKICAgICBVU3RyaW5n
IHJlc3VsdCA9ICIvIiArIHRoaXNPYmotPmdldChleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCku
c291cmNlKS0+dG9TdHJpbmcoZXhlYykgKyAiLyI7Ci0gICAgaWYgKHRoaXNPYmotPmdldChleGVj
LCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuZ2xvYmFsKS0+dG9Cb29sZWFuKGV4ZWMpKSB7CisgICAg
aWYgKHRoaXNPYmotPmdldChleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuZ2xvYmFsKS0+dG9C
b29sZWFuKGV4ZWMpKQogICAgICAgcmVzdWx0ICs9ICJnIjsKLSAgICB9Ci0gICAgaWYgKHRoaXNP
YmotPmdldChleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuaWdub3JlQ2FzZSktPnRvQm9vbGVh
bihleGVjKSkgeworICAgIGlmICh0aGlzT2JqLT5nZXQoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1l
cygpLmlnbm9yZUNhc2UpLT50b0Jvb2xlYW4oZXhlYykpCiAgICAgICByZXN1bHQgKz0gImkiOwot
ICAgIH0KLSAgICBpZiAodGhpc09iai0+Z2V0KGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5t
dWx0aWxpbmUpLT50b0Jvb2xlYW4oZXhlYykpIHsKKyAgICBpZiAodGhpc09iai0+Z2V0KGV4ZWMs
IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5tdWx0aWxpbmUpLT50b0Jvb2xlYW4oZXhlYykpCiAgICAg
ICByZXN1bHQgKz0gIm0iOwotICAgIH0KICAgICByZXR1cm4ganNTdHJpbmcocmVzdWx0KTsKLSAg
fQogCiAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQpJbmRleDoga2pzL251bWJlcl9vYmplY3Qu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBranMvbnVtYmVyX29iamVjdC5oCShyZXZpc2lvbiAyOTU0MSkKKysr
IGtqcy9udW1iZXJfb2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDkgKzI5LDkgQEAKIAog
ICBjbGFzcyBOdW1iZXJJbnN0YW5jZSA6IHB1YmxpYyBKU1dyYXBwZXJPYmplY3QgewogICBwdWJs
aWM6Ci0gICAgTnVtYmVySW5zdGFuY2UoSlNPYmplY3QgKnByb3RvKTsKKyAgICAgICAgTnVtYmVy
SW5zdGFuY2UoSlNPYmplY3QqIHByb3RvdHlwZSk7CiAKLSAgICB2aXJ0dWFsIGNvbnN0IENsYXNz
SW5mbyAqY2xhc3NJbmZvKCkgY29uc3QgeyByZXR1cm4gJmluZm87IH0KKyAgICAgICAgdmlydHVh
bCBjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbygpIGNvbnN0IHsgcmV0dXJuICZpbmZvOyB9CiAg
ICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBpbmZvOwogICB9OwogCkBAIC00MywyOCArNDMsMTcg
QEAKICAgICovCiAgIGNsYXNzIE51bWJlclByb3RvdHlwZSA6IHB1YmxpYyBOdW1iZXJJbnN0YW5j
ZSB7CiAgIHB1YmxpYzoKLSAgICBOdW1iZXJQcm90b3R5cGUoRXhlY1N0YXRlICpleGVjLAotICAg
ICAgICAgICAgICAgICAgICAgICBPYmplY3RQcm90b3R5cGUgKm9ialByb3RvLAotICAgICAgICAg
ICAgICAgICAgICAgICBGdW5jdGlvblByb3RvdHlwZSAqZnVuY1Byb3RvKTsKKyAgICAgICAgTnVt
YmVyUHJvdG90eXBlKEV4ZWNTdGF0ZSosIE9iamVjdFByb3RvdHlwZSosIEZ1bmN0aW9uUHJvdG90
eXBlKik7CiAgIH07CiAKLSAgLyoqCi0gICAqIEBpbnRlcm5hbAotICAgKgotICAgKiBDbGFzcyB0
byBpbXBsZW1lbnQgYWxsIG1ldGhvZHMgdGhhdCBhcmUgcHJvcGVydGllcyBvZiB0aGUKLSAgICog
TnVtYmVyLnByb3RvdHlwZSBvYmplY3QKLSAgICovCi0gIGNsYXNzIE51bWJlclByb3RvRnVuYyA6
IHB1YmxpYyBJbnRlcm5hbEZ1bmN0aW9uSW1wIHsKLSAgcHVibGljOgotICAgIE51bWJlclByb3Rv
RnVuYyhFeGVjU3RhdGUqLCBGdW5jdGlvblByb3RvdHlwZSosIGludCBpLCBpbnQgbGVuLCBjb25z
dCBJZGVudGlmaWVyJik7CisgICAgLy8gRnVuY3Rpb25zCisgICAgSlNWYWx1ZSogbnVtYmVyUHJv
dG9GdW5jVG9TdHJpbmcoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBjb25zdCBMaXN0Jik7CisgICAg
SlNWYWx1ZSogbnVtYmVyUHJvdG9GdW5jVG9Mb2NhbGVTdHJpbmcoRXhlY1N0YXRlKiwgSlNPYmpl
Y3QqLCBjb25zdCBMaXN0Jik7CisgICAgSlNWYWx1ZSogbnVtYmVyUHJvdG9GdW5jVmFsdWVPZihF
eGVjU3RhdGUqLCBKU09iamVjdCosIGNvbnN0IExpc3QmKTsKKyAgICBKU1ZhbHVlKiBudW1iZXJQ
cm90b0Z1bmNUb0ZpeGVkKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgY29uc3QgTGlzdCYpOworICAg
IEpTVmFsdWUqIG51bWJlclByb3RvRnVuY1RvRXhwb25lbnRpYWwoRXhlY1N0YXRlKiwgSlNPYmpl
Y3QqLCBjb25zdCBMaXN0Jik7CisgICAgSlNWYWx1ZSogbnVtYmVyUHJvdG9GdW5jVG9QcmVjaXNp
b24oRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBjb25zdCBMaXN0Jik7CiAKLSAgICB2aXJ0dWFsIEpT
VmFsdWUgKmNhbGxBc0Z1bmN0aW9uKEV4ZWNTdGF0ZSAqZXhlYywgSlNPYmplY3QgKnRoaXNPYmos
IGNvbnN0IExpc3QgJmFyZ3MpOwotCi0gICAgZW51bSB7IFRvU3RyaW5nLCBUb0xvY2FsZVN0cmlu
ZywgVmFsdWVPZiwgVG9GaXhlZCwgVG9FeHBvbmVudGlhbCwgVG9QcmVjaXNpb24gfTsKLSAgcHJp
dmF0ZToKLSAgICBpbnQgaWQ7Ci0gIH07Ci0KICAgLyoqCiAgICAqIEBpbnRlcm5hbAogICAgKgpA
QCAtNzIsMjUgKzYxLDI0IEBACiAgICAqLwogICBjbGFzcyBOdW1iZXJPYmplY3RJbXAgOiBwdWJs
aWMgSW50ZXJuYWxGdW5jdGlvbkltcCB7CiAgIHB1YmxpYzoKLSAgICBOdW1iZXJPYmplY3RJbXAo
RXhlY1N0YXRlICpleGVjLAotICAgICAgICAgICAgICAgICAgICBGdW5jdGlvblByb3RvdHlwZSAq
ZnVuY1Byb3RvLAotICAgICAgICAgICAgICAgICAgICBOdW1iZXJQcm90b3R5cGUgKm51bWJlclBy
b3RvKTsKKyAgICAgICAgTnVtYmVyT2JqZWN0SW1wKEV4ZWNTdGF0ZSosIEZ1bmN0aW9uUHJvdG90
eXBlKiwgTnVtYmVyUHJvdG90eXBlKik7CiAKICAgICB2aXJ0dWFsIGJvb2wgaW1wbGVtZW50c0Nv
bnN0cnVjdCgpIGNvbnN0OwotICAgIHZpcnR1YWwgSlNPYmplY3QgKmNvbnN0cnVjdChFeGVjU3Rh
dGUgKmV4ZWMsIGNvbnN0IExpc3QgJmFyZ3MpOworICAgICAgICB2aXJ0dWFsIEpTT2JqZWN0KiBj
b25zdHJ1Y3QoRXhlY1N0YXRlKiwgY29uc3QgTGlzdCYpOwogCi0gICAgdmlydHVhbCBKU1ZhbHVl
ICpjYWxsQXNGdW5jdGlvbihFeGVjU3RhdGUgKmV4ZWMsIEpTT2JqZWN0ICp0aGlzT2JqLCBjb25z
dCBMaXN0ICZhcmdzKTsKKyAgICAgICAgdmlydHVhbCBKU1ZhbHVlKiBjYWxsQXNGdW5jdGlvbihF
eGVjU3RhdGUqLCBKU09iamVjdCosIGNvbnN0IExpc3QmKTsKIAotICAgIGJvb2wgZ2V0T3duUHJv
cGVydHlTbG90KEV4ZWNTdGF0ZSAqLCBjb25zdCBJZGVudGlmaWVyJiwgUHJvcGVydHlTbG90Jik7
Ci0gICAgSlNWYWx1ZSAqZ2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tl
bikgY29uc3Q7CisgICAgICAgIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSosIGNv
bnN0IElkZW50aWZpZXImLCBQcm9wZXJ0eVNsb3QmKTsKKyAgICAgICAgSlNWYWx1ZSogZ2V0VmFs
dWVQcm9wZXJ0eShFeGVjU3RhdGUqLCBpbnQgdG9rZW4pIGNvbnN0OwogCi0gICAgdmlydHVhbCBj
b25zdCBDbGFzc0luZm8gKmNsYXNzSW5mbygpIGNvbnN0IHsgcmV0dXJuICZpbmZvOyB9CisgICAg
ICAgIHZpcnR1YWwgY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8oKSBjb25zdCB7IHJldHVybiAm
aW5mbzsgfQogICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8gaW5mbzsKKwogICAgIGVudW0geyBO
YU5WYWx1ZSwgTmVnSW5maW5pdHksIFBvc0luZmluaXR5LCBNYXhWYWx1ZSwgTWluVmFsdWUgfTsK
IAotICAgIEpTT2JqZWN0ICpjb25zdHJ1Y3QoY29uc3QgTGlzdCAmKTsKKyAgICAgICAgSlNPYmpl
Y3QqIGNvbnN0cnVjdChjb25zdCBMaXN0Jik7CiAgIH07CiAKLX0gLy8gbmFtZXNwYWNlCit9IC8v
IG5hbWVzcGFjZSBLSlMKIAotI2VuZGlmCisjZW5kaWYgLy8gTlVNQkVSX09CSkVDVF9IXwpJbmRl
eDoga2pzL0pTR2xvYmFsT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBranMvSlNHbG9iYWxPYmpl
Y3QuY3BwCShyZXZpc2lvbiAyOTU0MSkKKysrIGtqcy9KU0dsb2JhbE9iamVjdC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTIzMSw3ICsyMzEsNyBAQAogICAgIGQoKS0+Ym9vbGVhblByb3RvdHlwZSA9
IG5ldyBCb29sZWFuUHJvdG90eXBlKGV4ZWMsIGQoKS0+b2JqZWN0UHJvdG90eXBlLCBkKCktPmZ1
bmN0aW9uUHJvdG90eXBlKTsKICAgICBkKCktPm51bWJlclByb3RvdHlwZSA9IG5ldyBOdW1iZXJQ
cm90b3R5cGUoZXhlYywgZCgpLT5vYmplY3RQcm90b3R5cGUsIGQoKS0+ZnVuY3Rpb25Qcm90b3R5
cGUpOwogICAgIGQoKS0+ZGF0ZVByb3RvdHlwZSA9IG5ldyBEYXRlUHJvdG90eXBlKGV4ZWMsIGQo
KS0+b2JqZWN0UHJvdG90eXBlKTsKLSAgICBkKCktPnJlZ0V4cFByb3RvdHlwZSA9IG5ldyBSZWdF
eHBQcm90b3R5cGUoZXhlYywgZCgpLT5vYmplY3RQcm90b3R5cGUsIGQoKS0+ZnVuY3Rpb25Qcm90
b3R5cGUpOzsKKyAgICBkKCktPnJlZ0V4cFByb3RvdHlwZSA9IG5ldyBSZWdFeHBQcm90b3R5cGUo
ZXhlYywgZCgpLT5vYmplY3RQcm90b3R5cGUsIGQoKS0+ZnVuY3Rpb25Qcm90b3R5cGUpOwogICAg
IGQoKS0+ZXJyb3JQcm90b3R5cGUgPSBuZXcgRXJyb3JQcm90b3R5cGUoZXhlYywgZCgpLT5vYmpl
Y3RQcm90b3R5cGUsIGQoKS0+ZnVuY3Rpb25Qcm90b3R5cGUpOwogICAgIAogICAgIGQoKS0+ZXZh
bEVycm9yUHJvdG90eXBlID0gbmV3IE5hdGl2ZUVycm9yUHJvdG90eXBlKGV4ZWMsIGQoKS0+ZXJy
b3JQcm90b3R5cGUsICJFdmFsRXJyb3IiLCAiRXZhbEVycm9yIik7CkBAIC0zMTEsMTkgKzMxMSwx
OSBAQAogCiAgICAgLy8gU2V0IGdsb2JhbCBmdW5jdGlvbnMuCiAKLSAgICBwdXREaXJlY3RGdW5j
dGlvbihuZXcgR2xvYmFsRnVuY0ltcChleGVjLCBkKCktPmZ1bmN0aW9uUHJvdG90eXBlLCBHbG9i
YWxGdW5jSW1wOjpFdmFsLCAxLCAiZXZhbCIpLCBEb250RW51bSk7Ci0gICAgcHV0RGlyZWN0RnVu
Y3Rpb24obmV3IEdsb2JhbEZ1bmNJbXAoZXhlYywgZCgpLT5mdW5jdGlvblByb3RvdHlwZSwgR2xv
YmFsRnVuY0ltcDo6UGFyc2VJbnQsIDIsICJwYXJzZUludCIpLCBEb250RW51bSk7Ci0gICAgcHV0
RGlyZWN0RnVuY3Rpb24obmV3IEdsb2JhbEZ1bmNJbXAoZXhlYywgZCgpLT5mdW5jdGlvblByb3Rv
dHlwZSwgR2xvYmFsRnVuY0ltcDo6UGFyc2VGbG9hdCwgMSwgInBhcnNlRmxvYXQiKSwgRG9udEVu
dW0pOwotICAgIHB1dERpcmVjdEZ1bmN0aW9uKG5ldyBHbG9iYWxGdW5jSW1wKGV4ZWMsIGQoKS0+
ZnVuY3Rpb25Qcm90b3R5cGUsIEdsb2JhbEZ1bmNJbXA6OklzTmFOLCAxLCAiaXNOYU4iKSwgRG9u
dEVudW0pOwotICAgIHB1dERpcmVjdEZ1bmN0aW9uKG5ldyBHbG9iYWxGdW5jSW1wKGV4ZWMsIGQo
KS0+ZnVuY3Rpb25Qcm90b3R5cGUsIEdsb2JhbEZ1bmNJbXA6OklzRmluaXRlLCAxLCAiaXNGaW5p
dGUiKSwgRG9udEVudW0pOwotICAgIHB1dERpcmVjdEZ1bmN0aW9uKG5ldyBHbG9iYWxGdW5jSW1w
KGV4ZWMsIGQoKS0+ZnVuY3Rpb25Qcm90b3R5cGUsIEdsb2JhbEZ1bmNJbXA6OkVzY2FwZSwgMSwg
ImVzY2FwZSIpLCBEb250RW51bSk7Ci0gICAgcHV0RGlyZWN0RnVuY3Rpb24obmV3IEdsb2JhbEZ1
bmNJbXAoZXhlYywgZCgpLT5mdW5jdGlvblByb3RvdHlwZSwgR2xvYmFsRnVuY0ltcDo6VW5Fc2Nh
cGUsIDEsICJ1bmVzY2FwZSIpLCBEb250RW51bSk7Ci0gICAgcHV0RGlyZWN0RnVuY3Rpb24obmV3
IEdsb2JhbEZ1bmNJbXAoZXhlYywgZCgpLT5mdW5jdGlvblByb3RvdHlwZSwgR2xvYmFsRnVuY0lt
cDo6RGVjb2RlVVJJLCAxLCAiZGVjb2RlVVJJIiksIERvbnRFbnVtKTsKLSAgICBwdXREaXJlY3RG
dW5jdGlvbihuZXcgR2xvYmFsRnVuY0ltcChleGVjLCBkKCktPmZ1bmN0aW9uUHJvdG90eXBlLCBH
bG9iYWxGdW5jSW1wOjpEZWNvZGVVUklDb21wb25lbnQsIDEsICJkZWNvZGVVUklDb21wb25lbnQi
KSwgRG9udEVudW0pOwotICAgIHB1dERpcmVjdEZ1bmN0aW9uKG5ldyBHbG9iYWxGdW5jSW1wKGV4
ZWMsIGQoKS0+ZnVuY3Rpb25Qcm90b3R5cGUsIEdsb2JhbEZ1bmNJbXA6OkVuY29kZVVSSSwgMSwg
ImVuY29kZVVSSSIpLCBEb250RW51bSk7Ci0gICAgcHV0RGlyZWN0RnVuY3Rpb24obmV3IEdsb2Jh
bEZ1bmNJbXAoZXhlYywgZCgpLT5mdW5jdGlvblByb3RvdHlwZSwgR2xvYmFsRnVuY0ltcDo6RW5j
b2RlVVJJQ29tcG9uZW50LCAxLCAiZW5jb2RlVVJJQ29tcG9uZW50IiksIERvbnRFbnVtKTsKKyAg
ICBwdXREaXJlY3RGdW5jdGlvbihuZXcgUHJvdG90eXBlRnVuY3Rpb24oZXhlYywgZCgpLT5mdW5j
dGlvblByb3RvdHlwZSwgMSwgImV2YWwiLCBnbG9iYWxGdW5jRXZhbCksIERvbnRFbnVtKTsKKyAg
ICBwdXREaXJlY3RGdW5jdGlvbihuZXcgUHJvdG90eXBlRnVuY3Rpb24oZXhlYywgZCgpLT5mdW5j
dGlvblByb3RvdHlwZSwgMiwgInBhcnNlSW50IiwgZ2xvYmFsRnVuY1BhcnNlSW50KSwgRG9udEVu
dW0pOworICAgIHB1dERpcmVjdEZ1bmN0aW9uKG5ldyBQcm90b3R5cGVGdW5jdGlvbihleGVjLCBk
KCktPmZ1bmN0aW9uUHJvdG90eXBlLCAxLCAicGFyc2VGbG9hdCIsIGdsb2JhbEZ1bmNQYXJzZUZs
b2F0KSwgRG9udEVudW0pOworICAgIHB1dERpcmVjdEZ1bmN0aW9uKG5ldyBQcm90b3R5cGVGdW5j
dGlvbihleGVjLCBkKCktPmZ1bmN0aW9uUHJvdG90eXBlLCAxLCAiaXNOYU4iLCBnbG9iYWxGdW5j
SXNOYU4pLCBEb250RW51bSk7CisgICAgcHV0RGlyZWN0RnVuY3Rpb24obmV3IFByb3RvdHlwZUZ1
bmN0aW9uKGV4ZWMsIGQoKS0+ZnVuY3Rpb25Qcm90b3R5cGUsIDEsICJpc0Zpbml0ZSIsIGdsb2Jh
bEZ1bmNJc0Zpbml0ZSksIERvbnRFbnVtKTsKKyAgICBwdXREaXJlY3RGdW5jdGlvbihuZXcgUHJv
dG90eXBlRnVuY3Rpb24oZXhlYywgZCgpLT5mdW5jdGlvblByb3RvdHlwZSwgMSwgImVzY2FwZSIs
IGdsb2JhbEZ1bmNFc2NhcGUpLCBEb250RW51bSk7CisgICAgcHV0RGlyZWN0RnVuY3Rpb24obmV3
IFByb3RvdHlwZUZ1bmN0aW9uKGV4ZWMsIGQoKS0+ZnVuY3Rpb25Qcm90b3R5cGUsIDEsICJ1bmVz
Y2FwZSIsIGdsb2JhbEZ1bmNVbkVzY2FwZSksIERvbnRFbnVtKTsKKyAgICBwdXREaXJlY3RGdW5j
dGlvbihuZXcgUHJvdG90eXBlRnVuY3Rpb24oZXhlYywgZCgpLT5mdW5jdGlvblByb3RvdHlwZSwg
MSwgImRlY29kZVVSSSIsIGdsb2JhbEZ1bmNEZWNvZGVVUkkpLCBEb250RW51bSk7CisgICAgcHV0
RGlyZWN0RnVuY3Rpb24obmV3IFByb3RvdHlwZUZ1bmN0aW9uKGV4ZWMsIGQoKS0+ZnVuY3Rpb25Q
cm90b3R5cGUsIDEsICJkZWNvZGVVUklDb21wb25lbnQiLCBnbG9iYWxGdW5jRGVjb2RlVVJJQ29t
cG9uZW50KSwgRG9udEVudW0pOworICAgIHB1dERpcmVjdEZ1bmN0aW9uKG5ldyBQcm90b3R5cGVG
dW5jdGlvbihleGVjLCBkKCktPmZ1bmN0aW9uUHJvdG90eXBlLCAxLCAiZW5jb2RlVVJJIiwgZ2xv
YmFsRnVuY0VuY29kZVVSSSksIERvbnRFbnVtKTsKKyAgICBwdXREaXJlY3RGdW5jdGlvbihuZXcg
UHJvdG90eXBlRnVuY3Rpb24oZXhlYywgZCgpLT5mdW5jdGlvblByb3RvdHlwZSwgMSwgImVuY29k
ZVVSSUNvbXBvbmVudCIsIGdsb2JhbEZ1bmNFbmNvZGVVUklDb21wb25lbnQpLCBEb250RW51bSk7
CiAjaWZuZGVmIE5ERUJVRwotICAgIHB1dERpcmVjdEZ1bmN0aW9uKG5ldyBHbG9iYWxGdW5jSW1w
KGV4ZWMsIGQoKS0+ZnVuY3Rpb25Qcm90b3R5cGUsIEdsb2JhbEZ1bmNJbXA6OktKU1ByaW50LCAx
LCAia2pzcHJpbnQiKSwgRG9udEVudW0pOworICAgIHB1dERpcmVjdEZ1bmN0aW9uKG5ldyBQcm90
b3R5cGVGdW5jdGlvbihleGVjLCBkKCktPmZ1bmN0aW9uUHJvdG90eXBlLCAxLCAia2pzcHJpbnQi
LCBnbG9iYWxGdW5jS0pTUHJpbnQpLCBEb250RW51bSk7CiAjZW5kaWYKIAogICAgIC8vIFNldCBw
cm90b3R5cGUsIGFuZCBhbHNvIGluc2VydCB0aGUgb2JqZWN0IHByb3RvdHlwZSBhdCB0aGUgZW5k
IG9mIHRoZSBjaGFpbi4KSW5kZXg6IGtqcy9mdW5jdGlvbi5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtqcy9m
dW5jdGlvbi5oCShyZXZpc2lvbiAyOTU0MSkKKysrIGtqcy9mdW5jdGlvbi5oCSh3b3JraW5nIGNv
cHkpCkBAIC01NiwyMCArNTYsNiBAQAogICAgIElkZW50aWZpZXIgbV9uYW1lOwogICB9OwogCi0g
IC8qKgotICAgKiBAaW50ZXJuYWwKLSAgICoKLSAgICogVGhlIGluaXRpYWwgdmFsdWUgb2YgRnVu
Y3Rpb24ucHJvdG90eXBlIChhbmQgdGh1cyBhbGwgb2JqZWN0cyBjcmVhdGVkCi0gICAqIHdpdGgg
dGhlIEZ1bmN0aW9uIGNvbnN0cnVjdG9yKQotICAgKi8KLSAgY2xhc3MgRnVuY3Rpb25Qcm90b3R5
cGUgOiBwdWJsaWMgSW50ZXJuYWxGdW5jdGlvbkltcCB7Ci0gIHB1YmxpYzoKLSAgICBGdW5jdGlv
blByb3RvdHlwZShFeGVjU3RhdGUgKmV4ZWMpOwotICAgIHZpcnR1YWwgfkZ1bmN0aW9uUHJvdG90
eXBlKCk7Ci0KLSAgICB2aXJ0dWFsIEpTVmFsdWUgKmNhbGxBc0Z1bmN0aW9uKEV4ZWNTdGF0ZSAq
ZXhlYywgSlNPYmplY3QgKnRoaXNPYmosIGNvbnN0IExpc3QgJmFyZ3MpOwotICB9OwotCiAgIGNs
YXNzIEZ1bmN0aW9uSW1wIDogcHVibGljIEludGVybmFsRnVuY3Rpb25JbXAgewogICAgIGZyaWVu
ZCBjbGFzcyBBY3RpdmF0aW9uSW1wOwogICBwdWJsaWM6CkBAIC0xNDMsNiArMTI5LDcgQEAKICAg
ICB0eXBlZGVmIEtKUzo6SlNWYWx1ZSogKCpKU01lbWJlckZ1bmN0aW9uKShFeGVjU3RhdGUqLCBK
U09iamVjdCosIGNvbnN0IExpc3QmKTsKIAogICAgIFByb3RvdHlwZUZ1bmN0aW9uKEV4ZWNTdGF0
ZSosIGludCBsZW4sIGNvbnN0IElkZW50aWZpZXImLCBKU01lbWJlckZ1bmN0aW9uKTsKKyAgICBQ
cm90b3R5cGVGdW5jdGlvbihFeGVjU3RhdGUqLCBGdW5jdGlvblByb3RvdHlwZSosIGludCBsZW4s
IGNvbnN0IElkZW50aWZpZXImLCBKU01lbWJlckZ1bmN0aW9uKTsKIAogICAgIHZpcnR1YWwgSlNW
YWx1ZSogY2FsbEFzRnVuY3Rpb24oRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogdGhpc09iaiwg
Y29uc3QgTGlzdCYpOwogCkBAIC0xNTAsMTkgKzEzNywyMyBAQAogICAgIGNvbnN0IEpTTWVtYmVy
RnVuY3Rpb24gbV9mdW5jdGlvbjsKICAgfTsKIAotICBjbGFzcyBHbG9iYWxGdW5jSW1wIDogcHVi
bGljIEludGVybmFsRnVuY3Rpb25JbXAgewotICBwdWJsaWM6Ci0gICAgR2xvYmFsRnVuY0ltcChF
eGVjU3RhdGUqLCBGdW5jdGlvblByb3RvdHlwZSosIGludCBpLCBpbnQgbGVuLCBjb25zdCBJZGVu
dGlmaWVyJik7Ci0gICAgdmlydHVhbCBKU1ZhbHVlKiBjYWxsQXNGdW5jdGlvbihFeGVjU3RhdGUq
LCBKU09iamVjdCogdGhpc09iaiwgY29uc3QgTGlzdCYgYXJncyk7Ci0gICAgZW51bSB7IEV2YWws
IFBhcnNlSW50LCBQYXJzZUZsb2F0LCBJc05hTiwgSXNGaW5pdGUsIEVzY2FwZSwgVW5Fc2NhcGUs
Ci0gICAgICAgICAgIERlY29kZVVSSSwgRGVjb2RlVVJJQ29tcG9uZW50LCBFbmNvZGVVUkksIEVu
Y29kZVVSSUNvbXBvbmVudAorCisgICAgLy8gR2xvYmFsIEZ1bmN0aW9ucworCisgICAgSlNWYWx1
ZSogZ2xvYmFsRnVuY0V2YWwoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBjb25zdCBMaXN0Jik7Cisg
ICAgSlNWYWx1ZSogZ2xvYmFsRnVuY1BhcnNlSW50KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgY29u
c3QgTGlzdCYpOworICAgIEpTVmFsdWUqIGdsb2JhbEZ1bmNQYXJzZUZsb2F0KEV4ZWNTdGF0ZSos
IEpTT2JqZWN0KiwgY29uc3QgTGlzdCYpOworICAgIEpTVmFsdWUqIGdsb2JhbEZ1bmNJc05hTihF
eGVjU3RhdGUqLCBKU09iamVjdCosIGNvbnN0IExpc3QmKTsKKyAgICBKU1ZhbHVlKiBnbG9iYWxG
dW5jSXNGaW5pdGUoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBjb25zdCBMaXN0Jik7CisgICAgSlNW
YWx1ZSogZ2xvYmFsRnVuY0RlY29kZVVSSShFeGVjU3RhdGUqLCBKU09iamVjdCosIGNvbnN0IExp
c3QmKTsKKyAgICBKU1ZhbHVlKiBnbG9iYWxGdW5jRGVjb2RlVVJJQ29tcG9uZW50KEV4ZWNTdGF0
ZSosIEpTT2JqZWN0KiwgY29uc3QgTGlzdCYpOworICAgIEpTVmFsdWUqIGdsb2JhbEZ1bmNFbmNv
ZGVVUkkoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBjb25zdCBMaXN0Jik7CisgICAgSlNWYWx1ZSog
Z2xvYmFsRnVuY0VuY29kZVVSSUNvbXBvbmVudChFeGVjU3RhdGUqLCBKU09iamVjdCosIGNvbnN0
IExpc3QmKTsKKyAgICBKU1ZhbHVlKiBnbG9iYWxGdW5jRXNjYXBlKEV4ZWNTdGF0ZSosIEpTT2Jq
ZWN0KiwgY29uc3QgTGlzdCYpOworICAgIEpTVmFsdWUqIGdsb2JhbEZ1bmNVbkVzY2FwZShFeGVj
U3RhdGUqLCBKU09iamVjdCosIGNvbnN0IExpc3QmKTsKICNpZm5kZWYgTkRFQlVHCi0gICAgICAg
ICAgICwgS0pTUHJpbnQKKyAgICBKU1ZhbHVlKiBnbG9iYWxGdW5jS0pTUHJpbnQoRXhlY1N0YXRl
KiwgSlNPYmplY3QqLCBjb25zdCBMaXN0Jik7CiAjZW5kaWYKLX07Ci0gIHByaXZhdGU6Ci0gICAg
aW50IGlkOwotICB9OwogCiAgIHN0YXRpYyBjb25zdCBkb3VibGUgbWFudGlzc2FPdmVyZmxvd0xv
d2VyQm91bmQgPSA5MDA3MTk5MjU0NzQwOTkyLjA7CiAgIGRvdWJsZSBwYXJzZUludE92ZXJmbG93
KGNvbnN0IGNoYXIqIHMsIGludCBsZW5ndGgsIGludCByYWRpeCk7CkluZGV4OiBranMvb2JqZWN0
X29iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0ga2pzL29iamVjdF9vYmplY3QuY3BwCShyZXZpc2lv
biAyOTU0MSkKKysrIGtqcy9vYmplY3Rfb2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw3
ICsxLDYgQEAKLS8vIC0qLSBjLWJhc2ljLW9mZnNldDogMiAtKi0KIC8qCi0gKiAgVGhpcyBmaWxl
IGlzIHBhcnQgb2YgdGhlIEtERSBsaWJyYXJpZXMKICAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAw
MCBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQorICogIENvcHlyaWdodCAoQykgMjAwOCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCkBAIC0y
NywxMSArMjYsMTEgQEAKICNpbmNsdWRlICJmdW5jdGlvbl9vYmplY3QuaCIKICNpbmNsdWRlIDxz
dGRpby5oPgogCi11c2luZyBuYW1lc3BhY2UgS0pTOworbmFtZXNwYWNlIEtKUyB7CiAKIC8vIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBPYmplY3RQcm90b3R5cGUgLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotT2JqZWN0UHJvdG90eXBlOjpPYmplY3RQcm90b3R5cGUo
RXhlY1N0YXRlKiBleGVjLCBGdW5jdGlvblByb3RvdHlwZSogZnVuY1Byb3RvKQorT2JqZWN0UHJv
dG90eXBlOjpPYmplY3RQcm90b3R5cGUoRXhlY1N0YXRlKiBleGVjLCBGdW5jdGlvblByb3RvdHlw
ZSogZnVuY3Rpb25Qcm90b3R5cGUpCiAgIDogSlNPYmplY3QoKSAvLyBbW1Byb3RvdHlwZV1dIGlz
IG51bGwKIHsKICAgICBzdGF0aWMgY29uc3QgSWRlbnRpZmllciogaGFzT3duUHJvcGVydHlQcm9w
ZXJ0eU5hbWUgPSBuZXcgSWRlbnRpZmllcigiaGFzT3duUHJvcGVydHkiKTsKQEAgLTQyLDExMSAr
NDEsMTI0IEBACiAgICAgc3RhdGljIGNvbnN0IElkZW50aWZpZXIqIGxvb2t1cEdldHRlclByb3Bl
cnR5TmFtZSA9IG5ldyBJZGVudGlmaWVyKCJfX2xvb2t1cEdldHRlcl9fIik7CiAgICAgc3RhdGlj
IGNvbnN0IElkZW50aWZpZXIqIGxvb2t1cFNldHRlclByb3BlcnR5TmFtZSA9IG5ldyBJZGVudGlm
aWVyKCJfX2xvb2t1cFNldHRlcl9fIik7CiAKLSAgICBwdXREaXJlY3RGdW5jdGlvbihuZXcgT2Jq
ZWN0UHJvdG9GdW5jKGV4ZWMsIGZ1bmNQcm90bywgT2JqZWN0UHJvdG9GdW5jOjpUb1N0cmluZywg
MCwgZXhlYy0+cHJvcGVydHlOYW1lcygpLnRvU3RyaW5nKSwgRG9udEVudW0pOwotICAgIHB1dERp
cmVjdEZ1bmN0aW9uKG5ldyBPYmplY3RQcm90b0Z1bmMoZXhlYywgZnVuY1Byb3RvLCBPYmplY3RQ
cm90b0Z1bmM6OlRvTG9jYWxlU3RyaW5nLCAwLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkudG9Mb2Nh
bGVTdHJpbmcpLCBEb250RW51bSk7Ci0gICAgcHV0RGlyZWN0RnVuY3Rpb24obmV3IE9iamVjdFBy
b3RvRnVuYyhleGVjLCBmdW5jUHJvdG8sIE9iamVjdFByb3RvRnVuYzo6VmFsdWVPZiwgMCwgZXhl
Yy0+cHJvcGVydHlOYW1lcygpLnZhbHVlT2YpLCBEb250RW51bSk7Ci0gICAgcHV0RGlyZWN0RnVu
Y3Rpb24obmV3IE9iamVjdFByb3RvRnVuYyhleGVjLCBmdW5jUHJvdG8sIE9iamVjdFByb3RvRnVu
Yzo6SGFzT3duUHJvcGVydHksIDEsICpoYXNPd25Qcm9wZXJ0eVByb3BlcnR5TmFtZSksIERvbnRF
bnVtKTsKLSAgICBwdXREaXJlY3RGdW5jdGlvbihuZXcgT2JqZWN0UHJvdG9GdW5jKGV4ZWMsIGZ1
bmNQcm90bywgT2JqZWN0UHJvdG9GdW5jOjpQcm9wZXJ0eUlzRW51bWVyYWJsZSwgMSwgKnByb3Bl
cnR5SXNFbnVtZXJhYmxlUHJvcGVydHlOYW1lKSwgRG9udEVudW0pOwotICAgIHB1dERpcmVjdEZ1
bmN0aW9uKG5ldyBPYmplY3RQcm90b0Z1bmMoZXhlYywgZnVuY1Byb3RvLCBPYmplY3RQcm90b0Z1
bmM6OklzUHJvdG90eXBlT2YsIDEsICppc1Byb3RvdHlwZU9mUHJvcGVydHlOYW1lKSwgRG9udEVu
dW0pOworICAgIHB1dERpcmVjdEZ1bmN0aW9uKG5ldyBQcm90b3R5cGVGdW5jdGlvbihleGVjLCBm
dW5jdGlvblByb3RvdHlwZSwgMCwgZXhlYy0+cHJvcGVydHlOYW1lcygpLnRvU3RyaW5nLCBvYmpl
Y3RQcm90b0Z1bmNUb1N0cmluZyksIERvbnRFbnVtKTsKKyAgICBwdXREaXJlY3RGdW5jdGlvbihu
ZXcgUHJvdG90eXBlRnVuY3Rpb24oZXhlYywgZnVuY3Rpb25Qcm90b3R5cGUsIDAsIGV4ZWMtPnBy
b3BlcnR5TmFtZXMoKS50b0xvY2FsZVN0cmluZywgb2JqZWN0UHJvdG9GdW5jVG9Mb2NhbGVTdHJp
bmcpLCBEb250RW51bSk7CisgICAgcHV0RGlyZWN0RnVuY3Rpb24obmV3IFByb3RvdHlwZUZ1bmN0
aW9uKGV4ZWMsIGZ1bmN0aW9uUHJvdG90eXBlLCAwLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkudmFs
dWVPZiwgb2JqZWN0UHJvdG9GdW5jVmFsdWVPZiksIERvbnRFbnVtKTsKKyAgICBwdXREaXJlY3RG
dW5jdGlvbihuZXcgUHJvdG90eXBlRnVuY3Rpb24oZXhlYywgZnVuY3Rpb25Qcm90b3R5cGUsIDEs
ICpoYXNPd25Qcm9wZXJ0eVByb3BlcnR5TmFtZSwgb2JqZWN0UHJvdG9GdW5jSGFzT3duUHJvcGVy
dHkpLCBEb250RW51bSk7CisgICAgcHV0RGlyZWN0RnVuY3Rpb24obmV3IFByb3RvdHlwZUZ1bmN0
aW9uKGV4ZWMsIGZ1bmN0aW9uUHJvdG90eXBlLCAxLCAqcHJvcGVydHlJc0VudW1lcmFibGVQcm9w
ZXJ0eU5hbWUsIG9iamVjdFByb3RvRnVuY1Byb3BlcnR5SXNFbnVtZXJhYmxlKSwgRG9udEVudW0p
OworICAgIHB1dERpcmVjdEZ1bmN0aW9uKG5ldyBQcm90b3R5cGVGdW5jdGlvbihleGVjLCBmdW5j
dGlvblByb3RvdHlwZSwgMSwgKmlzUHJvdG90eXBlT2ZQcm9wZXJ0eU5hbWUsIG9iamVjdFByb3Rv
RnVuY0lzUHJvdG90eXBlT2YpLCBEb250RW51bSk7CiAKICAgICAvLyBNb3ppbGxhIGV4dGVuc2lv
bnMKLSAgICBwdXREaXJlY3RGdW5jdGlvbihuZXcgT2JqZWN0UHJvdG9GdW5jKGV4ZWMsIGZ1bmNQ
cm90bywgT2JqZWN0UHJvdG9GdW5jOjpEZWZpbmVHZXR0ZXIsIDIsICpkZWZpbmVHZXR0ZXJQcm9w
ZXJ0eU5hbWUpLCBEb250RW51bSk7Ci0gICAgcHV0RGlyZWN0RnVuY3Rpb24obmV3IE9iamVjdFBy
b3RvRnVuYyhleGVjLCBmdW5jUHJvdG8sIE9iamVjdFByb3RvRnVuYzo6RGVmaW5lU2V0dGVyLCAy
LCAqZGVmaW5lU2V0dGVyUHJvcGVydHlOYW1lKSwgRG9udEVudW0pOwotICAgIHB1dERpcmVjdEZ1
bmN0aW9uKG5ldyBPYmplY3RQcm90b0Z1bmMoZXhlYywgZnVuY1Byb3RvLCBPYmplY3RQcm90b0Z1
bmM6Okxvb2t1cEdldHRlciwgMSwgKmxvb2t1cEdldHRlclByb3BlcnR5TmFtZSksIERvbnRFbnVt
KTsKLSAgICBwdXREaXJlY3RGdW5jdGlvbihuZXcgT2JqZWN0UHJvdG9GdW5jKGV4ZWMsIGZ1bmNQ
cm90bywgT2JqZWN0UHJvdG9GdW5jOjpMb29rdXBTZXR0ZXIsIDEsICpsb29rdXBTZXR0ZXJQcm9w
ZXJ0eU5hbWUpLCBEb250RW51bSk7CisgICAgcHV0RGlyZWN0RnVuY3Rpb24obmV3IFByb3RvdHlw
ZUZ1bmN0aW9uKGV4ZWMsIGZ1bmN0aW9uUHJvdG90eXBlLCAyLCAqZGVmaW5lR2V0dGVyUHJvcGVy
dHlOYW1lLCBvYmplY3RQcm90b0Z1bmNEZWZpbmVHZXR0ZXIpLCBEb250RW51bSk7CisgICAgcHV0
RGlyZWN0RnVuY3Rpb24obmV3IFByb3RvdHlwZUZ1bmN0aW9uKGV4ZWMsIGZ1bmN0aW9uUHJvdG90
eXBlLCAyLCAqZGVmaW5lU2V0dGVyUHJvcGVydHlOYW1lLCBvYmplY3RQcm90b0Z1bmNEZWZpbmVT
ZXR0ZXIpLCBEb250RW51bSk7CisgICAgcHV0RGlyZWN0RnVuY3Rpb24obmV3IFByb3RvdHlwZUZ1
bmN0aW9uKGV4ZWMsIGZ1bmN0aW9uUHJvdG90eXBlLCAxLCAqbG9va3VwR2V0dGVyUHJvcGVydHlO
YW1lLCBvYmplY3RQcm90b0Z1bmNMb29rdXBHZXR0ZXIpLCBEb250RW51bSk7CisgICAgcHV0RGly
ZWN0RnVuY3Rpb24obmV3IFByb3RvdHlwZUZ1bmN0aW9uKGV4ZWMsIGZ1bmN0aW9uUHJvdG90eXBl
LCAxLCAqbG9va3VwU2V0dGVyUHJvcGVydHlOYW1lLCBvYmplY3RQcm90b0Z1bmNMb29rdXBTZXR0
ZXIpLCBEb250RW51bSk7CiB9CiAKIAotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
IE9iamVjdFByb3RvRnVuYyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEZ1bmN0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQogCi1PYmplY3RQcm90b0Z1bmM6Ok9iamVjdFByb3RvRnVuYyhFeGVjU3Rh
dGUqIGV4ZWMsIEZ1bmN0aW9uUHJvdG90eXBlKiBmdW5jUHJvdG8sIGludCBpLCBpbnQgbGVuLCBj
b25zdCBJZGVudGlmaWVyJiBuYW1lKQotICA6IEludGVybmFsRnVuY3Rpb25JbXAoZnVuY1Byb3Rv
LCBuYW1lKQotICAsIGlkKGkpCisvLyBFQ01BIDE1LjIuNC4yLCAxNS4yLjQuNCwgMTUuMi40LjUs
IDE1LjIuNC43CisKK0pTVmFsdWUqIG9iamVjdFByb3RvRnVuY1ZhbHVlT2YoRXhlY1N0YXRlKiwg
SlNPYmplY3QqIHRoaXNPYmosIGNvbnN0IExpc3QmKQogewotICBwdXREaXJlY3QoZXhlYy0+cHJv
cGVydHlOYW1lcygpLmxlbmd0aCwgbGVuLCBEb250RGVsZXRlfFJlYWRPbmx5fERvbnRFbnVtKTsK
KyAgICByZXR1cm4gdGhpc09iajsKIH0KIAorSlNWYWx1ZSogb2JqZWN0UHJvdG9GdW5jSGFzT3du
UHJvcGVydHkoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogdGhpc09iaiwgY29uc3QgTGlzdCYg
YXJncykKK3sKKyAgICByZXR1cm4ganNCb29sZWFuKHRoaXNPYmotPmhhc093blByb3BlcnR5KGV4
ZWMsIElkZW50aWZpZXIoYXJnc1swXS0+dG9TdHJpbmcoZXhlYykpKSk7Cit9CiAKLS8vIEVDTUEg
MTUuMi40LjIsIDE1LjIuNC40LCAxNS4yLjQuNSwgMTUuMi40LjcKLQotSlNWYWx1ZSAqT2JqZWN0
UHJvdG9GdW5jOjpjYWxsQXNGdW5jdGlvbihFeGVjU3RhdGUgKmV4ZWMsIEpTT2JqZWN0ICp0aGlz
T2JqLCBjb25zdCBMaXN0ICZhcmdzKQorSlNWYWx1ZSogb2JqZWN0UHJvdG9GdW5jSXNQcm90b3R5
cGVPZihFeGVjU3RhdGUqLCBKU09iamVjdCogdGhpc09iaiwgY29uc3QgTGlzdCYgYXJncykKIHsK
LSAgICBzd2l0Y2ggKGlkKSB7Ci0gICAgICAgIGNhc2UgVmFsdWVPZjoKLSAgICAgICAgICAgIHJl
dHVybiB0aGlzT2JqOwotICAgICAgICBjYXNlIEhhc093blByb3BlcnR5OgotICAgICAgICAgICAg
cmV0dXJuIGpzQm9vbGVhbih0aGlzT2JqLT5oYXNPd25Qcm9wZXJ0eShleGVjLCBJZGVudGlmaWVy
KGFyZ3NbMF0tPnRvU3RyaW5nKGV4ZWMpKSkpOwotICAgICAgICBjYXNlIElzUHJvdG90eXBlT2Y6
IHsKICAgICAgICAgICAgIGlmICghYXJnc1swXS0+aXNPYmplY3QoKSkKICAgICAgICAgICAgICAg
ICByZXR1cm4ganNCb29sZWFuKGZhbHNlKTsKLSAgICAgICAgIAotICAgICAgICAgICAgSlNWYWx1
ZSAqdiA9IHN0YXRpY19jYXN0PEpTT2JqZWN0ICo+KGFyZ3NbMF0pLT5wcm90b3R5cGUoKTsKIAor
ICAgIEpTVmFsdWUqIHYgPSBzdGF0aWNfY2FzdDxKU09iamVjdCo+KGFyZ3NbMF0pLT5wcm90b3R5
cGUoKTsKKwogICAgICAgICAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICAgICAgICAgICBpZiAo
IXYtPmlzT2JqZWN0KCkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBqc0Jvb2xlYW4oZmFs
c2UpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGlmICh0aGlzT2JqID09IHN0
YXRpY19jYXN0PEpTT2JqZWN0ICo+KHYpKQsKKyAgICAgICAgaWYgKHRoaXNPYmogPT0gc3RhdGlj
X2Nhc3Q8SlNPYmplY3QqPih2KSkLCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBqc0Jvb2xl
YW4odHJ1ZSk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgdiA9IHN0YXRpY19j
YXN0PEpTT2JqZWN0ICo+KHYpLT5wcm90b3R5cGUoKTsKKyAgICAgICAgdiA9IHN0YXRpY19jYXN0
PEpTT2JqZWN0Kj4odiktPnByb3RvdHlwZSgpOwogICAgICAgICAgICAgfQotICAgICAgICB9Ci0g
ICAgICAgIGNhc2UgRGVmaW5lR2V0dGVyOiAKLSAgICAgICAgY2FzZSBEZWZpbmVTZXR0ZXI6IHsK
LSAgICAgICAgICAgIGlmICghYXJnc1sxXS0+aXNPYmplY3QoKSB8fAotICAgICAgICAgICAgICAg
ICFzdGF0aWNfY2FzdDxKU09iamVjdCAqPihhcmdzWzFdKS0+aW1wbGVtZW50c0NhbGwoKSkgewot
ICAgICAgICAgICAgICAgIGlmIChpZCA9PSBEZWZpbmVHZXR0ZXIpCit9CisKK0pTVmFsdWUqIG9i
amVjdFByb3RvRnVuY0RlZmluZUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiB0aGlz
T2JqLCBjb25zdCBMaXN0JiBhcmdzKQoreworICAgIGlmICghYXJnc1sxXS0+aXNPYmplY3QoKSB8
fCAhc3RhdGljX2Nhc3Q8SlNPYmplY3QqPihhcmdzWzFdKS0+aW1wbGVtZW50c0NhbGwoKSkKICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgU3ludGF4RXJyb3IsICJp
bnZhbGlkIGdldHRlciB1c2FnZSIpOwotICAgICAgICAgICAgICAgIGVsc2UKKworICAgIHRoaXNP
YmotPmRlZmluZUdldHRlcihleGVjLCBJZGVudGlmaWVyKGFyZ3NbMF0tPnRvU3RyaW5nKGV4ZWMp
KSwgc3RhdGljX2Nhc3Q8SlNPYmplY3QgKj4oYXJnc1sxXSkpOworICAgIHJldHVybiBqc1VuZGVm
aW5lZCgpOworfQorCitKU1ZhbHVlKiBvYmplY3RQcm90b0Z1bmNEZWZpbmVTZXR0ZXIoRXhlY1N0
YXRlKiBleGVjLCBKU09iamVjdCogdGhpc09iaiwgY29uc3QgTGlzdCYgYXJncykKK3sKKyAgICBp
ZiAoIWFyZ3NbMV0tPmlzT2JqZWN0KCkgfHwgIXN0YXRpY19jYXN0PEpTT2JqZWN0Kj4oYXJnc1sx
XSktPmltcGxlbWVudHNDYWxsKCkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aHJvd0Vy
cm9yKGV4ZWMsIFN5bnRheEVycm9yLCAiaW52YWxpZCBzZXR0ZXIgdXNhZ2UiKTsKLSAgICAgICAg
ICAgIH0KIAotICAgICAgICAgICAgaWYgKGlkID09IERlZmluZUdldHRlcikKLSAgICAgICAgICAg
ICAgICB0aGlzT2JqLT5kZWZpbmVHZXR0ZXIoZXhlYywgSWRlbnRpZmllcihhcmdzWzBdLT50b1N0
cmluZyhleGVjKSksIHN0YXRpY19jYXN0PEpTT2JqZWN0ICo+KGFyZ3NbMV0pKTsKLSAgICAgICAg
ICAgIGVsc2UKICAgICAgICAgICAgICAgICB0aGlzT2JqLT5kZWZpbmVTZXR0ZXIoZXhlYywgSWRl
bnRpZmllcihhcmdzWzBdLT50b1N0cmluZyhleGVjKSksIHN0YXRpY19jYXN0PEpTT2JqZWN0ICo+
KGFyZ3NbMV0pKTsKICAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworfQorCitKU1Zh
bHVlKiBvYmplY3RQcm90b0Z1bmNMb29rdXBHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBKU09iamVj
dCogdGhpc09iaiwgY29uc3QgTGlzdCYgYXJncykKK3sKKyAgICBJZGVudGlmaWVyIHByb3BlcnR5
TmFtZSA9IElkZW50aWZpZXIoYXJnc1swXS0+dG9TdHJpbmcoZXhlYykpOworICAgIEpTT2JqZWN0
KiBvYmogPSB0aGlzT2JqOworICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgIEpTVmFsdWUqIHYg
PSBvYmotPmdldERpcmVjdChwcm9wZXJ0eU5hbWUpOworICAgICAgICBpZiAodikgeworICAgICAg
ICAgICAgaWYgKHYtPnR5cGUoKSAhPSBHZXR0ZXJTZXR0ZXJUeXBlKQorICAgICAgICAgICAgICAg
IHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgICAgICAgICAgSlNPYmplY3QqIGZ1bmNPYmogPSBz
dGF0aWNfY2FzdDxHZXR0ZXJTZXR0ZXJJbXAqPih2KS0+Z2V0R2V0dGVyKCk7CisgICAgICAgICAg
ICBpZiAoIWZ1bmNPYmopCisgICAgICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Cisg
ICAgICAgICAgICByZXR1cm4gZnVuY09iajsKICAgICAgICAgfQotICAgICAgICBjYXNlIExvb2t1
cEdldHRlcjoKLSAgICAgICAgY2FzZSBMb29rdXBTZXR0ZXI6IHsKKworICAgICAgICBpZiAoIW9i
ai0+cHJvdG90eXBlKCkgfHwgIW9iai0+cHJvdG90eXBlKCktPmlzT2JqZWN0KCkpCisgICAgICAg
ICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICAgICAgb2JqID0gc3RhdGljX2Nhc3Q8SlNP
YmplY3QqPihvYmotPnByb3RvdHlwZSgpKTsKKyAgICB9Cit9CisKK0pTVmFsdWUqIG9iamVjdFBy
b3RvRnVuY0xvb2t1cFNldHRlcihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiB0aGlzT2JqLCBj
b25zdCBMaXN0JiBhcmdzKQorewogICAgICAgICAgICAgSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUg
PSBJZGVudGlmaWVyKGFyZ3NbMF0tPnRvU3RyaW5nKGV4ZWMpKTsKLSAgICAgICAgICAgIAotICAg
ICAgICAgICAgSlNPYmplY3QgKm9iaiA9IHRoaXNPYmo7CisgICAgSlNPYmplY3QqIG9iaiA9IHRo
aXNPYmo7CiAgICAgICAgICAgICB3aGlsZSAodHJ1ZSkgewotICAgICAgICAgICAgICAgIEpTVmFs
dWUgKnYgPSBvYmotPmdldERpcmVjdChwcm9wZXJ0eU5hbWUpOwotICAgICAgICAgICAgICAgIAor
ICAgICAgICBKU1ZhbHVlKiB2ID0gb2JqLT5nZXREaXJlY3QocHJvcGVydHlOYW1lKTsKICAgICAg
ICAgICAgICAgICBpZiAodikgewogICAgICAgICAgICAgICAgICAgICBpZiAodi0+dHlwZSgpICE9
IEdldHRlclNldHRlclR5cGUpCiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ganNVbmRl
ZmluZWQoKTsKLQotICAgICAgICAgICAgICAgICAgICBKU09iamVjdCAqZnVuY09iajsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBpZiAoaWQgPT0gTG9va3Vw
R2V0dGVyKQotICAgICAgICAgICAgICAgICAgICAgICAgZnVuY09iaiA9IHN0YXRpY19jYXN0PEdl
dHRlclNldHRlckltcCAqPih2KS0+Z2V0R2V0dGVyKCk7Ci0gICAgICAgICAgICAgICAgICAgIGVs
c2UKLSAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmNPYmogPSBzdGF0aWNfY2FzdDxHZXR0ZXJT
ZXR0ZXJJbXAgKj4odiktPmdldFNldHRlcigpOwotICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgSlNPYmplY3QqIGZ1bmNPYmogPSBzdGF0aWNfY2FzdDxHZXR0ZXJTZXR0ZXJJbXAqPih2KS0+
Z2V0U2V0dGVyKCk7CiAgICAgICAgICAgICAgICAgICAgIGlmICghZnVuY09iaikKICAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgICAgICAgICAgICAgICAg
ICBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZnVuY09iajsKICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICBpZiAoIW9iai0+
cHJvdG90eXBlKCkgfHwgIW9iai0+cHJvdG90eXBlKCktPmlzT2JqZWN0KCkpCiAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgICAgICAgICAgICAgIAotICAgICAg
ICAgICAgICAgIG9iaiA9IHN0YXRpY19jYXN0PEpTT2JqZWN0ICo+KG9iai0+cHJvdG90eXBlKCkp
OworICAgICAgICBvYmogPSBzdGF0aWNfY2FzdDxKU09iamVjdCo+KG9iai0+cHJvdG90eXBlKCkp
OwogICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGNhc2UgUHJvcGVydHlJc0VudW1l
cmFibGU6Cit9CisKK0pTVmFsdWUqIG9iamVjdFByb3RvRnVuY1Byb3BlcnR5SXNFbnVtZXJhYmxl
KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHRoaXNPYmosIGNvbnN0IExpc3QmIGFyZ3MpCit7
CiAgICAgICAgICAgICByZXR1cm4ganNCb29sZWFuKHRoaXNPYmotPnByb3BlcnR5SXNFbnVtZXJh
YmxlKGV4ZWMsIElkZW50aWZpZXIoYXJnc1swXS0+dG9TdHJpbmcoZXhlYykpKSk7Ci0gICAgICAg
IGNhc2UgVG9Mb2NhbGVTdHJpbmc6Cit9CisKK0pTVmFsdWUqIG9iamVjdFByb3RvRnVuY1RvTG9j
YWxlU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHRoaXNPYmosIGNvbnN0IExpc3Qm
KQorewogICAgICAgICAgICAgcmV0dXJuIGpzU3RyaW5nKHRoaXNPYmotPnRvU3RyaW5nKGV4ZWMp
KTsKLSAgICAgICAgY2FzZSBUb1N0cmluZzoKLSAgICAgICAgZGVmYXVsdDoKK30KKworSlNWYWx1
ZSogb2JqZWN0UHJvdG9GdW5jVG9TdHJpbmcoRXhlY1N0YXRlKiwgSlNPYmplY3QqIHRoaXNPYmos
IGNvbnN0IExpc3QmKQorewogICAgICAgICAgICAgcmV0dXJuIGpzU3RyaW5nKCJbb2JqZWN0ICIg
KyB0aGlzT2JqLT5jbGFzc05hbWUoKSArICJdIik7Ci0gICAgfQogfQogCiAvLyAtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0gT2JqZWN0T2JqZWN0SW1wIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCkBAIC0xOTEsMyArMjAzLDQgQEAKICAgICByZXR1cm4gY29uc3RydWN0KGV4
ZWMsIGFyZ3MpOwogfQogCit9IC8vIG5hbWVzcGFjZSBLSlMKSW5kZXg6IGtqcy9mdW5jdGlvbl9v
YmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBranMvZnVuY3Rpb25fb2JqZWN0LmgJKHJldmlzaW9uIDI5
NTQxKQorKysga2pzL2Z1bmN0aW9uX29iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSwyMCAr
MzEsMjAgQEAKICAgLyoqCiAgICAqIEBpbnRlcm5hbAogICAgKgotICAgKiBDbGFzcyB0byBpbXBs
ZW1lbnQgYWxsIG1ldGhvZHMgdGhhdCBhcmUgcHJvcGVydGllcyBvZiB0aGUKLSAgICogRnVuY3Rp
b24ucHJvdG90eXBlIG9iamVjdAorICAgICAqIFRoZSBpbml0aWFsIHZhbHVlIG9mIEZ1bmN0aW9u
LnByb3RvdHlwZSAoYW5kIHRodXMgYWxsIG9iamVjdHMgY3JlYXRlZAorICAgICAqIHdpdGggdGhl
IEZ1bmN0aW9uIGNvbnN0cnVjdG9yKQogICAgKi8KLSAgY2xhc3MgRnVuY3Rpb25Qcm90b0Z1bmMg
OiBwdWJsaWMgSW50ZXJuYWxGdW5jdGlvbkltcCB7CisgICAgY2xhc3MgRnVuY3Rpb25Qcm90b3R5
cGUgOiBwdWJsaWMgSW50ZXJuYWxGdW5jdGlvbkltcCB7CiAgIHB1YmxpYzoKLSAgICBGdW5jdGlv
blByb3RvRnVuYyhFeGVjU3RhdGUqLCBGdW5jdGlvblByb3RvdHlwZSosIGludCBpLCBpbnQgbGVu
LCBjb25zdCBJZGVudGlmaWVyJik7CisgICAgICAgIEZ1bmN0aW9uUHJvdG90eXBlKEV4ZWNTdGF0
ZSopOwogCi0gICAgdmlydHVhbCBKU1ZhbHVlICpjYWxsQXNGdW5jdGlvbihFeGVjU3RhdGUgKmV4
ZWMsIEpTT2JqZWN0ICp0aGlzT2JqLCBjb25zdCBMaXN0ICZhcmdzKTsKLQotICAgIGVudW0geyBU
b1N0cmluZywgQXBwbHksIENhbGwgfTsKLSAgcHJpdmF0ZToKLSAgICBpbnQgaWQ7CisgICAgICAg
IHZpcnR1YWwgSlNWYWx1ZSogY2FsbEFzRnVuY3Rpb24oRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBj
b25zdCBMaXN0Jik7CiAgIH07CiAKKyAgICBKU1ZhbHVlKiBmdW5jdGlvblByb3RvRnVuY1RvU3Ry
aW5nKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgY29uc3QgTGlzdCYpOworICAgIEpTVmFsdWUqIGZ1
bmN0aW9uUHJvdG9GdW5jQXBwbHkoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBjb25zdCBMaXN0Jik7
CisgICAgSlNWYWx1ZSogZnVuY3Rpb25Qcm90b0Z1bmNDYWxsKEV4ZWNTdGF0ZSosIEpTT2JqZWN0
KiwgY29uc3QgTGlzdCYpOworCiAgIC8qKgogICAgKiBAaW50ZXJuYWwKICAgICoKQEAgLTUzLDE0
ICs1MywxMyBAQAogICBjbGFzcyBGdW5jdGlvbk9iamVjdEltcCA6IHB1YmxpYyBJbnRlcm5hbEZ1
bmN0aW9uSW1wIHsKICAgcHVibGljOgogICAgIEZ1bmN0aW9uT2JqZWN0SW1wKEV4ZWNTdGF0ZSos
IEZ1bmN0aW9uUHJvdG90eXBlKik7Ci0gICAgdmlydHVhbCB+RnVuY3Rpb25PYmplY3RJbXAoKTsK
IAogICAgIHZpcnR1YWwgYm9vbCBpbXBsZW1lbnRzQ29uc3RydWN0KCkgY29uc3Q7Ci0gICAgdmly
dHVhbCBKU09iamVjdCogY29uc3RydWN0KEV4ZWNTdGF0ZSosIGNvbnN0IExpc3QmIGFyZ3MpOwot
ICAgIHZpcnR1YWwgSlNPYmplY3QqIGNvbnN0cnVjdChFeGVjU3RhdGUqLCBjb25zdCBMaXN0JiBh
cmdzLCBjb25zdCBJZGVudGlmaWVyJiBmdW5jdGlvbk5hbWUsIGNvbnN0IFVTdHJpbmcmIHNvdXJj
ZVVSTCwgaW50IGxpbmVOdW1iZXIpOwotICAgIHZpcnR1YWwgSlNWYWx1ZSogY2FsbEFzRnVuY3Rp
b24oRXhlY1N0YXRlKiwgSlNPYmplY3QqIHRoaXNPYmosIGNvbnN0IExpc3QmIGFyZ3MpOworICAg
ICAgICB2aXJ0dWFsIEpTT2JqZWN0KiBjb25zdHJ1Y3QoRXhlY1N0YXRlKiwgY29uc3QgTGlzdCYp
OworICAgICAgICB2aXJ0dWFsIEpTT2JqZWN0KiBjb25zdHJ1Y3QoRXhlY1N0YXRlKiwgY29uc3Qg
TGlzdCYsIGNvbnN0IElkZW50aWZpZXImIGZ1bmN0aW9uTmFtZSwgY29uc3QgVVN0cmluZyYgc291
cmNlVVJMLCBpbnQgbGluZU51bWJlcik7CisgICAgICAgIHZpcnR1YWwgSlNWYWx1ZSogY2FsbEFz
RnVuY3Rpb24oRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBjb25zdCBMaXN0Jik7CiAgIH07CiAKLX0g
Ly8gbmFtZXNwYWNlCit9IC8vIG5hbWVzcGFjZSBLSlMKIAogI2VuZGlmIC8vIF9GVU5DVElPTl9P
QkpFQ1RfSF8KSW5kZXg6IGtqcy9lcnJvcl9vYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBranMvZXJy
b3Jfb2JqZWN0LmgJKHJldmlzaW9uIDI5NTQxKQorKysga2pzL2Vycm9yX29iamVjdC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zOCwxMyArMzgsOCBAQAogICAgICAgICBFcnJvclByb3RvdHlwZShFeGVj
U3RhdGUqLCBPYmplY3RQcm90b3R5cGUqLCBGdW5jdGlvblByb3RvdHlwZSopOwogICAgIH07CiAK
LSAgICBjbGFzcyBFcnJvclByb3RvRnVuY1RvU3RyaW5nIDogcHVibGljIEludGVybmFsRnVuY3Rp
b25JbXAgewotICAgIHB1YmxpYzoKLSAgICAgICAgRXJyb3JQcm90b0Z1bmNUb1N0cmluZyhFeGVj
U3RhdGUqLCBGdW5jdGlvblByb3RvdHlwZSopOworICAgIEpTVmFsdWUqIGVycm9yUHJvdG9GdW5j
VG9TdHJpbmcoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBjb25zdCBMaXN0Jik7CiAKLSAgICAgICAg
dmlydHVhbCBKU1ZhbHVlKiBjYWxsQXNGdW5jdGlvbihFeGVjU3RhdGUqLCBKU09iamVjdCosIGNv
bnN0IExpc3QmKTsKLSAgICB9OwotCiAgICAgY2xhc3MgRXJyb3JPYmplY3RJbXAgOiBwdWJsaWMg
SW50ZXJuYWxGdW5jdGlvbkltcCB7CiAgICAgcHVibGljOgogICAgICAgICBFcnJvck9iamVjdElt
cChFeGVjU3RhdGUqLCBGdW5jdGlvblByb3RvdHlwZSosIEVycm9yUHJvdG90eXBlKik7CkluZGV4
OiBranMvcmVnZXhwX29iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtqcy9yZWdleHBfb2JqZWN0LmgJ
KHJldmlzaW9uIDI5NTQxKQorKysga2pzL3JlZ2V4cF9vYmplY3QuaAkod29ya2luZyBjb3B5KQpA
QCAtMSw2ICsxLDYgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDAgSGFycmkgUG9y
dGVuIChwb3J0ZW5Aa2RlLm9yZykKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDcgQXBwbGUg
SW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwMywgMjAwNywg
MjAwOCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICogIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGlj
CkBAIC0zMSwyMSArMzEsMTYgQEAKICAgICBjbGFzcyBSZWdFeHBQcm90b3R5cGUgOiBwdWJsaWMg
SlNPYmplY3QgewogICAgIHB1YmxpYzoKICAgICAgICAgUmVnRXhwUHJvdG90eXBlKEV4ZWNTdGF0
ZSosIE9iamVjdFByb3RvdHlwZSosIEZ1bmN0aW9uUHJvdG90eXBlKik7CisKICAgICAgICAgdmly
dHVhbCBjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbygpIGNvbnN0IHsgcmV0dXJuICZpbmZvOyB9
CiAgICAgICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8gaW5mbzsKICAgICB9OwogCi0gICAgY2xh
c3MgUmVnRXhwUHJvdG9GdW5jIDogcHVibGljIEludGVybmFsRnVuY3Rpb25JbXAgewotICAgIHB1
YmxpYzoKLSAgICAgICAgZW51bSB7IENvbXBpbGUsIEV4ZWMsIFRlc3QsIFRvU3RyaW5nIH07Cisg
ICAgSlNWYWx1ZSogcmVnRXhwUHJvdG9GdW5jVGVzdChFeGVjU3RhdGUqLCBKU09iamVjdCosIGNv
bnN0IExpc3QmKTsKKyAgICBKU1ZhbHVlKiByZWdFeHBQcm90b0Z1bmNFeGVjKEV4ZWNTdGF0ZSos
IEpTT2JqZWN0KiwgY29uc3QgTGlzdCYpOworICAgIEpTVmFsdWUqIHJlZ0V4cFByb3RvRnVuY0Nv
bXBpbGUoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBjb25zdCBMaXN0Jik7CisgICAgSlNWYWx1ZSog
cmVnRXhwUHJvdG9GdW5jVG9TdHJpbmcoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBjb25zdCBMaXN0
Jik7CiAKLSAgICAgICAgUmVnRXhwUHJvdG9GdW5jKEV4ZWNTdGF0ZSosIEZ1bmN0aW9uUHJvdG90
eXBlKiwgaW50IGlkLCBpbnQgbGVuLCBjb25zdCBJZGVudGlmaWVyJik7Ci0gICAgICAgIHZpcnR1
YWwgSlNWYWx1ZSogY2FsbEFzRnVuY3Rpb24oRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBjb25zdCBM
aXN0Jik7Ci0KLSAgICBwcml2YXRlOgotICAgICAgICBpbnQgaWQ7Ci0gICAgfTsKLQogICAgIGNs
YXNzIFJlZ0V4cEltcCA6IHB1YmxpYyBKU09iamVjdCB7CiAgICAgcHVibGljOgogICAgICAgICBl
bnVtIHsgR2xvYmFsLCBJZ25vcmVDYXNlLCBNdWx0aWxpbmUsIFNvdXJjZSwgTGFzdEluZGV4IH07
CkluZGV4OiBranMvZnVuY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtqcy9mdW5jdGlvbi5jcHAJ
KHJldmlzaW9uIDI5NTQxKQorKysga2pzL2Z1bmN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDcxLDE2ICs0NzEsOCBAQAogewogfQogCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0gR2xvYmFsRnVuYyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEdsb2JhbCBGdW5jdGlvbnMgLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotCi1HbG9iYWxGdW5jSW1wOjpHbG9iYWxGdW5jSW1w
KEV4ZWNTdGF0ZSogZXhlYywgRnVuY3Rpb25Qcm90b3R5cGUqIGZ1bmNQcm90bywgaW50IGksIGlu
dCBsZW4sIGNvbnN0IElkZW50aWZpZXImIG5hbWUpCi0gIDogSW50ZXJuYWxGdW5jdGlvbkltcChm
dW5jUHJvdG8sIG5hbWUpCi0gICwgaWQoaSkKLXsKLSAgcHV0RGlyZWN0KGV4ZWMtPnByb3BlcnR5
TmFtZXMoKS5sZW5ndGgsIGxlbiwgRG9udERlbGV0ZXxSZWFkT25seXxEb250RW51bSk7Ci19Ci0K
IHN0YXRpYyBKU1ZhbHVlKiBlbmNvZGUoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBMaXN0JiBhcmdz
LCBjb25zdCBjaGFyKiBkb19ub3RfZXNjYXBlKQogewogICBVU3RyaW5nIHIgPSAiIiwgcywgc3Ry
ID0gYXJnc1swXS0+dG9TdHJpbmcoZXhlYyk7CkBAIC03MDAsMzcgKzY5MiwxNCBAQAogICAgIHJl
dHVybiBzLnRvRG91YmxlKCB0cnVlIC8qdG9sZXJhbnQqLywgZmFsc2UgLyogTmFOIGZvciBlbXB0
eSBzdHJpbmcgKi8gKTsKIH0KIAotSlNWYWx1ZSogR2xvYmFsRnVuY0ltcDo6Y2FsbEFzRnVuY3Rp
b24oRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogdGhpc09iaiwgY29uc3QgTGlzdCYgYXJncykK
K0pTVmFsdWUqIGdsb2JhbEZ1bmNFdmFsKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHRoaXNP
YmosIGNvbnN0IExpc3QmIGFyZ3MpCiB7Ci0gIEpTVmFsdWUqIHJlcyA9IGpzVW5kZWZpbmVkKCk7
Ci0KLSAgc3RhdGljIGNvbnN0IGNoYXIgZG9fbm90X2VzY2FwZVtdID0KLSAgICAiQUJDREVGR0hJ
SktMTU5PUFFSU1RVVldYWVoiCi0gICAgImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6IgotICAg
ICIwMTIzNDU2Nzg5IgotICAgICIqKy0uL0BfIjsKLQotICBzdGF0aWMgY29uc3QgY2hhciBkb19u
b3RfZXNjYXBlX3doZW5fZW5jb2RpbmdfVVJJX2NvbXBvbmVudFtdID0KLSAgICAiQUJDREVGR0hJ
SktMTU5PUFFSU1RVVldYWVoiCi0gICAgImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6IgotICAg
ICIwMTIzNDU2Nzg5IgotICAgICIhJygpKi0uX34iOwotICBzdGF0aWMgY29uc3QgY2hhciBkb19u
b3RfZXNjYXBlX3doZW5fZW5jb2RpbmdfVVJJW10gPQotICAgICJBQkNERUZHSElKS0xNTk9QUVJT
VFVWV1hZWiIKLSAgICAiYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoiCi0gICAgIjAxMjM0NTY3
ODkiCi0gICAgIiEjJCYnKCkqKywtLi86Oz0/QF9+IjsKLSAgc3RhdGljIGNvbnN0IGNoYXIgZG9f
bm90X3VuZXNjYXBlX3doZW5fZGVjb2RpbmdfVVJJW10gPQotICAgICIjJCYrLC86Oz0/QCI7Ci0K
LSAgc3dpdGNoIChpZCkgewotICAgIGNhc2UgRXZhbDogeyAvLyBldmFsKCkKICAgICAgIEpTVmFs
dWUqIHggPSBhcmdzWzBdOwogICAgICAgaWYgKCF4LT5pc1N0cmluZygpKQogICAgICAgICByZXR1
cm4geDsKLSAgICAgIGVsc2UgeworCiAgICAgICAgIFVTdHJpbmcgcyA9IHgtPnRvU3RyaW5nKGV4
ZWMpOwotICAgICAgICAKKwogICAgICAgICBpbnQgc291cmNlSWQ7CiAgICAgICAgIGludCBlcnJM
aW5lOwogICAgICAgICBVU3RyaW5nIGVyck1zZzsKQEAgLTc1MiwxNCArNzIxLDE1IEBACiAgICAg
ICAgIC8vIGVudGVyIGEgbmV3IGV4ZWN1dGlvbiBjb250ZXh0CiAgICAgICAgIGlmICghc3dpdGNo
R2xvYmFsKQogICAgICAgICAgICAgZXhlYy0+ZHluYW1pY0dsb2JhbE9iamVjdCgpLT50ZWFyT2Zm
QWN0aXZhdGlvbihleGVjKTsKLSAgICAgICAgCisKICAgICAgICAgSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCA9IHN3aXRjaEdsb2JhbCA/IHN0YXRpY19jYXN0PEpTR2xvYmFsT2JqZWN0Kj4o
dGhpc09iaikgOiBleGVjLT5keW5hbWljR2xvYmFsT2JqZWN0KCk7CiAgICAgICAgIEV4ZWNTdGF0
ZSBuZXdFeGVjKGdsb2JhbE9iamVjdCwgZXZhbE5vZGUuZ2V0KCksIGV4ZWMpOwotICAgICAgICAg
IAorCiAgICAgICAgIGlmIChzd2l0Y2hHbG9iYWwpIHsKICAgICAgICAgICAgIG5ld0V4ZWMucHVz
aFNjb3BlKHRoaXNPYmopOwogICAgICAgICAgICAgbmV3RXhlYy5zZXRWYXJpYWJsZU9iamVjdChz
dGF0aWNfY2FzdDxKU0dsb2JhbE9iamVjdCo+KHRoaXNPYmopKTsKICAgICAgICAgfQorCiAgICAg
ICAgIEpTVmFsdWUqIHZhbHVlID0gZXZhbE5vZGUtPmV4ZWN1dGUoJm5ld0V4ZWMpOwogICAgICAg
ICBpZiAoc3dpdGNoR2xvYmFsKQogICAgICAgICAgICAgbmV3RXhlYy5wb3BTY29wZSgpOwpAQCAt
NzY4LDM3ICs3MzgsNzQgQEAKICAgICAgICAgICAgIGV4ZWMtPnNldEV4Y2VwdGlvbih2YWx1ZSk7
CiAgICAgICAgICAgICByZXR1cm4gdmFsdWU7CiAgICAgICAgIH0KKwogICAgICAgICByZXR1cm4g
dmFsdWUgPyB2YWx1ZSA6IGpzVW5kZWZpbmVkKCk7Ci0gICAgICB9Ci0gICAgfQotICBjYXNlIFBh
cnNlSW50OgotICAgIHJlcyA9IGpzTnVtYmVyKHBhcnNlSW50KGFyZ3NbMF0tPnRvU3RyaW5nKGV4
ZWMpLCBhcmdzWzFdLT50b0ludDMyKGV4ZWMpKSk7Ci0gICAgYnJlYWs7Ci0gIGNhc2UgUGFyc2VG
bG9hdDoKLSAgICByZXMgPSBqc051bWJlcihwYXJzZUZsb2F0KGFyZ3NbMF0tPnRvU3RyaW5nKGV4
ZWMpKSk7Ci0gICAgYnJlYWs7Ci0gIGNhc2UgSXNOYU46Ci0gICAgcmVzID0ganNCb29sZWFuKGlz
bmFuKGFyZ3NbMF0tPnRvTnVtYmVyKGV4ZWMpKSk7Ci0gICAgYnJlYWs7Ci0gIGNhc2UgSXNGaW5p
dGU6IHsKK30KKworSlNWYWx1ZSogZ2xvYmFsRnVuY1BhcnNlSW50KEV4ZWNTdGF0ZSogZXhlYywg
SlNPYmplY3QqLCBjb25zdCBMaXN0JiBhcmdzKQoreworICAgIHJldHVybiBqc051bWJlcihwYXJz
ZUludChhcmdzWzBdLT50b1N0cmluZyhleGVjKSwgYXJnc1sxXS0+dG9JbnQzMihleGVjKSkpOwor
fQorCitKU1ZhbHVlKiBnbG9iYWxGdW5jUGFyc2VGbG9hdChFeGVjU3RhdGUqIGV4ZWMsIEpTT2Jq
ZWN0KiwgY29uc3QgTGlzdCYgYXJncykKK3sKKyAgICByZXR1cm4ganNOdW1iZXIocGFyc2VGbG9h
dChhcmdzWzBdLT50b1N0cmluZyhleGVjKSkpOworfQorCitKU1ZhbHVlKiBnbG9iYWxGdW5jSXNO
YU4oRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIGNvbnN0IExpc3QmIGFyZ3MpCit7CisgICAg
cmV0dXJuIGpzQm9vbGVhbihpc25hbihhcmdzWzBdLT50b051bWJlcihleGVjKSkpOworfQorCitK
U1ZhbHVlKiBnbG9iYWxGdW5jSXNGaW5pdGUoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIGNv
bnN0IExpc3QmIGFyZ3MpCit7CiAgICAgZG91YmxlIG4gPSBhcmdzWzBdLT50b051bWJlcihleGVj
KTsKLSAgICByZXMgPSBqc0Jvb2xlYW4oIWlzbmFuKG4pICYmICFpc2luZihuKSk7Ci0gICAgYnJl
YWs7Ci0gIH0KLSAgY2FzZSBEZWNvZGVVUkk6Ci0gICAgcmVzID0gZGVjb2RlKGV4ZWMsIGFyZ3Ms
IGRvX25vdF91bmVzY2FwZV93aGVuX2RlY29kaW5nX1VSSSwgdHJ1ZSk7Ci0gICAgYnJlYWs7Ci0g
IGNhc2UgRGVjb2RlVVJJQ29tcG9uZW50OgotICAgIHJlcyA9IGRlY29kZShleGVjLCBhcmdzLCAi
IiwgdHJ1ZSk7Ci0gICAgYnJlYWs7Ci0gIGNhc2UgRW5jb2RlVVJJOgotICAgIHJlcyA9IGVuY29k
ZShleGVjLCBhcmdzLCBkb19ub3RfZXNjYXBlX3doZW5fZW5jb2RpbmdfVVJJKTsKLSAgICBicmVh
azsKLSAgY2FzZSBFbmNvZGVVUklDb21wb25lbnQ6Ci0gICAgcmVzID0gZW5jb2RlKGV4ZWMsIGFy
Z3MsIGRvX25vdF9lc2NhcGVfd2hlbl9lbmNvZGluZ19VUklfY29tcG9uZW50KTsKLSAgICBicmVh
azsKLSAgY2FzZSBFc2NhcGU6Ci0gICAgeworICAgIHJldHVybiBqc0Jvb2xlYW4oIWlzbmFuKG4p
ICYmICFpc2luZihuKSk7Cit9CisKK0pTVmFsdWUqIGdsb2JhbEZ1bmNEZWNvZGVVUkkoRXhlY1N0
YXRlKiBleGVjLCBKU09iamVjdCosIGNvbnN0IExpc3QmIGFyZ3MpCit7CisgICAgc3RhdGljIGNv
bnN0IGNoYXIgZG9fbm90X3VuZXNjYXBlX3doZW5fZGVjb2RpbmdfVVJJW10gPQorICAgICAgICAi
IyQmKywvOjs9P0AiOworCisgICAgcmV0dXJuIGRlY29kZShleGVjLCBhcmdzLCBkb19ub3RfdW5l
c2NhcGVfd2hlbl9kZWNvZGluZ19VUkksIHRydWUpOworfQorCitKU1ZhbHVlKiBnbG9iYWxGdW5j
RGVjb2RlVVJJQ29tcG9uZW50KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBjb25zdCBMaXN0
JiBhcmdzKQoreworICAgIHJldHVybiBkZWNvZGUoZXhlYywgYXJncywgIiIsIHRydWUpOworfQor
CitKU1ZhbHVlKiBnbG9iYWxGdW5jRW5jb2RlVVJJKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3Qq
LCBjb25zdCBMaXN0JiBhcmdzKQoreworICAgIHN0YXRpYyBjb25zdCBjaGFyIGRvX25vdF9lc2Nh
cGVfd2hlbl9lbmNvZGluZ19VUklbXSA9CisgICAgICAgICJBQkNERUZHSElKS0xNTk9QUVJTVFVW
V1hZWiIKKyAgICAgICAgImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6IgorICAgICAgICAiMDEy
MzQ1Njc4OSIKKyAgICAgICAgIiEjJCYnKCkqKywtLi86Oz0/QF9+IjsKKworICAgIHJldHVybiBl
bmNvZGUoZXhlYywgYXJncywgZG9fbm90X2VzY2FwZV93aGVuX2VuY29kaW5nX1VSSSk7Cit9CisK
K0pTVmFsdWUqIGdsb2JhbEZ1bmNFbmNvZGVVUklDb21wb25lbnQoRXhlY1N0YXRlKiBleGVjLCBK
U09iamVjdCosIGNvbnN0IExpc3QmIGFyZ3MpCit7CisgICAgc3RhdGljIGNvbnN0IGNoYXIgZG9f
bm90X2VzY2FwZV93aGVuX2VuY29kaW5nX1VSSV9jb21wb25lbnRbXSA9CisgICAgICAgICJBQkNE
RUZHSElKS0xNTk9QUVJTVFVWV1hZWiIKKyAgICAgICAgImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3
eHl6IgorICAgICAgICAiMDEyMzQ1Njc4OSIKKyAgICAgICAgIiEnKCkqLS5ffiI7CisKKyAgICBy
ZXR1cm4gZW5jb2RlKGV4ZWMsIGFyZ3MsIGRvX25vdF9lc2NhcGVfd2hlbl9lbmNvZGluZ19VUklf
Y29tcG9uZW50KTsKK30KKworSlNWYWx1ZSogZ2xvYmFsRnVuY0VzY2FwZShFeGVjU3RhdGUqIGV4
ZWMsIEpTT2JqZWN0KiwgY29uc3QgTGlzdCYgYXJncykKK3sKKyAgICBzdGF0aWMgY29uc3QgY2hh
ciBkb19ub3RfZXNjYXBlW10gPQorICAgICAgICAiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoi
CisgICAgICAgICJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eiIKKyAgICAgICAgIjAxMjM0NTY3
ODkiCisgICAgICAgICIqKy0uL0BfIjsKKwogICAgICAgVVN0cmluZyByID0gIiIsIHMsIHN0ciA9
IGFyZ3NbMF0tPnRvU3RyaW5nKGV4ZWMpOwogICAgICAgY29uc3QgVUNoYXIqIGMgPSBzdHIuZGF0
YSgpOwogICAgICAgZm9yIChpbnQgayA9IDA7IGsgPCBzdHIuc2l6ZSgpOyBrKyssIGMrKykgewpA
QCAtODA3LDM1ICs4MTQsMzMgQEAKICAgICAgICAgICBjaGFyIHRtcFs3XTsKICAgICAgICAgICBz
cHJpbnRmKHRtcCwgIiUldSUwNFgiLCB1KTsKICAgICAgICAgICBzID0gVVN0cmluZyh0bXApOwot
ICAgICAgICB9IGVsc2UgaWYgKHUgIT0gMCAmJiBzdHJjaHIoZG9fbm90X2VzY2FwZSwgKGNoYXIp
dSkpIHsKKyAgICAgICAgfSBlbHNlIGlmICh1ICE9IDAgJiYgc3RyY2hyKGRvX25vdF9lc2NhcGUs
IChjaGFyKXUpKQogICAgICAgICAgIHMgPSBVU3RyaW5nKGMsIDEpOwotICAgICAgICB9IGVsc2Ug
eworICAgICAgICBlbHNlIHsKICAgICAgICAgICBjaGFyIHRtcFs0XTsKICAgICAgICAgICBzcHJp
bnRmKHRtcCwgIiUlJTAyWCIsIHUpOwogICAgICAgICAgIHMgPSBVU3RyaW5nKHRtcCk7CiAgICAg
ICAgIH0KICAgICAgICAgciArPSBzOwogICAgICAgfQotICAgICAgcmVzID0ganNTdHJpbmcocik7
Ci0gICAgICBicmVhazsKLSAgICB9Ci0gIGNhc2UgVW5Fc2NhcGU6Ci0gICAgeworCisgICAgcmV0
dXJuIGpzU3RyaW5nKHIpOworfQorCitKU1ZhbHVlKiBnbG9iYWxGdW5jVW5Fc2NhcGUoRXhlY1N0
YXRlKiBleGVjLCBKU09iamVjdCosIGNvbnN0IExpc3QmIGFyZ3MpCit7CiAgICAgICBVU3RyaW5n
IHMgPSAiIiwgc3RyID0gYXJnc1swXS0+dG9TdHJpbmcoZXhlYyk7CiAgICAgICBpbnQgayA9IDAs
IGxlbiA9IHN0ci5zaXplKCk7CiAgICAgICB3aGlsZSAoayA8IGxlbikgewogICAgICAgICBjb25z
dCBVQ2hhciogYyA9IHN0ci5kYXRhKCkgKyBrOwogICAgICAgICBVQ2hhciB1OwotICAgICAgICBp
ZiAoKmMgPT0gVUNoYXIoJyUnKSAmJiBrIDw9IGxlbiAtIDYgJiYgKihjKzEpID09IFVDaGFyKCd1
JykpIHsKLSAgICAgICAgICBpZiAoTGV4ZXI6OmlzSGV4RGlnaXQoKGMrMiktPnVjKSAmJiBMZXhl
cjo6aXNIZXhEaWdpdCgoYyszKS0+dWMpICYmCi0gICAgICAgICAgICAgIExleGVyOjppc0hleERp
Z2l0KChjKzQpLT51YykgJiYgTGV4ZXI6OmlzSGV4RGlnaXQoKGMrNSktPnVjKSkgewotICAgICAg
ICAgIHUgPSBMZXhlcjo6Y29udmVydFVuaWNvZGUoKGMrMiktPnVjLCAoYyszKS0+dWMsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYys0KS0+dWMsIChjKzUpLT51Yyk7Cisg
ICAgICAgIGlmICgqYyA9PSBVQ2hhcignJScpICYmIGsgPD0gbGVuIC0gNiAmJiAqKGMgKyAxKSA9
PSBVQ2hhcigndScpKSB7CisgICAgICAgICAgICBpZiAoTGV4ZXI6OmlzSGV4RGlnaXQoKGMgKyAy
KS0+dWMpICYmIExleGVyOjppc0hleERpZ2l0KChjICsgMyktPnVjKSAmJiBMZXhlcjo6aXNIZXhE
aWdpdCgoYyArIDQpLT51YykgJiYgTGV4ZXI6OmlzSGV4RGlnaXQoKGMgKyA1KS0+dWMpKSB7Cisg
ICAgICAgICAgICAgICAgdSA9IExleGVyOjpjb252ZXJ0VW5pY29kZSgoYyArIDIpLT51YywgKGMg
KyAzKS0+dWMsIChjICsgNCktPnVjLCAoYyArIDUpLT51Yyk7CiAgICAgICAgICAgYyA9ICZ1Owog
ICAgICAgICAgIGsgKz0gNTsKICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAoKmMgPT0g
VUNoYXIoJyUnKSAmJiBrIDw9IGxlbiAtIDMgJiYKLSAgICAgICAgICAgICAgICAgICBMZXhlcjo6
aXNIZXhEaWdpdCgoYysxKS0+dWMpICYmIExleGVyOjppc0hleERpZ2l0KChjKzIpLT51YykpIHsK
KyAgICAgICAgfSBlbHNlIGlmICgqYyA9PSBVQ2hhcignJScpICYmIGsgPD0gbGVuIC0gMyAmJiBM
ZXhlcjo6aXNIZXhEaWdpdCgoYyArIDEpLT51YykgJiYgTGV4ZXI6OmlzSGV4RGlnaXQoKGMgKyAy
KS0+dWMpKSB7CiAgICAgICAgICAgdSA9IFVDaGFyKExleGVyOjpjb252ZXJ0SGV4KChjKzEpLT51
YywgKGMrMiktPnVjKSk7CiAgICAgICAgICAgYyA9ICZ1OwogICAgICAgICAgIGsgKz0gMjsKQEAg
LTg0MywxOSArODQ4LDE4IEBACiAgICAgICAgIGsrKzsKICAgICAgICAgcyArPSBVU3RyaW5nKGMs
IDEpOwogICAgICAgfQotICAgICAgcmVzID0ganNTdHJpbmcocyk7Ci0gICAgICBicmVhazsKLSAg
ICB9CisKKyAgICByZXR1cm4ganNTdHJpbmcocyk7Cit9CisKICNpZm5kZWYgTkRFQlVHCi0gIGNh
c2UgS0pTUHJpbnQ6CitKU1ZhbHVlKiBnbG9iYWxGdW5jS0pTUHJpbnQoRXhlY1N0YXRlKiBleGVj
LCBKU09iamVjdCosIGNvbnN0IExpc3QmIGFyZ3MpCit7CiAgICAgcHV0cyhhcmdzWzBdLT50b1N0
cmluZyhleGVjKS5hc2NpaSgpKTsKLSAgICBicmVhazsKKyAgICByZXR1cm4ganNVbmRlZmluZWQo
KTsKK30KICNlbmRpZgotICB9CiAKLSAgcmV0dXJuIHJlczsKLX0KLQogLy8gLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tIFByb3RvdHlwZUZ1bmN0aW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KIAogUHJvdG90eXBlRnVuY3Rpb246OlByb3RvdHlwZUZ1bmN0aW9uKEV4ZWNT
dGF0ZSogZXhlYywgaW50IGxlbiwgY29uc3QgSWRlbnRpZmllciYgbmFtZSwgSlNNZW1iZXJGdW5j
dGlvbiBmdW5jdGlvbikKQEAgLTg2Niw2ICs4NzAsMTQgQEAKICAgICBwdXQoZXhlYywgZXhlYy0+
cHJvcGVydHlOYW1lcygpLmxlbmd0aCwganNOdW1iZXIobGVuKSwgRG9udERlbGV0ZSB8IFJlYWRP
bmx5IHwgRG9udEVudW0pOwogfQogCitQcm90b3R5cGVGdW5jdGlvbjo6UHJvdG90eXBlRnVuY3Rp
b24oRXhlY1N0YXRlKiBleGVjLCBGdW5jdGlvblByb3RvdHlwZSogZnVuY3Rpb25Qcm90b3R5cGUs
IGludCBsZW4sIGNvbnN0IElkZW50aWZpZXImIG5hbWUsIEpTTWVtYmVyRnVuY3Rpb24gZnVuY3Rp
b24pCisgICAgOiBJbnRlcm5hbEZ1bmN0aW9uSW1wKGZ1bmN0aW9uUHJvdG90eXBlLCBuYW1lKQor
ICAgICwgbV9mdW5jdGlvbihmdW5jdGlvbikKK3sKKyAgICBBU1NFUlRfQVJHKGZ1bmN0aW9uLCBm
dW5jdGlvbik7CisgICAgcHV0KGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgsIGpz
TnVtYmVyKGxlbiksIERvbnREZWxldGUgfCBSZWFkT25seSB8IERvbnRFbnVtKTsKK30KKwogSlNW
YWx1ZSogUHJvdG90eXBlRnVuY3Rpb246OmNhbGxBc0Z1bmN0aW9uKEV4ZWNTdGF0ZSogZXhlYywg
SlNPYmplY3QqIHRoaXNPYmosIGNvbnN0IExpc3QmIGFyZ3MpCiB7CiAgICAgcmV0dXJuIG1fZnVu
Y3Rpb24oZXhlYywgdGhpc09iaiwgYXJncyk7CkluZGV4OiBranMvYm9vbF9vYmplY3QuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBranMvYm9vbF9vYmplY3QuaAkocmV2aXNpb24gMjk1NDEpCisrKyBranMvYm9v
bF9vYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMSw3ICsxLDYgQEAKLS8vIC0qLSBjLWJhc2lj
LW9mZnNldDogMiAtKi0KIC8qCi0gKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEtERSBsaWJy
YXJpZXMKICAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMCBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBr
ZGUub3JnKQorICogIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCkBAIC0yOSw5ICsyOCw5IEBACiAKICAgY2xhc3Mg
Qm9vbGVhbkluc3RhbmNlIDogcHVibGljIEpTV3JhcHBlck9iamVjdCB7CiAgIHB1YmxpYzoKLSAg
ICBCb29sZWFuSW5zdGFuY2UoSlNPYmplY3QgKnByb3RvKTsKKyAgICAgICAgQm9vbGVhbkluc3Rh
bmNlKEpTT2JqZWN0KiBwcm90byk7CiAKLSAgICB2aXJ0dWFsIGNvbnN0IENsYXNzSW5mbyAqY2xh
c3NJbmZvKCkgY29uc3QgeyByZXR1cm4gJmluZm87IH0KKyAgICAgICAgdmlydHVhbCBjb25zdCBD
bGFzc0luZm8qIGNsYXNzSW5mbygpIGNvbnN0IHsgcmV0dXJuICZpbmZvOyB9CiAgICAgc3RhdGlj
IGNvbnN0IENsYXNzSW5mbyBpbmZvOwogICB9OwogCkBAIC00Myw0NSArNDIsMjkgQEAKICAgICov
CiAgIGNsYXNzIEJvb2xlYW5Qcm90b3R5cGUgOiBwdWJsaWMgQm9vbGVhbkluc3RhbmNlIHsKICAg
cHVibGljOgotICAgIEJvb2xlYW5Qcm90b3R5cGUoRXhlY1N0YXRlICpleGVjLAotICAgICAgICAg
ICAgICAgICAgICAgICAgT2JqZWN0UHJvdG90eXBlICpvYmplY3RQcm90bywKLSAgICAgICAgICAg
ICAgICAgICAgICAgIEZ1bmN0aW9uUHJvdG90eXBlICpmdW5jUHJvdG8pOworICAgICAgICBCb29s
ZWFuUHJvdG90eXBlKEV4ZWNTdGF0ZSosIE9iamVjdFByb3RvdHlwZSosIEZ1bmN0aW9uUHJvdG90
eXBlKik7CiAgIH07CiAKLSAgLyoqCi0gICAqIEBpbnRlcm5hbAotICAgKgotICAgKiBDbGFzcyB0
byBpbXBsZW1lbnQgYWxsIG1ldGhvZHMgdGhhdCBhcmUgcHJvcGVydGllcyBvZiB0aGUKLSAgICog
Qm9vbGVhbi5wcm90b3R5cGUgb2JqZWN0Ci0gICAqLwotICBjbGFzcyBCb29sZWFuUHJvdG9GdW5j
IDogcHVibGljIEludGVybmFsRnVuY3Rpb25JbXAgewotICBwdWJsaWM6Ci0gICAgQm9vbGVhblBy
b3RvRnVuYyhFeGVjU3RhdGUqLCBGdW5jdGlvblByb3RvdHlwZSosIGludCBpLCBpbnQgbGVuLCBj
b25zdCBJZGVudGlmaWVyJik7CisgICAgLy8gRnVuY3Rpb25zCisgICAgSlNWYWx1ZSogYm9vbGVh
blByb3RvRnVuY1RvU3RyaW5nKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgY29uc3QgTGlzdCYpOwor
ICAgIEpTVmFsdWUqIGJvb2xlYW5Qcm90b0Z1bmNWYWx1ZU9mKEV4ZWNTdGF0ZSosIEpTT2JqZWN0
KiwgY29uc3QgTGlzdCYpOwogCi0gICAgdmlydHVhbCBKU1ZhbHVlICpjYWxsQXNGdW5jdGlvbihF
eGVjU3RhdGUgKmV4ZWMsIEpTT2JqZWN0ICp0aGlzT2JqLCBjb25zdCBMaXN0ICZhcmdzKTsKIAot
ICAgIGVudW0geyBUb1N0cmluZywgVmFsdWVPZiB9OwotICBwcml2YXRlOgotICAgIGludCBpZDsK
LSAgfTsKLQogICAvKioKICAgICogQGludGVybmFsCiAgICAqCiAgICAqIFRoZSBpbml0aWFsIHZh
bHVlIG9mIHRoZSB0aGUgZ2xvYmFsIHZhcmlhYmxlJ3MgIkJvb2xlYW4iIHByb3BlcnR5CiAgICAq
LwogICBjbGFzcyBCb29sZWFuT2JqZWN0SW1wIDogcHVibGljIEludGVybmFsRnVuY3Rpb25JbXAg
ewotICAgIGZyaWVuZCBjbGFzcyBCb29sZWFuUHJvdG9GdW5jOwogICBwdWJsaWM6Ci0gICAgQm9v
bGVhbk9iamVjdEltcChFeGVjU3RhdGUgKmV4ZWMsIEZ1bmN0aW9uUHJvdG90eXBlICpmdW5jUHJv
dG8sCi0gICAgICAgICAgICAgICAgICAgICBCb29sZWFuUHJvdG90eXBlICpib29sZWFuUHJvdG8p
OworICAgICAgICBCb29sZWFuT2JqZWN0SW1wKEV4ZWNTdGF0ZSosIEZ1bmN0aW9uUHJvdG90eXBl
KiwgQm9vbGVhblByb3RvdHlwZSopOwogCiAgICAgdmlydHVhbCBib29sIGltcGxlbWVudHNDb25z
dHJ1Y3QoKSBjb25zdDsKLSAgICB2aXJ0dWFsIEpTT2JqZWN0ICpjb25zdHJ1Y3QoRXhlY1N0YXRl
ICpleGVjLCBjb25zdCBMaXN0ICZhcmdzKTsKKyAgICAgICAgdmlydHVhbCBKU09iamVjdCogY29u
c3RydWN0KEV4ZWNTdGF0ZSosIGNvbnN0IExpc3QmKTsKIAotICAgIHZpcnR1YWwgSlNWYWx1ZSAq
Y2FsbEFzRnVuY3Rpb24oRXhlY1N0YXRlICpleGVjLCBKU09iamVjdCAqdGhpc09iaiwgY29uc3Qg
TGlzdCAmYXJncyk7CisgICAgICAgIHZpcnR1YWwgSlNWYWx1ZSogY2FsbEFzRnVuY3Rpb24oRXhl
Y1N0YXRlKiwgSlNPYmplY3QqLCBjb25zdCBMaXN0Jik7CiAgIH07CiAKLX0gLy8gbmFtZXNwYWNl
Cit9IC8vIG5hbWVzcGFjZSBLSlMKIAotI2VuZGlmCisjZW5kaWYgLy8gQk9PTF9PQkpFQ1RfSF8K
SW5kZXg6IGtqcy9vYmplY3Rfb2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga2pzL29iamVjdF9vYmpl
Y3QuaAkocmV2aXNpb24gMjk1NDEpCisrKyBranMvb2JqZWN0X29iamVjdC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDcgKzEsNiBAQAotLy8gLSotIGMtYmFzaWMtb2Zmc2V0OiAyIC0qLQogLyoKLSAq
ICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgS0RFIGxpYnJhcmllcwogICogIENvcHlyaWdodCAo
QykgMTk5OS0yMDAwIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCisgKiAgQ29weXJpZ2h0
IChDKSAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiAgVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgog
ICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQ
dWJsaWMKQEAgLTI2LDggKzI1LDYgQEAKIAogbmFtZXNwYWNlIEtKUyB7CiAKLSAgY2xhc3MgRnVu
Y3Rpb25Qcm90b3R5cGU7Ci0KICAgLyoqCiAgICAqIEBpbnRlcm5hbAogICAgKgpAQCAtMzYsMjcg
KzMzLDIwIEBACiAgICAqLwogICBjbGFzcyBPYmplY3RQcm90b3R5cGUgOiBwdWJsaWMgSlNPYmpl
Y3QgewogICBwdWJsaWM6Ci0gICAgT2JqZWN0UHJvdG90eXBlKEV4ZWNTdGF0ZSAqZXhlYywgRnVu
Y3Rpb25Qcm90b3R5cGUgKmZ1bmNQcm90byk7CisgICAgICAgIE9iamVjdFByb3RvdHlwZShFeGVj
U3RhdGUqLCBGdW5jdGlvblByb3RvdHlwZSopOwogICB9OwogCi0gIC8qKgotICAgKiBAaW50ZXJu
YWwKLSAgICoKLSAgICogQ2xhc3MgdG8gaW1wbGVtZW50IGFsbCBtZXRob2RzIHRoYXQgYXJlIHBy
b3BlcnRpZXMgb2YgdGhlCi0gICAqIE9iamVjdC5wcm90b3R5cGUgb2JqZWN0Ci0gICAqLwotICBj
bGFzcyBPYmplY3RQcm90b0Z1bmMgOiBwdWJsaWMgSW50ZXJuYWxGdW5jdGlvbkltcCB7Ci0gIHB1
YmxpYzoKLSAgICBPYmplY3RQcm90b0Z1bmMoRXhlY1N0YXRlKiBleGVjLCBGdW5jdGlvblByb3Rv
dHlwZSogZnVuY1Byb3RvLCBpbnQgaSwgaW50IGxlbiwgY29uc3QgSWRlbnRpZmllciYpOworICAg
IEpTVmFsdWUqIG9iamVjdFByb3RvRnVuY1ZhbHVlT2YoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBj
b25zdCBMaXN0Jik7CisgICAgSlNWYWx1ZSogb2JqZWN0UHJvdG9GdW5jSGFzT3duUHJvcGVydHko
RXhlY1N0YXRlKiwgSlNPYmplY3QqLCBjb25zdCBMaXN0Jik7CisgICAgSlNWYWx1ZSogb2JqZWN0
UHJvdG9GdW5jSXNQcm90b3R5cGVPZihFeGVjU3RhdGUqLCBKU09iamVjdCosIGNvbnN0IExpc3Qm
KTsKKyAgICBKU1ZhbHVlKiBvYmplY3RQcm90b0Z1bmNEZWZpbmVHZXR0ZXIoRXhlY1N0YXRlKiwg
SlNPYmplY3QqLCBjb25zdCBMaXN0Jik7CisgICAgSlNWYWx1ZSogb2JqZWN0UHJvdG9GdW5jRGVm
aW5lU2V0dGVyKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgY29uc3QgTGlzdCYpOworICAgIEpTVmFs
dWUqIG9iamVjdFByb3RvRnVuY0xvb2t1cEdldHRlcihFeGVjU3RhdGUqLCBKU09iamVjdCosIGNv
bnN0IExpc3QmKTsKKyAgICBKU1ZhbHVlKiBvYmplY3RQcm90b0Z1bmNMb29rdXBTZXR0ZXIoRXhl
Y1N0YXRlKiwgSlNPYmplY3QqLCBjb25zdCBMaXN0Jik7CisgICAgSlNWYWx1ZSogb2JqZWN0UHJv
dG9GdW5jUHJvcGVydHlJc0VudW1lcmFibGUoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBjb25zdCBM
aXN0Jik7CisgICAgSlNWYWx1ZSogb2JqZWN0UHJvdG9GdW5jVG9Mb2NhbGVTdHJpbmcoRXhlY1N0
YXRlKiwgSlNPYmplY3QqLCBjb25zdCBMaXN0Jik7CisgICAgSlNWYWx1ZSogb2JqZWN0UHJvdG9G
dW5jVG9TdHJpbmcoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBjb25zdCBMaXN0Jik7CiAKLSAgICB2
aXJ0dWFsIEpTVmFsdWUgKmNhbGxBc0Z1bmN0aW9uKEV4ZWNTdGF0ZSAqLCBKU09iamVjdCAqLCBj
b25zdCBMaXN0ICZhcmdzKTsKLQotICAgIGVudW0geyBUb1N0cmluZywgVG9Mb2NhbGVTdHJpbmcs
IFZhbHVlT2YsIEhhc093blByb3BlcnR5LCBJc1Byb3RvdHlwZU9mLCBQcm9wZXJ0eUlzRW51bWVy
YWJsZSwKLSAgICAgICAgICAgRGVmaW5lR2V0dGVyLCBEZWZpbmVTZXR0ZXIsIExvb2t1cEdldHRl
ciwgTG9va3VwU2V0dGVyIH07Ci0gIHByaXZhdGU6Ci0gICAgaW50IGlkOwotICB9OwotCiAgIC8q
KgogICAgKiBAaW50ZXJuYWwKICAgICoKQEAgLTY0LDE2ICs1NCwxMyBAQAogICAgKi8KICAgY2xh
c3MgT2JqZWN0T2JqZWN0SW1wIDogcHVibGljIEludGVybmFsRnVuY3Rpb25JbXAgewogICBwdWJs
aWM6CisgICAgICAgIE9iamVjdE9iamVjdEltcChFeGVjU3RhdGUqLCBPYmplY3RQcm90b3R5cGUq
LCBGdW5jdGlvblByb3RvdHlwZSopOwogCi0gICAgT2JqZWN0T2JqZWN0SW1wKEV4ZWNTdGF0ZSAq
ZXhlYywKLSAgICAgICAgICAgICAgICAgICAgT2JqZWN0UHJvdG90eXBlICpvYmpQcm90bywKLSAg
ICAgICAgICAgICAgICAgICAgRnVuY3Rpb25Qcm90b3R5cGUgKmZ1bmNQcm90byk7Ci0KICAgICB2
aXJ0dWFsIGJvb2wgaW1wbGVtZW50c0NvbnN0cnVjdCgpIGNvbnN0OwotICAgIHZpcnR1YWwgSlNP
YmplY3QgKmNvbnN0cnVjdChFeGVjU3RhdGUgKiwgY29uc3QgTGlzdCAmYXJncyk7Ci0gICAgdmly
dHVhbCBKU1ZhbHVlICpjYWxsQXNGdW5jdGlvbihFeGVjU3RhdGUgKiwgSlNPYmplY3QgKiwgY29u
c3QgTGlzdCAmYXJncyk7CisgICAgICAgIHZpcnR1YWwgSlNPYmplY3QqIGNvbnN0cnVjdChFeGVj
U3RhdGUqLCBjb25zdCBMaXN0Jik7CisgICAgICAgIHZpcnR1YWwgSlNWYWx1ZSogY2FsbEFzRnVu
Y3Rpb24oRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBjb25zdCBMaXN0Jik7CiAgIH07CiAKLX0gLy8g
bmFtZXNwYWNlCit9IC8vIG5hbWVzcGFjZSBLSlMKIAotI2VuZGlmCisjZW5kaWYgLy8gX09CSkVD
VF9PQkpFQ1RfSF8KSW5kZXg6IGtqcy9mdW5jdGlvbl9vYmplY3QuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IGtqcy9mdW5jdGlvbl9vYmplY3QuY3BwCShyZXZpc2lvbiAyOTU0MSkKKysrIGtqcy9mdW5jdGlv
bl9vYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNiwyMyArMzYsMjAgQEAKICNpbmNsdWRl
IDxzdHJpbmcuaD4KICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgogCi11c2luZyBuYW1lc3Bh
Y2UgS0pTOworbmFtZXNwYWNlIEtKUyB7CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLSBGdW5jdGlvblByb3RvdHlwZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLUZ1bmN0
aW9uUHJvdG90eXBlOjpGdW5jdGlvblByb3RvdHlwZShFeGVjU3RhdGUgKmV4ZWMpCitGdW5jdGlv
blByb3RvdHlwZTo6RnVuY3Rpb25Qcm90b3R5cGUoRXhlY1N0YXRlKiBleGVjKQogewogICBzdGF0
aWMgY29uc3QgSWRlbnRpZmllciogYXBwbHlQcm9wZXJ0eU5hbWUgPSBuZXcgSWRlbnRpZmllcigi
YXBwbHkiKTsKICAgc3RhdGljIGNvbnN0IElkZW50aWZpZXIqIGNhbGxQcm9wZXJ0eU5hbWUgPSBu
ZXcgSWRlbnRpZmllcigiY2FsbCIpOwogCiAgIHB1dERpcmVjdChleGVjLT5wcm9wZXJ0eU5hbWVz
KCkubGVuZ3RoLCBqc051bWJlcigwKSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5IHwgRG9udEVudW0p
OwotICBwdXREaXJlY3RGdW5jdGlvbihuZXcgRnVuY3Rpb25Qcm90b0Z1bmMoZXhlYywgdGhpcywg
RnVuY3Rpb25Qcm90b0Z1bmM6OlRvU3RyaW5nLCAwLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkudG9T
dHJpbmcpLCBEb250RW51bSk7Ci0gIHB1dERpcmVjdEZ1bmN0aW9uKG5ldyBGdW5jdGlvblByb3Rv
RnVuYyhleGVjLCB0aGlzLCBGdW5jdGlvblByb3RvRnVuYzo6QXBwbHksIDIsICphcHBseVByb3Bl
cnR5TmFtZSksIERvbnRFbnVtKTsKLSAgcHV0RGlyZWN0RnVuY3Rpb24obmV3IEZ1bmN0aW9uUHJv
dG9GdW5jKGV4ZWMsIHRoaXMsIEZ1bmN0aW9uUHJvdG9GdW5jOjpDYWxsLCAxLCAqY2FsbFByb3Bl
cnR5TmFtZSksIERvbnRFbnVtKTsKLX0KIAotRnVuY3Rpb25Qcm90b3R5cGU6On5GdW5jdGlvblBy
b3RvdHlwZSgpCi17CisgIHB1dERpcmVjdEZ1bmN0aW9uKG5ldyBQcm90b3R5cGVGdW5jdGlvbihl
eGVjLCB0aGlzLCAwLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkudG9TdHJpbmcsIGZ1bmN0aW9uUHJv
dG9GdW5jVG9TdHJpbmcpLCBEb250RW51bSk7CisgIHB1dERpcmVjdEZ1bmN0aW9uKG5ldyBQcm90
b3R5cGVGdW5jdGlvbihleGVjLCB0aGlzLCAyLCAqYXBwbHlQcm9wZXJ0eU5hbWUsIGZ1bmN0aW9u
UHJvdG9GdW5jQXBwbHkpLCBEb250RW51bSk7CisgIHB1dERpcmVjdEZ1bmN0aW9uKG5ldyBQcm90
b3R5cGVGdW5jdGlvbihleGVjLCB0aGlzLCAxLCAqY2FsbFByb3BlcnR5TmFtZSwgZnVuY3Rpb25Q
cm90b0Z1bmNDYWxsKSwgRG9udEVudW0pOwogfQogCiAvLyBFQ01BIDE1LjMuNApAQCAtNjMsNDYg
KzYwLDM1IEBACiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBGdW5jdGlvblBy
b3RvRnVuYyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLUZ1bmN0aW9uUHJvdG9GdW5jOjpG
dW5jdGlvblByb3RvRnVuYyhFeGVjU3RhdGUqIGV4ZWMsIEZ1bmN0aW9uUHJvdG90eXBlKiBmdW5j
UHJvdG8sIGludCBpLCBpbnQgbGVuLCBjb25zdCBJZGVudGlmaWVyJiBuYW1lKQotICA6IEludGVy
bmFsRnVuY3Rpb25JbXAoZnVuY1Byb3RvLCBuYW1lKQotICAsIGlkKGkpCitKU1ZhbHVlKiBmdW5j
dGlvblByb3RvRnVuY1RvU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHRoaXNPYmos
IGNvbnN0IExpc3QmKQogewotICBwdXREaXJlY3QoZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0
aCwgbGVuLCBEb250RGVsZXRlIHwgUmVhZE9ubHkgfCBEb250RW51bSk7Ci19Ci0KLUpTVmFsdWUq
IEZ1bmN0aW9uUHJvdG9GdW5jOjpjYWxsQXNGdW5jdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpTT2Jq
ZWN0KiB0aGlzT2JqLCBjb25zdCBMaXN0ICZhcmdzKQotewotICBKU1ZhbHVlKiByZXN1bHQgPSBO
VUxMOwotCi0gIHN3aXRjaCAoaWQpIHsKLSAgY2FzZSBUb1N0cmluZzoKICAgICBpZiAoIXRoaXNP
YmogfHwgIXRoaXNPYmotPmluaGVyaXRzKCZJbnRlcm5hbEZ1bmN0aW9uSW1wOjppbmZvKSkgewog
I2lmbmRlZiBOREVCVUcKICAgICAgIGZwcmludGYoc3RkZXJyLCJhdHRlbXB0ZWQgdG9TdHJpbmco
KSBjYWxsIG9uIG51bGwgb3Igbm9uLWZ1bmN0aW9uIG9iamVjdFxuIik7CiAjZW5kaWYKICAgICAg
IHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvcik7CiAgICAgfQorCiAgICAgaWYgKHRo
aXNPYmotPmluaGVyaXRzKCZGdW5jdGlvbkltcDo6aW5mbykpIHsKLSAgICAgICAgRnVuY3Rpb25J
bXAgKmZpID0gc3RhdGljX2Nhc3Q8RnVuY3Rpb25JbXAqPih0aGlzT2JqKTsKLSAgICAgICAgcmV0
dXJuIGpzU3RyaW5nKCJmdW5jdGlvbiAiICsgZmktPmZ1bmN0aW9uTmFtZSgpLnVzdHJpbmcoKSAr
ICIoIiArCi0gICAgICAgICAgICAgICAgICAgICAgICBmaS0+Ym9keS0+cGFyYW1TdHJpbmcoKSAr
ICIpICIgKyBmaS0+Ym9keS0+dG9TdHJpbmcoKSk7Ci0gICAgIH0gZWxzZSBpZiAodGhpc09iai0+
aW5oZXJpdHMoJkludGVybmFsRnVuY3Rpb25JbXA6OmluZm8pICYmCi0gICAgICAgICAgICAgICAg
IXN0YXRpY19jYXN0PEludGVybmFsRnVuY3Rpb25JbXAqPih0aGlzT2JqKS0+ZnVuY3Rpb25OYW1l
KCkuaXNOdWxsKCkpIHsKLSAgICAgICByZXN1bHQgPSBqc1N0cmluZygiXG5mdW5jdGlvbiAiICsg
c3RhdGljX2Nhc3Q8SW50ZXJuYWxGdW5jdGlvbkltcCo+KHRoaXNPYmopLT5mdW5jdGlvbk5hbWUo
KS51c3RyaW5nKCkgKyAiKCkge1xuIgotICAgICAgICAgICAgICAgICAgICAgICAiICAgIFtuYXRp
dmUgY29kZV1cbn1cbiIpOwotICAgIH0gZWxzZSB7Ci0gICAgICByZXN1bHQgPSBqc1N0cmluZygi
W2Z1bmN0aW9uXSIpOworICAgICAgICBGdW5jdGlvbkltcCogZmkgPSBzdGF0aWNfY2FzdDxGdW5j
dGlvbkltcCo+KHRoaXNPYmopOworICAgICAgICByZXR1cm4ganNTdHJpbmcoImZ1bmN0aW9uICIg
KyBmaS0+ZnVuY3Rpb25OYW1lKCkudXN0cmluZygpICsgIigiICsgZmktPmJvZHktPnBhcmFtU3Ry
aW5nKCkgKyAiKSAiICsgZmktPmJvZHktPnRvU3RyaW5nKCkpOwogICAgIH0KLSAgICBicmVhazsK
LSAgY2FzZSBBcHBseTogewotICAgIEpTVmFsdWUgKnRoaXNBcmcgPSBhcmdzWzBdOwotICAgIEpT
VmFsdWUgKmFyZ0FycmF5ID0gYXJnc1sxXTsKLSAgICBKU09iamVjdCAqZnVuYyA9IHRoaXNPYmo7
CiAKLSAgICBpZiAoIWZ1bmMtPmltcGxlbWVudHNDYWxsKCkpCisgICAgaWYgKHRoaXNPYmotPmlu
aGVyaXRzKCZJbnRlcm5hbEZ1bmN0aW9uSW1wOjppbmZvKSAmJiAhc3RhdGljX2Nhc3Q8SW50ZXJu
YWxGdW5jdGlvbkltcCo+KHRoaXNPYmopLT5mdW5jdGlvbk5hbWUoKS5pc051bGwoKSkKKyAgICAg
ICAgcmV0dXJuIGpzU3RyaW5nKCJcbmZ1bmN0aW9uICIgKyBzdGF0aWNfY2FzdDxJbnRlcm5hbEZ1
bmN0aW9uSW1wKj4odGhpc09iaiktPmZ1bmN0aW9uTmFtZSgpLnVzdHJpbmcoKSArICIoKSB7XG4g
ICAgW25hdGl2ZSBjb2RlXVxufVxuIik7CisKKyAgICByZXR1cm4ganNTdHJpbmcoIltmdW5jdGlv
bl0iKTsKK30KKworSlNWYWx1ZSogZnVuY3Rpb25Qcm90b0Z1bmNBcHBseShFeGVjU3RhdGUqIGV4
ZWMsIEpTT2JqZWN0KiB0aGlzT2JqLCBjb25zdCBMaXN0JiBhcmdzKQoreworICAgIGlmICghdGhp
c09iai0+aW1wbGVtZW50c0NhbGwoKSkKICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5
cGVFcnJvcik7CiAKLSAgICBKU09iamVjdCAqYXBwbHlUaGlzOworICAgIEpTVmFsdWUqIHRoaXNB
cmcgPSBhcmdzWzBdOworICAgIEpTVmFsdWUqIGFyZ0FycmF5ID0gYXJnc1sxXTsKKworICAgIEpT
T2JqZWN0KiBhcHBseVRoaXM7CiAgICAgaWYgKHRoaXNBcmctPmlzVW5kZWZpbmVkT3JOdWxsKCkp
CiAgICAgICBhcHBseVRoaXMgPSBleGVjLT5keW5hbWljR2xvYmFsT2JqZWN0KCk7CiAgICAgZWxz
ZQpAQCAtMTExLDI4ICs5NywyOCBAQAogICAgIExpc3QgYXBwbHlBcmdzOwogICAgIGlmICghYXJn
QXJyYXktPmlzVW5kZWZpbmVkT3JOdWxsKCkpIHsKICAgICAgIGlmIChhcmdBcnJheS0+aXNPYmpl
Y3QoKSAmJgotICAgICAgICAgICAoc3RhdGljX2Nhc3Q8SlNPYmplY3QgKj4oYXJnQXJyYXkpLT5p
bmhlcml0cygmQXJyYXlJbnN0YW5jZTo6aW5mbykgfHwKLSAgICAgICAgICAgIHN0YXRpY19jYXN0
PEpTT2JqZWN0ICo+KGFyZ0FycmF5KS0+aW5oZXJpdHMoJkFyZ3VtZW50czo6aW5mbykpKSB7Cisg
ICAgICAgICAgICAoc3RhdGljX2Nhc3Q8SlNPYmplY3QqPihhcmdBcnJheSktPmluaGVyaXRzKCZB
cnJheUluc3RhbmNlOjppbmZvKSB8fAorICAgICAgICAgICAgIHN0YXRpY19jYXN0PEpTT2JqZWN0
Kj4oYXJnQXJyYXkpLT5pbmhlcml0cygmQXJndW1lbnRzOjppbmZvKSkpIHsKIAotICAgICAgICBK
U09iamVjdCAqYXJnQXJyYXlPYmogPSBzdGF0aWNfY2FzdDxKU09iamVjdCAqPihhcmdBcnJheSk7
CisgICAgICAgICAgICBKU09iamVjdCogYXJnQXJyYXlPYmogPSBzdGF0aWNfY2FzdDxKU09iamVj
dCo+KGFyZ0FycmF5KTsKICAgICAgICAgdW5zaWduZWQgaW50IGxlbmd0aCA9IGFyZ0FycmF5T2Jq
LT5nZXQoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCktPnRvVUludDMyKGV4ZWMp
OwogICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKQotICAg
ICAgICAgIGFwcGx5QXJncy5hcHBlbmQoYXJnQXJyYXlPYmotPmdldChleGVjLGkpKTsKLSAgICAg
IH0KLSAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBhcHBseUFyZ3MuYXBwZW5kKGFyZ0FycmF5
T2JqLT5nZXQoZXhlYywgaSkpOworICAgICAgICB9IGVsc2UKICAgICAgICAgcmV0dXJuIHRocm93
RXJyb3IoZXhlYywgVHlwZUVycm9yKTsKICAgICB9Ci0gICAgcmVzdWx0ID0gZnVuYy0+Y2FsbChl
eGVjLGFwcGx5VGhpcyxhcHBseUFyZ3MpOwotICAgIH0KLSAgICBicmVhazsKLSAgY2FzZSBDYWxs
OiB7Ci0gICAgSlNWYWx1ZSAqdGhpc0FyZyA9IGFyZ3NbMF07Ci0gICAgSlNPYmplY3QgKmZ1bmMg
PSB0aGlzT2JqOwogCi0gICAgaWYgKCFmdW5jLT5pbXBsZW1lbnRzQ2FsbCgpKQorICAgIHJldHVy
biB0aGlzT2JqLT5jYWxsKGV4ZWMsIGFwcGx5VGhpcywgYXBwbHlBcmdzKTsKK30KKworSlNWYWx1
ZSogZnVuY3Rpb25Qcm90b0Z1bmNDYWxsKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHRoaXNP
YmosIGNvbnN0IExpc3QmIGFyZ3MpCit7CisgICAgaWYgKCF0aGlzT2JqLT5pbXBsZW1lbnRzQ2Fs
bCgpKQogICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9yKTsKIAotICAgIEpT
T2JqZWN0ICpjYWxsVGhpczsKKyAgICBKU1ZhbHVlKiB0aGlzQXJnID0gYXJnc1swXTsKKworICAg
IEpTT2JqZWN0KiBjYWxsVGhpczsKICAgICBpZiAodGhpc0FyZy0+aXNVbmRlZmluZWRPck51bGwo
KSkKICAgICAgIGNhbGxUaGlzID0gZXhlYy0+ZHluYW1pY0dsb2JhbE9iamVjdCgpOwogICAgIGVs
c2UKQEAgLTE0MCwxMiArMTI2LDcgQEAKIAogICAgIExpc3QgYXJnc1RhaWw7CiAgICAgYXJncy5n
ZXRTbGljZSgxLCBhcmdzVGFpbCk7Ci0gICAgcmVzdWx0ID0gZnVuYy0+Y2FsbChleGVjLCBjYWxs
VGhpcywgYXJnc1RhaWwpOwotICAgIH0KLSAgICBicmVhazsKLSAgfQotCi0gIHJldHVybiByZXN1
bHQ7CisgICAgcmV0dXJuIHRoaXNPYmotPmNhbGwoZXhlYywgY2FsbFRoaXMsIGFyZ3NUYWlsKTsK
IH0KIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEZ1bmN0aW9uT2JqZWN0SW1w
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTE1OSwxMCArMTQwLDYgQEAKICAgcHV0
RGlyZWN0KGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgsIGpzTnVtYmVyKDEpLCBSZWFkT25s
eXxEb250RGVsZXRlfERvbnRFbnVtKTsKIH0KIAotRnVuY3Rpb25PYmplY3RJbXA6On5GdW5jdGlv
bk9iamVjdEltcCgpCi17Ci19Ci0KIGJvb2wgRnVuY3Rpb25PYmplY3RJbXA6OmltcGxlbWVudHND
b25zdHJ1Y3QoKSBjb25zdAogewogICByZXR1cm4gdHJ1ZTsKQEAgLTI2NCwzICsyNDEsNSBAQAog
ewogICByZXR1cm4gY29uc3RydWN0KGV4ZWMsIGFyZ3MpOwogfQorCit9IC8vIG5hbWVzcGFjZSBL
SlMKSW5kZXg6IGtqcy9lcnJvcl9vYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtqcy9lcnJvcl9v
YmplY3QuY3BwCShyZXZpc2lvbiAyOTU0MSkKKysrIGtqcy9lcnJvcl9vYmplY3QuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00MSwyNSArNDEsMTggQEAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLSBFcnJvclByb3RvdHlwZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIC8v
IEVDTUEgMTUuOS40Ci1FcnJvclByb3RvdHlwZTo6RXJyb3JQcm90b3R5cGUoRXhlY1N0YXRlKiBl
eGVjLCBPYmplY3RQcm90b3R5cGUqIG9iamVjdFByb3RvLCBGdW5jdGlvblByb3RvdHlwZSogZnVu
Y1Byb3RvKQotICAgIDogSlNPYmplY3Qob2JqZWN0UHJvdG8pCitFcnJvclByb3RvdHlwZTo6RXJy
b3JQcm90b3R5cGUoRXhlY1N0YXRlKiBleGVjLCBPYmplY3RQcm90b3R5cGUqIG9iamVjdFByb3Rv
dHlwZSwgRnVuY3Rpb25Qcm90b3R5cGUqIGZ1bmN0aW9uUHJvdG90eXBlKQorICAgIDogSlNPYmpl
Y3Qob2JqZWN0UHJvdG90eXBlKQogewogICAgIC8vIFRoZSBjb25zdHJ1Y3RvciB3aWxsIGJlIGFk
ZGVkIGxhdGVyIGluIEVycm9yT2JqZWN0SW1wJ3MgY29uc3RydWN0b3IKIAogICAgIHB1dChleGVj
LCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubmFtZSwganNTdHJpbmcoIkVycm9yIiksIERvbnRFbnVt
KTsKICAgICBwdXQoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLm1lc3NhZ2UsIGpzU3RyaW5n
KCJVbmtub3duIGVycm9yIiksIERvbnRFbnVtKTsKLSAgICBwdXREaXJlY3RGdW5jdGlvbihuZXcg
RXJyb3JQcm90b0Z1bmNUb1N0cmluZyhleGVjLCBmdW5jUHJvdG8pLCBEb250RW51bSk7Ci19CiAK
LS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBFcnJvclByb3RvRnVuYyAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLUVycm9yUHJvdG9GdW5jVG9TdHJpbmc6OkVycm9yUHJv
dG9GdW5jVG9TdHJpbmcoRXhlY1N0YXRlKiBleGVjLCBGdW5jdGlvblByb3RvdHlwZSogZnVuY1By
b3RvKQotICAgIDogSW50ZXJuYWxGdW5jdGlvbkltcChmdW5jUHJvdG8sIGV4ZWMtPnByb3BlcnR5
TmFtZXMoKS50b1N0cmluZykKLXsKLSAgICBwdXREaXJlY3QoZXhlYy0+cHJvcGVydHlOYW1lcygp
Lmxlbmd0aCwganNOdW1iZXIoMCksIERvbnREZWxldGV8UmVhZE9ubHl8RG9udEVudW0pOworICAg
IHB1dERpcmVjdEZ1bmN0aW9uKG5ldyBQcm90b3R5cGVGdW5jdGlvbihleGVjLCBmdW5jdGlvblBy
b3RvdHlwZSwgMCwgZXhlYy0+cHJvcGVydHlOYW1lcygpLnRvU3RyaW5nLCBlcnJvclByb3RvRnVu
Y1RvU3RyaW5nKSwgRG9udEVudW0pOwogfQogCi1KU1ZhbHVlKiBFcnJvclByb3RvRnVuY1RvU3Ry
aW5nOjpjYWxsQXNGdW5jdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiB0aGlzT2JqLCBj
b25zdCBMaXN0JikKK0pTVmFsdWUqIGVycm9yUHJvdG9GdW5jVG9TdHJpbmcoRXhlY1N0YXRlKiBl
eGVjLCBKU09iamVjdCogdGhpc09iaiwgY29uc3QgTGlzdCYpCiB7CiAgICAgVVN0cmluZyBzID0g
IkVycm9yIjsKIApJbmRleDoga2pzL2Jvb2xfb2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBranMv
Ym9vbF9vYmplY3QuY3BwCShyZXZpc2lvbiAyOTU0MSkKKysrIGtqcy9ib29sX29iamVjdC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEsOCArMSw2IEBACi0vLyAtKi0gYy1iYXNpYy1vZmZzZXQ6IDIg
LSotCiAvKgotICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBLREUgbGlicmFyaWVzCiAgKiAg
Q29weXJpZ2h0IChDKSAxOTk5LTIwMDAgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKLSAq
ICBDb3B5cmlnaHQgKEMpIDIwMDMgQXBwbGUgQ29tcHV0ZXIsIEluYy4KKyAqICBDb3B5cmlnaHQg
KEMpIDIwMDMsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqICBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5l
cmFsIFB1YmxpYwpAQCAtMjgsMTMgKzI2LDEzIEBACiAjaW5jbHVkZSAib3BlcmF0aW9ucy5oIgog
I2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CiAKLXVzaW5nIG5hbWVzcGFjZSBLSlM7CituYW1l
c3BhY2UgS0pTIHsKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEJvb2xlYW5J
bnN0YW5jZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogY29uc3QgQ2xhc3NJbmZvIEJv
b2xlYW5JbnN0YW5jZTo6aW5mbyA9IHsiQm9vbGVhbiIsIDAsIDB9OwogCi1Cb29sZWFuSW5zdGFu
Y2U6OkJvb2xlYW5JbnN0YW5jZShKU09iamVjdCAqcHJvdG8pCitCb29sZWFuSW5zdGFuY2U6OkJv
b2xlYW5JbnN0YW5jZShKU09iamVjdCogcHJvdG8pCiAgIDogSlNXcmFwcGVyT2JqZWN0KHByb3Rv
KQogewogfQpAQCAtNDMsNTIgKzQxLDUyIEBACiAKIC8vIEVDTUEgMTUuNi40CiAKLUJvb2xlYW5Q
cm90b3R5cGU6OkJvb2xlYW5Qcm90b3R5cGUoRXhlY1N0YXRlKiBleGVjLCBPYmplY3RQcm90b3R5
cGUqIG9iamVjdFByb3RvLCBGdW5jdGlvblByb3RvdHlwZSogZnVuY1Byb3RvKQotICA6IEJvb2xl
YW5JbnN0YW5jZShvYmplY3RQcm90bykKK0Jvb2xlYW5Qcm90b3R5cGU6OkJvb2xlYW5Qcm90b3R5
cGUoRXhlY1N0YXRlKiBleGVjLCBPYmplY3RQcm90b3R5cGUqIG9iamVjdFByb3RvdHlwZSwgRnVu
Y3Rpb25Qcm90b3R5cGUqIGZ1bmN0aW9uUHJvdG90eXBlKQorICAgIDogQm9vbGVhbkluc3RhbmNl
KG9iamVjdFByb3RvdHlwZSkKIHsKLSAgcHV0RGlyZWN0RnVuY3Rpb24obmV3IEJvb2xlYW5Qcm90
b0Z1bmMoZXhlYywgZnVuY1Byb3RvLCBCb29sZWFuUHJvdG9GdW5jOjpUb1N0cmluZywgMCwgZXhl
Yy0+cHJvcGVydHlOYW1lcygpLnRvU3RyaW5nKSwgRG9udEVudW0pOwotICBwdXREaXJlY3RGdW5j
dGlvbihuZXcgQm9vbGVhblByb3RvRnVuYyhleGVjLCBmdW5jUHJvdG8sIEJvb2xlYW5Qcm90b0Z1
bmM6OlZhbHVlT2YsIDAsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS52YWx1ZU9mKSwgIERvbnRFbnVt
KTsKICAgc2V0SW50ZXJuYWxWYWx1ZShqc0Jvb2xlYW4oZmFsc2UpKTsKKworICAgIHB1dERpcmVj
dEZ1bmN0aW9uKG5ldyBQcm90b3R5cGVGdW5jdGlvbihleGVjLCBmdW5jdGlvblByb3RvdHlwZSwg
MCwgZXhlYy0+cHJvcGVydHlOYW1lcygpLnRvU3RyaW5nLCBib29sZWFuUHJvdG9GdW5jVG9TdHJp
bmcpLCBEb250RW51bSk7CisgICAgcHV0RGlyZWN0RnVuY3Rpb24obmV3IFByb3RvdHlwZUZ1bmN0
aW9uKGV4ZWMsIGZ1bmN0aW9uUHJvdG90eXBlLCAwLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkudmFs
dWVPZiwgYm9vbGVhblByb3RvRnVuY1ZhbHVlT2YpLCBEb250RW51bSk7CiB9CiAKIAotLy8gLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEJvb2xlYW5Qcm90b0Z1bmMgLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBGdW5jdGlv
bnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotQm9vbGVhblByb3RvRnVuYzo6Qm9vbGVh
blByb3RvRnVuYyhFeGVjU3RhdGUqIGV4ZWMsIEZ1bmN0aW9uUHJvdG90eXBlKiBmdW5jUHJvdG8s
IGludCBpLCBpbnQgbGVuLCBjb25zdCBJZGVudGlmaWVyJiBuYW1lKQotICA6IEludGVybmFsRnVu
Y3Rpb25JbXAoZnVuY1Byb3RvLCBuYW1lKQotICAsIGlkKGkpCisvLyBFQ01BIDE1LjYuNC4yICsg
MTUuNi40LjMKKworSlNWYWx1ZSogYm9vbGVhblByb3RvRnVuY1RvU3RyaW5nKEV4ZWNTdGF0ZSog
ZXhlYywgSlNPYmplY3QqIHRoaXNPYmosIGNvbnN0IExpc3QmKQogewotICBwdXREaXJlY3QoZXhl
Yy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCwgbGVuLCBEb250RGVsZXRlfFJlYWRPbmx5fERvbnRF
bnVtKTsKLX0KKyAgICBpZiAoIXRoaXNPYmotPmluaGVyaXRzKCZCb29sZWFuSW5zdGFuY2U6Omlu
Zm8pKQorICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3IpOwogCisgICAg
SlNWYWx1ZSogdiA9IHN0YXRpY19jYXN0PEJvb2xlYW5JbnN0YW5jZSo+KHRoaXNPYmopLT5pbnRl
cm5hbFZhbHVlKCk7CisgICAgQVNTRVJUKHYpOwogCi0vLyBFQ01BIDE1LjYuNC4yICsgMTUuNi40
LjMKLUpTVmFsdWUgKkJvb2xlYW5Qcm90b0Z1bmM6OmNhbGxBc0Z1bmN0aW9uKEV4ZWNTdGF0ZSog
ZXhlYywgSlNPYmplY3QgKnRoaXNPYmosIGNvbnN0IExpc3QgJi8qYXJncyovKQorICAgIHJldHVy
biBqc1N0cmluZyh2LT50b1N0cmluZyhleGVjKSk7Cit9CitKU1ZhbHVlKiBib29sZWFuUHJvdG9G
dW5jVmFsdWVPZihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiB0aGlzT2JqLCBjb25zdCBMaXN0
JikKIHsKLSAgLy8gbm8gZ2VuZXJpYyBmdW5jdGlvbi4gInRoaXMiIGhhcyB0byBiZSBhIEJvb2xl
YW4gb2JqZWN0CiAgIGlmICghdGhpc09iai0+aW5oZXJpdHMoJkJvb2xlYW5JbnN0YW5jZTo6aW5m
bykpCiAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9yKTsKIAotICAvLyBleGVj
dXRlICJ0b1N0cmluZygpIiBvciAidmFsdWVPZigpIiwgcmVzcGVjdGl2ZWx5Ci0KLSAgSlNWYWx1
ZSAqdiA9IHN0YXRpY19jYXN0PEJvb2xlYW5JbnN0YW5jZSo+KHRoaXNPYmopLT5pbnRlcm5hbFZh
bHVlKCk7CisgICAgSlNWYWx1ZSogdiA9IHN0YXRpY19jYXN0PEJvb2xlYW5JbnN0YW5jZSo+KHRo
aXNPYmopLT5pbnRlcm5hbFZhbHVlKCk7CiAgIEFTU0VSVCh2KTsKIAotICBpZiAoaWQgPT0gVG9T
dHJpbmcpCi0gICAgcmV0dXJuIGpzU3RyaW5nKHYtPnRvU3RyaW5nKGV4ZWMpKTsKLSAgcmV0dXJu
IGpzQm9vbGVhbih2LT50b0Jvb2xlYW4oZXhlYykpOyAvKiBUT0RPOiBvcHRpbWl6ZSBmb3IgYm9v
bCBjYXNlICovCisgICAgLy8gVE9ETzogb3B0aW1pemUgZm9yIGJvb2wgY2FzZQorICAgIHJldHVy
biBqc0Jvb2xlYW4odi0+dG9Cb29sZWFuKGV4ZWMpKTsKIH0KIAogLy8gLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tIEJvb2xlYW5PYmplY3RJbXAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KIAogCi1Cb29sZWFuT2JqZWN0SW1wOjpCb29sZWFuT2JqZWN0SW1wKEV4ZWNTdGF0ZSog
ZXhlYywgRnVuY3Rpb25Qcm90b3R5cGUqIGZ1bmNQcm90bywgQm9vbGVhblByb3RvdHlwZSogYm9v
bGVhblByb3RvKQotICA6IEludGVybmFsRnVuY3Rpb25JbXAoZnVuY1Byb3RvKQorQm9vbGVhbk9i
amVjdEltcDo6Qm9vbGVhbk9iamVjdEltcChFeGVjU3RhdGUqIGV4ZWMsIEZ1bmN0aW9uUHJvdG90
eXBlKiBmdW5jdGlvblByb3RvdHlwZSwgQm9vbGVhblByb3RvdHlwZSogYm9vbGVhblByb3RvdHlw
ZSkKKyAgICA6IEludGVybmFsRnVuY3Rpb25JbXAoZnVuY3Rpb25Qcm90b3R5cGUpCiB7Ci0gIHB1
dERpcmVjdChleGVjLT5wcm9wZXJ0eU5hbWVzKCkucHJvdG90eXBlLCBib29sZWFuUHJvdG8sIERv
bnRFbnVtfERvbnREZWxldGV8UmVhZE9ubHkpOworICAgIHB1dERpcmVjdChleGVjLT5wcm9wZXJ0
eU5hbWVzKCkucHJvdG90eXBlLCBib29sZWFuUHJvdG90eXBlLCBEb250RW51bSB8IERvbnREZWxl
dGUgfCBSZWFkT25seSk7CiAKICAgLy8gbm8uIG9mIGFyZ3VtZW50cyBmb3IgY29uc3RydWN0b3IK
LSAgcHV0RGlyZWN0KGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgsIGpzTnVtYmVyKDEpLCBS
ZWFkT25seXxEb250RGVsZXRlfERvbnRFbnVtKTsKKyAgICBwdXREaXJlY3QoZXhlYy0+cHJvcGVy
dHlOYW1lcygpLmxlbmd0aCwganNOdW1iZXIoMSksIFJlYWRPbmx5IHwgRG9udERlbGV0ZSB8IERv
bnRFbnVtKTsKIH0KIAogCkBAIC05OCw5ICs5Niw5IEBACiB9CiAKIC8vIEVDTUEgMTUuNi4yCi1K
U09iamVjdCAqQm9vbGVhbk9iamVjdEltcDo6Y29uc3RydWN0KEV4ZWNTdGF0ZSAqZXhlYywgY29u
c3QgTGlzdCAmYXJncykKK0pTT2JqZWN0KiBCb29sZWFuT2JqZWN0SW1wOjpjb25zdHJ1Y3QoRXhl
Y1N0YXRlKiBleGVjLCBjb25zdCBMaXN0JiBhcmdzKQogewotICBCb29sZWFuSW5zdGFuY2UgKm9i
aihuZXcgQm9vbGVhbkluc3RhbmNlKGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+Ym9vbGVh
blByb3RvdHlwZSgpKSk7CisgICAgQm9vbGVhbkluc3RhbmNlKiBvYmoobmV3IEJvb2xlYW5JbnN0
YW5jZShleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPmJvb2xlYW5Qcm90b3R5cGUoKSkpOwog
CiAgIGJvb2wgYjsKICAgaWYgKGFyZ3Muc2l6ZSgpID4gMCkKQEAgLTEwOSwxNiArMTA3LDE1IEBA
CiAgICAgYiA9IGZhbHNlOwogCiAgIG9iai0+c2V0SW50ZXJuYWxWYWx1ZShqc0Jvb2xlYW4oYikp
OwotCiAgIHJldHVybiBvYmo7CiB9CiAKIC8vIEVDTUEgMTUuNi4xCi1KU1ZhbHVlICpCb29sZWFu
T2JqZWN0SW1wOjpjYWxsQXNGdW5jdGlvbihFeGVjU3RhdGUgKmV4ZWMsIEpTT2JqZWN0ICosIGNv
bnN0IExpc3QgJmFyZ3MpCitKU1ZhbHVlKiBCb29sZWFuT2JqZWN0SW1wOjpjYWxsQXNGdW5jdGlv
bihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgY29uc3QgTGlzdCYgYXJncykKIHsKICAgaWYg
KGFyZ3MuaXNFbXB0eSgpKQogICAgIHJldHVybiBqc0Jvb2xlYW4oZmFsc2UpOwotICBlbHNlCiAg
ICAgcmV0dXJuIGpzQm9vbGVhbihhcmdzWzBdLT50b0Jvb2xlYW4oZXhlYykpOyAvKiBUT0RPOiBv
cHRpbWl6ZSBmb3IgYm9vbCBjYXNlICovCiB9CiAKK30gLy8gbmFtZXNwYWNlIEtKUwpJbmRleDog
a2pzL251bWJlcl9vYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtqcy9udW1iZXJfb2JqZWN0LmNw
cAkocmV2aXNpb24gMjk1NDEpCisrKyBranMvbnVtYmVyX29iamVjdC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQxLDM1ICs0MSwzMCBAQAogICAgIDogSlNXcmFwcGVyT2JqZWN0KHByb3RvKQogewog
fQorCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gTnVtYmVyUHJvdG90eXBlIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiAvLyBFQ01BIDE1LjcuNAogCi1OdW1iZXJQcm90
b3R5cGU6Ok51bWJlclByb3RvdHlwZShFeGVjU3RhdGUqIGV4ZWMsIE9iamVjdFByb3RvdHlwZSog
b2JqUHJvdG8sIEZ1bmN0aW9uUHJvdG90eXBlKiBmdW5jUHJvdG8pCi0gICAgOiBOdW1iZXJJbnN0
YW5jZShvYmpQcm90bykKK051bWJlclByb3RvdHlwZTo6TnVtYmVyUHJvdG90eXBlKEV4ZWNTdGF0
ZSogZXhlYywgT2JqZWN0UHJvdG90eXBlKiBvYmplY3RQcm90b3R5cGUsIEZ1bmN0aW9uUHJvdG90
eXBlKiBmdW5jdGlvblByb3RvdHlwZSkKKyAgICA6IE51bWJlckluc3RhbmNlKG9iamVjdFByb3Rv
dHlwZSkKIHsKICAgICBzZXRJbnRlcm5hbFZhbHVlKGpzTnVtYmVyKDApKTsKIAogICAgIC8vIFRo
ZSBjb25zdHJ1Y3RvciB3aWxsIGJlIGFkZGVkIGxhdGVyLCBhZnRlciBOdW1iZXJPYmplY3RJbXAg
aGFzIGJlZW4gY29uc3RydWN0ZWQKIAotICAgIHB1dERpcmVjdEZ1bmN0aW9uKG5ldyBOdW1iZXJQ
cm90b0Z1bmMoZXhlYywgZnVuY1Byb3RvLCBOdW1iZXJQcm90b0Z1bmM6OlRvU3RyaW5nLCAgICAg
ICAxLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkudG9TdHJpbmcpLCBEb250RW51bSk7Ci0gICAgcHV0
RGlyZWN0RnVuY3Rpb24obmV3IE51bWJlclByb3RvRnVuYyhleGVjLCBmdW5jUHJvdG8sIE51bWJl
clByb3RvRnVuYzo6VG9Mb2NhbGVTdHJpbmcsIDAsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS50b0xv
Y2FsZVN0cmluZyksIERvbnRFbnVtKTsKLSAgICBwdXREaXJlY3RGdW5jdGlvbihuZXcgTnVtYmVy
UHJvdG9GdW5jKGV4ZWMsIGZ1bmNQcm90bywgTnVtYmVyUHJvdG9GdW5jOjpWYWx1ZU9mLCAgICAg
ICAgMCwgZXhlYy0+cHJvcGVydHlOYW1lcygpLnZhbHVlT2YpLCBEb250RW51bSk7Ci0gICAgcHV0
RGlyZWN0RnVuY3Rpb24obmV3IE51bWJlclByb3RvRnVuYyhleGVjLCBmdW5jUHJvdG8sIE51bWJl
clByb3RvRnVuYzo6VG9GaXhlZCwgICAgICAgIDEsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS50b0Zp
eGVkKSwgRG9udEVudW0pOwotICAgIHB1dERpcmVjdEZ1bmN0aW9uKG5ldyBOdW1iZXJQcm90b0Z1
bmMoZXhlYywgZnVuY1Byb3RvLCBOdW1iZXJQcm90b0Z1bmM6OlRvRXhwb25lbnRpYWwsICAxLCBl
eGVjLT5wcm9wZXJ0eU5hbWVzKCkudG9FeHBvbmVudGlhbCksIERvbnRFbnVtKTsKLSAgICBwdXRE
aXJlY3RGdW5jdGlvbihuZXcgTnVtYmVyUHJvdG9GdW5jKGV4ZWMsIGZ1bmNQcm90bywgTnVtYmVy
UHJvdG9GdW5jOjpUb1ByZWNpc2lvbiwgICAgMSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLnRvUHJl
Y2lzaW9uKSwgRG9udEVudW0pOworICAgIHB1dERpcmVjdEZ1bmN0aW9uKG5ldyBQcm90b3R5cGVG
dW5jdGlvbihleGVjLCBmdW5jdGlvblByb3RvdHlwZSwgMSwgZXhlYy0+cHJvcGVydHlOYW1lcygp
LnRvU3RyaW5nLCBudW1iZXJQcm90b0Z1bmNUb1N0cmluZyksIERvbnRFbnVtKTsKKyAgICBwdXRE
aXJlY3RGdW5jdGlvbihuZXcgUHJvdG90eXBlRnVuY3Rpb24oZXhlYywgZnVuY3Rpb25Qcm90b3R5
cGUsIDAsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS50b0xvY2FsZVN0cmluZywgbnVtYmVyUHJvdG9G
dW5jVG9Mb2NhbGVTdHJpbmcpLCBEb250RW51bSk7CisgICAgcHV0RGlyZWN0RnVuY3Rpb24obmV3
IFByb3RvdHlwZUZ1bmN0aW9uKGV4ZWMsIGZ1bmN0aW9uUHJvdG90eXBlLCAwLCBleGVjLT5wcm9w
ZXJ0eU5hbWVzKCkudmFsdWVPZiwgbnVtYmVyUHJvdG9GdW5jVmFsdWVPZiksIERvbnRFbnVtKTsK
KyAgICBwdXREaXJlY3RGdW5jdGlvbihuZXcgUHJvdG90eXBlRnVuY3Rpb24oZXhlYywgZnVuY3Rp
b25Qcm90b3R5cGUsIDEsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS50b0ZpeGVkLCBudW1iZXJQcm90
b0Z1bmNUb0ZpeGVkKSwgRG9udEVudW0pOworICAgIHB1dERpcmVjdEZ1bmN0aW9uKG5ldyBQcm90
b3R5cGVGdW5jdGlvbihleGVjLCBmdW5jdGlvblByb3RvdHlwZSwgMSwgZXhlYy0+cHJvcGVydHlO
YW1lcygpLnRvRXhwb25lbnRpYWwsIG51bWJlclByb3RvRnVuY1RvRXhwb25lbnRpYWwpLCBEb250
RW51bSk7CisgICAgcHV0RGlyZWN0RnVuY3Rpb24obmV3IFByb3RvdHlwZUZ1bmN0aW9uKGV4ZWMs
IGZ1bmN0aW9uUHJvdG90eXBlLCAxLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkudG9QcmVjaXNpb24s
IG51bWJlclByb3RvRnVuY1RvUHJlY2lzaW9uKSwgRG9udEVudW0pOwogfQogCisvLyAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRnVuY3Rpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQogCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gTnVtYmVyUHJvdG9GdW5j
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gRUNNQSAxNS43LjQuMiAtIDE1LjcuNC43
CiAKLU51bWJlclByb3RvRnVuYzo6TnVtYmVyUHJvdG9GdW5jKEV4ZWNTdGF0ZSogZXhlYywgRnVu
Y3Rpb25Qcm90b3R5cGUqIGZ1bmNQcm90bywgaW50IGksIGludCBsZW4sIGNvbnN0IElkZW50aWZp
ZXImIG5hbWUpCi0gICAgOiBJbnRlcm5hbEZ1bmN0aW9uSW1wKGZ1bmNQcm90bywgbmFtZSkKLSAg
ICAsIGlkKGkpCi17Ci0gICAgcHV0RGlyZWN0KGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgs
IGxlbiwgRG9udERlbGV0ZXxSZWFkT25seXxEb250RW51bSk7Ci19Ci0KIHN0YXRpYyBVU3RyaW5n
IGludGVnZXJfcGFydF9ub2V4cChkb3VibGUgZCkKIHsKICAgICBpbnQgZGVjaW1hbFBvaW50OwpA
QCAtMTQwLDggKzEzNSwxNCBAQAogICAgIHJldHVybiBzdGF0aWNfY2FzdDxkb3VibGU+KHJlc3Vs
dCk7CiB9CiAKLXN0YXRpYyBKU1ZhbHVlKiBudW1iZXJUb1N0cmluZyhFeGVjU3RhdGUqIGV4ZWMs
IEpTVmFsdWUqIHYsIGNvbnN0IExpc3QmIGFyZ3MpCisKK0pTVmFsdWUqIG51bWJlclByb3RvRnVu
Y1RvU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHRoaXNPYmosIGNvbnN0IExpc3Qm
IGFyZ3MpCiB7CisgICAgaWYgKCF0aGlzT2JqLT5pbmhlcml0cygmTnVtYmVySW5zdGFuY2U6Omlu
Zm8pKQorICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3IpOworCisgICAg
SlNWYWx1ZSogdiA9IHN0YXRpY19jYXN0PE51bWJlckluc3RhbmNlKj4odGhpc09iaiktPmludGVy
bmFsVmFsdWUoKTsKKwogICAgIGRvdWJsZSByYWRpeEFzRG91YmxlID0gYXJnc1swXS0+dG9JbnRl
Z2VyKGV4ZWMpOyAvLyBuYW4gLT4gMAogICAgIGlmIChyYWRpeEFzRG91YmxlID09IDEwIHx8IGFy
Z3NbMF0tPmlzVW5kZWZpbmVkKCkpCiAgICAgICAgIHJldHVybiBqc1N0cmluZyh2LT50b1N0cmlu
ZyhleGVjKSk7CkBAIC0yMDAsOCArMjAxLDMwIEBACiAgICAgcmV0dXJuIGpzU3RyaW5nKHN0YXJ0
T2ZSZXN1bHRTdHJpbmcpOwogfQogCi1zdGF0aWMgSlNWYWx1ZSogbnVtYmVyVG9GaXhlZChFeGVj
U3RhdGUqIGV4ZWMsIEpTVmFsdWUqIHYsIGNvbnN0IExpc3QmIGFyZ3MpCitKU1ZhbHVlKiBudW1i
ZXJQcm90b0Z1bmNUb0xvY2FsZVN0cmluZyhFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiB0aGlz
T2JqLCBjb25zdCBMaXN0JikKIHsKKyAgICBpZiAoIXRoaXNPYmotPmluaGVyaXRzKCZOdW1iZXJJ
bnN0YW5jZTo6aW5mbykpCisgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJv
cik7CisKKyAgICAvLyBUT0RPCisgICAgcmV0dXJuIGpzU3RyaW5nKHN0YXRpY19jYXN0PE51bWJl
ckluc3RhbmNlKj4odGhpc09iaiktPmludGVybmFsVmFsdWUoKS0+dG9TdHJpbmcoZXhlYykpOwor
fQorCitKU1ZhbHVlKiBudW1iZXJQcm90b0Z1bmNWYWx1ZU9mKEV4ZWNTdGF0ZSogZXhlYywgSlNP
YmplY3QqIHRoaXNPYmosIGNvbnN0IExpc3QmKQoreworICAgIGlmICghdGhpc09iai0+aW5oZXJp
dHMoJk51bWJlckluc3RhbmNlOjppbmZvKSkKKyAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhl
YywgVHlwZUVycm9yKTsKKworICAgIHJldHVybiBzdGF0aWNfY2FzdDxOdW1iZXJJbnN0YW5jZSo+
KHRoaXNPYmopLT5pbnRlcm5hbFZhbHVlKCktPnRvSlNOdW1iZXIoZXhlYyk7Cit9CisKK0pTVmFs
dWUqIG51bWJlclByb3RvRnVuY1RvRml4ZWQoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogdGhp
c09iaiwgY29uc3QgTGlzdCYgYXJncykKK3sKKyAgICBpZiAoIXRoaXNPYmotPmluaGVyaXRzKCZO
dW1iZXJJbnN0YW5jZTo6aW5mbykpCisgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5
cGVFcnJvcik7CisKKyAgICBKU1ZhbHVlKiB2ID0gc3RhdGljX2Nhc3Q8TnVtYmVySW5zdGFuY2Uq
Pih0aGlzT2JqKS0+aW50ZXJuYWxWYWx1ZSgpOworCiAgICAgSlNWYWx1ZSogZnJhY3Rpb25EaWdp
dHMgPSBhcmdzWzBdOwogICAgIGRvdWJsZSBkZiA9IGZyYWN0aW9uRGlnaXRzLT50b0ludGVnZXIo
ZXhlYyk7CiAgICAgaWYgKCEoZGYgPj0gMCAmJiBkZiA8PSAyMCkpCkBAIC0yODEsOCArMzA0LDEz
IEBACiAgICAgYnVmW2krK10gPSBzdGF0aWNfY2FzdDxjaGFyPignMCcgKyBleHBvbmVudGlhbCAl
IDEwKTsKIH0KIAotc3RhdGljIEpTVmFsdWUqIG51bWJlclRvRXhwb25lbnRpYWwoRXhlY1N0YXRl
KiBleGVjLCBKU1ZhbHVlKiB2LCBjb25zdCBMaXN0JiBhcmdzKQorSlNWYWx1ZSogbnVtYmVyUHJv
dG9GdW5jVG9FeHBvbmVudGlhbChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiB0aGlzT2JqLCBj
b25zdCBMaXN0JiBhcmdzKQogeworICAgIGlmICghdGhpc09iai0+aW5oZXJpdHMoJk51bWJlcklu
c3RhbmNlOjppbmZvKSkKKyAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9y
KTsKKworICAgIEpTVmFsdWUqIHYgPSBzdGF0aWNfY2FzdDxOdW1iZXJJbnN0YW5jZSo+KHRoaXNP
YmopLT5pbnRlcm5hbFZhbHVlKCk7CisKICAgICBkb3VibGUgeCA9IHYtPnRvTnVtYmVyKGV4ZWMp
OwogCiAgICAgaWYgKGlzbmFuKHgpIHx8IGlzaW5mKHgpKQpAQCAtMzQ2LDkgKzM3NCwxNCBAQAog
CiAgICAgcmV0dXJuIGpzU3RyaW5nKGJ1Zik7CiB9Ci0gICAgCi1zdGF0aWMgSlNWYWx1ZSogbnVt
YmVyVG9QcmVjaXNpb24oRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlKiB2LCBjb25zdCBMaXN0JiBh
cmdzKQorCitKU1ZhbHVlKiBudW1iZXJQcm90b0Z1bmNUb1ByZWNpc2lvbihFeGVjU3RhdGUqIGV4
ZWMsIEpTT2JqZWN0KiB0aGlzT2JqLCBjb25zdCBMaXN0JiBhcmdzKQogeworICAgIGlmICghdGhp
c09iai0+aW5oZXJpdHMoJk51bWJlckluc3RhbmNlOjppbmZvKSkKKyAgICAgICAgcmV0dXJuIHRo
cm93RXJyb3IoZXhlYywgVHlwZUVycm9yKTsKKworICAgIEpTVmFsdWUqIHYgPSBzdGF0aWNfY2Fz
dDxOdW1iZXJJbnN0YW5jZSo+KHRoaXNPYmopLT5pbnRlcm5hbFZhbHVlKCk7CisKICAgICBkb3Vi
bGUgZG91YmxlUHJlY2lzaW9uID0gYXJnc1swXS0+dG9JbnRlZ2VyUHJlc2VydmVOYU4oZXhlYyk7
CiAgICAgZG91YmxlIHggPSB2LT50b051bWJlcihleGVjKTsKICAgICBpZiAoYXJnc1swXS0+aXNV
bmRlZmluZWQoKSB8fCBpc25hbih4KSB8fCBpc2luZih4KSkKQEAgLTQwOSwzMSArNDQyLDYgQEAK
ICAgICByZXR1cm4ganNTdHJpbmcocyArICIwLiIgKyBjaGFyX3NlcXVlbmNlKCcwJywgLShlICsg
MSkpICsgbSk7CiB9CiAKLS8vIEVDTUEgMTUuNy40LjIgLSAxNS43LjQuNwotSlNWYWx1ZSogTnVt
YmVyUHJvdG9GdW5jOjpjYWxsQXNGdW5jdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiB0
aGlzT2JqLCBjb25zdCBMaXN0JiBhcmdzKQotewotICAgIC8vIG5vIGdlbmVyaWMgZnVuY3Rpb24u
ICJ0aGlzIiBoYXMgdG8gYmUgYSBOdW1iZXIgb2JqZWN0Ci0gICAgaWYgKCF0aGlzT2JqLT5pbmhl
cml0cygmTnVtYmVySW5zdGFuY2U6OmluZm8pKQotICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihl
eGVjLCBUeXBlRXJyb3IpOwotCi0gICAgSlNWYWx1ZSogdiA9IHN0YXRpY19jYXN0PE51bWJlcklu
c3RhbmNlKj4odGhpc09iaiktPmludGVybmFsVmFsdWUoKTsKLSAgICBzd2l0Y2ggKGlkKSB7Ci0g
ICAgY2FzZSBUb1N0cmluZzoKLSAgICAgICAgcmV0dXJuIG51bWJlclRvU3RyaW5nKGV4ZWMsIHYs
IGFyZ3MpOwotICAgIGNhc2UgVG9Mb2NhbGVTdHJpbmc6IC8qIFRPRE8gKi8KLSAgICAgICAgcmV0
dXJuIGpzU3RyaW5nKHYtPnRvU3RyaW5nKGV4ZWMpKTsKLSAgICBjYXNlIFZhbHVlT2Y6Ci0gICAg
ICAgIHJldHVybiB2LT50b0pTTnVtYmVyKGV4ZWMpOwotICAgIGNhc2UgVG9GaXhlZDoKLSAgICAg
ICAgcmV0dXJuIG51bWJlclRvRml4ZWQoZXhlYywgdiwgYXJncyk7Ci0gICAgY2FzZSBUb0V4cG9u
ZW50aWFsOgotICAgICAgICByZXR1cm4gbnVtYmVyVG9FeHBvbmVudGlhbChleGVjLCB2LCBhcmdz
KTsKLSAgICBjYXNlIFRvUHJlY2lzaW9uOgotICAgICAgICByZXR1cm4gbnVtYmVyVG9QcmVjaXNp
b24oZXhlYywgdiwgYXJncyk7Ci0gICAgfQotICAgIHJldHVybiAwOwotfQotCiAvLyAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gTnVtYmVyT2JqZWN0SW1wIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQogCiBjb25zdCBDbGFzc0luZm8gTnVtYmVyT2JqZWN0SW1wOjppbmZvID0g
eyAiRnVuY3Rpb24iLCAmSW50ZXJuYWxGdW5jdGlvbkltcDo6aW5mbywgJm51bWJlclRhYmxlIH07
CkluZGV4OiBDaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gQ2hhbmdlTG9nCShyZXZpc2lvbiAyOTU1
MikKKysrIENoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDg2IEBACisyMDA4LTAx
LTE2ICBTYW0gV2VpbmlnICA8c2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRml4IGZvciBodHRwOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNjkwMQorICAgICAgICBDb252ZXJ0IHJlbWFpbmluZyBKUyBmdW5j
dGlvbiBvYmplY3RzIHRvIHVzZSB0aGUgbmV3IFByb3RvdHlwZUZ1bmN0aW9uIGNsYXNzCisKKyAg
ICAgICAgLSBNb3ZlcyBCb29sZWFuLCBGdW5jdGlvbiwgUmVnRXhwLCBOdW1iZXIsIE9iamVjdCBh
bmQgR2xvYmFsIGZ1bmN0aW9ucyB0byB0aGVpcgorICAgICAgICAgIG93biBzdGF0aWMgZnVuY3Rp
b24gaW1wbGVtZW50YXRpb25zIHNvIHRoYXQgdGhleSBjYW4gYmUgdXNlZCB3aXRoIHRoZQorICAg
ICAgICAgIFByb3RvdHlwZUZ1bmN0aW9uIGNsYXNzLiAgU3VuU3BpZGVyIHNheXMgdGhpcyBpcyAx
LjAwM3ggYXMgZmFzdC4KKworICAgICAgICAqIGtqcy9KU0dsb2JhbE9iamVjdC5jcHA6CisgICAg
ICAgIChLSlM6OkpTR2xvYmFsT2JqZWN0OjpyZXNldCk6CisgICAgICAgICoga2pzL2FycmF5X29i
amVjdC5oOgorICAgICAgICAqIGtqcy9ib29sX29iamVjdC5jcHA6CisgICAgICAgIChLSlM6OkJv
b2xlYW5JbnN0YW5jZTo6Qm9vbGVhbkluc3RhbmNlKToKKyAgICAgICAgKEtKUzo6Qm9vbGVhblBy
b3RvdHlwZTo6Qm9vbGVhblByb3RvdHlwZSk6CisgICAgICAgIChLSlM6OmJvb2xlYW5Qcm90b0Z1
bmNUb1N0cmluZyk6CisgICAgICAgIChLSlM6OmJvb2xlYW5Qcm90b0Z1bmNWYWx1ZU9mKToKKyAg
ICAgICAgKEtKUzo6Qm9vbGVhbk9iamVjdEltcDo6Qm9vbGVhbk9iamVjdEltcCk6CisgICAgICAg
IChLSlM6OkJvb2xlYW5PYmplY3RJbXA6OmltcGxlbWVudHNDb25zdHJ1Y3QpOgorICAgICAgICAo
S0pTOjpCb29sZWFuT2JqZWN0SW1wOjpjb25zdHJ1Y3QpOgorICAgICAgICAoS0pTOjpCb29sZWFu
T2JqZWN0SW1wOjpjYWxsQXNGdW5jdGlvbik6CisgICAgICAgICoga2pzL2Jvb2xfb2JqZWN0Lmg6
CisgICAgICAgIChLSlM6OkJvb2xlYW5JbnN0YW5jZTo6Y2xhc3NJbmZvKToKKyAgICAgICAgKiBr
anMvZXJyb3Jfb2JqZWN0LmNwcDoKKyAgICAgICAgKEtKUzo6RXJyb3JQcm90b3R5cGU6OkVycm9y
UHJvdG90eXBlKToKKyAgICAgICAgKEtKUzo6ZXJyb3JQcm90b0Z1bmNUb1N0cmluZyk6CisgICAg
ICAgICoga2pzL2Vycm9yX29iamVjdC5oOgorICAgICAgICAqIGtqcy9mdW5jdGlvbi5jcHA6Cisg
ICAgICAgIChLSlM6Omdsb2JhbEZ1bmNFdmFsKToKKyAgICAgICAgKEtKUzo6Z2xvYmFsRnVuY1Bh
cnNlSW50KToKKyAgICAgICAgKEtKUzo6Z2xvYmFsRnVuY1BhcnNlRmxvYXQpOgorICAgICAgICAo
S0pTOjpnbG9iYWxGdW5jSXNOYU4pOgorICAgICAgICAoS0pTOjpnbG9iYWxGdW5jSXNGaW5pdGUp
OgorICAgICAgICAoS0pTOjpnbG9iYWxGdW5jRGVjb2RlVVJJKToKKyAgICAgICAgKEtKUzo6Z2xv
YmFsRnVuY0RlY29kZVVSSUNvbXBvbmVudCk6CisgICAgICAgIChLSlM6Omdsb2JhbEZ1bmNFbmNv
ZGVVUkkpOgorICAgICAgICAoS0pTOjpnbG9iYWxGdW5jRW5jb2RlVVJJQ29tcG9uZW50KToKKyAg
ICAgICAgKEtKUzo6Z2xvYmFsRnVuY0VzY2FwZSk6CisgICAgICAgIChLSlM6Omdsb2JhbEZ1bmNV
bkVzY2FwZSk6CisgICAgICAgIChLSlM6Omdsb2JhbEZ1bmNLSlNQcmludCk6CisgICAgICAgIChL
SlM6OlByb3RvdHlwZUZ1bmN0aW9uOjpQcm90b3R5cGVGdW5jdGlvbik6CisgICAgICAgICoga2pz
L2Z1bmN0aW9uLmg6CisgICAgICAgICoga2pzL2Z1bmN0aW9uX29iamVjdC5jcHA6CisgICAgICAg
IChLSlM6OkZ1bmN0aW9uUHJvdG90eXBlOjpGdW5jdGlvblByb3RvdHlwZSk6CisgICAgICAgIChL
SlM6OmZ1bmN0aW9uUHJvdG9GdW5jVG9TdHJpbmcpOgorICAgICAgICAoS0pTOjpmdW5jdGlvblBy
b3RvRnVuY0FwcGx5KToKKyAgICAgICAgKEtKUzo6ZnVuY3Rpb25Qcm90b0Z1bmNDYWxsKToKKyAg
ICAgICAgKiBranMvZnVuY3Rpb25fb2JqZWN0Lmg6CisgICAgICAgICoga2pzL251bWJlcl9vYmpl
Y3QuY3BwOgorICAgICAgICAoS0pTOjpOdW1iZXJQcm90b3R5cGU6Ok51bWJlclByb3RvdHlwZSk6
CisgICAgICAgIChLSlM6Om51bWJlclByb3RvRnVuY1RvU3RyaW5nKToKKyAgICAgICAgKEtKUzo6
bnVtYmVyUHJvdG9GdW5jVG9Mb2NhbGVTdHJpbmcpOgorICAgICAgICAoS0pTOjpudW1iZXJQcm90
b0Z1bmNWYWx1ZU9mKToKKyAgICAgICAgKEtKUzo6bnVtYmVyUHJvdG9GdW5jVG9GaXhlZCk6Cisg
ICAgICAgIChLSlM6Om51bWJlclByb3RvRnVuY1RvRXhwb25lbnRpYWwpOgorICAgICAgICAoS0pT
OjpudW1iZXJQcm90b0Z1bmNUb1ByZWNpc2lvbik6CisgICAgICAgICoga2pzL251bWJlcl9vYmpl
Y3QuaDoKKyAgICAgICAgKEtKUzo6TnVtYmVySW5zdGFuY2U6OmNsYXNzSW5mbyk6CisgICAgICAg
IChLSlM6Ok51bWJlck9iamVjdEltcDo6Y2xhc3NJbmZvKToKKyAgICAgICAgKEtKUzo6TnVtYmVy
T2JqZWN0SW1wOjopOgorICAgICAgICAqIGtqcy9vYmplY3Rfb2JqZWN0LmNwcDoKKyAgICAgICAg
KEtKUzo6T2JqZWN0UHJvdG90eXBlOjpPYmplY3RQcm90b3R5cGUpOgorICAgICAgICAoS0pTOjpv
YmplY3RQcm90b0Z1bmNWYWx1ZU9mKToKKyAgICAgICAgKEtKUzo6b2JqZWN0UHJvdG9GdW5jSGFz
T3duUHJvcGVydHkpOgorICAgICAgICAoS0pTOjpvYmplY3RQcm90b0Z1bmNJc1Byb3RvdHlwZU9m
KToKKyAgICAgICAgKEtKUzo6b2JqZWN0UHJvdG9GdW5jRGVmaW5lR2V0dGVyKToKKyAgICAgICAg
KEtKUzo6b2JqZWN0UHJvdG9GdW5jRGVmaW5lU2V0dGVyKToKKyAgICAgICAgKEtKUzo6b2JqZWN0
UHJvdG9GdW5jTG9va3VwR2V0dGVyKToKKyAgICAgICAgKEtKUzo6b2JqZWN0UHJvdG9GdW5jTG9v
a3VwU2V0dGVyKToKKyAgICAgICAgKEtKUzo6b2JqZWN0UHJvdG9GdW5jUHJvcGVydHlJc0VudW1l
cmFibGUpOgorICAgICAgICAoS0pTOjpvYmplY3RQcm90b0Z1bmNUb0xvY2FsZVN0cmluZyk6Cisg
ICAgICAgIChLSlM6Om9iamVjdFByb3RvRnVuY1RvU3RyaW5nKToKKyAgICAgICAgKiBranMvb2Jq
ZWN0X29iamVjdC5oOgorICAgICAgICAqIGtqcy9yZWdleHBfb2JqZWN0LmNwcDoKKyAgICAgICAg
KEtKUzo6UmVnRXhwUHJvdG90eXBlOjpSZWdFeHBQcm90b3R5cGUpOgorICAgICAgICAoS0pTOjpy
ZWdFeHBQcm90b0Z1bmNUZXN0KToKKyAgICAgICAgKEtKUzo6cmVnRXhwUHJvdG9GdW5jRXhlYyk6
CisgICAgICAgIChLSlM6OnJlZ0V4cFByb3RvRnVuY0NvbXBpbGUpOgorICAgICAgICAoS0pTOjpy
ZWdFeHBQcm90b0Z1bmNUb1N0cmluZyk6CisgICAgICAgICoga2pzL3JlZ2V4cF9vYmplY3QuaDoK
KwogMjAwOC0wMS0xNiAgQ2FtZXJvbiBad2FyaWNoICA8Y3d6d2FyaWNoQHV3YXRlcmxvby5jYT4K
IAogICAgICAgICBSZXZpZXdlZCBieSBNYWNpZWogJiBEYXJpbi4K
</data>

          </attachment>
      

    </bug>

</bugzilla>