<?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>151213</bug_id>
          
          <creation_ts>2015-11-12 12:42:00 -0800</creation_ts>
          <short_desc>B3 should be able to compile programs with CheckAdd, CheckSub, and CheckMul</short_desc>
          <delta_ts>2015-11-12 17:30:50 -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>WebKit Nightly Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</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>
          
          <blocked>151228</blocked>
    
    <blocked>150279</blocked>
    
    <blocked>151214</blocked>
    
    <blocked>151230</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>barraclough</cc>
    
    <cc>benjamin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>ggaren</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mhahnenb</cc>
    
    <cc>msaboff</cc>
    
    <cc>nrotem</cc>
    
    <cc>oliver</cc>
    
    <cc>saam</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1141593</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-11-12 12:42:00 -0800</bug_when>
    <thetext>Patch forthcoming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1141595</commentid>
    <comment_count>1</comment_count>
      <attachid>265423</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-11-12 12:43:32 -0800</bug_when>
    <thetext>Created attachment 265423
work in progress</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1141664</commentid>
    <comment_count>2</comment_count>
      <attachid>265443</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-11-12 15:38:10 -0800</bug_when>
    <thetext>Created attachment 265443
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1141665</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-11-12 15:40:38 -0800</bug_when>
    <thetext>Attachment 265443 did not pass style-queue:


ERROR: Source/JavaScriptCore/b3/testb3.cpp:2931:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:2932:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:2935:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
Total errors found: 3 in 5 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1141666</commentid>
    <comment_count>4</comment_count>
      <attachid>265444</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-11-12 15:45:32 -0800</bug_when>
    <thetext>Created attachment 265444
the patch

Improved patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1141667</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-11-12 15:47:58 -0800</bug_when>
    <thetext>Attachment 265444 did not pass style-queue:


ERROR: Source/JavaScriptCore/b3/testb3.cpp:2931:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:2932:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:2935:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
Total errors found: 3 in 6 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1141678</commentid>
    <comment_count>6</comment_count>
      <attachid>265444</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-11-12 15:59:49 -0800</bug_when>
    <thetext>Comment on attachment 265444
the patch

Going to add more to this patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1141699</commentid>
    <comment_count>7</comment_count>
      <attachid>265452</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-11-12 16:49:19 -0800</bug_when>
    <thetext>Created attachment 265452
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1141702</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-11-12 16:52:18 -0800</bug_when>
    <thetext>Attachment 265452 did not pass style-queue:


ERROR: Source/JavaScriptCore/b3/testb3.cpp:2931:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:2932:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:2935:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:2967:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:2968:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:2998:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:2999:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:3029:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:3047:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:3056:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:3069:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:3070:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:3073:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:3105:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:3106:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:3141:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:3142:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:3172:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:3190:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:3199:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:3212:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:3213:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:3242:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:3243:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:3276:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:3277:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:3306:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:3307:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:3336:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:3354:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:3363:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
Total errors found: 31 in 15 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1141710</commentid>
    <comment_count>9</comment_count>
      <attachid>265452</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2015-11-12 17:23:03 -0800</bug_when>
    <thetext>Comment on attachment 265452
the patch

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

Gosh is this cool.

&gt; Source/JavaScriptCore/ChangeLog:22
&gt; +        Note that I had to convert CheckMul handling to always use a three-operand form. That&apos;s because
&gt; +        there is no other way to tell Air that we need the original value alive. This means that on X86
&gt; +        we&apos;ll emit an extra Move just before the checked mul. That&apos;s probably fine since that&apos;s
&gt; +        necessary anyway.

Aww, that sucks.

That move seems unavoidable in most cases though.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1141717</commentid>
    <comment_count>10</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-11-12 17:30:50 -0800</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/192400</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>265423</attachid>
            <date>2015-11-12 12:43:32 -0800</date>
            <delta_ts>2015-11-12 15:38:10 -0800</delta_ts>
            <desc>work in progress</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>8461</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIuY3BwCShyZXZpc2lv
biAxOTIzNzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDk3LDExICs0OTcsMTggQEAgcHJpdmF0ZToKICAgICAgICAgLy8g
bWVhbiBzb21ldGhpbmcgbGlrZToKICAgICAgICAgLy8gICAgIGIgPSBPcCBhCiAKKyAgICAgICAg
QXJnUHJvbWlzZSBhZGRyID0gbG9hZFByb21pc2UodmFsdWUpOworICAgICAgICBpZiAoaXNWYWxp
ZEZvcm0ob3Bjb2RlLCBhZGRyLmtpbmQoKSwgQXJnOjpUbXApKSB7CisgICAgICAgICAgICBhcHBl
bmQob3Bjb2RlLCBhZGRyLmNvbnN1bWUoKnRoaXMpLCByZXN1bHQpOworICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB9CisKICAgICAgICAgaWYgKGlzVmFsaWRGb3JtKG9wY29kZSwgQXJnOjpU
bXAsIEFyZzo6VG1wKSkgewogICAgICAgICAgICAgYXBwZW5kKG9wY29kZSwgdG1wKHZhbHVlKSwg
cmVzdWx0KTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCisgICAgICAgIEFTU0VS
VCh2YWx1ZS0+dHlwZSgpID09IG1fdmFsdWUtPnR5cGUoKSk7CiAgICAgICAgIGFwcGVuZChyZWxh
eGVkTW92ZUZvclR5cGUobV92YWx1ZS0+dHlwZSgpKSwgdG1wKHZhbHVlKSwgcmVzdWx0KTsKICAg
ICAgICAgYXBwZW5kKG9wY29kZSwgcmVzdWx0KTsKICAgICB9CkBAIC0xNDE4LDYgKzE0MjUsMTEg
QEAgcHJpdmF0ZToKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCisgICAgICAgIGNh
c2UgSVRvRDogeworICAgICAgICAgICAgYXBwZW5kVW5PcDxDb252ZXJ0SW50MzJUb0RvdWJsZSwg
Q29udmVydEludDMyVG9Eb3VibGUsIEFpcjo6T29wcz4obV92YWx1ZS0+Y2hpbGQoMCkpOworICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKICAgICAgICAgY2FzZSBDQ2FsbDogewogICAg
ICAgICAgICAgQ0NhbGxWYWx1ZSogY0NhbGwgPSBtX3ZhbHVlLT5hczxDQ2FsbFZhbHVlPigpOwog
ICAgICAgICAgICAgSW5zdCBpbnN0KFBhdGNoLCBjQ2FsbCwgQXJnOjpzcGVjaWFsKG1fY29kZS5j
Q2FsbFNwZWNpYWwoKSkpOwpAQCAtMTQ5Nyw2ICsxNTA5LDc5IEBAIHByaXZhdGU6CiAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgIH0KIAorICAgICAgICBjYXNlIENoZWNrQWRkOgorICAgICAg
ICBjYXNlIENoZWNrU3ViOgorICAgICAgICBjYXNlIENoZWNrTXVsOiB7CisgICAgICAgICAgICAv
LyBGSVhNRTogTWFrZSB0aGlzIHN1cHBvcnQgY29tbXV0YXRpdml0eS4gVGhhdCB3aWxsIGxldCB1
cyBsZXZlcmFnZSBtb3JlIGluc3RydWN0aW9uIGZvcm1zCisgICAgICAgICAgICAvLyBhbmQgaXQg
bGV0IHVzIGNvbW11dGUgdG8gbWF4aW1pemUgY29hbGVzY2luZy4KKyAgICAgICAgICAgIC8vIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTEyMTQKKworICAgICAgICAg
ICAgQ2hlY2tWYWx1ZSogY2hlY2tWYWx1ZSA9IG1fdmFsdWUtPmFzPENoZWNrVmFsdWU+KCk7CisK
KyAgICAgICAgICAgIFZhbHVlKiBsZWZ0ID0gY2hlY2tWYWx1ZS0+Y2hpbGQoMCk7CisgICAgICAg
ICAgICBWYWx1ZSogcmlnaHQgPSBjaGVja1ZhbHVlLT5jaGlsZCgxKTsKKworICAgICAgICAgICAg
VG1wIHJlc3VsdCA9IHRtcChtX3ZhbHVlKTsKKworICAgICAgICAgICAgLy8gSGFuZGxlIGNoZWNr
ZWQgbmVnYXRpb24uCisgICAgICAgICAgICBpZiAoY2hlY2tWYWx1ZS0+b3Bjb2RlKCkgPT0gQ2hl
Y2tTdWIgJiYgbGVmdC0+aXNJbnQoMCkpIHsKKyAgICAgICAgICAgICAgICBhcHBlbmQocmVsYXhl
ZE1vdmVGb3JUeXBlKGNoZWNrVmFsdWUtPnR5cGUoKSksIHRtcChyaWdodCksIHJlc3VsdCk7CisK
KyAgICAgICAgICAgICAgICBBaXI6Ok9wY29kZSBvcGNvZGUgPQorICAgICAgICAgICAgICAgICAg
ICBvcGNvZGVGb3JUeXBlKEJyYW5jaE5lZzMyLCBCcmFuY2hOZWc2NCwgQWlyOjpPb3BzLCBjaGVj
a1ZhbHVlLT50eXBlKCkpOworICAgICAgICAgICAgICAgIENoZWNrU3BlY2lhbCBzcGVjaWFsID0g
ZW5zdXJlU3BlY2lhbChtX2NoZWNrTmVnU3BlY2lhbCwgb3Bjb2RlLCAyKTsKKworICAgICAgICAg
ICAgICAgIEluc3QgaW5zdChQYXRjaCwgY2hlY2tWYWx1ZSwgQXJnOjpzcGVjaWFsKHNwZWNpYWwp
KTsKKyAgICAgICAgICAgICAgICBpbnN0LmFyZ3MuYXBwZW5kKEFyZzo6cmVzQ29uZChNYWNyb0Fz
c2VtYmxlcjo6T3ZlcmZsb3cpKTsKKyAgICAgICAgICAgICAgICBpbnN0LmFyZ3MuYXBwZW5kKHJl
c3VsdCk7CisKKyAgICAgICAgICAgICAgICBmaWxsU3RhY2ttYXAoaW5zdCwgY2hlY2tWYWx1ZSwg
Mik7CisKKyAgICAgICAgICAgICAgICBtX2luc3RzLmxhc3QoKS5hcHBlbmQoV1RGOjptb3ZlKGlu
c3QpKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIGFwcGVuZChyZWxheGVkTW92ZUZvclR5cGUobV92YWx1ZS0+dHlwZSgp
KSwgdG1wKGxlZnQpLCByZXN1bHQpOworICAgICAgICAgICAgCisgICAgICAgICAgICBBaXI6Ok9w
Y29kZSBvcGNvZGUgPSBBaXI6Ok9vcHM7CisgICAgICAgICAgICBDaGVja1NwZWNpYWwqIHNwZWNp
YWwgPSBudWxscHRyOworICAgICAgICAgICAgc3dpdGNoIChtX3ZhbHVlLT5vcGNvZGUoKSkgewor
ICAgICAgICAgICAgY2FzZSBDaGVja0FkZDoKKyAgICAgICAgICAgICAgICBvcGNvZGUgPSBvcGNv
ZGVGb3JUeXBlKEJyYW5jaEFkZDMyLCBCcmFuY2hBZGQ2NCwgQWlyOjpPb3BzLCBtX3ZhbHVlLT50
eXBlKCkpOworICAgICAgICAgICAgICAgIHNwZWNpYWwgPSBlbnN1cmVTcGVjaWFsKG1fY2hlY2tB
ZGRTcGVjaWFsLCBvcGNvZGUsIDMpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgY2FzZSBDaGVja1N1YjoKKyAgICAgICAgICAgICAgICBvcGNvZGUgPSBvcGNvZGVGb3JUeXBl
KEJyYW5jaFN1YjMyLCBCcmFuY2hTdWI2NCwgQWlyOjpPb3BzLCBtX3ZhbHVlLT50eXBlKCkpOwor
ICAgICAgICAgICAgICAgIHNwZWNpYWwgPSBlbnN1cmVTcGVjaWFsKG1fY2hlY2tTdWJTcGVjaWFs
LCBvcGNvZGUsIDMpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBD
aGVja011bDoKKyAgICAgICAgICAgICAgICBvcGNvZGUgPSBvcGNvZGVGb3JUeXBlKEJyYW5jaE11
bDMyLCBCcmFuY2hNdWw2NCwgQWlyOjpPb3BzLCBtX3ZhbHVlLT50eXBlKCkpOworICAgICAgICAg
ICAgICAgIHNwZWNpYWwgPSBlbnN1cmVTcGVjaWFsKG1fY2hlY2tNdWxTcGVjaWFsLCBvcGNvZGUs
IDMpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBJbnN0IGluc3QoUGF0Y2gsIGNo
ZWNrVmFsdWUsIEFyZzo6c3BlY2lhbChzcGVjaWFsKSk7CisKKyAgICAgICAgICAgIGluc3QuYXJn
cy5hcHBlbmQoQXJnOjpyZXNDb25kKE1hY3JvQXNzZW1ibGVyOjpPdmVyZmxvdykpOworCisgICAg
ICAgICAgICBBcmdQcm9taXNlIHJpZ2h0QWRkciA9IGxvYWRQcm9taXNlKHJpZ2h0KTsKKyAgICAg
ICAgICAgIGlmIChpc1ZhbGlkRm9ybShvcGNvZGUsIEFyZzo6UmVzQ29uZCwgcmlnaHRBZGRyLmtp
bmQoKSwgQXJnOjpUbXApKQorICAgICAgICAgICAgICAgIGluc3QuYXJncy5hcHBlbmQocmlnaHRB
ZGRyLmNvbnN1bWUoKnRoaXMpKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKGltbShyaWdodCkgJiYg
aXNWYWxpZEZvcm0ob3Bjb2RlLCBBcmc6OlJlc0NvbmQsIEFyZzo6SW1tLCBBcmc6OlRtcCkpCisg
ICAgICAgICAgICAgICAgaW5zdC5hcmdzLmFwcGVuZChpbW0ocmlnaHQpKTsKKyAgICAgICAgICAg
IGVsc2UKKyAgICAgICAgICAgICAgICBpbnN0LmFyZ3MuYXBwZW5kKHRtcChyaWdodCkpOworICAg
ICAgICAgICAgaW5zdC5hcmdzLmFwcGVuZChyZXN1bHQpOworICAgICAgICAgICAgCisgICAgICAg
ICAgICBmaWxsU3RhY2ttYXAoaW5zdCwgY2hlY2tWYWx1ZSwgMik7CisKKyAgICAgICAgICAgIG1f
aW5zdHMubGFzdCgpLmFwcGVuZChXVEY6Om1vdmUoaW5zdCkpOworICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CisKICAgICAgICAgY2FzZSBDaGVjazogewogICAgICAgICAgICAgSW5zdCBi
cmFuY2ggPSBjcmVhdGVCcmFuY2gobV92YWx1ZS0+Y2hpbGQoMCkpOwogICAgICAgICAgICAgCkBA
IC0xNTgyLDYgKzE2NjcsOSBAQCBwcml2YXRlOgogICAgIFZhbHVlKiBtX3ZhbHVlOwogCiAgICAg
UGF0Y2hwb2ludFNwZWNpYWwqIG1fcGF0Y2hwb2ludFNwZWNpYWwgeyBudWxscHRyIH07CisgICAg
Q2hlY2tTcGVjaWFsKiBtX2NoZWNrQWRkU3BlY2lhbCB7IG51bGxwdHIgfTsKKyAgICBDaGVja1Nw
ZWNpYWwqIG1fY2hlY2tTdWJTcGVjaWFsIHsgbnVsbHB0ciB9OworICAgIENoZWNrU3BlY2lhbCog
bV9jaGVja011bFNwZWNpYWwgeyBudWxscHRyIH07CiAgICAgSGFzaE1hcDxDaGVja1NwZWNpYWw6
OktleSwgQ2hlY2tTcGVjaWFsKj4gbV9jaGVja1NwZWNpYWxzOwogCiAgICAgUHJvY2VkdXJlJiBt
X3Byb2NlZHVyZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuY3BwCShyZXZpc2lv
biAxOTIzNzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjkxOCw2ICsyOTE4LDQwIEBAIHZvaWQgdGVzdENoZWNrTWVnYUNvbWJvKCkK
ICAgICBDSEVDSyhpbnZva2U8aW50PigqY29kZSwgJnZhbHVlIC0gMiwgMSkgPT0gNDIpOwogfQog
Cit2b2lkIHRlc3RDaGVja0FkZEltbSgpCit7CisgICAgUHJvY2VkdXJlIHByb2M7CisgICAgQmFz
aWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsKKyAgICBWYWx1ZSogYXJnMSA9IHJvb3Qt
PmFwcGVuZE5ldzxWYWx1ZT4oCisgICAgICAgIHByb2MsIFRydW5jLCBPcmlnaW4oKSwKKyAgICAg
ICAgcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJ
bmZvOjphcmd1bWVuZ0dQUjApKTsKKyAgICBWYWx1ZSogYXJnMiA9IHJvb3QtPmFwcGVuZE5ldzxD
b25zdDMyVmFsdWU+KHByb2MsIE9yaWdpbigpLCA0Mik7CisgICAgQ2hlY2tWYWx1ZSogY2hlY2tB
ZGQgPSByb290LT5hcHBlbmROZXc8Q2hlY2tWYWx1ZT4ocHJvYywgQ2hlY2tBZGQsIE9yaWdpbigp
LCBhcmcxLCBhcmcyKTsKKyAgICBjaGVja0FkZC0+c2V0R2VuZXJhdG9yKAorICAgICAgICBbJl0g
KENDYWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFt
cykgeworICAgICAgICAgICAgQ0hFQ0socGFyYW1zLnJlcHMuc2l6ZSgpID09IDIpOworICAgICAg
ICAgICAgQ0hFQ0socGFyYW1zLnJlcHNbMF0uaXNHUFIoKSk7CisgICAgICAgICAgICBDSEVDSyhw
YXJhbXMucmVwc1sxXS5pc0NvbnN0YW50KCkpOworICAgICAgICAgICAgQ0hFQ0socGFyYW1zLnJl
cHNbMV0udmFsdWUoKSA9PSA0Mik7CisgICAgICAgICAgICBqaXQuc3ViMzIoQ0NhbGxIZWxwZXJz
OjpUcnVzdGVkSW1tMzIoNDIpLCBwYXJhbXMucmVwc1swXS5ncHIoKSk7CisgICAgICAgICAgICBq
aXQuY29udmVydEludDMyVG9Eb3VibGUocGFyYW1zLnJlcHNbMF0uZ3ByKCksIEZQUkluZm86OmZw
UmVnVDApOworICAgICAgICAgICAgaml0LmNvbnZlcnRJbnQzMlRvRG91YmxlKENDYWxsSGVscGVy
czo6VHJ1c3RlZEltbTMyKDQyKSwgRlBSSW5mbzo6ZnBSZWdUMSk7CisgICAgICAgICAgICBqaXQu
YWRkRG91YmxlKEZQUkluZm86OmZwUmVnVDEsIEZQUkluZm86ZnBSZWdUMCk7CisgICAgICAgICAg
ICBqaXQuZW1pdEZ1bmN0aW9uRXBpbG9ndWUoKTsKKyAgICAgICAgICAgIGppdC5yZXQoKTsKKyAg
ICAgICAgfSk7CisgICAgcm9vdC0+YXBwZW5kTmV3PENvbnRyb2xWYWx1ZT4oCisgICAgICAgIHBy
b2MsIFJldHVybiwgT3JpZ2luKCksCisgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJv
YywgSVRvRCwgT3JpZ2luKCksIGNoZWNrQWRkKSk7CisKKyAgICBhdXRvIGNvZGUgPSBjb21waWxl
KHByb2MpOworCisgICAgQ0hFQ0soaW52b2tlPGRvdWJsZT4oKmNvZGUsIDApID09IDQyLjApOwor
ICAgIENIRUNLKGludm9rZTxkb3VibGU+KCpjb2RlLCAxKSA9PSA0My4wKTsKKyAgICBDSEVDSyhp
bnZva2U8ZG91YmxlPigqY29kZSwgNDIpID09IDg0LjApOworICAgIENIRUNLKGludm9rZTxkb3Vi
bGU+KCpjb2RlLCAyMTQ3NDgzNjQ3KSA9PSAyMTQ3NDgzNjg5LjApOworfQorCiB0ZW1wbGF0ZTx0
eXBlbmFtZSBMZWZ0RnVuY3RvciwgdHlwZW5hbWUgUmlnaHRGdW5jdG9yPgogdm9pZCBnZW5lcmlj
VGVzdENvbXBhcmUoCiAgICAgQjM6Ok9wY29kZSBvcGNvZGUsIGNvbnN0IExlZnRGdW5jdG9yJiBs
ZWZ0RnVuY3RvciwgY29uc3QgUmlnaHRGdW5jdG9yJiByaWdodEZ1bmN0b3IsCkBAIC0zOTU3LDYg
KzM5OTEsNyBAQCB2b2lkIHJ1bihjb25zdCBjaGFyKiBmaWx0ZXIpCiAgICAgUlVOKHRlc3RTaW1w
bGVDaGVjaygpKTsKICAgICBSVU4odGVzdENoZWNrTGVzc1RoYW4oKSk7CiAgICAgUlVOKHRlc3RD
aGVja01lZ2FDb21ibygpKTsKKyAgICBSVU4odGVzdENoZWNrQWRkSW1tKCkpOwogCiAgICAgUlVO
KHRlc3RDb21wYXJlKEVxdWFsLCA0MiwgNDIpKTsKICAgICBSVU4odGVzdENvbXBhcmUoTm90RXF1
YWwsIDQyLCA0MikpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJPcGNv
ZGUub3Bjb2Rlcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
ck9wY29kZS5vcGNvZGVzCShyZXZpc2lvbiAxOTIzNzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0Fpck9wY29kZS5vcGNvZGVzCSh3b3JraW5nIGNvcHkpCkBAIC0xODMsNiArMTgz
LDE0IEBAIFhvcjY0IFU6RywgVUQ6RwogICAgIFRtcCwgQWRkcgogICAgIEltbSwgVG1wCiAKK0Nv
bnZlcnRJbnQzMlRvRG91YmxlIFU6RywgRDpGCisgICAgSW1tLCBUbXAKKyAgICBUbXAsIFRtcAor
ICAgIEFkZHIsIFRtcAorCitDb252ZXJ0SW50NjRUb0RvdWJsZSBVOkcsIEQ6RgorICAgIFRtcCwg
VG1wCisKICMgTm90ZSB0aGF0IE1vdmUgb3BlcmF0ZXMgb3ZlciB0aGUgZnVsbCByZWdpc3RlciBz
aXplLCB3aGljaCBpcyBlaXRoZXIgMzItYml0IG9yIDY0LWJpdCBkZXBlbmRpbmcgb24KICMgdGhl
IHBsYXRmb3JtLiBJJ20gbm90IGVudGlyZWx5IHN1cmUgdGhhdCB0aGlzIGlzIGEgZ29vZCB0aGlu
ZzsgaXQgbWlnaHQgYmUgYmV0dGVyIHRvIGp1c3QgaGF2ZSBhCiAjIE1vdmU2NCBpbnN0cnVjdGlv
bi4gT1RPSCwgb3VyIE1hY3JvQXNzZW1ibGVycyBhbHJlYWR5IGhhdmUgdGhpcyBub3Rpb24gb2Yg
Im1vdmUoKSIgdGhhdCBiYXNpY2FsbHkKQEAgLTMwMSwxMCArMzA5LDE3IEBAIEJyYW5jaEFkZDMy
IFU6RywgVTpHLCBVRDpHIC9icmFuY2gKICAgICBSZXNDb25kLCBUbXAsIEFkZHIKICAgICBSZXND
b25kLCBBZGRyLCBUbXAKIAorQnJhbmNoQWRkNjQgVTpHLCBVOkcsIFVEOkcgL2JyYW5jaAorICAg
IFJlc0NvbmQsIEltbSwgVG1wCisgICAgUmVzQ29uZCwgVG1wLCBUbXAKKwogQnJhbmNoTXVsMzIg
VTpHLCBVOkcsIFVEOkcgL2JyYW5jaAogICAgIFJlc0NvbmQsIFRtcCwgVG1wCiAgICAgUmVzQ29u
ZCwgQWRkciwgVG1wCiAKK0JyYW5jaE11bDY0IFU6RywgVTpHLCBVRDpHIC9icmFuY2gKKyAgICBS
ZXNDb25kLCBUbXAsIFRtcAorCiBCcmFuY2hTdWIzMiBVOkcsIFU6RywgVUQ6RyAvYnJhbmNoCiAg
ICAgUmVzQ29uZCwgVG1wLCBUbXAKICAgICBSZXNDb25kLCBJbW0sIFRtcApAQCAtMzEyLDkgKzMy
NywxNiBAQCBCcmFuY2hTdWIzMiBVOkcsIFU6RywgVUQ6RyAvYnJhbmNoCiAgICAgUmVzQ29uZCwg
VG1wLCBBZGRyCiAgICAgUmVzQ29uZCwgQWRkciwgVG1wCiAKK0JyYW5jaFN1YjY0IFU6RywgVTpH
LCBVRDpHIC9icmFuY2gKKyAgICBSZXNDb25kLCBJbW0sIFRtcAorICAgIFJlc0NvbmQsIFRtcCwg
VG1wCisKIEJyYW5jaE5lZzMyIFU6RywgVUQ6RyAvYnJhbmNoCiAgICAgUmVzQ29uZCwgVG1wCiAK
K0JyYW5jaE5lZzY0IFU6RywgVUQ6RyAvYnJhbmNoCisgICAgUmVzQ29uZCwgVG1wCisKIEp1bXAg
L2JyYW5jaAogCiBSZXQgL3Rlcm1pbmFsCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>265443</attachid>
            <date>2015-11-12 15:38:10 -0800</date>
            <delta_ts>2015-11-12 15:45:32 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>11477</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTkyMzkxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM1IEBA
CisyMDE1LTExLTEyICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
QjMgc2hvdWxkIGJlIGFibGUgdG8gY29tcGlsZSBwcm9ncmFtcyB3aXRoIENoZWNrQWRkCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTEyMTMKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIGFkZHMgbG93
ZXJpbmcgY29kZSBmb3IgQ2hlY2tBZGQsIENoZWNrU3ViLCBhbmQgQ2hlY2tNdWwgYWxvbmcgd2l0
aCBzdXBwb3J0IGZvciBDaGVja05lZworICAgICAgICAoaS5lLiBDaGVja1N1YiB3aXRoIHRoZSBs
ZWZ0IGNoaWxkIGJlaW5nIHplcm8pLgorCisgICAgICAgIFRoaXMgYWRkcyB0ZXN0cyBmb3IgQ2hl
Y2tBZGQsIGJ5IHNpbXVsYXRpbmcgd2hhdCBKUyB3b3VsZCBkbzogaWYgdGhlcmUgaXMgb3ZlcmZs
b3csIHJldmVydCB0bworICAgICAgICBkb3VibGUgbWF0aC4gVG8gd3JpdGUgdGhlIHRlc3QsIEkg
bmVlZGVkIHN1cHBvcnQgZm9yIElUb0Qgc28gSSBhZGRlZCB0aGF0IHN1cHBvcnQuCisKKyAgICAg
ICAgSSdsbCBpbmNyZW1lbnRhbGx5IGFkZCB0ZXN0cyBhbmQgZml4IGJ1Z3MgaW4gdGhlIG90aGVy
IENoZWNrJ3MgaW4gc3Vic2VxdWVudCBwYXRjaGVzLgorCisgICAgICAgIFRoaXMgYWxzbyBmaXhl
cyBhIG1lbW9yeSBjb3JydXB0aW9uIGJ1ZyBpbiB0aGUgcmVnaXN0ZXIgYWxsb2NhdG9yLgorCisg
ICAgICAgICogYjMvQjNMb3dlclRvQWlyLmNwcDoKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6TG93
ZXJUb0Fpcjo6YXBwZW5kVW5PcCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okxvd2VyVG9BaXI6
OmVuc3VyZVNwZWNpYWwpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMb3dlclRvQWlyOjplbnN1
cmVDaGVja1NwZWNpYWwpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMb3dlclRvQWlyOjpmaWxs
U3RhY2ttYXApOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMb3dlclRvQWlyOjpsb3dlcik6Cisg
ICAgICAgICogYjMvYWlyL0Fpckl0ZXJhdGVkUmVnaXN0ZXJDb2FsZXNjaW5nLmNwcDoKKyAgICAg
ICAgKEpTQzo6QjM6OkFpcjo6aXRlcmF0ZWRSZWdpc3RlckNvYWxlc2NpbmcpOgorICAgICAgICAq
IGIzL2Fpci9BaXJPcGNvZGUub3Bjb2RlczoKKyAgICAgICAgKiBiMy90ZXN0YjMuY3BwOgorICAg
ICAgICAoSlNDOjpCMzo6dGVzdENoZWNrTWVnYUNvbWJvKToKKyAgICAgICAgKEpTQzo6QjM6OnRl
c3RDaGVja0FkZEltbSk6CisgICAgICAgIChKU0M6OkIzOjpnZW5lcmljVGVzdENvbXBhcmUpOgor
ICAgICAgICAoSlNDOjpCMzo6cnVuKToKKwogMjAxNS0xMS0xMiAgSm9zZXBoIFBlY29yYXJvICA8
cGVjb3Jhcm9AYXBwbGUuY29tPgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IFJlZHVjZSBsaXN0
IG9mIHNhdmVkIGNvbnNvbGUgbWVzc2FnZXMKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM0xvd2VyVG9BaXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM0xvd2VyVG9BaXIuY3BwCShyZXZpc2lvbiAxOTIzODkpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDk3LDExICs0OTcs
MTggQEAgcHJpdmF0ZToKICAgICAgICAgLy8gbWVhbiBzb21ldGhpbmcgbGlrZToKICAgICAgICAg
Ly8gICAgIGIgPSBPcCBhCiAKKyAgICAgICAgQXJnUHJvbWlzZSBhZGRyID0gbG9hZFByb21pc2Uo
dmFsdWUpOworICAgICAgICBpZiAoaXNWYWxpZEZvcm0ob3Bjb2RlLCBhZGRyLmtpbmQoKSwgQXJn
OjpUbXApKSB7CisgICAgICAgICAgICBhcHBlbmQob3Bjb2RlLCBhZGRyLmNvbnN1bWUoKnRoaXMp
LCByZXN1bHQpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKICAgICAgICAgaWYg
KGlzVmFsaWRGb3JtKG9wY29kZSwgQXJnOjpUbXAsIEFyZzo6VG1wKSkgewogICAgICAgICAgICAg
YXBwZW5kKG9wY29kZSwgdG1wKHZhbHVlKSwgcmVzdWx0KTsKICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgfQogCisgICAgICAgIEFTU0VSVCh2YWx1ZS0+dHlwZSgpID09IG1fdmFsdWUtPnR5
cGUoKSk7CiAgICAgICAgIGFwcGVuZChyZWxheGVkTW92ZUZvclR5cGUobV92YWx1ZS0+dHlwZSgp
KSwgdG1wKHZhbHVlKSwgcmVzdWx0KTsKICAgICAgICAgYXBwZW5kKG9wY29kZSwgcmVzdWx0KTsK
ICAgICB9CkBAIC03MjAsNiArNzI3LDE0IEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiBmaWVs
ZDsKICAgICB9CiAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1bWVudHM+CisgICAgQ2hl
Y2tTcGVjaWFsKiBlbnN1cmVDaGVja1NwZWNpYWwoQXJndW1lbnRzJiYuLi4gYXJndW1lbnRzKQor
ICAgIHsKKyAgICAgICAgQ2hlY2tTcGVjaWFsOjpLZXkga2V5KHN0ZDo6Zm9yd2FyZDxBcmd1bWVu
dHM+KGFyZ3VtZW50cykuLi4pOworICAgICAgICBhdXRvIHJlc3VsdCA9IG1fY2hlY2tTcGVjaWFs
cy5hZGQoa2V5LCBudWxscHRyKTsKKyAgICAgICAgcmV0dXJuIGVuc3VyZVNwZWNpYWwocmVzdWx0
Lml0ZXJhdG9yLT52YWx1ZSwga2V5KTsKKyAgICB9CisKICAgICB2b2lkIGZpbGxTdGFja21hcChJ
bnN0JiBpbnN0LCBTdGFja21hcFZhbHVlKiBzdGFja21hcCwgdW5zaWduZWQgbnVtU2tpcHBlZCkK
ICAgICB7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG51bVNraXBwZWQ7IGkgPCBzdGFja21h
cC0+bnVtQ2hpbGRyZW4oKTsgKytpKSB7CkBAIC0xNDE4LDYgKzE0MzMsMTEgQEAgcHJpdmF0ZToK
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCisgICAgICAgIGNhc2UgSVRvRDogewor
ICAgICAgICAgICAgYXBwZW5kVW5PcDxDb252ZXJ0SW50MzJUb0RvdWJsZSwgQ29udmVydEludDY0
VG9Eb3VibGUsIEFpcjo6T29wcz4obV92YWx1ZS0+Y2hpbGQoMCkpOworICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB9CisKICAgICAgICAgY2FzZSBDQ2FsbDogewogICAgICAgICAgICAgQ0Nh
bGxWYWx1ZSogY0NhbGwgPSBtX3ZhbHVlLT5hczxDQ2FsbFZhbHVlPigpOwogICAgICAgICAgICAg
SW5zdCBpbnN0KFBhdGNoLCBjQ2FsbCwgQXJnOjpzcGVjaWFsKG1fY29kZS5jQ2FsbFNwZWNpYWwo
KSkpOwpAQCAtMTQ5NywxMiArMTUxNyw4MyBAQCBwcml2YXRlOgogICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICB9CiAKKyAgICAgICAgY2FzZSBDaGVja0FkZDoKKyAgICAgICAgY2FzZSBDaGVj
a1N1YjoKKyAgICAgICAgY2FzZSBDaGVja011bDogeworICAgICAgICAgICAgLy8gRklYTUU6IE1h
a2UgdGhpcyBzdXBwb3J0IGNvbW11dGF0aXZpdHkuIFRoYXQgd2lsbCBsZXQgdXMgbGV2ZXJhZ2Ug
bW9yZSBpbnN0cnVjdGlvbiBmb3JtcworICAgICAgICAgICAgLy8gYW5kIGl0IGxldCB1cyBjb21t
dXRlIHRvIG1heGltaXplIGNvYWxlc2NpbmcuCisgICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUxMjE0CisKKyAgICAgICAgICAgIENoZWNrVmFs
dWUqIGNoZWNrVmFsdWUgPSBtX3ZhbHVlLT5hczxDaGVja1ZhbHVlPigpOworCisgICAgICAgICAg
ICBWYWx1ZSogbGVmdCA9IGNoZWNrVmFsdWUtPmNoaWxkKDApOworICAgICAgICAgICAgVmFsdWUq
IHJpZ2h0ID0gY2hlY2tWYWx1ZS0+Y2hpbGQoMSk7CisKKyAgICAgICAgICAgIFRtcCByZXN1bHQg
PSB0bXAobV92YWx1ZSk7CisKKyAgICAgICAgICAgIC8vIEhhbmRsZSBjaGVja2VkIG5lZ2F0aW9u
LgorICAgICAgICAgICAgaWYgKGNoZWNrVmFsdWUtPm9wY29kZSgpID09IENoZWNrU3ViICYmIGxl
ZnQtPmlzSW50KDApKSB7CisgICAgICAgICAgICAgICAgYXBwZW5kKHJlbGF4ZWRNb3ZlRm9yVHlw
ZShjaGVja1ZhbHVlLT50eXBlKCkpLCB0bXAocmlnaHQpLCByZXN1bHQpOworCisgICAgICAgICAg
ICAgICAgQWlyOjpPcGNvZGUgb3Bjb2RlID0KKyAgICAgICAgICAgICAgICAgICAgb3Bjb2RlRm9y
VHlwZShCcmFuY2hOZWczMiwgQnJhbmNoTmVnNjQsIEFpcjo6T29wcywgY2hlY2tWYWx1ZS0+dHlw
ZSgpKTsKKyAgICAgICAgICAgICAgICBDaGVja1NwZWNpYWwqIHNwZWNpYWwgPSBlbnN1cmVDaGVj
a1NwZWNpYWwob3Bjb2RlLCAyKTsKKworICAgICAgICAgICAgICAgIEluc3QgaW5zdChQYXRjaCwg
Y2hlY2tWYWx1ZSwgQXJnOjpzcGVjaWFsKHNwZWNpYWwpKTsKKyAgICAgICAgICAgICAgICBpbnN0
LmFyZ3MuYXBwZW5kKEFyZzo6cmVzQ29uZChNYWNyb0Fzc2VtYmxlcjo6T3ZlcmZsb3cpKTsKKyAg
ICAgICAgICAgICAgICBpbnN0LmFyZ3MuYXBwZW5kKHJlc3VsdCk7CisKKyAgICAgICAgICAgICAg
ICBmaWxsU3RhY2ttYXAoaW5zdCwgY2hlY2tWYWx1ZSwgMik7CisKKyAgICAgICAgICAgICAgICBt
X2luc3RzLmxhc3QoKS5hcHBlbmQoV1RGOjptb3ZlKGluc3QpKTsKKyAgICAgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGFwcGVuZChy
ZWxheGVkTW92ZUZvclR5cGUobV92YWx1ZS0+dHlwZSgpKSwgdG1wKGxlZnQpLCByZXN1bHQpOwor
ICAgICAgICAgICAgCisgICAgICAgICAgICBBaXI6Ok9wY29kZSBvcGNvZGUgPSBBaXI6Ok9vcHM7
CisgICAgICAgICAgICBDaGVja1NwZWNpYWwqIHNwZWNpYWwgPSBudWxscHRyOworICAgICAgICAg
ICAgc3dpdGNoIChtX3ZhbHVlLT5vcGNvZGUoKSkgeworICAgICAgICAgICAgY2FzZSBDaGVja0Fk
ZDoKKyAgICAgICAgICAgICAgICBvcGNvZGUgPSBvcGNvZGVGb3JUeXBlKEJyYW5jaEFkZDMyLCBC
cmFuY2hBZGQ2NCwgQWlyOjpPb3BzLCBtX3ZhbHVlLT50eXBlKCkpOworICAgICAgICAgICAgICAg
IHNwZWNpYWwgPSBlbnN1cmVDaGVja1NwZWNpYWwob3Bjb2RlLCAzKTsKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQ2hlY2tTdWI6CisgICAgICAgICAgICAgICAgb3Bj
b2RlID0gb3Bjb2RlRm9yVHlwZShCcmFuY2hTdWIzMiwgQnJhbmNoU3ViNjQsIEFpcjo6T29wcywg
bV92YWx1ZS0+dHlwZSgpKTsKKyAgICAgICAgICAgICAgICBzcGVjaWFsID0gZW5zdXJlQ2hlY2tT
cGVjaWFsKG9wY29kZSwgMyk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBj
YXNlIENoZWNrTXVsOgorICAgICAgICAgICAgICAgIG9wY29kZSA9IG9wY29kZUZvclR5cGUoQnJh
bmNoTXVsMzIsIEJyYW5jaE11bDY0LCBBaXI6Ok9vcHMsIG1fdmFsdWUtPnR5cGUoKSk7CisgICAg
ICAgICAgICAgICAgc3BlY2lhbCA9IGVuc3VyZUNoZWNrU3BlY2lhbChvcGNvZGUsIDMpOworICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBJbnN0IGluc3QoUGF0Y2gsIGNoZWNrVmFsdWUs
IEFyZzo6c3BlY2lhbChzcGVjaWFsKSk7CisKKyAgICAgICAgICAgIGluc3QuYXJncy5hcHBlbmQo
QXJnOjpyZXNDb25kKE1hY3JvQXNzZW1ibGVyOjpPdmVyZmxvdykpOworCisgICAgICAgICAgICBB
cmdQcm9taXNlIHJpZ2h0QWRkciA9IGxvYWRQcm9taXNlKHJpZ2h0KTsKKyAgICAgICAgICAgIGlm
IChpc1ZhbGlkRm9ybShvcGNvZGUsIEFyZzo6UmVzQ29uZCwgcmlnaHRBZGRyLmtpbmQoKSwgQXJn
OjpUbXApKQorICAgICAgICAgICAgICAgIGluc3QuYXJncy5hcHBlbmQocmlnaHRBZGRyLmNvbnN1
bWUoKnRoaXMpKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKGltbShyaWdodCkgJiYgaXNWYWxpZEZv
cm0ob3Bjb2RlLCBBcmc6OlJlc0NvbmQsIEFyZzo6SW1tLCBBcmc6OlRtcCkpCisgICAgICAgICAg
ICAgICAgaW5zdC5hcmdzLmFwcGVuZChpbW0ocmlnaHQpKTsKKyAgICAgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgICAgICBpbnN0LmFyZ3MuYXBwZW5kKHRtcChyaWdodCkpOworICAgICAgICAgICAg
aW5zdC5hcmdzLmFwcGVuZChyZXN1bHQpOworICAgICAgICAgICAgCisgICAgICAgICAgICBmaWxs
U3RhY2ttYXAoaW5zdCwgY2hlY2tWYWx1ZSwgMik7CisKKyAgICAgICAgICAgIG1faW5zdHMubGFz
dCgpLmFwcGVuZChXVEY6Om1vdmUoaW5zdCkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisKICAgICAgICAgY2FzZSBDaGVjazogewogICAgICAgICAgICAgSW5zdCBicmFuY2ggPSBj
cmVhdGVCcmFuY2gobV92YWx1ZS0+Y2hpbGQoMCkpOwotICAgICAgICAgICAgCi0gICAgICAgICAg
ICBDaGVja1NwZWNpYWw6OktleSBrZXkoYnJhbmNoKTsKLSAgICAgICAgICAgIGF1dG8gcmVzdWx0
ID0gbV9jaGVja1NwZWNpYWxzLmFkZChrZXksIG51bGxwdHIpOwotICAgICAgICAgICAgU3BlY2lh
bCogc3BlY2lhbCA9IGVuc3VyZVNwZWNpYWwocmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSwga2V5KTsK
KworICAgICAgICAgICAgQ2hlY2tTcGVjaWFsKiBzcGVjaWFsID0gZW5zdXJlQ2hlY2tTcGVjaWFs
KGJyYW5jaCk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIENoZWNrVmFsdWUqIGNoZWNrVmFs
dWUgPSBtX3ZhbHVlLT5hczxDaGVja1ZhbHVlPigpOwogICAgICAgICAgICAgCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvdGVzdGIzLmNwcAkocmV2aXNpb24gMTkyMzg5KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL3Rlc3RiMy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5MTgsNiArMjkx
OCw0MCBAQCB2b2lkIHRlc3RDaGVja01lZ2FDb21ibygpCiAgICAgQ0hFQ0soaW52b2tlPGludD4o
KmNvZGUsICZ2YWx1ZSAtIDIsIDEpID09IDQyKTsKIH0KIAordm9pZCB0ZXN0Q2hlY2tBZGRJbW0o
KQoreworICAgIFByb2NlZHVyZSBwcm9jOworICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBwcm9jLmFk
ZEJsb2NrKCk7CisgICAgVmFsdWUqIGFyZzEgPSByb290LT5hcHBlbmROZXc8VmFsdWU+KAorICAg
ICAgICBwcm9jLCBUcnVuYywgT3JpZ2luKCksCisgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxBcmd1
bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKSk7Cisg
ICAgVmFsdWUqIGFyZzIgPSByb290LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmln
aW4oKSwgNDIpOworICAgIENoZWNrVmFsdWUqIGNoZWNrQWRkID0gcm9vdC0+YXBwZW5kTmV3PENo
ZWNrVmFsdWU+KHByb2MsIENoZWNrQWRkLCBPcmlnaW4oKSwgYXJnMSwgYXJnMik7CisgICAgY2hl
Y2tBZGQtPnNldEdlbmVyYXRvcigKKyAgICAgICAgWyZdIChDQ2FsbEhlbHBlcnMmIGppdCwgY29u
c3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKKyAgICAgICAgICAgIENIRUNL
KHBhcmFtcy5yZXBzLnNpemUoKSA9PSAyKTsKKyAgICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBz
WzBdLmlzR1BSKCkpOworICAgICAgICAgICAgQ0hFQ0socGFyYW1zLnJlcHNbMV0uaXNDb25zdGFu
dCgpKTsKKyAgICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBzWzFdLnZhbHVlKCkgPT0gNDIpOwor
ICAgICAgICAgICAgaml0LnN1YjMyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDQyKSwgcGFy
YW1zLnJlcHNbMF0uZ3ByKCkpOworICAgICAgICAgICAgaml0LmNvbnZlcnRJbnQzMlRvRG91Ymxl
KHBhcmFtcy5yZXBzWzBdLmdwcigpLCBGUFJJbmZvOjpmcFJlZ1QwKTsKKyAgICAgICAgICAgIGpp
dC5jb252ZXJ0SW50MzJUb0RvdWJsZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMig0MiksIEZQ
UkluZm86OmZwUmVnVDEpOworICAgICAgICAgICAgaml0LmFkZERvdWJsZShGUFJJbmZvOjpmcFJl
Z1QxLCBGUFJJbmZvOjpmcFJlZ1QwKTsKKyAgICAgICAgICAgIGppdC5lbWl0RnVuY3Rpb25FcGls
b2d1ZSgpOworICAgICAgICAgICAgaml0LnJldCgpOworICAgICAgICB9KTsKKyAgICByb290LT5h
cHBlbmROZXc8Q29udHJvbFZhbHVlPigKKyAgICAgICAgcHJvYywgUmV0dXJuLCBPcmlnaW4oKSwK
KyAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBJVG9ELCBPcmlnaW4oKSwgY2hl
Y2tBZGQpKTsKKworICAgIGF1dG8gY29kZSA9IGNvbXBpbGUocHJvYyk7CisKKyAgICBDSEVDSyhp
bnZva2U8ZG91YmxlPigqY29kZSwgMCkgPT0gNDIuMCk7CisgICAgQ0hFQ0soaW52b2tlPGRvdWJs
ZT4oKmNvZGUsIDEpID09IDQzLjApOworICAgIENIRUNLKGludm9rZTxkb3VibGU+KCpjb2RlLCA0
MikgPT0gODQuMCk7CisgICAgQ0hFQ0soaW52b2tlPGRvdWJsZT4oKmNvZGUsIDIxNDc0ODM2NDcp
ID09IDIxNDc0ODM2ODkuMCk7Cit9CisKIHRlbXBsYXRlPHR5cGVuYW1lIExlZnRGdW5jdG9yLCB0
eXBlbmFtZSBSaWdodEZ1bmN0b3I+CiB2b2lkIGdlbmVyaWNUZXN0Q29tcGFyZSgKICAgICBCMzo6
T3Bjb2RlIG9wY29kZSwgY29uc3QgTGVmdEZ1bmN0b3ImIGxlZnRGdW5jdG9yLCBjb25zdCBSaWdo
dEZ1bmN0b3ImIHJpZ2h0RnVuY3RvciwKQEAgLTM5NTcsNiArMzk5MSw3IEBAIHZvaWQgcnVuKGNv
bnN0IGNoYXIqIGZpbHRlcikKICAgICBSVU4odGVzdFNpbXBsZUNoZWNrKCkpOwogICAgIFJVTih0
ZXN0Q2hlY2tMZXNzVGhhbigpKTsKICAgICBSVU4odGVzdENoZWNrTWVnYUNvbWJvKCkpOworICAg
IFJVTih0ZXN0Q2hlY2tBZGRJbW0oKSk7CiAKICAgICBSVU4odGVzdENvbXBhcmUoRXF1YWwsIDQy
LCA0MikpOwogICAgIFJVTih0ZXN0Q29tcGFyZShOb3RFcXVhbCwgNDIsIDQyKSk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckl0ZXJhdGVkUmVnaXN0ZXJDb2FsZXNjaW5n
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckl0ZXJh
dGVkUmVnaXN0ZXJDb2FsZXNjaW5nLmNwcAkocmV2aXNpb24gMTkyMzg5KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJdGVyYXRlZFJlZ2lzdGVyQ29hbGVzY2luZy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTkyMCwxMyArOTIwLDE0IEBAIHZvaWQgaXRlcmF0ZWRSZWdpc3RlckNv
YWxlc2NpbmcoQ29kZSYgY28KICAgICAgICAgfQogCiAgICAgICAgIGdwQWxsb2NhdG9yLmFsbG9j
YXRlKCk7CisgICAgICAgIGZwQWxsb2NhdG9yLmFsbG9jYXRlKCk7CisKICAgICAgICAgaWYgKGdw
QWxsb2NhdG9yLnNwaWxsZWRUbXAoKS5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgIGFzc2lnblJl
Z2lzdGVyVG9UbXBJblByb2dyYW0oY29kZSwgZ3BBbGxvY2F0b3IpOwogICAgICAgICAgICAgZ3BJ
c0NvbG9yZWQgPSB0cnVlOwogICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIGFkZFNwaWxsQW5k
RmlsbFRvUHJvZ3JhbTxBcmc6OkdQPihjb2RlLCBncEFsbG9jYXRvci5zcGlsbGVkVG1wKCkpOwog
Ci0gICAgICAgIGZwQWxsb2NhdG9yLmFsbG9jYXRlKCk7CiAgICAgICAgIGlmIChmcEFsbG9jYXRv
ci5zcGlsbGVkVG1wKCkuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICBhc3NpZ25SZWdpc3RlclRv
VG1wSW5Qcm9ncmFtKGNvZGUsIGZwQWxsb2NhdG9yKTsKICAgICAgICAgICAgIGZwSXNDb2xvcmVk
ID0gdHJ1ZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyT3Bjb2RlLm9w
Y29kZXMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJPcGNv
ZGUub3Bjb2RlcwkocmV2aXNpb24gMTkyMzg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L2Fpci9BaXJPcGNvZGUub3Bjb2Rlcwkod29ya2luZyBjb3B5KQpAQCAtMTgzLDYgKzE4MywxNCBA
QCBYb3I2NCBVOkcsIFVEOkcKICAgICBUbXAsIEFkZHIKICAgICBJbW0sIFRtcAogCitDb252ZXJ0
SW50MzJUb0RvdWJsZSBVOkcsIEQ6RgorICAgIEltbSwgVG1wCisgICAgVG1wLCBUbXAKKyAgICBB
ZGRyLCBUbXAKKworQ29udmVydEludDY0VG9Eb3VibGUgVTpHLCBEOkYKKyAgICBUbXAsIFRtcAor
CiAjIE5vdGUgdGhhdCBNb3ZlIG9wZXJhdGVzIG92ZXIgdGhlIGZ1bGwgcmVnaXN0ZXIgc2l6ZSwg
d2hpY2ggaXMgZWl0aGVyIDMyLWJpdCBvciA2NC1iaXQgZGVwZW5kaW5nIG9uCiAjIHRoZSBwbGF0
Zm9ybS4gSSdtIG5vdCBlbnRpcmVseSBzdXJlIHRoYXQgdGhpcyBpcyBhIGdvb2QgdGhpbmc7IGl0
IG1pZ2h0IGJlIGJldHRlciB0byBqdXN0IGhhdmUgYQogIyBNb3ZlNjQgaW5zdHJ1Y3Rpb24uIE9U
T0gsIG91ciBNYWNyb0Fzc2VtYmxlcnMgYWxyZWFkeSBoYXZlIHRoaXMgbm90aW9uIG9mICJtb3Zl
KCkiIHRoYXQgYmFzaWNhbGx5CkBAIC0zMDEsMTAgKzMwOSwxNyBAQCBCcmFuY2hBZGQzMiBVOkcs
IFU6RywgVUQ6RyAvYnJhbmNoCiAgICAgUmVzQ29uZCwgVG1wLCBBZGRyCiAgICAgUmVzQ29uZCwg
QWRkciwgVG1wCiAKK0JyYW5jaEFkZDY0IFU6RywgVTpHLCBVRDpHIC9icmFuY2gKKyAgICBSZXND
b25kLCBJbW0sIFRtcAorICAgIFJlc0NvbmQsIFRtcCwgVG1wCisKIEJyYW5jaE11bDMyIFU6Rywg
VTpHLCBVRDpHIC9icmFuY2gKICAgICBSZXNDb25kLCBUbXAsIFRtcAogICAgIFJlc0NvbmQsIEFk
ZHIsIFRtcAogCitCcmFuY2hNdWw2NCBVOkcsIFU6RywgVUQ6RyAvYnJhbmNoCisgICAgUmVzQ29u
ZCwgVG1wLCBUbXAKKwogQnJhbmNoU3ViMzIgVTpHLCBVOkcsIFVEOkcgL2JyYW5jaAogICAgIFJl
c0NvbmQsIFRtcCwgVG1wCiAgICAgUmVzQ29uZCwgSW1tLCBUbXAKQEAgLTMxMiw5ICszMjcsMTYg
QEAgQnJhbmNoU3ViMzIgVTpHLCBVOkcsIFVEOkcgL2JyYW5jaAogICAgIFJlc0NvbmQsIFRtcCwg
QWRkcgogICAgIFJlc0NvbmQsIEFkZHIsIFRtcAogCitCcmFuY2hTdWI2NCBVOkcsIFU6RywgVUQ6
RyAvYnJhbmNoCisgICAgUmVzQ29uZCwgSW1tLCBUbXAKKyAgICBSZXNDb25kLCBUbXAsIFRtcAor
CiBCcmFuY2hOZWczMiBVOkcsIFVEOkcgL2JyYW5jaAogICAgIFJlc0NvbmQsIFRtcAogCitCcmFu
Y2hOZWc2NCBVOkcsIFVEOkcgL2JyYW5jaAorICAgIFJlc0NvbmQsIFRtcAorCiBKdW1wIC9icmFu
Y2gKIAogUmV0IC90ZXJtaW5hbAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>265444</attachid>
            <date>2015-11-12 15:45:32 -0800</date>
            <delta_ts>2015-11-12 16:49:19 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>13836</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTkyMzkxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM5IEBA
CisyMDE1LTExLTEyICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
QjMgc2hvdWxkIGJlIGFibGUgdG8gY29tcGlsZSBwcm9ncmFtcyB3aXRoIENoZWNrQWRkCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTEyMTMKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIGFkZHMgbG93
ZXJpbmcgY29kZSBmb3IgQ2hlY2tBZGQsIENoZWNrU3ViLCBhbmQgQ2hlY2tNdWwgYWxvbmcgd2l0
aCBzdXBwb3J0IGZvciBDaGVja05lZworICAgICAgICAoaS5lLiBDaGVja1N1YiB3aXRoIHRoZSBs
ZWZ0IGNoaWxkIGJlaW5nIHplcm8pLgorCisgICAgICAgIFRoaXMgYWRkcyB0ZXN0cyBmb3IgQ2hl
Y2tBZGQsIGJ5IHNpbXVsYXRpbmcgd2hhdCBKUyB3b3VsZCBkbzogaWYgdGhlcmUgaXMgb3ZlcmZs
b3csIHJldmVydCB0bworICAgICAgICBkb3VibGUgbWF0aC4gVG8gd3JpdGUgdGhlIHRlc3QsIEkg
bmVlZGVkIHN1cHBvcnQgZm9yIElUb0Qgc28gSSBhZGRlZCB0aGF0IHN1cHBvcnQuCisKKyAgICAg
ICAgSSdsbCBpbmNyZW1lbnRhbGx5IGFkZCB0ZXN0cyBhbmQgZml4IGJ1Z3MgaW4gdGhlIG90aGVy
IENoZWNrJ3MgaW4gc3Vic2VxdWVudCBwYXRjaGVzLgorCisgICAgICAgIFRoaXMgYWxzbyBmaXhl
cyBhIG1lbW9yeSBjb3JydXB0aW9uIGJ1ZyBpbiB0aGUgcmVnaXN0ZXIgYWxsb2NhdG9yLgorCisg
ICAgICAgIEFsc28gZml4ZXMgYSBidWcgaW4gb3Bjb2RlX2dlbmVyYXRvci5yYiB3aGVyZSB3ZSB3
ZXJlIGVtaXR0aW5nIHN0cmF5ICJyZXR1cm4iIHN0YXRlbWVudHMgaW5zaWRlCisgICAgICAgIHN3
aXRjaCBzdGF0ZW1lbnRzLiBJIHRoaW5rIHRoaXMgd2FzIGJlbmlnbiwgYnV0IEknbSBub3Qgc3Vy
ZSwgc28gSSBmaXhlZCBpdC4KKworICAgICAgICAqIGIzL0IzTG93ZXJUb0Fpci5jcHA6CisgICAg
ICAgIChKU0M6OkIzOjpBaXI6Okxvd2VyVG9BaXI6OmFwcGVuZFVuT3ApOgorICAgICAgICAoSlND
OjpCMzo6QWlyOjpMb3dlclRvQWlyOjplbnN1cmVTcGVjaWFsKToKKyAgICAgICAgKEpTQzo6QjM6
OkFpcjo6TG93ZXJUb0Fpcjo6ZW5zdXJlQ2hlY2tTcGVjaWFsKToKKyAgICAgICAgKEpTQzo6QjM6
OkFpcjo6TG93ZXJUb0Fpcjo6ZmlsbFN0YWNrbWFwKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6
TG93ZXJUb0Fpcjo6bG93ZXIpOgorICAgICAgICAqIGIzL2Fpci9BaXJJdGVyYXRlZFJlZ2lzdGVy
Q29hbGVzY2luZy5jcHA6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Oml0ZXJhdGVkUmVnaXN0ZXJD
b2FsZXNjaW5nKToKKyAgICAgICAgKiBiMy9haXIvQWlyT3Bjb2RlLm9wY29kZXM6CisgICAgICAg
ICogYjMvYWlyL29wY29kZV9nZW5lcmF0b3IucmI6CisgICAgICAgICogYjMvdGVzdGIzLmNwcDoK
KyAgICAgICAgKEpTQzo6QjM6OnRlc3RDaGVja01lZ2FDb21ibyk6CisgICAgICAgIChKU0M6OkIz
Ojp0ZXN0Q2hlY2tBZGRJbW0pOgorICAgICAgICAoSlNDOjpCMzo6Z2VuZXJpY1Rlc3RDb21wYXJl
KToKKyAgICAgICAgKEpTQzo6QjM6OnJ1bik6CisKIDIwMTUtMTEtMTIgIEpvc2VwaCBQZWNvcmFy
byAgPHBlY29yYXJvQGFwcGxlLmNvbT4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBSZWR1Y2Ug
bGlzdCBvZiBzYXZlZCBjb25zb2xlIG1lc3NhZ2VzCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNMb3dlclRvQWlyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNMb3dlclRvQWlyLmNwcAkocmV2aXNpb24gMTkyMzg5KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5NywxMSAr
NDk3LDE4IEBAIHByaXZhdGU6CiAgICAgICAgIC8vIG1lYW4gc29tZXRoaW5nIGxpa2U6CiAgICAg
ICAgIC8vICAgICBiID0gT3AgYQogCisgICAgICAgIEFyZ1Byb21pc2UgYWRkciA9IGxvYWRQcm9t
aXNlKHZhbHVlKTsKKyAgICAgICAgaWYgKGlzVmFsaWRGb3JtKG9wY29kZSwgYWRkci5raW5kKCks
IEFyZzo6VG1wKSkgeworICAgICAgICAgICAgYXBwZW5kKG9wY29kZSwgYWRkci5jb25zdW1lKCp0
aGlzKSwgcmVzdWx0KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCiAgICAgICAg
IGlmIChpc1ZhbGlkRm9ybShvcGNvZGUsIEFyZzo6VG1wLCBBcmc6OlRtcCkpIHsKICAgICAgICAg
ICAgIGFwcGVuZChvcGNvZGUsIHRtcCh2YWx1ZSksIHJlc3VsdCk7CiAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgIH0KIAorICAgICAgICBBU1NFUlQodmFsdWUtPnR5cGUoKSA9PSBtX3ZhbHVl
LT50eXBlKCkpOwogICAgICAgICBhcHBlbmQocmVsYXhlZE1vdmVGb3JUeXBlKG1fdmFsdWUtPnR5
cGUoKSksIHRtcCh2YWx1ZSksIHJlc3VsdCk7CiAgICAgICAgIGFwcGVuZChvcGNvZGUsIHJlc3Vs
dCk7CiAgICAgfQpAQCAtNzIwLDYgKzcyNywxNCBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4g
ZmllbGQ7CiAgICAgfQogCisgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPgorICAg
IENoZWNrU3BlY2lhbCogZW5zdXJlQ2hlY2tTcGVjaWFsKEFyZ3VtZW50cyYmLi4uIGFyZ3VtZW50
cykKKyAgICB7CisgICAgICAgIENoZWNrU3BlY2lhbDo6S2V5IGtleShzdGQ6OmZvcndhcmQ8QXJn
dW1lbnRzPihhcmd1bWVudHMpLi4uKTsKKyAgICAgICAgYXV0byByZXN1bHQgPSBtX2NoZWNrU3Bl
Y2lhbHMuYWRkKGtleSwgbnVsbHB0cik7CisgICAgICAgIHJldHVybiBlbnN1cmVTcGVjaWFsKHJl
c3VsdC5pdGVyYXRvci0+dmFsdWUsIGtleSk7CisgICAgfQorCiAgICAgdm9pZCBmaWxsU3RhY2tt
YXAoSW5zdCYgaW5zdCwgU3RhY2ttYXBWYWx1ZSogc3RhY2ttYXAsIHVuc2lnbmVkIG51bVNraXBw
ZWQpCiAgICAgewogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBudW1Ta2lwcGVkOyBpIDwgc3Rh
Y2ttYXAtPm51bUNoaWxkcmVuKCk7ICsraSkgewpAQCAtMTQxOCw2ICsxNDMzLDExIEBAIHByaXZh
dGU6CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAorICAgICAgICBjYXNlIElUb0Q6
IHsKKyAgICAgICAgICAgIGFwcGVuZFVuT3A8Q29udmVydEludDMyVG9Eb3VibGUsIENvbnZlcnRJ
bnQ2NFRvRG91YmxlLCBBaXI6Ok9vcHM+KG1fdmFsdWUtPmNoaWxkKDApKTsKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQorCiAgICAgICAgIGNhc2UgQ0NhbGw6IHsKICAgICAgICAgICAg
IENDYWxsVmFsdWUqIGNDYWxsID0gbV92YWx1ZS0+YXM8Q0NhbGxWYWx1ZT4oKTsKICAgICAgICAg
ICAgIEluc3QgaW5zdChQYXRjaCwgY0NhbGwsIEFyZzo6c3BlY2lhbChtX2NvZGUuY0NhbGxTcGVj
aWFsKCkpKTsKQEAgLTE0OTcsMTIgKzE1MTcsODMgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgfQogCisgICAgICAgIGNhc2UgQ2hlY2tBZGQ6CisgICAgICAgIGNhc2Ug
Q2hlY2tTdWI6CisgICAgICAgIGNhc2UgQ2hlY2tNdWw6IHsKKyAgICAgICAgICAgIC8vIEZJWE1F
OiBNYWtlIHRoaXMgc3VwcG9ydCBjb21tdXRhdGl2aXR5LiBUaGF0IHdpbGwgbGV0IHVzIGxldmVy
YWdlIG1vcmUgaW5zdHJ1Y3Rpb24gZm9ybXMKKyAgICAgICAgICAgIC8vIGFuZCBpdCBsZXQgdXMg
Y29tbXV0ZSB0byBtYXhpbWl6ZSBjb2FsZXNjaW5nLgorICAgICAgICAgICAgLy8gaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MTIxNAorCisgICAgICAgICAgICBDaGVj
a1ZhbHVlKiBjaGVja1ZhbHVlID0gbV92YWx1ZS0+YXM8Q2hlY2tWYWx1ZT4oKTsKKworICAgICAg
ICAgICAgVmFsdWUqIGxlZnQgPSBjaGVja1ZhbHVlLT5jaGlsZCgwKTsKKyAgICAgICAgICAgIFZh
bHVlKiByaWdodCA9IGNoZWNrVmFsdWUtPmNoaWxkKDEpOworCisgICAgICAgICAgICBUbXAgcmVz
dWx0ID0gdG1wKG1fdmFsdWUpOworCisgICAgICAgICAgICAvLyBIYW5kbGUgY2hlY2tlZCBuZWdh
dGlvbi4KKyAgICAgICAgICAgIGlmIChjaGVja1ZhbHVlLT5vcGNvZGUoKSA9PSBDaGVja1N1YiAm
JiBsZWZ0LT5pc0ludCgwKSkgeworICAgICAgICAgICAgICAgIGFwcGVuZChyZWxheGVkTW92ZUZv
clR5cGUoY2hlY2tWYWx1ZS0+dHlwZSgpKSwgdG1wKHJpZ2h0KSwgcmVzdWx0KTsKKworICAgICAg
ICAgICAgICAgIEFpcjo6T3Bjb2RlIG9wY29kZSA9CisgICAgICAgICAgICAgICAgICAgIG9wY29k
ZUZvclR5cGUoQnJhbmNoTmVnMzIsIEJyYW5jaE5lZzY0LCBBaXI6Ok9vcHMsIGNoZWNrVmFsdWUt
PnR5cGUoKSk7CisgICAgICAgICAgICAgICAgQ2hlY2tTcGVjaWFsKiBzcGVjaWFsID0gZW5zdXJl
Q2hlY2tTcGVjaWFsKG9wY29kZSwgMik7CisKKyAgICAgICAgICAgICAgICBJbnN0IGluc3QoUGF0
Y2gsIGNoZWNrVmFsdWUsIEFyZzo6c3BlY2lhbChzcGVjaWFsKSk7CisgICAgICAgICAgICAgICAg
aW5zdC5hcmdzLmFwcGVuZChBcmc6OnJlc0NvbmQoTWFjcm9Bc3NlbWJsZXI6Ok92ZXJmbG93KSk7
CisgICAgICAgICAgICAgICAgaW5zdC5hcmdzLmFwcGVuZChyZXN1bHQpOworCisgICAgICAgICAg
ICAgICAgZmlsbFN0YWNrbWFwKGluc3QsIGNoZWNrVmFsdWUsIDIpOworCisgICAgICAgICAgICAg
ICAgbV9pbnN0cy5sYXN0KCkuYXBwZW5kKFdURjo6bW92ZShpbnN0KSk7CisgICAgICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBhcHBl
bmQocmVsYXhlZE1vdmVGb3JUeXBlKG1fdmFsdWUtPnR5cGUoKSksIHRtcChsZWZ0KSwgcmVzdWx0
KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgQWlyOjpPcGNvZGUgb3Bjb2RlID0gQWlyOjpP
b3BzOworICAgICAgICAgICAgQ2hlY2tTcGVjaWFsKiBzcGVjaWFsID0gbnVsbHB0cjsKKyAgICAg
ICAgICAgIHN3aXRjaCAobV92YWx1ZS0+b3Bjb2RlKCkpIHsKKyAgICAgICAgICAgIGNhc2UgQ2hl
Y2tBZGQ6CisgICAgICAgICAgICAgICAgb3Bjb2RlID0gb3Bjb2RlRm9yVHlwZShCcmFuY2hBZGQz
MiwgQnJhbmNoQWRkNjQsIEFpcjo6T29wcywgbV92YWx1ZS0+dHlwZSgpKTsKKyAgICAgICAgICAg
ICAgICBzcGVjaWFsID0gZW5zdXJlQ2hlY2tTcGVjaWFsKG9wY29kZSwgMyk7CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIENoZWNrU3ViOgorICAgICAgICAgICAgICAg
IG9wY29kZSA9IG9wY29kZUZvclR5cGUoQnJhbmNoU3ViMzIsIEJyYW5jaFN1YjY0LCBBaXI6Ok9v
cHMsIG1fdmFsdWUtPnR5cGUoKSk7CisgICAgICAgICAgICAgICAgc3BlY2lhbCA9IGVuc3VyZUNo
ZWNrU3BlY2lhbChvcGNvZGUsIDMpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgY2FzZSBDaGVja011bDoKKyAgICAgICAgICAgICAgICBvcGNvZGUgPSBvcGNvZGVGb3JUeXBl
KEJyYW5jaE11bDMyLCBCcmFuY2hNdWw2NCwgQWlyOjpPb3BzLCBtX3ZhbHVlLT50eXBlKCkpOwor
ICAgICAgICAgICAgICAgIHNwZWNpYWwgPSBlbnN1cmVDaGVja1NwZWNpYWwob3Bjb2RlLCAzKTsK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgSW5zdCBpbnN0KFBhdGNoLCBjaGVja1Zh
bHVlLCBBcmc6OnNwZWNpYWwoc3BlY2lhbCkpOworCisgICAgICAgICAgICBpbnN0LmFyZ3MuYXBw
ZW5kKEFyZzo6cmVzQ29uZChNYWNyb0Fzc2VtYmxlcjo6T3ZlcmZsb3cpKTsKKworICAgICAgICAg
ICAgQXJnUHJvbWlzZSByaWdodEFkZHIgPSBsb2FkUHJvbWlzZShyaWdodCk7CisgICAgICAgICAg
ICBpZiAoaXNWYWxpZEZvcm0ob3Bjb2RlLCBBcmc6OlJlc0NvbmQsIHJpZ2h0QWRkci5raW5kKCks
IEFyZzo6VG1wKSkKKyAgICAgICAgICAgICAgICBpbnN0LmFyZ3MuYXBwZW5kKHJpZ2h0QWRkci5j
b25zdW1lKCp0aGlzKSk7CisgICAgICAgICAgICBlbHNlIGlmIChpbW0ocmlnaHQpICYmIGlzVmFs
aWRGb3JtKG9wY29kZSwgQXJnOjpSZXNDb25kLCBBcmc6OkltbSwgQXJnOjpUbXApKQorICAgICAg
ICAgICAgICAgIGluc3QuYXJncy5hcHBlbmQoaW1tKHJpZ2h0KSk7CisgICAgICAgICAgICBlbHNl
CisgICAgICAgICAgICAgICAgaW5zdC5hcmdzLmFwcGVuZCh0bXAocmlnaHQpKTsKKyAgICAgICAg
ICAgIGluc3QuYXJncy5hcHBlbmQocmVzdWx0KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAg
ZmlsbFN0YWNrbWFwKGluc3QsIGNoZWNrVmFsdWUsIDIpOworCisgICAgICAgICAgICBtX2luc3Rz
Lmxhc3QoKS5hcHBlbmQoV1RGOjptb3ZlKGluc3QpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorCiAgICAgICAgIGNhc2UgQ2hlY2s6IHsKICAgICAgICAgICAgIEluc3QgYnJhbmNo
ID0gY3JlYXRlQnJhbmNoKG1fdmFsdWUtPmNoaWxkKDApKTsKLSAgICAgICAgICAgIAotICAgICAg
ICAgICAgQ2hlY2tTcGVjaWFsOjpLZXkga2V5KGJyYW5jaCk7Ci0gICAgICAgICAgICBhdXRvIHJl
c3VsdCA9IG1fY2hlY2tTcGVjaWFscy5hZGQoa2V5LCBudWxscHRyKTsKLSAgICAgICAgICAgIFNw
ZWNpYWwqIHNwZWNpYWwgPSBlbnN1cmVTcGVjaWFsKHJlc3VsdC5pdGVyYXRvci0+dmFsdWUsIGtl
eSk7CisKKyAgICAgICAgICAgIENoZWNrU3BlY2lhbCogc3BlY2lhbCA9IGVuc3VyZUNoZWNrU3Bl
Y2lhbChicmFuY2gpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBDaGVja1ZhbHVlKiBjaGVj
a1ZhbHVlID0gbV92YWx1ZS0+YXM8Q2hlY2tWYWx1ZT4oKTsKICAgICAgICAgICAgIApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiMy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiMy5jcHAJKHJldmlzaW9uIDE5MjM4OSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOTE4LDYg
KzI5MTgsNDAgQEAgdm9pZCB0ZXN0Q2hlY2tNZWdhQ29tYm8oKQogICAgIENIRUNLKGludm9rZTxp
bnQ+KCpjb2RlLCAmdmFsdWUgLSAyLCAxKSA9PSA0Mik7CiB9CiAKK3ZvaWQgdGVzdENoZWNrQWRk
SW1tKCkKK3sKKyAgICBQcm9jZWR1cmUgcHJvYzsKKyAgICBCYXNpY0Jsb2NrKiByb290ID0gcHJv
Yy5hZGRCbG9jaygpOworICAgIFZhbHVlKiBhcmcxID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPigK
KyAgICAgICAgcHJvYywgVHJ1bmMsIE9yaWdpbigpLAorICAgICAgICByb290LT5hcHBlbmROZXc8
QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCkp
OworICAgIFZhbHVlKiBhcmcyID0gcm9vdC0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywg
T3JpZ2luKCksIDQyKTsKKyAgICBDaGVja1ZhbHVlKiBjaGVja0FkZCA9IHJvb3QtPmFwcGVuZE5l
dzxDaGVja1ZhbHVlPihwcm9jLCBDaGVja0FkZCwgT3JpZ2luKCksIGFyZzEsIGFyZzIpOworICAg
IGNoZWNrQWRkLT5zZXRHZW5lcmF0b3IoCisgICAgICAgIFsmXSAoQ0NhbGxIZWxwZXJzJiBqaXQs
IGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CisgICAgICAgICAgICBD
SEVDSyhwYXJhbXMucmVwcy5zaXplKCkgPT0gMik7CisgICAgICAgICAgICBDSEVDSyhwYXJhbXMu
cmVwc1swXS5pc0dQUigpKTsKKyAgICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBzWzFdLmlzQ29u
c3RhbnQoKSk7CisgICAgICAgICAgICBDSEVDSyhwYXJhbXMucmVwc1sxXS52YWx1ZSgpID09IDQy
KTsKKyAgICAgICAgICAgIGppdC5zdWIzMihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMig0Miks
IHBhcmFtcy5yZXBzWzBdLmdwcigpKTsKKyAgICAgICAgICAgIGppdC5jb252ZXJ0SW50MzJUb0Rv
dWJsZShwYXJhbXMucmVwc1swXS5ncHIoKSwgRlBSSW5mbzo6ZnBSZWdUMCk7CisgICAgICAgICAg
ICBqaXQuY29udmVydEludDMyVG9Eb3VibGUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoNDIp
LCBGUFJJbmZvOjpmcFJlZ1QxKTsKKyAgICAgICAgICAgIGppdC5hZGREb3VibGUoRlBSSW5mbzo6
ZnBSZWdUMSwgRlBSSW5mbzo6ZnBSZWdUMCk7CisgICAgICAgICAgICBqaXQuZW1pdEZ1bmN0aW9u
RXBpbG9ndWUoKTsKKyAgICAgICAgICAgIGppdC5yZXQoKTsKKyAgICAgICAgfSk7CisgICAgcm9v
dC0+YXBwZW5kTmV3PENvbnRyb2xWYWx1ZT4oCisgICAgICAgIHByb2MsIFJldHVybiwgT3JpZ2lu
KCksCisgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgSVRvRCwgT3JpZ2luKCks
IGNoZWNrQWRkKSk7CisKKyAgICBhdXRvIGNvZGUgPSBjb21waWxlKHByb2MpOworCisgICAgQ0hF
Q0soaW52b2tlPGRvdWJsZT4oKmNvZGUsIDApID09IDQyLjApOworICAgIENIRUNLKGludm9rZTxk
b3VibGU+KCpjb2RlLCAxKSA9PSA0My4wKTsKKyAgICBDSEVDSyhpbnZva2U8ZG91YmxlPigqY29k
ZSwgNDIpID09IDg0LjApOworICAgIENIRUNLKGludm9rZTxkb3VibGU+KCpjb2RlLCAyMTQ3NDgz
NjQ3KSA9PSAyMTQ3NDgzNjg5LjApOworfQorCiB0ZW1wbGF0ZTx0eXBlbmFtZSBMZWZ0RnVuY3Rv
ciwgdHlwZW5hbWUgUmlnaHRGdW5jdG9yPgogdm9pZCBnZW5lcmljVGVzdENvbXBhcmUoCiAgICAg
QjM6Ok9wY29kZSBvcGNvZGUsIGNvbnN0IExlZnRGdW5jdG9yJiBsZWZ0RnVuY3RvciwgY29uc3Qg
UmlnaHRGdW5jdG9yJiByaWdodEZ1bmN0b3IsCkBAIC0zOTU3LDYgKzM5OTEsNyBAQCB2b2lkIHJ1
bihjb25zdCBjaGFyKiBmaWx0ZXIpCiAgICAgUlVOKHRlc3RTaW1wbGVDaGVjaygpKTsKICAgICBS
VU4odGVzdENoZWNrTGVzc1RoYW4oKSk7CiAgICAgUlVOKHRlc3RDaGVja01lZ2FDb21ibygpKTsK
KyAgICBSVU4odGVzdENoZWNrQWRkSW1tKCkpOwogCiAgICAgUlVOKHRlc3RDb21wYXJlKEVxdWFs
LCA0MiwgNDIpKTsKICAgICBSVU4odGVzdENvbXBhcmUoTm90RXF1YWwsIDQyLCA0MikpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJdGVyYXRlZFJlZ2lzdGVyQ29hbGVz
Y2luZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJ
dGVyYXRlZFJlZ2lzdGVyQ29hbGVzY2luZy5jcHAJKHJldmlzaW9uIDE5MjM4OSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySXRlcmF0ZWRSZWdpc3RlckNvYWxlc2NpbmcuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC05MjAsMTMgKzkyMCwxNCBAQCB2b2lkIGl0ZXJhdGVkUmVnaXN0
ZXJDb2FsZXNjaW5nKENvZGUmIGNvCiAgICAgICAgIH0KIAogICAgICAgICBncEFsbG9jYXRvci5h
bGxvY2F0ZSgpOworICAgICAgICBmcEFsbG9jYXRvci5hbGxvY2F0ZSgpOworCiAgICAgICAgIGlm
IChncEFsbG9jYXRvci5zcGlsbGVkVG1wKCkuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICBhc3Np
Z25SZWdpc3RlclRvVG1wSW5Qcm9ncmFtKGNvZGUsIGdwQWxsb2NhdG9yKTsKICAgICAgICAgICAg
IGdwSXNDb2xvcmVkID0gdHJ1ZTsKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICBhZGRTcGls
bEFuZEZpbGxUb1Byb2dyYW08QXJnOjpHUD4oY29kZSwgZ3BBbGxvY2F0b3Iuc3BpbGxlZFRtcCgp
KTsKIAotICAgICAgICBmcEFsbG9jYXRvci5hbGxvY2F0ZSgpOwogICAgICAgICBpZiAoZnBBbGxv
Y2F0b3Iuc3BpbGxlZFRtcCgpLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgYXNzaWduUmVnaXN0
ZXJUb1RtcEluUHJvZ3JhbShjb2RlLCBmcEFsbG9jYXRvcik7CiAgICAgICAgICAgICBmcElzQ29s
b3JlZCA9IHRydWU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpck9wY29k
ZS5vcGNvZGVzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWly
T3Bjb2RlLm9wY29kZXMJKHJldmlzaW9uIDE5MjM4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlyT3Bjb2RlLm9wY29kZXMJKHdvcmtpbmcgY29weSkKQEAgLTE4Myw2ICsxODMs
MTQgQEAgWG9yNjQgVTpHLCBVRDpHCiAgICAgVG1wLCBBZGRyCiAgICAgSW1tLCBUbXAKIAorQ29u
dmVydEludDMyVG9Eb3VibGUgVTpHLCBEOkYKKyAgICBJbW0sIFRtcAorICAgIFRtcCwgVG1wCisg
ICAgQWRkciwgVG1wCisKK0NvbnZlcnRJbnQ2NFRvRG91YmxlIFU6RywgRDpGCisgICAgVG1wLCBU
bXAKKwogIyBOb3RlIHRoYXQgTW92ZSBvcGVyYXRlcyBvdmVyIHRoZSBmdWxsIHJlZ2lzdGVyIHNp
emUsIHdoaWNoIGlzIGVpdGhlciAzMi1iaXQgb3IgNjQtYml0IGRlcGVuZGluZyBvbgogIyB0aGUg
cGxhdGZvcm0uIEknbSBub3QgZW50aXJlbHkgc3VyZSB0aGF0IHRoaXMgaXMgYSBnb29kIHRoaW5n
OyBpdCBtaWdodCBiZSBiZXR0ZXIgdG8ganVzdCBoYXZlIGEKICMgTW92ZTY0IGluc3RydWN0aW9u
LiBPVE9ILCBvdXIgTWFjcm9Bc3NlbWJsZXJzIGFscmVhZHkgaGF2ZSB0aGlzIG5vdGlvbiBvZiAi
bW92ZSgpIiB0aGF0IGJhc2ljYWxseQpAQCAtMzAxLDEwICszMDksMTcgQEAgQnJhbmNoQWRkMzIg
VTpHLCBVOkcsIFVEOkcgL2JyYW5jaAogICAgIFJlc0NvbmQsIFRtcCwgQWRkcgogICAgIFJlc0Nv
bmQsIEFkZHIsIFRtcAogCitCcmFuY2hBZGQ2NCBVOkcsIFU6RywgVUQ6RyAvYnJhbmNoCisgICAg
UmVzQ29uZCwgSW1tLCBUbXAKKyAgICBSZXNDb25kLCBUbXAsIFRtcAorCiBCcmFuY2hNdWwzMiBV
OkcsIFU6RywgVUQ6RyAvYnJhbmNoCiAgICAgUmVzQ29uZCwgVG1wLCBUbXAKICAgICBSZXNDb25k
LCBBZGRyLCBUbXAKIAorQnJhbmNoTXVsNjQgVTpHLCBVOkcsIFVEOkcgL2JyYW5jaAorICAgIFJl
c0NvbmQsIFRtcCwgVG1wCisKIEJyYW5jaFN1YjMyIFU6RywgVTpHLCBVRDpHIC9icmFuY2gKICAg
ICBSZXNDb25kLCBUbXAsIFRtcAogICAgIFJlc0NvbmQsIEltbSwgVG1wCkBAIC0zMTIsOSArMzI3
LDE2IEBAIEJyYW5jaFN1YjMyIFU6RywgVTpHLCBVRDpHIC9icmFuY2gKICAgICBSZXNDb25kLCBU
bXAsIEFkZHIKICAgICBSZXNDb25kLCBBZGRyLCBUbXAKIAorQnJhbmNoU3ViNjQgVTpHLCBVOkcs
IFVEOkcgL2JyYW5jaAorICAgIFJlc0NvbmQsIEltbSwgVG1wCisgICAgUmVzQ29uZCwgVG1wLCBU
bXAKKwogQnJhbmNoTmVnMzIgVTpHLCBVRDpHIC9icmFuY2gKICAgICBSZXNDb25kLCBUbXAKIAor
QnJhbmNoTmVnNjQgVTpHLCBVRDpHIC9icmFuY2gKKyAgICBSZXNDb25kLCBUbXAKKwogSnVtcCAv
YnJhbmNoCiAKIFJldCAvdGVybWluYWwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9h
aXIvb3Bjb2RlX2dlbmVyYXRvci5yYgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL29wY29kZV9nZW5lcmF0b3IucmIJKHJldmlzaW9uIDE5MjM4OSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvb3Bjb2RlX2dlbmVyYXRvci5yYgkod29ya2luZyBjb3B5
KQpAQCAtNzkxLDIwICs3OTEsMjggQEAgd3JpdGVIKCJPcGNvZGVHZW5lcmF0ZWQiKSB7CiAgICAg
b3V0cC5wdXRzICJib29sIEluc3Q6Omhhc05vbkFyZ05vbkNvbnRyb2xFZmZlY3RzKCkiCiAgICAg
b3V0cC5wdXRzICJ7IgogICAgIG91dHAucHV0cyAic3dpdGNoIChvcGNvZGUpIHsiCisgICAgZm91
bmRUcnVlID0gZmFsc2UKICAgICAkb3Bjb2Rlcy52YWx1ZXMuZWFjaCB7CiAgICAgICAgIHwgb3Bj
b2RlIHwKICAgICAgICAgaWYgb3Bjb2RlLmF0dHJpYnV0ZXNbOmVmZmVjdHNdCiAgICAgICAgICAg
ICBvdXRwLnB1dHMgImNhc2UgI3tvcGNvZGUubmFtZX06IgorICAgICAgICAgICAgZm91bmRUcnVl
ID0gdHJ1ZQogICAgICAgICBlbmQKICAgICB9Ci0gICAgb3V0cC5wdXRzICJyZXR1cm4gdHJ1ZTsi
CisgICAgaWYgZm91bmRUcnVlCisgICAgICAgIG91dHAucHV0cyAicmV0dXJuIHRydWU7IgorICAg
IGVuZAorICAgIGZvdW5kVHJ1ZSA9IGZhbHNlCiAgICAgJG9wY29kZXMudmFsdWVzLmVhY2ggewog
ICAgICAgICB8IG9wY29kZSB8CiAgICAgICAgIGlmIG9wY29kZS5zcGVjaWFsCiAgICAgICAgICAg
ICBvdXRwLnB1dHMgImNhc2UgI3tvcGNvZGUubmFtZX06IgorICAgICAgICAgICAgZm91bmRUcnVl
ID0gdHJ1ZQogICAgICAgICBlbmQKICAgICB9Ci0gICAgb3V0cC5wdXRzICJyZXR1cm4gYXJnc1sw
XS5zcGVjaWFsKCktPmhhc05vbkFyZ05vbkNvbnRyb2xFZmZlY3RzKCk7IgorICAgIGlmIGZvdW5k
VHJ1ZQorICAgICAgICBvdXRwLnB1dHMgInJldHVybiBhcmdzWzBdLnNwZWNpYWwoKS0+aGFzTm9u
QXJnTm9uQ29udHJvbEVmZmVjdHMoKTsiCisgICAgZW5kCiAgICAgb3V0cC5wdXRzICJkZWZhdWx0
OiIKICAgICBvdXRwLnB1dHMgInJldHVybiBmYWxzZTsiCiAgICAgb3V0cC5wdXRzICJ9IgpAQCAt
ODEzLDIwICs4MjEsMjggQEAgd3JpdGVIKCJPcGNvZGVHZW5lcmF0ZWQiKSB7CiAgICAgb3V0cC5w
dXRzICJib29sIEluc3Q6Omhhc05vbkFyZ0VmZmVjdHMoKSIKICAgICBvdXRwLnB1dHMgInsiCiAg
ICAgb3V0cC5wdXRzICJzd2l0Y2ggKG9wY29kZSkgeyIKKyAgICBmb3VuZFRydWUgPSBmYWxzZQog
ICAgICRvcGNvZGVzLnZhbHVlcy5lYWNoIHsKICAgICAgICAgfCBvcGNvZGUgfAogICAgICAgICBp
ZiBvcGNvZGUuYXR0cmlidXRlc1s6YnJhbmNoXSBvciBvcGNvZGUuYXR0cmlidXRlc1s6dGVybWlu
YWxdIG9yIG9wY29kZS5hdHRyaWJ1dGVzWzplZmZlY3RzXQogICAgICAgICAgICAgb3V0cC5wdXRz
ICJjYXNlICN7b3Bjb2RlLm5hbWV9OiIKKyAgICAgICAgICAgIGZvdW5kVHJ1ZSA9IHRydWUKICAg
ICAgICAgZW5kCiAgICAgfQotICAgIG91dHAucHV0cyAicmV0dXJuIHRydWU7IgorICAgIGlmIGZv
dW5kVHJ1ZQorICAgICAgICBvdXRwLnB1dHMgInJldHVybiB0cnVlOyIKKyAgICBlbmQKKyAgICBm
b3VuZFRydWUgPSBmYWxzZQogICAgICRvcGNvZGVzLnZhbHVlcy5lYWNoIHsKICAgICAgICAgfCBv
cGNvZGUgfAogICAgICAgICBpZiBvcGNvZGUuc3BlY2lhbAogICAgICAgICAgICAgb3V0cC5wdXRz
ICJjYXNlICN7b3Bjb2RlLm5hbWV9OiIKKyAgICAgICAgICAgIGZvdW5kVHJ1ZSA9IHRydWUKICAg
ICAgICAgZW5kCiAgICAgfQotICAgIG91dHAucHV0cyAicmV0dXJuIGFyZ3NbMF0uc3BlY2lhbCgp
LT5oYXNOb25BcmdOb25Db250cm9sRWZmZWN0cygpOyIKKyAgICBpZiBmb3VuZFRydWUKKyAgICAg
ICAgb3V0cC5wdXRzICJyZXR1cm4gYXJnc1swXS5zcGVjaWFsKCktPmhhc05vbkFyZ05vbkNvbnRy
b2xFZmZlY3RzKCk7IgorICAgIGVuZAogICAgIG91dHAucHV0cyAiZGVmYXVsdDoiCiAgICAgb3V0
cC5wdXRzICJyZXR1cm4gZmFsc2U7IgogICAgIG91dHAucHV0cyAifSIK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>265452</attachid>
            <date>2015-11-12 16:49:19 -0800</date>
            <delta_ts>2015-11-12 17:23:03 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>46245</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTkyMzk2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDg1IEBA
CisyMDE1LTExLTEyICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
QjMgc2hvdWxkIGJlIGFibGUgdG8gY29tcGlsZSBwcm9ncmFtcyB3aXRoIENoZWNrQWRkLCBDaGVj
a1N1YiwgYW5kIENoZWNrTXVsCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xNTEyMTMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBUaGlzIGFkZHMgbG93ZXJpbmcgY29kZSBmb3IgQ2hlY2tBZGQsIENoZWNrU3Vi
LCBhbmQgQ2hlY2tNdWwgYWxvbmcgd2l0aCBzdXBwb3J0IGZvciBDaGVja05lZworICAgICAgICAo
aS5lLiBDaGVja1N1YiB3aXRoIHRoZSBsZWZ0IGNoaWxkIGJlaW5nIHplcm8pLgorCisgICAgICAg
IFRoaXMgYWRkcyB0ZXN0cyBmb3IgdGhlc2UgdGhpbmdzLCBieSBzaW11bGF0aW5nIHdoYXQgSlMg
d291bGQgZG86IGlmIHRoZXJlIGlzIG92ZXJmbG93LCByZXZlcnQKKyAgICAgICAgdG8gZG91Ymxl
IG1hdGguIFRvIHdyaXRlIHRoZSB0ZXN0LCBJIG5lZWRlZCBzdXBwb3J0IGZvciBJVG9EIHNvIEkg
YWRkZWQgdGhhdCBzdXBwb3J0LgorCisgICAgICAgIFRoaXMgYWxzbyBmaXhlcyBhIG1lbW9yeSBj
b3JydXB0aW9uIGJ1ZyBpbiB0aGUgcmVnaXN0ZXIgYWxsb2NhdG9yLgorCisgICAgICAgIEFsc28g
Zml4ZXMgYSBidWcgaW4gb3Bjb2RlX2dlbmVyYXRvci5yYiB3aGVyZSB3ZSB3ZXJlIGVtaXR0aW5n
IHN0cmF5ICJyZXR1cm4iIHN0YXRlbWVudHMgaW5zaWRlCisgICAgICAgIHN3aXRjaCBzdGF0ZW1l
bnRzLiBJIHRoaW5rIHRoaXMgd2FzIGJlbmlnbiwgYnV0IEknbSBub3Qgc3VyZSwgc28gSSBmaXhl
ZCBpdC4KKworICAgICAgICBOb3RlIHRoYXQgSSBoYWQgdG8gY29udmVydCBDaGVja011bCBoYW5k
bGluZyB0byBhbHdheXMgdXNlIGEgdGhyZWUtb3BlcmFuZCBmb3JtLiBUaGF0J3MgYmVjYXVzZQor
ICAgICAgICB0aGVyZSBpcyBubyBvdGhlciB3YXkgdG8gdGVsbCBBaXIgdGhhdCB3ZSBuZWVkIHRo
ZSBvcmlnaW5hbCB2YWx1ZSBhbGl2ZS4gVGhpcyBtZWFucyB0aGF0IG9uIFg4NgorICAgICAgICB3
ZSdsbCBlbWl0IGFuIGV4dHJhIE1vdmUganVzdCBiZWZvcmUgdGhlIGNoZWNrZWQgbXVsLiBUaGF0
J3MgcHJvYmFibHkgZmluZSBzaW5jZSB0aGF0J3MKKyAgICAgICAgbmVjZXNzYXJ5IGFueXdheS4K
KworICAgICAgICAqIGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4Nl82NC5oOgorICAgICAgICAo
SlNDOjpNYWNyb0Fzc2VtYmxlclg4Nl82NDo6YnJhbmNoTXVsNjQpOgorICAgICAgICAoSlNDOjpN
YWNyb0Fzc2VtYmxlclg4Nl82NDo6YnJhbmNoU3ViNjQpOgorICAgICAgICAqIGIzL0IzQ2hlY2tT
cGVjaWFsLmNwcDoKKyAgICAgICAgKEpTQzo6QjM6OkNoZWNrU3BlY2lhbDo6Z2VuZXJhdGUpOgor
ICAgICAgICAqIGIzL0IzQ29uc3QzMlZhbHVlLmNwcDoKKyAgICAgICAgKEpTQzo6QjM6OkNvbnN0
MzJWYWx1ZTo6bXVsQ29uc3RhbnQpOgorICAgICAgICAoSlNDOjpCMzo6Q29uc3QzMlZhbHVlOjpj
aGVja0FkZENvbnN0YW50KToKKyAgICAgICAgKEpTQzo6QjM6OkNvbnN0MzJWYWx1ZTo6Y2hlY2tT
dWJDb25zdGFudCk6CisgICAgICAgIChKU0M6OkIzOjpDb25zdDMyVmFsdWU6OmNoZWNrTXVsQ29u
c3RhbnQpOgorICAgICAgICAoSlNDOjpCMzo6Q29uc3QzMlZhbHVlOjpkaXZDb25zdGFudCk6Cisg
ICAgICAgICogYjMvQjNDb25zdDMyVmFsdWUuaDoKKyAgICAgICAgKiBiMy9CM0NvbnN0NjRWYWx1
ZS5jcHA6CisgICAgICAgIChKU0M6OkIzOjpDb25zdDY0VmFsdWU6Om11bENvbnN0YW50KToKKyAg
ICAgICAgKEpTQzo6QjM6OkNvbnN0NjRWYWx1ZTo6Y2hlY2tBZGRDb25zdGFudCk6CisgICAgICAg
IChKU0M6OkIzOjpDb25zdDY0VmFsdWU6OmNoZWNrU3ViQ29uc3RhbnQpOgorICAgICAgICAoSlND
OjpCMzo6Q29uc3Q2NFZhbHVlOjpjaGVja011bENvbnN0YW50KToKKyAgICAgICAgKEpTQzo6QjM6
OkNvbnN0NjRWYWx1ZTo6ZGl2Q29uc3RhbnQpOgorICAgICAgICAqIGIzL0IzQ29uc3Q2NFZhbHVl
Lmg6CisgICAgICAgICogYjMvQjNMb3dlclRvQWlyLmNwcDoKKyAgICAgICAgKEpTQzo6QjM6OkFp
cjo6TG93ZXJUb0Fpcjo6YXBwZW5kVW5PcCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okxvd2Vy
VG9BaXI6OmVuc3VyZVNwZWNpYWwpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMb3dlclRvQWly
OjplbnN1cmVDaGVja1NwZWNpYWwpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMb3dlclRvQWly
OjpmaWxsU3RhY2ttYXApOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMb3dlclRvQWlyOjpsb3dl
cik6CisgICAgICAgICogYjMvQjNSZWR1Y2VTdHJlbmd0aC5jcHA6CisgICAgICAgICogYjMvQjNW
YWx1ZS5jcHA6CisgICAgICAgIChKU0M6OkIzOjpWYWx1ZTo6bXVsQ29uc3RhbnQpOgorICAgICAg
ICAoSlNDOjpCMzo6VmFsdWU6OmNoZWNrQWRkQ29uc3RhbnQpOgorICAgICAgICAoSlNDOjpCMzo6
VmFsdWU6OmNoZWNrU3ViQ29uc3RhbnQpOgorICAgICAgICAoSlNDOjpCMzo6VmFsdWU6OmNoZWNr
TXVsQ29uc3RhbnQpOgorICAgICAgICAoSlNDOjpCMzo6VmFsdWU6OmRpdkNvbnN0YW50KToKKyAg
ICAgICAgKiBiMy9CM1ZhbHVlLmg6CisgICAgICAgICogYjMvYWlyL0Fpckl0ZXJhdGVkUmVnaXN0
ZXJDb2FsZXNjaW5nLmNwcDoKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6aXRlcmF0ZWRSZWdpc3Rl
ckNvYWxlc2NpbmcpOgorICAgICAgICAqIGIzL2Fpci9BaXJPcGNvZGUub3Bjb2RlczoKKyAgICAg
ICAgKiBiMy9haXIvb3Bjb2RlX2dlbmVyYXRvci5yYjoKKyAgICAgICAgKiBiMy90ZXN0YjMuY3Bw
OgorICAgICAgICAoSlNDOjpCMzo6dGVzdENoZWNrTWVnYUNvbWJvKToKKyAgICAgICAgKEpTQzo6
QjM6OnRlc3RDaGVja0FkZEltbSk6CisgICAgICAgIChKU0M6OkIzOjp0ZXN0Q2hlY2tBZGQpOgor
ICAgICAgICAoSlNDOjpCMzo6dGVzdENoZWNrQWRkNjQpOgorICAgICAgICAoSlNDOjpCMzo6dGVz
dENoZWNrQWRkRm9sZCk6CisgICAgICAgIChKU0M6OkIzOjp0ZXN0Q2hlY2tBZGRGb2xkRmFpbCk6
CisgICAgICAgIChKU0M6OkIzOjp0ZXN0Q2hlY2tTdWJJbW0pOgorICAgICAgICAoSlNDOjpCMzo6
dGVzdENoZWNrU3ViKToKKyAgICAgICAgKEpTQzo6QjM6OmRvdWJsZVN1Yik6CisgICAgICAgIChK
U0M6OkIzOjp0ZXN0Q2hlY2tTdWI2NCk6CisgICAgICAgIChKU0M6OkIzOjp0ZXN0Q2hlY2tTdWJG
b2xkKToKKyAgICAgICAgKEpTQzo6QjM6OnRlc3RDaGVja1N1YkZvbGRGYWlsKToKKyAgICAgICAg
KEpTQzo6QjM6OnRlc3RDaGVja05lZyk6CisgICAgICAgIChKU0M6OkIzOjp0ZXN0Q2hlY2tOZWc2
NCk6CisgICAgICAgIChKU0M6OkIzOjp0ZXN0Q2hlY2tNdWwpOgorICAgICAgICAoSlNDOjpCMzo6
dGVzdENoZWNrTXVsNjQpOgorICAgICAgICAoSlNDOjpCMzo6dGVzdENoZWNrTXVsRm9sZCk6Cisg
ICAgICAgIChKU0M6OkIzOjp0ZXN0Q2hlY2tNdWxGb2xkRmFpbCk6CisgICAgICAgIChKU0M6OkIz
OjpnZW5lcmljVGVzdENvbXBhcmUpOgorICAgICAgICAoSlNDOjpCMzo6cnVuKToKKwogMjAxNS0x
MS0xMiAgSm9zZXBoIFBlY29yYXJvICA8cGVjb3Jhcm9AYXBwbGUuY29tPgogCiAgICAgICAgIFdl
YiBJbnNwZWN0b3I6IFJlZHVjZSBsaXN0IG9mIHNhdmVkIGNvbnNvbGUgbWVzc2FnZXMKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZfNjQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1i
bGVyWDg2XzY0LmgJKHJldmlzaW9uIDE5MjM4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9h
c3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZfNjQuaAkod29ya2luZyBjb3B5KQpAQCAtNzg1LDYg
Kzc4NSwxNCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBKdW1wKG1fYXNzZW1ibGVyLmpDQyh4
ODZDb25kaXRpb24oY29uZCkpKTsKICAgICB9CiAKKyAgICBKdW1wIGJyYW5jaE11bDY0KFJlc3Vs
dENvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIHNyYzEsIFJlZ2lzdGVySUQgc3JjMiwgUmVnaXN0
ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgaWYgKHNyYzEgPT0gZGVzdCkKKyAgICAgICAgICAg
IHJldHVybiBicmFuY2hNdWw2NChjb25kLCBzcmMyLCBkZXN0KTsKKyAgICAgICAgbW92ZShzcmMy
LCBkZXN0KTsKKyAgICAgICAgcmV0dXJuIGJyYW5jaE11bDY0KGNvbmQsIHNyYzEsIGRlc3QpOwor
ICAgIH0KKwogICAgIEp1bXAgYnJhbmNoU3ViNjQoUmVzdWx0Q29uZGl0aW9uIGNvbmQsIFRydXN0
ZWRJbW0zMiBpbW0sIFJlZ2lzdGVySUQgZGVzdCkKICAgICB7CiAgICAgICAgIHN1YjY0KGltbSwg
ZGVzdCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDaGVja1NwZWNpYWwuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NoZWNrU3BlY2lhbC5j
cHAJKHJldmlzaW9uIDE5MjM4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NoZWNr
U3BlY2lhbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzMSwxMyArMTMxLDE2IEBAIENDYWxsSGVs
cGVyczo6SnVtcCBDaGVja1NwZWNpYWw6OmdlbmVyYXQKIAogICAgIFZlY3RvcjxWYWx1ZVJlcD4g
cmVwczsKICAgICBpZiAoaXNDaGVja01hdGgodmFsdWUtPm9wY29kZSgpKSkgewotICAgICAgICBp
ZiAodmFsdWUtPm9wY29kZSgpID09IENoZWNrTXVsKQotICAgICAgICAgICAgcmVwcy5hcHBlbmQo
VmFsdWVSZXAoKSk7Ci0gICAgICAgIGVsc2UgaWYgKHZhbHVlLT5vcGNvZGUoKSA9PSBDaGVja1N1
YiAmJiB2YWx1ZS0+Y2hpbGQoMCktPmlzSW50KDApKQotICAgICAgICAgICAgcmVwcy5hcHBlbmQo
VmFsdWVSZXA6OmNvbnN0YW50KDApKTsKLSAgICAgICAgZWxzZQorICAgICAgICBpZiAodmFsdWUt
Pm9wY29kZSgpID09IENoZWNrTXVsKSB7CisgICAgICAgICAgICByZXBzLmFwcGVuZChyZXBGb3JB
cmcoKmNvbnRleHQuY29kZSwgaW5zdC5hcmdzWzJdKSk7CiAgICAgICAgICAgICByZXBzLmFwcGVu
ZChyZXBGb3JBcmcoKmNvbnRleHQuY29kZSwgaW5zdC5hcmdzWzNdKSk7Ci0gICAgICAgIHJlcHMu
YXBwZW5kKHJlcEZvckFyZygqY29udGV4dC5jb2RlLCBpbnN0LmFyZ3NbMl0pKTsKKyAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgIGlmICh2YWx1ZS0+b3Bjb2RlKCkgPT0gQ2hlY2tTdWIgJiYg
dmFsdWUtPmNoaWxkKDApLT5pc0ludCgwKSkKKyAgICAgICAgICAgICAgICByZXBzLmFwcGVuZChW
YWx1ZVJlcDo6Y29uc3RhbnQoMCkpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAg
IHJlcHMuYXBwZW5kKHJlcEZvckFyZygqY29udGV4dC5jb2RlLCBpbnN0LmFyZ3NbM10pKTsKKyAg
ICAgICAgICAgIHJlcHMuYXBwZW5kKHJlcEZvckFyZygqY29udGV4dC5jb2RlLCBpbnN0LmFyZ3Nb
Ml0pKTsKKyAgICAgICAgfQogICAgIH0gZWxzZSB7CiAgICAgICAgIEFTU0VSVCh2YWx1ZS0+b3Bj
b2RlKCkgPT0gQ2hlY2spOwogICAgICAgICByZXBzLmFwcGVuZChWYWx1ZVJlcDo6Y29uc3RhbnQo
MSkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3QzMlZhbHVlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25zdDMyVmFsdWUuY3Bw
CShyZXZpc2lvbiAxOTIzODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25zdDMy
VmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02OCw2ICs2OCwzNiBAQCBWYWx1ZSogQ29uc3Qz
MlZhbHVlOjptdWxDb25zdGFudChQcm9jZWR1CiAgICAgcmV0dXJuIHByb2MuYWRkPENvbnN0MzJW
YWx1ZT4ob3JpZ2luKCksIG1fdmFsdWUgKiBvdGhlci0+YXNJbnQzMigpKTsKIH0KIAorVmFsdWUq
IENvbnN0MzJWYWx1ZTo6Y2hlY2tBZGRDb25zdGFudChQcm9jZWR1cmUmIHByb2MsIGNvbnN0IFZh
bHVlKiBvdGhlcikgY29uc3QKK3sKKyAgICBpZiAoIW90aGVyLT5oYXNJbnQzMigpKQorICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKyAgICBDaGVja2VkSW50MzIgcmVzdWx0ID0gQ2hlY2tlZEludDMy
KG1fdmFsdWUpICsgQ2hlY2tlZEludDMyKG90aGVyLT5hc0ludDMyKCkpOworICAgIGlmIChyZXN1
bHQuaGFzT3ZlcmZsb3dlZCgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1cm4g
cHJvYy5hZGQ8Q29uc3QzMlZhbHVlPihvcmlnaW4oKSwgcmVzdWx0LnVuc2FmZUdldCgpKTsKK30K
KworVmFsdWUqIENvbnN0MzJWYWx1ZTo6Y2hlY2tTdWJDb25zdGFudChQcm9jZWR1cmUmIHByb2Ms
IGNvbnN0IFZhbHVlKiBvdGhlcikgY29uc3QKK3sKKyAgICBpZiAoIW90aGVyLT5oYXNJbnQzMigp
KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBDaGVja2VkSW50MzIgcmVzdWx0ID0gQ2hl
Y2tlZEludDMyKG1fdmFsdWUpIC0gQ2hlY2tlZEludDMyKG90aGVyLT5hc0ludDMyKCkpOworICAg
IGlmIChyZXN1bHQuaGFzT3ZlcmZsb3dlZCgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAg
ICByZXR1cm4gcHJvYy5hZGQ8Q29uc3QzMlZhbHVlPihvcmlnaW4oKSwgcmVzdWx0LnVuc2FmZUdl
dCgpKTsKK30KKworVmFsdWUqIENvbnN0MzJWYWx1ZTo6Y2hlY2tNdWxDb25zdGFudChQcm9jZWR1
cmUmIHByb2MsIGNvbnN0IFZhbHVlKiBvdGhlcikgY29uc3QKK3sKKyAgICBpZiAoIW90aGVyLT5o
YXNJbnQzMigpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBDaGVja2VkSW50MzIgcmVz
dWx0ID0gQ2hlY2tlZEludDMyKG1fdmFsdWUpICogQ2hlY2tlZEludDMyKG90aGVyLT5hc0ludDMy
KCkpOworICAgIGlmIChyZXN1bHQuaGFzT3ZlcmZsb3dlZCgpKQorICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKyAgICByZXR1cm4gcHJvYy5hZGQ8Q29uc3QzMlZhbHVlPihvcmlnaW4oKSwgcmVzdWx0
LnVuc2FmZUdldCgpKTsKK30KKwogVmFsdWUqIENvbnN0MzJWYWx1ZTo6ZGl2Q29uc3RhbnQoUHJv
Y2VkdXJlJiBwcm9jLCBjb25zdCBWYWx1ZSogb3RoZXIpIGNvbnN0CiB7CiAgICAgaWYgKCFvdGhl
ci0+aGFzSW50MzIoKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0MzJW
YWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0MzJW
YWx1ZS5oCShyZXZpc2lvbiAxOTIzODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjND
b25zdDMyVmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtNDUsNiArNDUsOSBAQCBwdWJsaWM6CiAg
ICAgVmFsdWUqIGFkZENvbnN0YW50KFByb2NlZHVyZSYsIGNvbnN0IFZhbHVlKiBvdGhlcikgY29u
c3Qgb3ZlcnJpZGU7CiAgICAgVmFsdWUqIHN1YkNvbnN0YW50KFByb2NlZHVyZSYsIGNvbnN0IFZh
bHVlKiBvdGhlcikgY29uc3Qgb3ZlcnJpZGU7CiAgICAgVmFsdWUqIG11bENvbnN0YW50KFByb2Nl
ZHVyZSYsIGNvbnN0IFZhbHVlKiBvdGhlcikgY29uc3Qgb3ZlcnJpZGU7CisgICAgVmFsdWUqIGNo
ZWNrQWRkQ29uc3RhbnQoUHJvY2VkdXJlJiwgY29uc3QgVmFsdWUqIG90aGVyKSBjb25zdCBvdmVy
cmlkZTsKKyAgICBWYWx1ZSogY2hlY2tTdWJDb25zdGFudChQcm9jZWR1cmUmLCBjb25zdCBWYWx1
ZSogb3RoZXIpIGNvbnN0IG92ZXJyaWRlOworICAgIFZhbHVlKiBjaGVja011bENvbnN0YW50KFBy
b2NlZHVyZSYsIGNvbnN0IFZhbHVlKiBvdGhlcikgY29uc3Qgb3ZlcnJpZGU7CiAgICAgVmFsdWUq
IGRpdkNvbnN0YW50KFByb2NlZHVyZSYsIGNvbnN0IFZhbHVlKiBvdGhlcikgY29uc3Qgb3ZlcnJp
ZGU7CiAgICAgVmFsdWUqIGJpdEFuZENvbnN0YW50KFByb2NlZHVyZSYsIGNvbnN0IFZhbHVlKiBv
dGhlcikgY29uc3Qgb3ZlcnJpZGU7CiAgICAgVmFsdWUqIGJpdE9yQ29uc3RhbnQoUHJvY2VkdXJl
JiwgY29uc3QgVmFsdWUqIG90aGVyKSBjb25zdCBvdmVycmlkZTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM0NvbnN0NjRWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzQ29uc3Q2NFZhbHVlLmNwcAkocmV2aXNpb24gMTkyMzg5KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3Q2NFZhbHVlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNjgsNiArNjgsMzYgQEAgVmFsdWUqIENvbnN0NjRWYWx1ZTo6bXVsQ29uc3RhbnQoUHJv
Y2VkdQogICAgIHJldHVybiBwcm9jLmFkZDxDb25zdDY0VmFsdWU+KG9yaWdpbigpLCBtX3ZhbHVl
ICogb3RoZXItPmFzSW50NjQoKSk7CiB9CiAKK1ZhbHVlKiBDb25zdDY0VmFsdWU6OmNoZWNrQWRk
Q29uc3RhbnQoUHJvY2VkdXJlJiBwcm9jLCBjb25zdCBWYWx1ZSogb3RoZXIpIGNvbnN0Cit7Cisg
ICAgaWYgKCFvdGhlci0+aGFzSW50NjQoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAg
Q2hlY2tlZEludDY0IHJlc3VsdCA9IENoZWNrZWRJbnQ2NChtX3ZhbHVlKSArIENoZWNrZWRJbnQ2
NChvdGhlci0+YXNJbnQ2NCgpKTsKKyAgICBpZiAocmVzdWx0Lmhhc092ZXJmbG93ZWQoKSkKKyAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgcmV0dXJuIHByb2MuYWRkPENvbnN0NjRWYWx1ZT4o
b3JpZ2luKCksIHJlc3VsdC51bnNhZmVHZXQoKSk7Cit9CisKK1ZhbHVlKiBDb25zdDY0VmFsdWU6
OmNoZWNrU3ViQ29uc3RhbnQoUHJvY2VkdXJlJiBwcm9jLCBjb25zdCBWYWx1ZSogb3RoZXIpIGNv
bnN0Cit7CisgICAgaWYgKCFvdGhlci0+aGFzSW50NjQoKSkKKyAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisgICAgQ2hlY2tlZEludDY0IHJlc3VsdCA9IENoZWNrZWRJbnQ2NChtX3ZhbHVlKSAtIENo
ZWNrZWRJbnQ2NChvdGhlci0+YXNJbnQ2NCgpKTsKKyAgICBpZiAocmVzdWx0Lmhhc092ZXJmbG93
ZWQoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgcmV0dXJuIHByb2MuYWRkPENvbnN0
NjRWYWx1ZT4ob3JpZ2luKCksIHJlc3VsdC51bnNhZmVHZXQoKSk7Cit9CisKK1ZhbHVlKiBDb25z
dDY0VmFsdWU6OmNoZWNrTXVsQ29uc3RhbnQoUHJvY2VkdXJlJiBwcm9jLCBjb25zdCBWYWx1ZSog
b3RoZXIpIGNvbnN0Cit7CisgICAgaWYgKCFvdGhlci0+aGFzSW50NjQoKSkKKyAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisgICAgQ2hlY2tlZEludDY0IHJlc3VsdCA9IENoZWNrZWRJbnQ2NChtX3Zh
bHVlKSAqIENoZWNrZWRJbnQ2NChvdGhlci0+YXNJbnQ2NCgpKTsKKyAgICBpZiAocmVzdWx0Lmhh
c092ZXJmbG93ZWQoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgcmV0dXJuIHByb2Mu
YWRkPENvbnN0NjRWYWx1ZT4ob3JpZ2luKCksIHJlc3VsdC51bnNhZmVHZXQoKSk7Cit9CisKIFZh
bHVlKiBDb25zdDY0VmFsdWU6OmRpdkNvbnN0YW50KFByb2NlZHVyZSYgcHJvYywgY29uc3QgVmFs
dWUqIG90aGVyKSBjb25zdAogewogICAgIGlmICghb3RoZXItPmhhc0ludDY0KCkpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25zdDY0VmFsdWUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25zdDY0VmFsdWUuaAkocmV2aXNpb24gMTkyMzg5
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3Q2NFZhbHVlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTQ1LDYgKzQ1LDkgQEAgcHVibGljOgogICAgIFZhbHVlKiBhZGRDb25zdGFudChQ
cm9jZWR1cmUmLCBjb25zdCBWYWx1ZSogb3RoZXIpIGNvbnN0IG92ZXJyaWRlOwogICAgIFZhbHVl
KiBzdWJDb25zdGFudChQcm9jZWR1cmUmLCBjb25zdCBWYWx1ZSogb3RoZXIpIGNvbnN0IG92ZXJy
aWRlOwogICAgIFZhbHVlKiBtdWxDb25zdGFudChQcm9jZWR1cmUmLCBjb25zdCBWYWx1ZSogb3Ro
ZXIpIGNvbnN0IG92ZXJyaWRlOworICAgIFZhbHVlKiBjaGVja0FkZENvbnN0YW50KFByb2NlZHVy
ZSYsIGNvbnN0IFZhbHVlKiBvdGhlcikgY29uc3Qgb3ZlcnJpZGU7CisgICAgVmFsdWUqIGNoZWNr
U3ViQ29uc3RhbnQoUHJvY2VkdXJlJiwgY29uc3QgVmFsdWUqIG90aGVyKSBjb25zdCBvdmVycmlk
ZTsKKyAgICBWYWx1ZSogY2hlY2tNdWxDb25zdGFudChQcm9jZWR1cmUmLCBjb25zdCBWYWx1ZSog
b3RoZXIpIGNvbnN0IG92ZXJyaWRlOwogICAgIFZhbHVlKiBkaXZDb25zdGFudChQcm9jZWR1cmUm
LCBjb25zdCBWYWx1ZSogb3RoZXIpIGNvbnN0IG92ZXJyaWRlOwogICAgIFZhbHVlKiBiaXRBbmRD
b25zdGFudChQcm9jZWR1cmUmLCBjb25zdCBWYWx1ZSogb3RoZXIpIGNvbnN0IG92ZXJyaWRlOwog
ICAgIFZhbHVlKiBiaXRPckNvbnN0YW50KFByb2NlZHVyZSYsIGNvbnN0IFZhbHVlKiBvdGhlcikg
Y29uc3Qgb3ZlcnJpZGU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlclRv
QWlyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlclRv
QWlyLmNwcAkocmV2aXNpb24gMTkyMzg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
TG93ZXJUb0Fpci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5NywxMSArNDk3LDE4IEBAIHByaXZh
dGU6CiAgICAgICAgIC8vIG1lYW4gc29tZXRoaW5nIGxpa2U6CiAgICAgICAgIC8vICAgICBiID0g
T3AgYQogCisgICAgICAgIEFyZ1Byb21pc2UgYWRkciA9IGxvYWRQcm9taXNlKHZhbHVlKTsKKyAg
ICAgICAgaWYgKGlzVmFsaWRGb3JtKG9wY29kZSwgYWRkci5raW5kKCksIEFyZzo6VG1wKSkgewor
ICAgICAgICAgICAgYXBwZW5kKG9wY29kZSwgYWRkci5jb25zdW1lKCp0aGlzKSwgcmVzdWx0KTsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCiAgICAgICAgIGlmIChpc1ZhbGlkRm9y
bShvcGNvZGUsIEFyZzo6VG1wLCBBcmc6OlRtcCkpIHsKICAgICAgICAgICAgIGFwcGVuZChvcGNv
ZGUsIHRtcCh2YWx1ZSksIHJlc3VsdCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0K
IAorICAgICAgICBBU1NFUlQodmFsdWUtPnR5cGUoKSA9PSBtX3ZhbHVlLT50eXBlKCkpOwogICAg
ICAgICBhcHBlbmQocmVsYXhlZE1vdmVGb3JUeXBlKG1fdmFsdWUtPnR5cGUoKSksIHRtcCh2YWx1
ZSksIHJlc3VsdCk7CiAgICAgICAgIGFwcGVuZChvcGNvZGUsIHJlc3VsdCk7CiAgICAgfQpAQCAt
NzIwLDYgKzcyNywxNCBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4gZmllbGQ7CiAgICAgfQog
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPgorICAgIENoZWNrU3BlY2lhbCog
ZW5zdXJlQ2hlY2tTcGVjaWFsKEFyZ3VtZW50cyYmLi4uIGFyZ3VtZW50cykKKyAgICB7CisgICAg
ICAgIENoZWNrU3BlY2lhbDo6S2V5IGtleShzdGQ6OmZvcndhcmQ8QXJndW1lbnRzPihhcmd1bWVu
dHMpLi4uKTsKKyAgICAgICAgYXV0byByZXN1bHQgPSBtX2NoZWNrU3BlY2lhbHMuYWRkKGtleSwg
bnVsbHB0cik7CisgICAgICAgIHJldHVybiBlbnN1cmVTcGVjaWFsKHJlc3VsdC5pdGVyYXRvci0+
dmFsdWUsIGtleSk7CisgICAgfQorCiAgICAgdm9pZCBmaWxsU3RhY2ttYXAoSW5zdCYgaW5zdCwg
U3RhY2ttYXBWYWx1ZSogc3RhY2ttYXAsIHVuc2lnbmVkIG51bVNraXBwZWQpCiAgICAgewogICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSBudW1Ta2lwcGVkOyBpIDwgc3RhY2ttYXAtPm51bUNoaWxk
cmVuKCk7ICsraSkgewpAQCAtMTQxOCw2ICsxNDMzLDExIEBAIHByaXZhdGU6CiAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgIH0KIAorICAgICAgICBjYXNlIElUb0Q6IHsKKyAgICAgICAgICAg
IGFwcGVuZFVuT3A8Q29udmVydEludDMyVG9Eb3VibGUsIENvbnZlcnRJbnQ2NFRvRG91YmxlLCBB
aXI6Ok9vcHM+KG1fdmFsdWUtPmNoaWxkKDApKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorCiAgICAgICAgIGNhc2UgQ0NhbGw6IHsKICAgICAgICAgICAgIENDYWxsVmFsdWUqIGND
YWxsID0gbV92YWx1ZS0+YXM8Q0NhbGxWYWx1ZT4oKTsKICAgICAgICAgICAgIEluc3QgaW5zdChQ
YXRjaCwgY0NhbGwsIEFyZzo6c3BlY2lhbChtX2NvZGUuY0NhbGxTcGVjaWFsKCkpKTsKQEAgLTE0
OTcsMTIgKzE1MTcsMTExIEBAIHByaXZhdGU6CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
IH0KIAorICAgICAgICBjYXNlIENoZWNrQWRkOgorICAgICAgICBjYXNlIENoZWNrU3ViOiB7Cisg
ICAgICAgICAgICAvLyBGSVhNRTogTWFrZSB0aGlzIHN1cHBvcnQgY29tbXV0YXRpdml0eS4gVGhh
dCB3aWxsIGxldCB1cyBsZXZlcmFnZSBtb3JlIGluc3RydWN0aW9uIGZvcm1zCisgICAgICAgICAg
ICAvLyBhbmQgaXQgbGV0IHVzIGNvbW11dGUgdG8gbWF4aW1pemUgY29hbGVzY2luZy4KKyAgICAg
ICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTEyMTQK
KworICAgICAgICAgICAgQ2hlY2tWYWx1ZSogY2hlY2tWYWx1ZSA9IG1fdmFsdWUtPmFzPENoZWNr
VmFsdWU+KCk7CisKKyAgICAgICAgICAgIFZhbHVlKiBsZWZ0ID0gY2hlY2tWYWx1ZS0+Y2hpbGQo
MCk7CisgICAgICAgICAgICBWYWx1ZSogcmlnaHQgPSBjaGVja1ZhbHVlLT5jaGlsZCgxKTsKKwor
ICAgICAgICAgICAgVG1wIHJlc3VsdCA9IHRtcChtX3ZhbHVlKTsKKworICAgICAgICAgICAgLy8g
SGFuZGxlIGNoZWNrZWQgbmVnYXRpb24uCisgICAgICAgICAgICBpZiAoY2hlY2tWYWx1ZS0+b3Bj
b2RlKCkgPT0gQ2hlY2tTdWIgJiYgbGVmdC0+aXNJbnQoMCkpIHsKKyAgICAgICAgICAgICAgICBh
cHBlbmQocmVsYXhlZE1vdmVGb3JUeXBlKGNoZWNrVmFsdWUtPnR5cGUoKSksIHRtcChyaWdodCks
IHJlc3VsdCk7CisKKyAgICAgICAgICAgICAgICBBaXI6Ok9wY29kZSBvcGNvZGUgPQorICAgICAg
ICAgICAgICAgICAgICBvcGNvZGVGb3JUeXBlKEJyYW5jaE5lZzMyLCBCcmFuY2hOZWc2NCwgQWly
OjpPb3BzLCBjaGVja1ZhbHVlLT50eXBlKCkpOworICAgICAgICAgICAgICAgIENoZWNrU3BlY2lh
bCogc3BlY2lhbCA9IGVuc3VyZUNoZWNrU3BlY2lhbChvcGNvZGUsIDIpOworCisgICAgICAgICAg
ICAgICAgSW5zdCBpbnN0KFBhdGNoLCBjaGVja1ZhbHVlLCBBcmc6OnNwZWNpYWwoc3BlY2lhbCkp
OworICAgICAgICAgICAgICAgIGluc3QuYXJncy5hcHBlbmQoQXJnOjpyZXNDb25kKE1hY3JvQXNz
ZW1ibGVyOjpPdmVyZmxvdykpOworICAgICAgICAgICAgICAgIGluc3QuYXJncy5hcHBlbmQocmVz
dWx0KTsKKworICAgICAgICAgICAgICAgIGZpbGxTdGFja21hcChpbnN0LCBjaGVja1ZhbHVlLCAy
KTsKKworICAgICAgICAgICAgICAgIG1faW5zdHMubGFzdCgpLmFwcGVuZChXVEY6Om1vdmUoaW5z
dCkpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgYXBwZW5kKHJlbGF4ZWRNb3ZlRm9yVHlwZShtX3ZhbHVlLT50eXBlKCkpLCB0bXAobGVmdCks
IHJlc3VsdCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIEFpcjo6T3Bjb2RlIG9wY29kZSA9
IEFpcjo6T29wczsKKyAgICAgICAgICAgIENoZWNrU3BlY2lhbCogc3BlY2lhbCA9IG51bGxwdHI7
CisgICAgICAgICAgICBzd2l0Y2ggKG1fdmFsdWUtPm9wY29kZSgpKSB7CisgICAgICAgICAgICBj
YXNlIENoZWNrQWRkOgorICAgICAgICAgICAgICAgIG9wY29kZSA9IG9wY29kZUZvclR5cGUoQnJh
bmNoQWRkMzIsIEJyYW5jaEFkZDY0LCBBaXI6Ok9vcHMsIG1fdmFsdWUtPnR5cGUoKSk7CisgICAg
ICAgICAgICAgICAgc3BlY2lhbCA9IGVuc3VyZUNoZWNrU3BlY2lhbChvcGNvZGUsIDMpOworICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBDaGVja1N1YjoKKyAgICAgICAg
ICAgICAgICBvcGNvZGUgPSBvcGNvZGVGb3JUeXBlKEJyYW5jaFN1YjMyLCBCcmFuY2hTdWI2NCwg
QWlyOjpPb3BzLCBtX3ZhbHVlLT50eXBlKCkpOworICAgICAgICAgICAgICAgIHNwZWNpYWwgPSBl
bnN1cmVDaGVja1NwZWNpYWwob3Bjb2RlLCAzKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgSW5zdCBpbnN0KFBhdGNoLCBjaGVja1ZhbHVlLCBBcmc6OnNwZWNpYWwoc3BlY2lhbCkp
OworCisgICAgICAgICAgICBpbnN0LmFyZ3MuYXBwZW5kKEFyZzo6cmVzQ29uZChNYWNyb0Fzc2Vt
Ymxlcjo6T3ZlcmZsb3cpKTsKKworICAgICAgICAgICAgLy8gRklYTUU6IEl0IHdvdWxkIGJlIGdy
ZWF0IHRvIGZ1c2UgTG9hZHMgaW50byB0aGVzZS4gV2UgY3VycmVudGx5IGRvbid0IGRvIGl0IGJl
Y2F1c2UgdGhlCisgICAgICAgICAgICAvLyBydWxlIGZvciBzdGFja21hcHMgaXMgdGhhdCBhbGwg
YWRkcmVzc2VzIGFyZSBqdXN0IHN0YWNrIGFkZHJlc3Nlcy4gTWF5YmUgd2UgY291bGQgcmVsYXgK
KyAgICAgICAgICAgIC8vIHRoaXMgcnVsZSBoZXJlLgorICAgICAgICAgICAgLy8gaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MTIyOAorICAgICAgICAgICAgCisgICAg
ICAgICAgICBpZiAoaW1tKHJpZ2h0KSAmJiBpc1ZhbGlkRm9ybShvcGNvZGUsIEFyZzo6UmVzQ29u
ZCwgQXJnOjpJbW0sIEFyZzo6VG1wKSkKKyAgICAgICAgICAgICAgICBpbnN0LmFyZ3MuYXBwZW5k
KGltbShyaWdodCkpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGluc3QuYXJn
cy5hcHBlbmQodG1wKHJpZ2h0KSk7CisgICAgICAgICAgICBpbnN0LmFyZ3MuYXBwZW5kKHJlc3Vs
dCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGZpbGxTdGFja21hcChpbnN0LCBjaGVja1Zh
bHVlLCAyKTsKKworICAgICAgICAgICAgbV9pbnN0cy5sYXN0KCkuYXBwZW5kKFdURjo6bW92ZShp
bnN0KSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBjYXNlIENo
ZWNrTXVsOiB7CisgICAgICAgICAgICAvLyBIYW5kbGUgbXVsdGlwbGljYXRpb24gc2VwYXJhdGVs
eS4gTXVsdGlwbGljYXRpb24gaXMgaGFyZCBiZWNhdXNlIHdlIGhhdmUgdG8gcHJlc2VydmUKKyAg
ICAgICAgICAgIC8vIGJvdGggaW5wdXRzLiBUaGlzIHJlcXVpcmVzIHVzaW5nIHRocmVlLW9wZXJh
bmQgbXVsdGlwbGljYXRpb24sIGV2ZW4gb24gcGxhdGZvcm1zIHdoZXJlCisgICAgICAgICAgICAv
LyB0aGlzIHJlcXVpcmVzIGFuIGFkZGl0aW9uYWwgTW92ZS4KKworICAgICAgICAgICAgQ2hlY2tW
YWx1ZSogY2hlY2tWYWx1ZSA9IG1fdmFsdWUtPmFzPENoZWNrVmFsdWU+KCk7CisKKyAgICAgICAg
ICAgIFZhbHVlKiBsZWZ0ID0gY2hlY2tWYWx1ZS0+Y2hpbGQoMCk7CisgICAgICAgICAgICBWYWx1
ZSogcmlnaHQgPSBjaGVja1ZhbHVlLT5jaGlsZCgxKTsKKworICAgICAgICAgICAgVG1wIHJlc3Vs
dCA9IHRtcChtX3ZhbHVlKTsKKworICAgICAgICAgICAgQWlyOjpPcGNvZGUgb3Bjb2RlID0KKyAg
ICAgICAgICAgICAgICBvcGNvZGVGb3JUeXBlKEJyYW5jaE11bDMyLCBCcmFuY2hNdWw2NCwgQWly
OjpPb3BzLCBjaGVja1ZhbHVlLT50eXBlKCkpOworICAgICAgICAgICAgQ2hlY2tTcGVjaWFsKiBz
cGVjaWFsID0gZW5zdXJlQ2hlY2tTcGVjaWFsKG9wY29kZSwgNCk7CisKKyAgICAgICAgICAgIC8v
IEZJWE1FOiBIYW5kbGUgaW1tZWRpYXRlcy4KKyAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTEyMzAKKworICAgICAgICAgICAgSW5zdCBpbnN0
KFBhdGNoLCBjaGVja1ZhbHVlLCBBcmc6OnNwZWNpYWwoc3BlY2lhbCkpOworICAgICAgICAgICAg
aW5zdC5hcmdzLmFwcGVuZChBcmc6OnJlc0NvbmQoTWFjcm9Bc3NlbWJsZXI6Ok92ZXJmbG93KSk7
CisgICAgICAgICAgICBpbnN0LmFyZ3MuYXBwZW5kKHRtcChsZWZ0KSk7CisgICAgICAgICAgICBp
bnN0LmFyZ3MuYXBwZW5kKHRtcChyaWdodCkpOworICAgICAgICAgICAgaW5zdC5hcmdzLmFwcGVu
ZChyZXN1bHQpOworCisgICAgICAgICAgICBmaWxsU3RhY2ttYXAoaW5zdCwgY2hlY2tWYWx1ZSwg
Mik7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG1faW5zdHMubGFzdCgpLmFwcGVuZChXVEY6
Om1vdmUoaW5zdCkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKICAgICAgICAg
Y2FzZSBDaGVjazogewogICAgICAgICAgICAgSW5zdCBicmFuY2ggPSBjcmVhdGVCcmFuY2gobV92
YWx1ZS0+Y2hpbGQoMCkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBDaGVja1NwZWNpYWw6
OktleSBrZXkoYnJhbmNoKTsKLSAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gbV9jaGVja1NwZWNp
YWxzLmFkZChrZXksIG51bGxwdHIpOwotICAgICAgICAgICAgU3BlY2lhbCogc3BlY2lhbCA9IGVu
c3VyZVNwZWNpYWwocmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSwga2V5KTsKKworICAgICAgICAgICAg
Q2hlY2tTcGVjaWFsKiBzcGVjaWFsID0gZW5zdXJlQ2hlY2tTcGVjaWFsKGJyYW5jaCk7CiAgICAg
ICAgICAgICAKICAgICAgICAgICAgIENoZWNrVmFsdWUqIGNoZWNrVmFsdWUgPSBtX3ZhbHVlLT5h
czxDaGVja1ZhbHVlPigpOwogICAgICAgICAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNSZWR1Y2VTdHJlbmd0aC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzUmVkdWNlU3RyZW5ndGguY3BwCShyZXZpc2lvbiAxOTIzODkpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNSZWR1Y2VTdHJlbmd0aC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTYzMiw2ICs2MzIsNzAgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgbV92YWx1
ZS0+Y2hpbGQoMCktPmJlbG93RXF1YWxDb25zdGFudChtX3ZhbHVlLT5jaGlsZCgxKSkpKTsKICAg
ICAgICAgICAgIGJyZWFrOwogCisgICAgICAgIGNhc2UgQ2hlY2tBZGQ6CisgICAgICAgICAgICAv
LyBGSVhNRTogSGFuZGxlIGNvbW11dGF0aXZpdHkuCisgICAgICAgICAgICAvLyBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUxMjE0CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgIGlmIChyZXBsYWNlV2l0aE5ld1ZhbHVlKG1fdmFsdWUtPmNoaWxkKDApLT5jaGVja0Fk
ZENvbnN0YW50KG1fcHJvYywgbV92YWx1ZS0+Y2hpbGQoMSkpKSkKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKG1fdmFsdWUtPmNoaWxkKDApLT5p
c0ludCgwKSkgeworICAgICAgICAgICAgICAgIG1fdmFsdWUtPnJlcGxhY2VXaXRoSWRlbnRpdHko
bV92YWx1ZS0+Y2hpbGQoMSkpOworICAgICAgICAgICAgICAgIG1fY2hhbmdlZCA9IHRydWU7Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgIGlmIChtX3ZhbHVlLT5jaGlsZCgxKS0+aXNJbnQoMCkpIHsKKyAgICAgICAgICAgICAg
ICBtX3ZhbHVlLT5yZXBsYWNlV2l0aElkZW50aXR5KG1fdmFsdWUtPmNoaWxkKDApKTsKKyAgICAg
ICAgICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBDaGVja1N1YjoK
KyAgICAgICAgICAgIGlmIChyZXBsYWNlV2l0aE5ld1ZhbHVlKG1fdmFsdWUtPmNoaWxkKDApLT5j
aGVja1N1YkNvbnN0YW50KG1fcHJvYywgbV92YWx1ZS0+Y2hpbGQoMSkpKSkKKyAgICAgICAgICAg
ICAgICBicmVhazsKKworICAgICAgICAgICAgaWYgKG1fdmFsdWUtPmNoaWxkKDEpLT5pc0ludCgw
KSkgeworICAgICAgICAgICAgICAgIG1fdmFsdWUtPnJlcGxhY2VXaXRoSWRlbnRpdHkobV92YWx1
ZS0+Y2hpbGQoMCkpOworICAgICAgICAgICAgICAgIG1fY2hhbmdlZCA9IHRydWU7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKworICAg
ICAgICBjYXNlIENoZWNrTXVsOgorICAgICAgICAgICAgLy8gRklYTUU6IEhhbmRsZSBjb21tdXRh
dGl2aXR5LgorICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE1MTIxNAorICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAocmVwbGFjZVdpdGhO
ZXdWYWx1ZShtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hlY2tNdWxDb25zdGFudChtX3Byb2MsIG1fdmFs
dWUtPmNoaWxkKDEpKSkpCisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGlm
IChtX3ZhbHVlLT5jaGlsZCgwKS0+aXNJbnQoMSkpIHsKKyAgICAgICAgICAgICAgICBtX3ZhbHVl
LT5yZXBsYWNlV2l0aElkZW50aXR5KG1fdmFsdWUtPmNoaWxkKDEpKTsKKyAgICAgICAgICAgICAg
ICBtX2NoYW5nZWQgPSB0cnVlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAobV92YWx1ZS0+Y2hpbGQoMSktPmlzSW50
KDEpKSB7CisgICAgICAgICAgICAgICAgbV92YWx1ZS0+cmVwbGFjZVdpdGhJZGVudGl0eShtX3Zh
bHVlLT5jaGlsZCgwKSk7CisgICAgICAgICAgICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKG1fdmFs
dWUtPmNoaWxkKDApLT5pc0ludCgwKSB8fCBtX3ZhbHVlLT5jaGlsZCgxKS0+aXNJbnQoMCkpIHsK
KyAgICAgICAgICAgICAgICByZXBsYWNlV2l0aE5ld1ZhbHVlKG1fcHJvYy5hZGRJbnRDb25zdGFu
dChtX3ZhbHVlLCAwKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIENoZWNrOgorICAgICAgICAgICAgaWYg
KG1fdmFsdWUtPmNoaWxkKDApLT5pc0xpa2VaZXJvKCkpIHsKKyAgICAgICAgICAgICAgICBtX3Zh
bHVlLT5yZXBsYWNlV2l0aE5vcCgpOworICAgICAgICAgICAgICAgIG1fY2hhbmdlZCA9IHRydWU7
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVh
azsKKwogICAgICAgICBjYXNlIEJyYW5jaDogewogICAgICAgICAgICAgQ29udHJvbFZhbHVlKiBi
cmFuY2ggPSBtX3ZhbHVlLT5hczxDb250cm9sVmFsdWU+KCk7CiAKQEAgLTcyMiwxMyArNzg2LDE0
IEBAIHByaXZhdGU6CiAgICAgICAgIHJlcGxhY2VXaXRoTmV3VmFsdWUobV9wcm9jLmFkZDxWYWx1
ZVR5cGU+KGFyZ3VtZW50cy4uLikpOwogICAgIH0KIAotICAgIHZvaWQgcmVwbGFjZVdpdGhOZXdW
YWx1ZShWYWx1ZSogbmV3VmFsdWUpCisgICAgYm9vbCByZXBsYWNlV2l0aE5ld1ZhbHVlKFZhbHVl
KiBuZXdWYWx1ZSkKICAgICB7CiAgICAgICAgIGlmICghbmV3VmFsdWUpCi0gICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIG1faW5zZXJ0aW9uU2V0
Lmluc2VydFZhbHVlKG1faW5kZXgsIG5ld1ZhbHVlKTsKICAgICAgICAgbV92YWx1ZS0+cmVwbGFj
ZVdpdGhJZGVudGl0eShuZXdWYWx1ZSk7CiAgICAgICAgIG1fY2hhbmdlZCA9IHRydWU7CisgICAg
ICAgIHJldHVybiB0cnVlOwogICAgIH0KIAogICAgIGJvb2wgaGFuZGxlU2hpZnRCeVplcm8oKQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlLmNwcAkocmV2aXNpb24gMTkyMzg5KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xMzksNiArMTM5LDIxIEBAIFZhbHVlKiBWYWx1ZTo6bXVsQ29uc3RhbnQoUHJvY2VkdXJlJiwg
Y28KICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAorVmFsdWUqIFZhbHVlOjpjaGVja0FkZENvbnN0
YW50KFByb2NlZHVyZSYsIGNvbnN0IFZhbHVlKikgY29uc3QKK3sKKyAgICByZXR1cm4gbnVsbHB0
cjsKK30KKworVmFsdWUqIFZhbHVlOjpjaGVja1N1YkNvbnN0YW50KFByb2NlZHVyZSYsIGNvbnN0
IFZhbHVlKikgY29uc3QKK3sKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworVmFsdWUqIFZhbHVl
OjpjaGVja011bENvbnN0YW50KFByb2NlZHVyZSYsIGNvbnN0IFZhbHVlKikgY29uc3QKK3sKKyAg
ICByZXR1cm4gbnVsbHB0cjsKK30KKwogVmFsdWUqIFZhbHVlOjpkaXZDb25zdGFudChQcm9jZWR1
cmUmLCBjb25zdCBWYWx1ZSopIGNvbnN0CiB7CiAgICAgcmV0dXJuIG51bGxwdHI7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlLmgJKHJldmlzaW9uIDE5MjM4OSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTExNSw2ICsxMTUs
OSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBWYWx1ZSogYWRkQ29uc3RhbnQoUHJvY2VkdXJlJiwg
Y29uc3QgVmFsdWUqIG90aGVyKSBjb25zdDsKICAgICB2aXJ0dWFsIFZhbHVlKiBzdWJDb25zdGFu
dChQcm9jZWR1cmUmLCBjb25zdCBWYWx1ZSogb3RoZXIpIGNvbnN0OwogICAgIHZpcnR1YWwgVmFs
dWUqIG11bENvbnN0YW50KFByb2NlZHVyZSYsIGNvbnN0IFZhbHVlKiBvdGhlcikgY29uc3Q7Cisg
ICAgdmlydHVhbCBWYWx1ZSogY2hlY2tBZGRDb25zdGFudChQcm9jZWR1cmUmLCBjb25zdCBWYWx1
ZSogb3RoZXIpIGNvbnN0OworICAgIHZpcnR1YWwgVmFsdWUqIGNoZWNrU3ViQ29uc3RhbnQoUHJv
Y2VkdXJlJiwgY29uc3QgVmFsdWUqIG90aGVyKSBjb25zdDsKKyAgICB2aXJ0dWFsIFZhbHVlKiBj
aGVja011bENvbnN0YW50KFByb2NlZHVyZSYsIGNvbnN0IFZhbHVlKiBvdGhlcikgY29uc3Q7CiAg
ICAgdmlydHVhbCBWYWx1ZSogZGl2Q29uc3RhbnQoUHJvY2VkdXJlJiwgY29uc3QgVmFsdWUqIG90
aGVyKSBjb25zdDsgLy8gVGhpcyBjaG9vc2VzIENoaWxsRGl2IHNlbWFudGljcyBmb3IgaW50ZWdl
cnMuCiAgICAgdmlydHVhbCBWYWx1ZSogYml0QW5kQ29uc3RhbnQoUHJvY2VkdXJlJiwgY29uc3Qg
VmFsdWUqIG90aGVyKSBjb25zdDsKICAgICB2aXJ0dWFsIFZhbHVlKiBiaXRPckNvbnN0YW50KFBy
b2NlZHVyZSYsIGNvbnN0IFZhbHVlKiBvdGhlcikgY29uc3Q7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvdGVzdGIzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvdGVzdGIzLmNwcAkocmV2aXNpb24gMTkyMzg5KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL3Rlc3RiMy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5MTgsNiArMjkxOCw0NTEgQEAg
dm9pZCB0ZXN0Q2hlY2tNZWdhQ29tYm8oKQogICAgIENIRUNLKGludm9rZTxpbnQ+KCpjb2RlLCAm
dmFsdWUgLSAyLCAxKSA9PSA0Mik7CiB9CiAKK3ZvaWQgdGVzdENoZWNrQWRkSW1tKCkKK3sKKyAg
ICBQcm9jZWR1cmUgcHJvYzsKKyAgICBCYXNpY0Jsb2NrKiByb290ID0gcHJvYy5hZGRCbG9jaygp
OworICAgIFZhbHVlKiBhcmcxID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPigKKyAgICAgICAgcHJv
YywgVHJ1bmMsIE9yaWdpbigpLAorICAgICAgICByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdW
YWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCkpOworICAgIFZhbHVl
KiBhcmcyID0gcm9vdC0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIDQy
KTsKKyAgICBDaGVja1ZhbHVlKiBjaGVja0FkZCA9IHJvb3QtPmFwcGVuZE5ldzxDaGVja1ZhbHVl
Pihwcm9jLCBDaGVja0FkZCwgT3JpZ2luKCksIGFyZzEsIGFyZzIpOworICAgIGNoZWNrQWRkLT5z
ZXRHZW5lcmF0b3IoCisgICAgICAgIFsmXSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNr
bWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CisgICAgICAgICAgICBDSEVDSyhwYXJhbXMu
cmVwcy5zaXplKCkgPT0gMik7CisgICAgICAgICAgICBDSEVDSyhwYXJhbXMucmVwc1swXS5pc0dQ
UigpKTsKKyAgICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBzWzFdLmlzQ29uc3RhbnQoKSk7Cisg
ICAgICAgICAgICBDSEVDSyhwYXJhbXMucmVwc1sxXS52YWx1ZSgpID09IDQyKTsKKyAgICAgICAg
ICAgIGppdC5zdWIzMihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMig0MiksIHBhcmFtcy5yZXBz
WzBdLmdwcigpKTsKKyAgICAgICAgICAgIGppdC5jb252ZXJ0SW50MzJUb0RvdWJsZShwYXJhbXMu
cmVwc1swXS5ncHIoKSwgRlBSSW5mbzo6ZnBSZWdUMCk7CisgICAgICAgICAgICBqaXQuY29udmVy
dEludDMyVG9Eb3VibGUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoNDIpLCBGUFJJbmZvOjpm
cFJlZ1QxKTsKKyAgICAgICAgICAgIGppdC5hZGREb3VibGUoRlBSSW5mbzo6ZnBSZWdUMSwgRlBS
SW5mbzo6ZnBSZWdUMCk7CisgICAgICAgICAgICBqaXQuZW1pdEZ1bmN0aW9uRXBpbG9ndWUoKTsK
KyAgICAgICAgICAgIGppdC5yZXQoKTsKKyAgICAgICAgfSk7CisgICAgcm9vdC0+YXBwZW5kTmV3
PENvbnRyb2xWYWx1ZT4oCisgICAgICAgIHByb2MsIFJldHVybiwgT3JpZ2luKCksCisgICAgICAg
IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgSVRvRCwgT3JpZ2luKCksIGNoZWNrQWRkKSk7
CisKKyAgICBhdXRvIGNvZGUgPSBjb21waWxlKHByb2MpOworCisgICAgQ0hFQ0soaW52b2tlPGRv
dWJsZT4oKmNvZGUsIDApID09IDQyLjApOworICAgIENIRUNLKGludm9rZTxkb3VibGU+KCpjb2Rl
LCAxKSA9PSA0My4wKTsKKyAgICBDSEVDSyhpbnZva2U8ZG91YmxlPigqY29kZSwgNDIpID09IDg0
LjApOworICAgIENIRUNLKGludm9rZTxkb3VibGU+KCpjb2RlLCAyMTQ3NDgzNjQ3KSA9PSAyMTQ3
NDgzNjg5LjApOworfQorCit2b2lkIHRlc3RDaGVja0FkZCgpCit7CisgICAgUHJvY2VkdXJlIHBy
b2M7CisgICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsKKyAgICBWYWx1ZSog
YXJnMSA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4oCisgICAgICAgIHByb2MsIFRydW5jLCBPcmln
aW4oKSwKKyAgICAgICAgcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9y
aWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApKTsKKyAgICBWYWx1ZSogYXJnMiA9IHJvb3Qt
PmFwcGVuZE5ldzxWYWx1ZT4oCisgICAgICAgIHByb2MsIFRydW5jLCBPcmlnaW4oKSwKKyAgICAg
ICAgcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJ
bmZvOjphcmd1bWVudEdQUjEpKTsKKyAgICBDaGVja1ZhbHVlKiBjaGVja0FkZCA9IHJvb3QtPmFw
cGVuZE5ldzxDaGVja1ZhbHVlPihwcm9jLCBDaGVja0FkZCwgT3JpZ2luKCksIGFyZzEsIGFyZzIp
OworICAgIGNoZWNrQWRkLT5zZXRHZW5lcmF0b3IoCisgICAgICAgIFsmXSAoQ0NhbGxIZWxwZXJz
JiBqaXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CisgICAgICAg
ICAgICBDSEVDSyhwYXJhbXMucmVwcy5zaXplKCkgPT0gMik7CisgICAgICAgICAgICBDSEVDSyhw
YXJhbXMucmVwc1swXS5pc0dQUigpKTsKKyAgICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBzWzFd
LmlzR1BSKCkpOworICAgICAgICAgICAgaml0LnN1YjMyKHBhcmFtcy5yZXBzWzFdLmdwcigpLCBw
YXJhbXMucmVwc1swXS5ncHIoKSk7CisgICAgICAgICAgICBqaXQuY29udmVydEludDMyVG9Eb3Vi
bGUocGFyYW1zLnJlcHNbMF0uZ3ByKCksIEZQUkluZm86OmZwUmVnVDApOworICAgICAgICAgICAg
aml0LmNvbnZlcnRJbnQzMlRvRG91YmxlKHBhcmFtcy5yZXBzWzFdLmdwcigpLCBGUFJJbmZvOjpm
cFJlZ1QxKTsKKyAgICAgICAgICAgIGppdC5hZGREb3VibGUoRlBSSW5mbzo6ZnBSZWdUMSwgRlBS
SW5mbzo6ZnBSZWdUMCk7CisgICAgICAgICAgICBqaXQuZW1pdEZ1bmN0aW9uRXBpbG9ndWUoKTsK
KyAgICAgICAgICAgIGppdC5yZXQoKTsKKyAgICAgICAgfSk7CisgICAgcm9vdC0+YXBwZW5kTmV3
PENvbnRyb2xWYWx1ZT4oCisgICAgICAgIHByb2MsIFJldHVybiwgT3JpZ2luKCksCisgICAgICAg
IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgSVRvRCwgT3JpZ2luKCksIGNoZWNrQWRkKSk7
CisKKyAgICBhdXRvIGNvZGUgPSBjb21waWxlKHByb2MpOworCisgICAgQ0hFQ0soaW52b2tlPGRv
dWJsZT4oKmNvZGUsIDAsIDQyKSA9PSA0Mi4wKTsKKyAgICBDSEVDSyhpbnZva2U8ZG91YmxlPigq
Y29kZSwgMSwgNDIpID09IDQzLjApOworICAgIENIRUNLKGludm9rZTxkb3VibGU+KCpjb2RlLCA0
MiwgNDIpID09IDg0LjApOworICAgIENIRUNLKGludm9rZTxkb3VibGU+KCpjb2RlLCAyMTQ3NDgz
NjQ3LCA0MikgPT0gMjE0NzQ4MzY4OS4wKTsKK30KKwordm9pZCB0ZXN0Q2hlY2tBZGQ2NCgpCit7
CisgICAgUHJvY2VkdXJlIHByb2M7CisgICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxv
Y2soKTsKKyAgICBWYWx1ZSogYXJnMSA9IHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVl
Pihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKKyAgICBWYWx1ZSogYXJn
MiA9IHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BS
SW5mbzo6YXJndW1lbnRHUFIxKTsKKyAgICBDaGVja1ZhbHVlKiBjaGVja0FkZCA9IHJvb3QtPmFw
cGVuZE5ldzxDaGVja1ZhbHVlPihwcm9jLCBDaGVja0FkZCwgT3JpZ2luKCksIGFyZzEsIGFyZzIp
OworICAgIGNoZWNrQWRkLT5zZXRHZW5lcmF0b3IoCisgICAgICAgIFsmXSAoQ0NhbGxIZWxwZXJz
JiBqaXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CisgICAgICAg
ICAgICBDSEVDSyhwYXJhbXMucmVwcy5zaXplKCkgPT0gMik7CisgICAgICAgICAgICBDSEVDSyhw
YXJhbXMucmVwc1swXS5pc0dQUigpKTsKKyAgICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBzWzFd
LmlzR1BSKCkpOworICAgICAgICAgICAgaml0LnN1YjY0KHBhcmFtcy5yZXBzWzFdLmdwcigpLCBw
YXJhbXMucmVwc1swXS5ncHIoKSk7CisgICAgICAgICAgICBqaXQuY29udmVydEludDY0VG9Eb3Vi
bGUocGFyYW1zLnJlcHNbMF0uZ3ByKCksIEZQUkluZm86OmZwUmVnVDApOworICAgICAgICAgICAg
aml0LmNvbnZlcnRJbnQ2NFRvRG91YmxlKHBhcmFtcy5yZXBzWzFdLmdwcigpLCBGUFJJbmZvOjpm
cFJlZ1QxKTsKKyAgICAgICAgICAgIGppdC5hZGREb3VibGUoRlBSSW5mbzo6ZnBSZWdUMSwgRlBS
SW5mbzo6ZnBSZWdUMCk7CisgICAgICAgICAgICBqaXQuZW1pdEZ1bmN0aW9uRXBpbG9ndWUoKTsK
KyAgICAgICAgICAgIGppdC5yZXQoKTsKKyAgICAgICAgfSk7CisgICAgcm9vdC0+YXBwZW5kTmV3
PENvbnRyb2xWYWx1ZT4oCisgICAgICAgIHByb2MsIFJldHVybiwgT3JpZ2luKCksCisgICAgICAg
IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgSVRvRCwgT3JpZ2luKCksIGNoZWNrQWRkKSk7
CisKKyAgICBhdXRvIGNvZGUgPSBjb21waWxlKHByb2MpOworCisgICAgQ0hFQ0soaW52b2tlPGRv
dWJsZT4oKmNvZGUsIDBsbCwgNDJsbCkgPT0gNDIuMCk7CisgICAgQ0hFQ0soaW52b2tlPGRvdWJs
ZT4oKmNvZGUsIDFsbCwgNDJsbCkgPT0gNDMuMCk7CisgICAgQ0hFQ0soaW52b2tlPGRvdWJsZT4o
KmNvZGUsIDQybGwsIDQybGwpID09IDg0LjApOworICAgIENIRUNLKGludm9rZTxkb3VibGU+KCpj
b2RlLCA5MjIzMzcyMDM2ODU0Nzc1ODA3bGwsIDQybGwpID09IHN0YXRpY19jYXN0PGRvdWJsZT4o
OTIyMzM3MjAzNjg1NDc3NTgwN2xsKSArIDQyLjApOworfQorCit2b2lkIHRlc3RDaGVja0FkZEZv
bGQoaW50IGEsIGludCBiKQoreworICAgIFByb2NlZHVyZSBwcm9jOworICAgIEJhc2ljQmxvY2sq
IHJvb3QgPSBwcm9jLmFkZEJsb2NrKCk7CisgICAgVmFsdWUqIGFyZzEgPSByb290LT5hcHBlbmRO
ZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwgYSk7CisgICAgVmFsdWUqIGFyZzIgPSBy
b290LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwgYik7CisgICAgQ2hl
Y2tWYWx1ZSogY2hlY2tBZGQgPSByb290LT5hcHBlbmROZXc8Q2hlY2tWYWx1ZT4ocHJvYywgQ2hl
Y2tBZGQsIE9yaWdpbigpLCBhcmcxLCBhcmcyKTsKKyAgICBjaGVja0FkZC0+c2V0R2VuZXJhdG9y
KAorICAgICAgICBbJl0gKENDYWxsSGVscGVycyYsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBh
cmFtcyYpIHsKKyAgICAgICAgICAgIENIRUNLKCEiU2hvdWxkIGhhdmUgYmVlbiBmb2xkZWQiKTsK
KyAgICAgICAgfSk7CisgICAgcm9vdC0+YXBwZW5kTmV3PENvbnRyb2xWYWx1ZT4ocHJvYywgUmV0
dXJuLCBPcmlnaW4oKSwgY2hlY2tBZGQpOworCisgICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9j
KTsKKworICAgIENIRUNLKGludm9rZTxpbnQ+KCpjb2RlKSA9PSBhICsgYik7Cit9CisKK3ZvaWQg
dGVzdENoZWNrQWRkRm9sZEZhaWwoaW50IGEsIGludCBiKQoreworICAgIFByb2NlZHVyZSBwcm9j
OworICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBwcm9jLmFkZEJsb2NrKCk7CisgICAgVmFsdWUqIGFy
ZzEgPSByb290LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwgYSk7Cisg
ICAgVmFsdWUqIGFyZzIgPSByb290LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmln
aW4oKSwgYik7CisgICAgQ2hlY2tWYWx1ZSogY2hlY2tBZGQgPSByb290LT5hcHBlbmROZXc8Q2hl
Y2tWYWx1ZT4ocHJvYywgQ2hlY2tBZGQsIE9yaWdpbigpLCBhcmcxLCBhcmcyKTsKKyAgICBjaGVj
a0FkZC0+c2V0R2VuZXJhdG9yKAorICAgICAgICBbJl0gKENDYWxsSGVscGVycyYgaml0LCBjb25z
dCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmKSB7CisgICAgICAgICAgICBqaXQubW92ZShDQ2Fs
bEhlbHBlcnM6OlRydXN0ZWRJbW0zMig0MiksIEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKKyAg
ICAgICAgICAgIGppdC5lbWl0RnVuY3Rpb25FcGlsb2d1ZSgpOworICAgICAgICAgICAgaml0LnJl
dCgpOworICAgICAgICB9KTsKKyAgICByb290LT5hcHBlbmROZXc8Q29udHJvbFZhbHVlPihwcm9j
LCBSZXR1cm4sIE9yaWdpbigpLCBjaGVja0FkZCk7CisKKyAgICBhdXRvIGNvZGUgPSBjb21waWxl
KHByb2MpOworCisgICAgQ0hFQ0soaW52b2tlPGludD4oKmNvZGUpID09IDQyKTsKK30KKwordm9p
ZCB0ZXN0Q2hlY2tTdWJJbW0oKQoreworICAgIFByb2NlZHVyZSBwcm9jOworICAgIEJhc2ljQmxv
Y2sqIHJvb3QgPSBwcm9jLmFkZEJsb2NrKCk7CisgICAgVmFsdWUqIGFyZzEgPSByb290LT5hcHBl
bmROZXc8VmFsdWU+KAorICAgICAgICBwcm9jLCBUcnVuYywgT3JpZ2luKCksCisgICAgICAgIHJv
b3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6
YXJndW1lbnRHUFIwKSk7CisgICAgVmFsdWUqIGFyZzIgPSByb290LT5hcHBlbmROZXc8Q29uc3Qz
MlZhbHVlPihwcm9jLCBPcmlnaW4oKSwgNDIpOworICAgIENoZWNrVmFsdWUqIGNoZWNrU3ViID0g
cm9vdC0+YXBwZW5kTmV3PENoZWNrVmFsdWU+KHByb2MsIENoZWNrU3ViLCBPcmlnaW4oKSwgYXJn
MSwgYXJnMik7CisgICAgY2hlY2tTdWItPnNldEdlbmVyYXRvcigKKyAgICAgICAgWyZdIChDQ2Fs
bEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsK
KyAgICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBzLnNpemUoKSA9PSAyKTsKKyAgICAgICAgICAg
IENIRUNLKHBhcmFtcy5yZXBzWzBdLmlzR1BSKCkpOworICAgICAgICAgICAgQ0hFQ0socGFyYW1z
LnJlcHNbMV0uaXNDb25zdGFudCgpKTsKKyAgICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBzWzFd
LnZhbHVlKCkgPT0gNDIpOworICAgICAgICAgICAgaml0LmFkZDMyKENDYWxsSGVscGVyczo6VHJ1
c3RlZEltbTMyKDQyKSwgcGFyYW1zLnJlcHNbMF0uZ3ByKCkpOworICAgICAgICAgICAgaml0LmNv
bnZlcnRJbnQzMlRvRG91YmxlKHBhcmFtcy5yZXBzWzBdLmdwcigpLCBGUFJJbmZvOjpmcFJlZ1Qw
KTsKKyAgICAgICAgICAgIGppdC5jb252ZXJ0SW50MzJUb0RvdWJsZShDQ2FsbEhlbHBlcnM6OlRy
dXN0ZWRJbW0zMig0MiksIEZQUkluZm86OmZwUmVnVDEpOworICAgICAgICAgICAgaml0LnN1YkRv
dWJsZShGUFJJbmZvOjpmcFJlZ1QxLCBGUFJJbmZvOjpmcFJlZ1QwKTsKKyAgICAgICAgICAgIGpp
dC5lbWl0RnVuY3Rpb25FcGlsb2d1ZSgpOworICAgICAgICAgICAgaml0LnJldCgpOworICAgICAg
ICB9KTsKKyAgICByb290LT5hcHBlbmROZXc8Q29udHJvbFZhbHVlPigKKyAgICAgICAgcHJvYywg
UmV0dXJuLCBPcmlnaW4oKSwKKyAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBJ
VG9ELCBPcmlnaW4oKSwgY2hlY2tTdWIpKTsKKworICAgIGF1dG8gY29kZSA9IGNvbXBpbGUocHJv
Yyk7CisKKyAgICBDSEVDSyhpbnZva2U8ZG91YmxlPigqY29kZSwgMCkgPT0gLTQyLjApOworICAg
IENIRUNLKGludm9rZTxkb3VibGU+KCpjb2RlLCAxKSA9PSAtNDEuMCk7CisgICAgQ0hFQ0soaW52
b2tlPGRvdWJsZT4oKmNvZGUsIDQyKSA9PSAwLjApOworICAgIENIRUNLKGludm9rZTxkb3VibGU+
KCpjb2RlLCAtMjE0NzQ4MzY0NykgPT0gLTIxNDc0ODM2ODkuMCk7Cit9CisKK3ZvaWQgdGVzdENo
ZWNrU3ViKCkKK3sKKyAgICBQcm9jZWR1cmUgcHJvYzsKKyAgICBCYXNpY0Jsb2NrKiByb290ID0g
cHJvYy5hZGRCbG9jaygpOworICAgIFZhbHVlKiBhcmcxID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVl
PigKKyAgICAgICAgcHJvYywgVHJ1bmMsIE9yaWdpbigpLAorICAgICAgICByb290LT5hcHBlbmRO
ZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BS
MCkpOworICAgIFZhbHVlKiBhcmcyID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPigKKyAgICAgICAg
cHJvYywgVHJ1bmMsIE9yaWdpbigpLAorICAgICAgICByb290LT5hcHBlbmROZXc8QXJndW1lbnRS
ZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMSkpOworICAgIENo
ZWNrVmFsdWUqIGNoZWNrU3ViID0gcm9vdC0+YXBwZW5kTmV3PENoZWNrVmFsdWU+KHByb2MsIENo
ZWNrU3ViLCBPcmlnaW4oKSwgYXJnMSwgYXJnMik7CisgICAgY2hlY2tTdWItPnNldEdlbmVyYXRv
cigKKyAgICAgICAgWyZdIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0
aW9uUGFyYW1zJiBwYXJhbXMpIHsKKyAgICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBzLnNpemUo
KSA9PSAyKTsKKyAgICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBzWzBdLmlzR1BSKCkpOworICAg
ICAgICAgICAgQ0hFQ0socGFyYW1zLnJlcHNbMV0uaXNHUFIoKSk7CisgICAgICAgICAgICBqaXQu
YWRkMzIocGFyYW1zLnJlcHNbMV0uZ3ByKCksIHBhcmFtcy5yZXBzWzBdLmdwcigpKTsKKyAgICAg
ICAgICAgIGppdC5jb252ZXJ0SW50MzJUb0RvdWJsZShwYXJhbXMucmVwc1swXS5ncHIoKSwgRlBS
SW5mbzo6ZnBSZWdUMCk7CisgICAgICAgICAgICBqaXQuY29udmVydEludDMyVG9Eb3VibGUocGFy
YW1zLnJlcHNbMV0uZ3ByKCksIEZQUkluZm86OmZwUmVnVDEpOworICAgICAgICAgICAgaml0LnN1
YkRvdWJsZShGUFJJbmZvOjpmcFJlZ1QxLCBGUFJJbmZvOjpmcFJlZ1QwKTsKKyAgICAgICAgICAg
IGppdC5lbWl0RnVuY3Rpb25FcGlsb2d1ZSgpOworICAgICAgICAgICAgaml0LnJldCgpOworICAg
ICAgICB9KTsKKyAgICByb290LT5hcHBlbmROZXc8Q29udHJvbFZhbHVlPigKKyAgICAgICAgcHJv
YywgUmV0dXJuLCBPcmlnaW4oKSwKKyAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9j
LCBJVG9ELCBPcmlnaW4oKSwgY2hlY2tTdWIpKTsKKworICAgIGF1dG8gY29kZSA9IGNvbXBpbGUo
cHJvYyk7CisKKyAgICBDSEVDSyhpbnZva2U8ZG91YmxlPigqY29kZSwgMCwgNDIpID09IC00Mi4w
KTsKKyAgICBDSEVDSyhpbnZva2U8ZG91YmxlPigqY29kZSwgMSwgNDIpID09IC00MS4wKTsKKyAg
ICBDSEVDSyhpbnZva2U8ZG91YmxlPigqY29kZSwgNDIsIDQyKSA9PSAwLjApOworICAgIENIRUNL
KGludm9rZTxkb3VibGU+KCpjb2RlLCAtMjE0NzQ4MzY0NywgNDIpID09IC0yMTQ3NDgzNjg5LjAp
OworfQorCitORVZFUl9JTkxJTkUgZG91YmxlIGRvdWJsZVN1Yihkb3VibGUgYSwgZG91YmxlIGIp
Cit7CisgICAgcmV0dXJuIGEgLSBiOworfQorCit2b2lkIHRlc3RDaGVja1N1YjY0KCkKK3sKKyAg
ICBQcm9jZWR1cmUgcHJvYzsKKyAgICBCYXNpY0Jsb2NrKiByb290ID0gcHJvYy5hZGRCbG9jaygp
OworICAgIFZhbHVlKiBhcmcxID0gcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHBy
b2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOworICAgIFZhbHVlKiBhcmcyID0g
cm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZv
Ojphcmd1bWVudEdQUjEpOworICAgIENoZWNrVmFsdWUqIGNoZWNrU3ViID0gcm9vdC0+YXBwZW5k
TmV3PENoZWNrVmFsdWU+KHByb2MsIENoZWNrU3ViLCBPcmlnaW4oKSwgYXJnMSwgYXJnMik7Cisg
ICAgY2hlY2tTdWItPnNldEdlbmVyYXRvcigKKyAgICAgICAgWyZdIChDQ2FsbEhlbHBlcnMmIGpp
dCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKKyAgICAgICAgICAg
IENIRUNLKHBhcmFtcy5yZXBzLnNpemUoKSA9PSAyKTsKKyAgICAgICAgICAgIENIRUNLKHBhcmFt
cy5yZXBzWzBdLmlzR1BSKCkpOworICAgICAgICAgICAgQ0hFQ0socGFyYW1zLnJlcHNbMV0uaXNH
UFIoKSk7CisgICAgICAgICAgICBqaXQuYWRkNjQocGFyYW1zLnJlcHNbMV0uZ3ByKCksIHBhcmFt
cy5yZXBzWzBdLmdwcigpKTsKKyAgICAgICAgICAgIGppdC5jb252ZXJ0SW50NjRUb0RvdWJsZShw
YXJhbXMucmVwc1swXS5ncHIoKSwgRlBSSW5mbzo6ZnBSZWdUMCk7CisgICAgICAgICAgICBqaXQu
Y29udmVydEludDY0VG9Eb3VibGUocGFyYW1zLnJlcHNbMV0uZ3ByKCksIEZQUkluZm86OmZwUmVn
VDEpOworICAgICAgICAgICAgaml0LnN1YkRvdWJsZShGUFJJbmZvOjpmcFJlZ1QxLCBGUFJJbmZv
OjpmcFJlZ1QwKTsKKyAgICAgICAgICAgIGppdC5lbWl0RnVuY3Rpb25FcGlsb2d1ZSgpOworICAg
ICAgICAgICAgaml0LnJldCgpOworICAgICAgICB9KTsKKyAgICByb290LT5hcHBlbmROZXc8Q29u
dHJvbFZhbHVlPigKKyAgICAgICAgcHJvYywgUmV0dXJuLCBPcmlnaW4oKSwKKyAgICAgICAgcm9v
dC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBJVG9ELCBPcmlnaW4oKSwgY2hlY2tTdWIpKTsKKwor
ICAgIGF1dG8gY29kZSA9IGNvbXBpbGUocHJvYyk7CisKKyAgICBDSEVDSyhpbnZva2U8ZG91Ymxl
PigqY29kZSwgMGxsLCA0MmxsKSA9PSAtNDIuMCk7CisgICAgQ0hFQ0soaW52b2tlPGRvdWJsZT4o
KmNvZGUsIDFsbCwgNDJsbCkgPT0gLTQxLjApOworICAgIENIRUNLKGludm9rZTxkb3VibGU+KCpj
b2RlLCA0MmxsLCA0MmxsKSA9PSAwLjApOworICAgIENIRUNLKGludm9rZTxkb3VibGU+KCpjb2Rl
LCAtOTIyMzM3MjAzNjg1NDc3NTgwN2xsLCA0MmxsKSA9PSBkb3VibGVTdWIoc3RhdGljX2Nhc3Q8
ZG91YmxlPigtOTIyMzM3MjAzNjg1NDc3NTgwN2xsKSwgNDIuMCkpOworfQorCit2b2lkIHRlc3RD
aGVja1N1YkZvbGQoaW50IGEsIGludCBiKQoreworICAgIFByb2NlZHVyZSBwcm9jOworICAgIEJh
c2ljQmxvY2sqIHJvb3QgPSBwcm9jLmFkZEJsb2NrKCk7CisgICAgVmFsdWUqIGFyZzEgPSByb290
LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwgYSk7CisgICAgVmFsdWUq
IGFyZzIgPSByb290LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwgYik7
CisgICAgQ2hlY2tWYWx1ZSogY2hlY2tTdWIgPSByb290LT5hcHBlbmROZXc8Q2hlY2tWYWx1ZT4o
cHJvYywgQ2hlY2tTdWIsIE9yaWdpbigpLCBhcmcxLCBhcmcyKTsKKyAgICBjaGVja1N1Yi0+c2V0
R2VuZXJhdG9yKAorICAgICAgICBbJl0gKENDYWxsSGVscGVycyYsIGNvbnN0IFN0YWNrbWFwR2Vu
ZXJhdGlvblBhcmFtcyYpIHsKKyAgICAgICAgICAgIENIRUNLKCEiU2hvdWxkIGhhdmUgYmVlbiBm
b2xkZWQiKTsKKyAgICAgICAgfSk7CisgICAgcm9vdC0+YXBwZW5kTmV3PENvbnRyb2xWYWx1ZT4o
cHJvYywgUmV0dXJuLCBPcmlnaW4oKSwgY2hlY2tTdWIpOworCisgICAgYXV0byBjb2RlID0gY29t
cGlsZShwcm9jKTsKKworICAgIENIRUNLKGludm9rZTxpbnQ+KCpjb2RlKSA9PSBhIC0gYik7Cit9
CisKK3ZvaWQgdGVzdENoZWNrU3ViRm9sZEZhaWwoaW50IGEsIGludCBiKQoreworICAgIFByb2Nl
ZHVyZSBwcm9jOworICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBwcm9jLmFkZEJsb2NrKCk7CisgICAg
VmFsdWUqIGFyZzEgPSByb290LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4o
KSwgYSk7CisgICAgVmFsdWUqIGFyZzIgPSByb290LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihw
cm9jLCBPcmlnaW4oKSwgYik7CisgICAgQ2hlY2tWYWx1ZSogY2hlY2tTdWIgPSByb290LT5hcHBl
bmROZXc8Q2hlY2tWYWx1ZT4ocHJvYywgQ2hlY2tTdWIsIE9yaWdpbigpLCBhcmcxLCBhcmcyKTsK
KyAgICBjaGVja1N1Yi0+c2V0R2VuZXJhdG9yKAorICAgICAgICBbJl0gKENDYWxsSGVscGVycyYg
aml0LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmKSB7CisgICAgICAgICAgICBqaXQu
bW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMig0MiksIEdQUkluZm86OnJldHVyblZhbHVl
R1BSKTsKKyAgICAgICAgICAgIGppdC5lbWl0RnVuY3Rpb25FcGlsb2d1ZSgpOworICAgICAgICAg
ICAgaml0LnJldCgpOworICAgICAgICB9KTsKKyAgICByb290LT5hcHBlbmROZXc8Q29udHJvbFZh
bHVlPihwcm9jLCBSZXR1cm4sIE9yaWdpbigpLCBjaGVja1N1Yik7CisKKyAgICBhdXRvIGNvZGUg
PSBjb21waWxlKHByb2MpOworCisgICAgQ0hFQ0soaW52b2tlPGludD4oKmNvZGUpID09IDQyKTsK
K30KKwordm9pZCB0ZXN0Q2hlY2tOZWcoKQoreworICAgIFByb2NlZHVyZSBwcm9jOworICAgIEJh
c2ljQmxvY2sqIHJvb3QgPSBwcm9jLmFkZEJsb2NrKCk7CisgICAgVmFsdWUqIGFyZzEgPSByb290
LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwgMCk7CisgICAgVmFsdWUq
IGFyZzIgPSByb290LT5hcHBlbmROZXc8VmFsdWU+KAorICAgICAgICBwcm9jLCBUcnVuYywgT3Jp
Z2luKCksCisgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBP
cmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKSk7CisgICAgQ2hlY2tWYWx1ZSogY2hlY2tO
ZWcgPSByb290LT5hcHBlbmROZXc8Q2hlY2tWYWx1ZT4ocHJvYywgQ2hlY2tTdWIsIE9yaWdpbigp
LCBhcmcxLCBhcmcyKTsKKyAgICBjaGVja05lZy0+c2V0R2VuZXJhdG9yKAorICAgICAgICBbJl0g
KENDYWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFt
cykgeworICAgICAgICAgICAgQ0hFQ0socGFyYW1zLnJlcHMuc2l6ZSgpID09IDIpOworICAgICAg
ICAgICAgQ0hFQ0socGFyYW1zLnJlcHNbMF0gPT0gVmFsdWVSZXA6OmNvbnN0YW50KDApKTsKKyAg
ICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBzWzFdLmlzR1BSKCkpOworICAgICAgICAgICAgaml0
Lm5lZzMyKHBhcmFtcy5yZXBzWzFdLmdwcigpKTsKKyAgICAgICAgICAgIGppdC5jb252ZXJ0SW50
MzJUb0RvdWJsZShwYXJhbXMucmVwc1sxXS5ncHIoKSwgRlBSSW5mbzo6ZnBSZWdUMSk7CisgICAg
ICAgICAgICBqaXQubmVnYXRlRG91YmxlKEZQUkluZm86OmZwUmVnVDEsIEZQUkluZm86OmZwUmVn
VDApOworICAgICAgICAgICAgaml0LmVtaXRGdW5jdGlvbkVwaWxvZ3VlKCk7CisgICAgICAgICAg
ICBqaXQucmV0KCk7CisgICAgICAgIH0pOworICAgIHJvb3QtPmFwcGVuZE5ldzxDb250cm9sVmFs
dWU+KAorICAgICAgICBwcm9jLCBSZXR1cm4sIE9yaWdpbigpLAorICAgICAgICByb290LT5hcHBl
bmROZXc8VmFsdWU+KHByb2MsIElUb0QsIE9yaWdpbigpLCBjaGVja05lZykpOworCisgICAgYXV0
byBjb2RlID0gY29tcGlsZShwcm9jKTsKKworICAgIENIRUNLKGludm9rZTxkb3VibGU+KCpjb2Rl
LCAwKSA9PSAwLjApOworICAgIENIRUNLKGludm9rZTxkb3VibGU+KCpjb2RlLCAxKSA9PSAtMS4w
KTsKKyAgICBDSEVDSyhpbnZva2U8ZG91YmxlPigqY29kZSwgNDIpID09IC00Mi4wKTsKKyAgICBD
SEVDSyhpbnZva2U8ZG91YmxlPigqY29kZSwgLTIxNDc0ODM2NDcgLSAxKSA9PSAyMTQ3NDgzNjQ4
LjApOworfQorCit2b2lkIHRlc3RDaGVja05lZzY0KCkKK3sKKyAgICBQcm9jZWR1cmUgcHJvYzsK
KyAgICBCYXNpY0Jsb2NrKiByb290ID0gcHJvYy5hZGRCbG9jaygpOworICAgIFZhbHVlKiBhcmcx
ID0gcm9vdC0+YXBwZW5kTmV3PENvbnN0NjRWYWx1ZT4ocHJvYywgT3JpZ2luKCksIDApOworICAg
IFZhbHVlKiBhcmcyID0gcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9y
aWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOworICAgIENoZWNrVmFsdWUqIGNoZWNrTmVn
ID0gcm9vdC0+YXBwZW5kTmV3PENoZWNrVmFsdWU+KHByb2MsIENoZWNrU3ViLCBPcmlnaW4oKSwg
YXJnMSwgYXJnMik7CisgICAgY2hlY2tOZWctPnNldEdlbmVyYXRvcigKKyAgICAgICAgWyZdIChD
Q2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMp
IHsKKyAgICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBzLnNpemUoKSA9PSAyKTsKKyAgICAgICAg
ICAgIENIRUNLKHBhcmFtcy5yZXBzWzBdID09IFZhbHVlUmVwOjpjb25zdGFudCgwKSk7CisgICAg
ICAgICAgICBDSEVDSyhwYXJhbXMucmVwc1sxXS5pc0dQUigpKTsKKyAgICAgICAgICAgIGppdC5u
ZWc2NChwYXJhbXMucmVwc1sxXS5ncHIoKSk7CisgICAgICAgICAgICBqaXQuY29udmVydEludDY0
VG9Eb3VibGUocGFyYW1zLnJlcHNbMV0uZ3ByKCksIEZQUkluZm86OmZwUmVnVDEpOworICAgICAg
ICAgICAgaml0Lm5lZ2F0ZURvdWJsZShGUFJJbmZvOjpmcFJlZ1QxLCBGUFJJbmZvOjpmcFJlZ1Qw
KTsKKyAgICAgICAgICAgIGppdC5lbWl0RnVuY3Rpb25FcGlsb2d1ZSgpOworICAgICAgICAgICAg
aml0LnJldCgpOworICAgICAgICB9KTsKKyAgICByb290LT5hcHBlbmROZXc8Q29udHJvbFZhbHVl
PigKKyAgICAgICAgcHJvYywgUmV0dXJuLCBPcmlnaW4oKSwKKyAgICAgICAgcm9vdC0+YXBwZW5k
TmV3PFZhbHVlPihwcm9jLCBJVG9ELCBPcmlnaW4oKSwgY2hlY2tOZWcpKTsKKworICAgIGF1dG8g
Y29kZSA9IGNvbXBpbGUocHJvYyk7CisKKyAgICBDSEVDSyhpbnZva2U8ZG91YmxlPigqY29kZSwg
MGxsKSA9PSAwLjApOworICAgIENIRUNLKGludm9rZTxkb3VibGU+KCpjb2RlLCAxbGwpID09IC0x
LjApOworICAgIENIRUNLKGludm9rZTxkb3VibGU+KCpjb2RlLCA0MmxsKSA9PSAtNDIuMCk7Cisg
ICAgQ0hFQ0soaW52b2tlPGRvdWJsZT4oKmNvZGUsIC05MjIzMzcyMDM2ODU0Nzc1ODA3bGwgLSAx
KSA9PSA5MjIzMzcyMDM2ODU0Nzc1ODA4LjApOworfQorCit2b2lkIHRlc3RDaGVja011bCgpCit7
CisgICAgUHJvY2VkdXJlIHByb2M7CisgICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxv
Y2soKTsKKyAgICBWYWx1ZSogYXJnMSA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4oCisgICAgICAg
IHByb2MsIFRydW5jLCBPcmlnaW4oKSwKKyAgICAgICAgcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50
UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApKTsKKyAgICBW
YWx1ZSogYXJnMiA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4oCisgICAgICAgIHByb2MsIFRydW5j
LCBPcmlnaW4oKSwKKyAgICAgICAgcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHBy
b2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpKTsKKyAgICBDaGVja1ZhbHVlKiBj
aGVja011bCA9IHJvb3QtPmFwcGVuZE5ldzxDaGVja1ZhbHVlPihwcm9jLCBDaGVja011bCwgT3Jp
Z2luKCksIGFyZzEsIGFyZzIpOworICAgIGNoZWNrTXVsLT5zZXRHZW5lcmF0b3IoCisgICAgICAg
IFsmXSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYg
cGFyYW1zKSB7CisgICAgICAgICAgICBDSEVDSyhwYXJhbXMucmVwcy5zaXplKCkgPT0gMik7Cisg
ICAgICAgICAgICBDSEVDSyhwYXJhbXMucmVwc1swXS5pc0dQUigpKTsKKyAgICAgICAgICAgIENI
RUNLKHBhcmFtcy5yZXBzWzFdLmlzR1BSKCkpOworICAgICAgICAgICAgaml0LmNvbnZlcnRJbnQz
MlRvRG91YmxlKHBhcmFtcy5yZXBzWzBdLmdwcigpLCBGUFJJbmZvOjpmcFJlZ1QwKTsKKyAgICAg
ICAgICAgIGppdC5jb252ZXJ0SW50MzJUb0RvdWJsZShwYXJhbXMucmVwc1sxXS5ncHIoKSwgRlBS
SW5mbzo6ZnBSZWdUMSk7CisgICAgICAgICAgICBqaXQubXVsRG91YmxlKEZQUkluZm86OmZwUmVn
VDEsIEZQUkluZm86OmZwUmVnVDApOworICAgICAgICAgICAgaml0LmVtaXRGdW5jdGlvbkVwaWxv
Z3VlKCk7CisgICAgICAgICAgICBqaXQucmV0KCk7CisgICAgICAgIH0pOworICAgIHJvb3QtPmFw
cGVuZE5ldzxDb250cm9sVmFsdWU+KAorICAgICAgICBwcm9jLCBSZXR1cm4sIE9yaWdpbigpLAor
ICAgICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIElUb0QsIE9yaWdpbigpLCBjaGVj
a011bCkpOworCisgICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9jKTsKKworICAgIENIRUNLKGlu
dm9rZTxkb3VibGU+KCpjb2RlLCAwLCA0MikgPT0gMC4wKTsKKyAgICBDSEVDSyhpbnZva2U8ZG91
YmxlPigqY29kZSwgMSwgNDIpID09IDQyLjApOworICAgIENIRUNLKGludm9rZTxkb3VibGU+KCpj
b2RlLCA0MiwgNDIpID09IDQyLjAgKiA0Mi4wKTsKKyAgICBDSEVDSyhpbnZva2U8ZG91YmxlPigq
Y29kZSwgMjE0NzQ4MzY0NywgNDIpID09IDIxNDc0ODM2NDcuMCAqIDQyLjApOworfQorCit2b2lk
IHRlc3RDaGVja011bDY0KCkKK3sKKyAgICBQcm9jZWR1cmUgcHJvYzsKKyAgICBCYXNpY0Jsb2Nr
KiByb290ID0gcHJvYy5hZGRCbG9jaygpOworICAgIFZhbHVlKiBhcmcxID0gcm9vdC0+YXBwZW5k
TmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQ
UjApOworICAgIFZhbHVlKiBhcmcyID0gcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+
KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpOworICAgIENoZWNrVmFsdWUq
IGNoZWNrTXVsID0gcm9vdC0+YXBwZW5kTmV3PENoZWNrVmFsdWU+KHByb2MsIENoZWNrTXVsLCBP
cmlnaW4oKSwgYXJnMSwgYXJnMik7CisgICAgY2hlY2tNdWwtPnNldEdlbmVyYXRvcigKKyAgICAg
ICAgWyZdIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1z
JiBwYXJhbXMpIHsKKyAgICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBzLnNpemUoKSA9PSAyKTsK
KyAgICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBzWzBdLmlzR1BSKCkpOworICAgICAgICAgICAg
Q0hFQ0socGFyYW1zLnJlcHNbMV0uaXNHUFIoKSk7CisgICAgICAgICAgICBqaXQuY29udmVydElu
dDY0VG9Eb3VibGUocGFyYW1zLnJlcHNbMF0uZ3ByKCksIEZQUkluZm86OmZwUmVnVDApOworICAg
ICAgICAgICAgaml0LmNvbnZlcnRJbnQ2NFRvRG91YmxlKHBhcmFtcy5yZXBzWzFdLmdwcigpLCBG
UFJJbmZvOjpmcFJlZ1QxKTsKKyAgICAgICAgICAgIGppdC5tdWxEb3VibGUoRlBSSW5mbzo6ZnBS
ZWdUMSwgRlBSSW5mbzo6ZnBSZWdUMCk7CisgICAgICAgICAgICBqaXQuZW1pdEZ1bmN0aW9uRXBp
bG9ndWUoKTsKKyAgICAgICAgICAgIGppdC5yZXQoKTsKKyAgICAgICAgfSk7CisgICAgcm9vdC0+
YXBwZW5kTmV3PENvbnRyb2xWYWx1ZT4oCisgICAgICAgIHByb2MsIFJldHVybiwgT3JpZ2luKCks
CisgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgSVRvRCwgT3JpZ2luKCksIGNo
ZWNrTXVsKSk7CisKKyAgICBhdXRvIGNvZGUgPSBjb21waWxlKHByb2MpOworCisgICAgQ0hFQ0so
aW52b2tlPGRvdWJsZT4oKmNvZGUsIDAsIDQyKSA9PSAwLjApOworICAgIENIRUNLKGludm9rZTxk
b3VibGU+KCpjb2RlLCAxLCA0MikgPT0gNDIuMCk7CisgICAgQ0hFQ0soaW52b2tlPGRvdWJsZT4o
KmNvZGUsIDQyLCA0MikgPT0gNDIuMCAqIDQyLjApOworICAgIENIRUNLKGludm9rZTxkb3VibGU+
KCpjb2RlLCA5MjIzMzcyMDM2ODU0Nzc1ODA3bGwsIDQyKSA9PSBzdGF0aWNfY2FzdDxkb3VibGU+
KDkyMjMzNzIwMzY4NTQ3NzU4MDdsbCkgKiA0Mi4wKTsKK30KKwordm9pZCB0ZXN0Q2hlY2tNdWxG
b2xkKGludCBhLCBpbnQgYikKK3sKKyAgICBQcm9jZWR1cmUgcHJvYzsKKyAgICBCYXNpY0Jsb2Nr
KiByb290ID0gcHJvYy5hZGRCbG9jaygpOworICAgIFZhbHVlKiBhcmcxID0gcm9vdC0+YXBwZW5k
TmV3PENvbnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIGEpOworICAgIFZhbHVlKiBhcmcyID0g
cm9vdC0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIGIpOworICAgIENo
ZWNrVmFsdWUqIGNoZWNrTXVsID0gcm9vdC0+YXBwZW5kTmV3PENoZWNrVmFsdWU+KHByb2MsIENo
ZWNrTXVsLCBPcmlnaW4oKSwgYXJnMSwgYXJnMik7CisgICAgY2hlY2tNdWwtPnNldEdlbmVyYXRv
cigKKyAgICAgICAgWyZdIChDQ2FsbEhlbHBlcnMmLCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25Q
YXJhbXMmKSB7CisgICAgICAgICAgICBDSEVDSyghIlNob3VsZCBoYXZlIGJlZW4gZm9sZGVkIik7
CisgICAgICAgIH0pOworICAgIHJvb3QtPmFwcGVuZE5ldzxDb250cm9sVmFsdWU+KHByb2MsIFJl
dHVybiwgT3JpZ2luKCksIGNoZWNrTXVsKTsKKworICAgIGF1dG8gY29kZSA9IGNvbXBpbGUocHJv
Yyk7CisKKyAgICBDSEVDSyhpbnZva2U8aW50PigqY29kZSkgPT0gYSAqIGIpOworfQorCit2b2lk
IHRlc3RDaGVja011bEZvbGRGYWlsKGludCBhLCBpbnQgYikKK3sKKyAgICBQcm9jZWR1cmUgcHJv
YzsKKyAgICBCYXNpY0Jsb2NrKiByb290ID0gcHJvYy5hZGRCbG9jaygpOworICAgIFZhbHVlKiBh
cmcxID0gcm9vdC0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIGEpOwor
ICAgIFZhbHVlKiBhcmcyID0gcm9vdC0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywgT3Jp
Z2luKCksIGIpOworICAgIENoZWNrVmFsdWUqIGNoZWNrTXVsID0gcm9vdC0+YXBwZW5kTmV3PENo
ZWNrVmFsdWU+KHByb2MsIENoZWNrTXVsLCBPcmlnaW4oKSwgYXJnMSwgYXJnMik7CisgICAgY2hl
Y2tNdWwtPnNldEdlbmVyYXRvcigKKyAgICAgICAgWyZdIChDQ2FsbEhlbHBlcnMmIGppdCwgY29u
c3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJikgeworICAgICAgICAgICAgaml0Lm1vdmUoQ0Nh
bGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoNDIpLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7Cisg
ICAgICAgICAgICBqaXQuZW1pdEZ1bmN0aW9uRXBpbG9ndWUoKTsKKyAgICAgICAgICAgIGppdC5y
ZXQoKTsKKyAgICAgICAgfSk7CisgICAgcm9vdC0+YXBwZW5kTmV3PENvbnRyb2xWYWx1ZT4ocHJv
YywgUmV0dXJuLCBPcmlnaW4oKSwgY2hlY2tNdWwpOworCisgICAgYXV0byBjb2RlID0gY29tcGls
ZShwcm9jKTsKKworICAgIENIRUNLKGludm9rZTxpbnQ+KCpjb2RlKSA9PSA0Mik7Cit9CisKIHRl
bXBsYXRlPHR5cGVuYW1lIExlZnRGdW5jdG9yLCB0eXBlbmFtZSBSaWdodEZ1bmN0b3I+CiB2b2lk
IGdlbmVyaWNUZXN0Q29tcGFyZSgKICAgICBCMzo6T3Bjb2RlIG9wY29kZSwgY29uc3QgTGVmdEZ1
bmN0b3ImIGxlZnRGdW5jdG9yLCBjb25zdCBSaWdodEZ1bmN0b3ImIHJpZ2h0RnVuY3RvciwKQEAg
LTM5NTcsNiArNDQwMiwyMiBAQCB2b2lkIHJ1bihjb25zdCBjaGFyKiBmaWx0ZXIpCiAgICAgUlVO
KHRlc3RTaW1wbGVDaGVjaygpKTsKICAgICBSVU4odGVzdENoZWNrTGVzc1RoYW4oKSk7CiAgICAg
UlVOKHRlc3RDaGVja01lZ2FDb21ibygpKTsKKyAgICBSVU4odGVzdENoZWNrQWRkSW1tKCkpOwor
ICAgIFJVTih0ZXN0Q2hlY2tBZGQoKSk7CisgICAgUlVOKHRlc3RDaGVja0FkZDY0KCkpOworICAg
IFJVTih0ZXN0Q2hlY2tBZGRGb2xkKDEwMCwgMjAwKSk7CisgICAgUlVOKHRlc3RDaGVja0FkZEZv
bGRGYWlsKDIxNDc0ODM2NDcsIDEwMCkpOworICAgIFJVTih0ZXN0Q2hlY2tTdWJJbW0oKSk7Cisg
ICAgUlVOKHRlc3RDaGVja1N1YigpKTsKKyAgICBSVU4odGVzdENoZWNrU3ViNjQoKSk7CisgICAg
UlVOKHRlc3RDaGVja1N1YkZvbGQoMTAwLCAyMDApKTsKKyAgICBSVU4odGVzdENoZWNrU3ViRm9s
ZEZhaWwoLTIxNDc0ODM2NDcsIDEwMCkpOworICAgIFJVTih0ZXN0Q2hlY2tOZWcoKSk7CisgICAg
UlVOKHRlc3RDaGVja05lZzY0KCkpOworICAgIFJVTih0ZXN0Q2hlY2tNdWwoKSk7CisgICAgUlVO
KHRlc3RDaGVja011bDY0KCkpOworICAgIFJVTih0ZXN0Q2hlY2tNdWxGb2xkKDEwMCwgMjAwKSk7
CisgICAgUlVOKHRlc3RDaGVja011bEZvbGRGYWlsKDIxNDc0ODM2NDcsIDEwMCkpOwogCiAgICAg
UlVOKHRlc3RDb21wYXJlKEVxdWFsLCA0MiwgNDIpKTsKICAgICBSVU4odGVzdENvbXBhcmUoTm90
RXF1YWwsIDQyLCA0MikpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJ
dGVyYXRlZFJlZ2lzdGVyQ29hbGVzY2luZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL2Fpci9BaXJJdGVyYXRlZFJlZ2lzdGVyQ29hbGVzY2luZy5jcHAJKHJldmlz
aW9uIDE5MjM4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySXRlcmF0ZWRS
ZWdpc3RlckNvYWxlc2NpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05MjAsMTMgKzkyMCwxNCBA
QCB2b2lkIGl0ZXJhdGVkUmVnaXN0ZXJDb2FsZXNjaW5nKENvZGUmIGNvCiAgICAgICAgIH0KIAog
ICAgICAgICBncEFsbG9jYXRvci5hbGxvY2F0ZSgpOworICAgICAgICBmcEFsbG9jYXRvci5hbGxv
Y2F0ZSgpOworCiAgICAgICAgIGlmIChncEFsbG9jYXRvci5zcGlsbGVkVG1wKCkuaXNFbXB0eSgp
KSB7CiAgICAgICAgICAgICBhc3NpZ25SZWdpc3RlclRvVG1wSW5Qcm9ncmFtKGNvZGUsIGdwQWxs
b2NhdG9yKTsKICAgICAgICAgICAgIGdwSXNDb2xvcmVkID0gdHJ1ZTsKICAgICAgICAgfSBlbHNl
CiAgICAgICAgICAgICBhZGRTcGlsbEFuZEZpbGxUb1Byb2dyYW08QXJnOjpHUD4oY29kZSwgZ3BB
bGxvY2F0b3Iuc3BpbGxlZFRtcCgpKTsKIAotICAgICAgICBmcEFsbG9jYXRvci5hbGxvY2F0ZSgp
OwogICAgICAgICBpZiAoZnBBbGxvY2F0b3Iuc3BpbGxlZFRtcCgpLmlzRW1wdHkoKSkgewogICAg
ICAgICAgICAgYXNzaWduUmVnaXN0ZXJUb1RtcEluUHJvZ3JhbShjb2RlLCBmcEFsbG9jYXRvcik7
CiAgICAgICAgICAgICBmcElzQ29sb3JlZCA9IHRydWU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0Fpck9wY29kZS5vcGNvZGVzCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlyT3Bjb2RlLm9wY29kZXMJKHJldmlzaW9uIDE5MjM4OSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyT3Bjb2RlLm9wY29kZXMJKHdvcmtpbmcg
Y29weSkKQEAgLTE4Myw2ICsxODMsMTMgQEAgWG9yNjQgVTpHLCBVRDpHCiAgICAgVG1wLCBBZGRy
CiAgICAgSW1tLCBUbXAKIAorQ29udmVydEludDMyVG9Eb3VibGUgVTpHLCBEOkYKKyAgICBUbXAs
IFRtcAorICAgIEFkZHIsIFRtcAorCitDb252ZXJ0SW50NjRUb0RvdWJsZSBVOkcsIEQ6RgorICAg
IFRtcCwgVG1wCisKICMgTm90ZSB0aGF0IE1vdmUgb3BlcmF0ZXMgb3ZlciB0aGUgZnVsbCByZWdp
c3RlciBzaXplLCB3aGljaCBpcyBlaXRoZXIgMzItYml0IG9yIDY0LWJpdCBkZXBlbmRpbmcgb24K
ICMgdGhlIHBsYXRmb3JtLiBJJ20gbm90IGVudGlyZWx5IHN1cmUgdGhhdCB0aGlzIGlzIGEgZ29v
ZCB0aGluZzsgaXQgbWlnaHQgYmUgYmV0dGVyIHRvIGp1c3QgaGF2ZSBhCiAjIE1vdmU2NCBpbnN0
cnVjdGlvbi4gT1RPSCwgb3VyIE1hY3JvQXNzZW1ibGVycyBhbHJlYWR5IGhhdmUgdGhpcyBub3Rp
b24gb2YgIm1vdmUoKSIgdGhhdCBiYXNpY2FsbHkKQEAgLTMwMSwxMCArMzA4LDIzIEBAIEJyYW5j
aEFkZDMyIFU6RywgVTpHLCBVRDpHIC9icmFuY2gKICAgICBSZXNDb25kLCBUbXAsIEFkZHIKICAg
ICBSZXNDb25kLCBBZGRyLCBUbXAKIAorQnJhbmNoQWRkNjQgVTpHLCBVOkcsIFVEOkcgL2JyYW5j
aAorICAgIFJlc0NvbmQsIEltbSwgVG1wCisgICAgUmVzQ29uZCwgVG1wLCBUbXAKKwogQnJhbmNo
TXVsMzIgVTpHLCBVOkcsIFVEOkcgL2JyYW5jaAogICAgIFJlc0NvbmQsIFRtcCwgVG1wCiAgICAg
UmVzQ29uZCwgQWRkciwgVG1wCiAKK0JyYW5jaE11bDMyIFU6RywgVTpHLCBVOkcsIEQ6RyAvYnJh
bmNoCisgICAgUmVzQ29uZCwgVG1wLCBUbXAsIFRtcAorCitCcmFuY2hNdWw2NCBVOkcsIFU6Rywg
VUQ6RyAvYnJhbmNoCisgICAgUmVzQ29uZCwgVG1wLCBUbXAKKworQnJhbmNoTXVsNjQgVTpHLCBV
OkcsIFU6RywgRDpHIC9icmFuY2gKKyAgICBSZXNDb25kLCBUbXAsIFRtcCwgVG1wCisKIEJyYW5j
aFN1YjMyIFU6RywgVTpHLCBVRDpHIC9icmFuY2gKICAgICBSZXNDb25kLCBUbXAsIFRtcAogICAg
IFJlc0NvbmQsIEltbSwgVG1wCkBAIC0zMTIsOSArMzMyLDE2IEBAIEJyYW5jaFN1YjMyIFU6Rywg
VTpHLCBVRDpHIC9icmFuY2gKICAgICBSZXNDb25kLCBUbXAsIEFkZHIKICAgICBSZXNDb25kLCBB
ZGRyLCBUbXAKIAorQnJhbmNoU3ViNjQgVTpHLCBVOkcsIFVEOkcgL2JyYW5jaAorICAgIFJlc0Nv
bmQsIEltbSwgVG1wCisgICAgUmVzQ29uZCwgVG1wLCBUbXAKKwogQnJhbmNoTmVnMzIgVTpHLCBV
RDpHIC9icmFuY2gKICAgICBSZXNDb25kLCBUbXAKIAorQnJhbmNoTmVnNjQgVTpHLCBVRDpHIC9i
cmFuY2gKKyAgICBSZXNDb25kLCBUbXAKKwogSnVtcCAvYnJhbmNoCiAKIFJldCAvdGVybWluYWwK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvb3Bjb2RlX2dlbmVyYXRvci5yYgo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL29wY29kZV9nZW5lcmF0
b3IucmIJKHJldmlzaW9uIDE5MjM4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIv
b3Bjb2RlX2dlbmVyYXRvci5yYgkod29ya2luZyBjb3B5KQpAQCAtNzkxLDIwICs3OTEsMjggQEAg
d3JpdGVIKCJPcGNvZGVHZW5lcmF0ZWQiKSB7CiAgICAgb3V0cC5wdXRzICJib29sIEluc3Q6Omhh
c05vbkFyZ05vbkNvbnRyb2xFZmZlY3RzKCkiCiAgICAgb3V0cC5wdXRzICJ7IgogICAgIG91dHAu
cHV0cyAic3dpdGNoIChvcGNvZGUpIHsiCisgICAgZm91bmRUcnVlID0gZmFsc2UKICAgICAkb3Bj
b2Rlcy52YWx1ZXMuZWFjaCB7CiAgICAgICAgIHwgb3Bjb2RlIHwKICAgICAgICAgaWYgb3Bjb2Rl
LmF0dHJpYnV0ZXNbOmVmZmVjdHNdCiAgICAgICAgICAgICBvdXRwLnB1dHMgImNhc2UgI3tvcGNv
ZGUubmFtZX06IgorICAgICAgICAgICAgZm91bmRUcnVlID0gdHJ1ZQogICAgICAgICBlbmQKICAg
ICB9Ci0gICAgb3V0cC5wdXRzICJyZXR1cm4gdHJ1ZTsiCisgICAgaWYgZm91bmRUcnVlCisgICAg
ICAgIG91dHAucHV0cyAicmV0dXJuIHRydWU7IgorICAgIGVuZAorICAgIGZvdW5kVHJ1ZSA9IGZh
bHNlCiAgICAgJG9wY29kZXMudmFsdWVzLmVhY2ggewogICAgICAgICB8IG9wY29kZSB8CiAgICAg
ICAgIGlmIG9wY29kZS5zcGVjaWFsCiAgICAgICAgICAgICBvdXRwLnB1dHMgImNhc2UgI3tvcGNv
ZGUubmFtZX06IgorICAgICAgICAgICAgZm91bmRUcnVlID0gdHJ1ZQogICAgICAgICBlbmQKICAg
ICB9Ci0gICAgb3V0cC5wdXRzICJyZXR1cm4gYXJnc1swXS5zcGVjaWFsKCktPmhhc05vbkFyZ05v
bkNvbnRyb2xFZmZlY3RzKCk7IgorICAgIGlmIGZvdW5kVHJ1ZQorICAgICAgICBvdXRwLnB1dHMg
InJldHVybiBhcmdzWzBdLnNwZWNpYWwoKS0+aGFzTm9uQXJnTm9uQ29udHJvbEVmZmVjdHMoKTsi
CisgICAgZW5kCiAgICAgb3V0cC5wdXRzICJkZWZhdWx0OiIKICAgICBvdXRwLnB1dHMgInJldHVy
biBmYWxzZTsiCiAgICAgb3V0cC5wdXRzICJ9IgpAQCAtODEzLDIwICs4MjEsMjggQEAgd3JpdGVI
KCJPcGNvZGVHZW5lcmF0ZWQiKSB7CiAgICAgb3V0cC5wdXRzICJib29sIEluc3Q6Omhhc05vbkFy
Z0VmZmVjdHMoKSIKICAgICBvdXRwLnB1dHMgInsiCiAgICAgb3V0cC5wdXRzICJzd2l0Y2ggKG9w
Y29kZSkgeyIKKyAgICBmb3VuZFRydWUgPSBmYWxzZQogICAgICRvcGNvZGVzLnZhbHVlcy5lYWNo
IHsKICAgICAgICAgfCBvcGNvZGUgfAogICAgICAgICBpZiBvcGNvZGUuYXR0cmlidXRlc1s6YnJh
bmNoXSBvciBvcGNvZGUuYXR0cmlidXRlc1s6dGVybWluYWxdIG9yIG9wY29kZS5hdHRyaWJ1dGVz
WzplZmZlY3RzXQogICAgICAgICAgICAgb3V0cC5wdXRzICJjYXNlICN7b3Bjb2RlLm5hbWV9OiIK
KyAgICAgICAgICAgIGZvdW5kVHJ1ZSA9IHRydWUKICAgICAgICAgZW5kCiAgICAgfQotICAgIG91
dHAucHV0cyAicmV0dXJuIHRydWU7IgorICAgIGlmIGZvdW5kVHJ1ZQorICAgICAgICBvdXRwLnB1
dHMgInJldHVybiB0cnVlOyIKKyAgICBlbmQKKyAgICBmb3VuZFRydWUgPSBmYWxzZQogICAgICRv
cGNvZGVzLnZhbHVlcy5lYWNoIHsKICAgICAgICAgfCBvcGNvZGUgfAogICAgICAgICBpZiBvcGNv
ZGUuc3BlY2lhbAogICAgICAgICAgICAgb3V0cC5wdXRzICJjYXNlICN7b3Bjb2RlLm5hbWV9OiIK
KyAgICAgICAgICAgIGZvdW5kVHJ1ZSA9IHRydWUKICAgICAgICAgZW5kCiAgICAgfQotICAgIG91
dHAucHV0cyAicmV0dXJuIGFyZ3NbMF0uc3BlY2lhbCgpLT5oYXNOb25BcmdOb25Db250cm9sRWZm
ZWN0cygpOyIKKyAgICBpZiBmb3VuZFRydWUKKyAgICAgICAgb3V0cC5wdXRzICJyZXR1cm4gYXJn
c1swXS5zcGVjaWFsKCktPmhhc05vbkFyZ05vbkNvbnRyb2xFZmZlY3RzKCk7IgorICAgIGVuZAog
ICAgIG91dHAucHV0cyAiZGVmYXVsdDoiCiAgICAgb3V0cC5wdXRzICJyZXR1cm4gZmFsc2U7Igog
ICAgIG91dHAucHV0cyAifSIK
</data>
<flag name="review"
          id="290499"
          type_id="1"
          status="+"
          setter="benjamin"
    />
          </attachment>
      

    </bug>

</bugzilla>