<?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>16585</bug_id>
          
          <creation_ts>2007-12-23 07:51:49 -0800</creation_ts>
          <short_desc>Optimize variable declarations</short_desc>
          <delta_ts>2007-12-24 15:45:51 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>OS X 10.4</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P3</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Maciej Stachowiak">mjs</reporter>
          <assigned_to name="Maciej Stachowiak">mjs</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>65122</commentid>
    <comment_count>0</comment_count>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2007-12-23 07:51:49 -0800</bug_when>
    <thetext>Variable declaration statements can be replaced at parse time with assignments if there are initializers, or nothing at all if there aren&apos;t. The actual declaration logic is handled on entering the function body anyway.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>65123</commentid>
    <comment_count>1</comment_count>
      <attachid>18071</attachid>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2007-12-23 07:55:24 -0800</bug_when>
    <thetext>Created attachment 18071
optimize var statements - 3.7% speedup</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>65145</commentid>
    <comment_count>2</comment_count>
      <attachid>18071</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2007-12-23 15:58:46 -0800</bug_when>
    <thetext>Comment on attachment 18071
optimize var statements - 3.7% speedup

So my comments deal entirely with code readability.  AFAICT, the functionality looks fine:

ExprStatementNode&lt;false&gt; and ExprStatementNode&lt;true&gt; should have nicely named typdefs.  Probably ExprStatementNode should also change names to some sort of ExprStatementNodeBase or the like.

As part of that &lt;isVar&gt; needs a more descriptive name.  Small functions would be better done using the typdef classes, larger functions can be defined using ExprStatementNode&lt;betterNameThanIsVar&gt;::

If you look at the formatted diff, it appears you added a whole bunch of extra whitespace.

I think passing int attrs as part of appendToVarDeclarationList and using DeclarationStacks::IsConstant and DeclarationStacks::HasInitializerat the callsites would be clearer.  At least at the callsites. :)

 1807       ForNode(ExpressionNode* e1, ExpressionNode* e2, ExpressionNode* e3, StatementNode* s, bool e1WasVarDecl) KJS_FAST_CALL

I was trying to come up with a cleaner way of expressing the same.  Using an enum &quot;FirstExprIsVarDecl&quot; instead of a bool would lead to cleaner callsites... I guess that&apos;s about the best I can come up with for right now.

If you fix at least some of those readability issues, this is totally fine for landing.  Congrats on such an awesome speedup.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>65185</commentid>
    <comment_count>3</comment_count>
      <attachid>18090</attachid>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2007-12-24 01:14:05 -0800</bug_when>
    <thetext>Created attachment 18090
cleaned up version (now measures as 3.5% speedup)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>65186</commentid>
    <comment_count>4</comment_count>
      <attachid>18090</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2007-12-24 01:44:33 -0800</bug_when>
    <thetext>Comment on attachment 18090
cleaned up version (now measures as 3.5% speedup)

Looks good to me.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>18071</attachid>
            <date>2007-12-23 07:55:24 -0800</date>
            <delta_ts>2007-12-24 01:14:15 -0800</delta_ts>
            <desc>optimize var statements - 3.7% speedup</desc>
            <filename>optimize-var-statements.patch.txt</filename>
            <type>text/plain</type>
            <size>27068</size>
            <attacher name="Maciej Stachowiak">mjs</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDI4OTY2
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDMgQEAKKzIwMDctMTIt
MjMgIE1hY2llaiBTdGFjaG93aWFrICA8bWpzQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIC0gT3B0aW1pemUgdmFyaWFi
bGUgZGVjbGFyYXRpb25zCisgICAgICAgIGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE2NTg1CisgICAgICAgIAorICAgICAgICAzLjclIHNwZWVkdXAgb24gU3VuU3BpZGVy
LgorCisgICAgICAgIHZhciBzdGF0ZW1lbnRzIG5vdyByZXN1bHQgaW4gZWl0aGVyIGFzc2lnbm1l
bnRzIG9yIGVtcHR5IHN0YXRlbWVudHMuCisgICAgICAgIAorICAgICAgICBUaGlzIGFsbG93cyBh
IGNvdXBsZSBvZiBvcHRpbWl6YXRpb24gb3Bwb3J0dW5pdGllczoKKyAgICAgICAgLSBObyBuZWVk
IHRvIGJyYW5jaCBhdCBydW50aW1lIHRvIGNoZWNrIGlmIHRoZXJlIGlzIGFuIGluaXRpYWxpemVy
CisgICAgICAgIC0gRW1wdHlTdGF0ZW1lbnROb2RlcyBjYW4gYmUgcmVtb3ZlZCBlbnRpcmVseSAo
YWxzbyBkb25lIGluIHRoaXMgcGF0Y2gpCisgICAgICAgIC0gQXNzaWdubWVudCBleHByZXNzaW9u
cyBnZXQgcHJvcGVybHkgb3B0aW1pemVkIGZvciBsb2NhbCB2YXJpYWJsZXMKKyAgICAgICAgCisg
ICAgICAgICogSmF2YVNjcmlwdENvcmUuZXhwOgorICAgICAgICAqIGtqcy9ncmFtbWFyLnk6Cisg
ICAgICAgICoga2pzL25vZGVzLmNwcDoKKyAgICAgICAgKEtKUzo6U291cmNlRWxlbWVudHM6OmFw
cGVuZCk6CisgICAgICAgIChLSlM6OlZhckRlY2xOb2RlOjpWYXJEZWNsTm9kZSk6CisgICAgICAg
IChLSlM6Ojo6b3B0aW1pemVWYXJpYWJsZUFjY2Vzcyk6CisgICAgICAgIChLSlM6Ojo6ZXhlY3V0
ZSk6CisgICAgICAgIChLSlM6OkZvckluTm9kZTo6Rm9ySW5Ob2RlKToKKyAgICAgICAgKEtKUzo6
RnVuY3Rpb25Cb2R5Tm9kZTo6aW5pdGlhbGl6ZVN5bWJvbFRhYmxlKToKKyAgICAgICAgKEtKUzo6
UHJvZ3JhbU5vZGU6OmluaXRpYWxpemVTeW1ib2xUYWJsZSk6CisgICAgICAgIChLSlM6OkZ1bmN0
aW9uQm9keU5vZGU6OnByb2Nlc3NEZWNsYXJhdGlvbnMpOgorICAgICAgICAoS0pTOjpQcm9ncmFt
Tm9kZTo6cHJvY2Vzc0RlY2xhcmF0aW9ucyk6CisgICAgICAgIChLSlM6OkV2YWxOb2RlOjpwcm9j
ZXNzRGVjbGFyYXRpb25zKToKKyAgICAgICAgKiBranMvbm9kZXMuaDoKKyAgICAgICAgKEtKUzo6
RGVjbGFyYXRpb25TdGFja3M6Oik6CisgICAgICAgIChLSlM6OlN0YXRlbWVudE5vZGU6Oik6Cisg
ICAgICAgIChLSlM6OkVtcHR5U3RhdGVtZW50Tm9kZTo6KToKKyAgICAgICAgKEtKUzo6Rm9yTm9k
ZTo6KToKKyAgICAgICAgKiBranMvbm9kZXMyc3RyaW5nLmNwcDoKKyAgICAgICAgKEtKUzo6VmFy
RGVjbE5vZGU6OnN0cmVhbVRvKToKKyAgICAgICAgKEtKUzo6U2NvcGVOb2RlOjpzdHJlYW1Ubyk6
CisgICAgICAgIChLSlM6Ojo6c3RyZWFtVG8pOgorICAgICAgICAoS0pTOjpGb3JOb2RlOjpzdHJl
YW1Ubyk6CisKIDIwMDctMTItMjEgIE1hcmsgUm93ZSAgPG1yb3dlQGFwcGxlLmNvbT4KIAogICAg
ICAgICBSZXZpZXdlZCBieSBPbGl2ZXIgSHVudC4KSW5kZXg6IEphdmFTY3JpcHRDb3JlLmV4cAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS5leHAJKHJldmlzaW9uIDI4OTYyKQorKysgSmF2
YVNjcmlwdENvcmUuZXhwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjAsNyArMTIwLDcgQEAgX19aTjNL
SlMxMUludGVycHJldGVyOGV2YWx1YXRlRVBOU185RXhlYwogX19aTjNLSlMxMUpTSW1tZWRpYXRl
NHR5cGVFUEtOU183SlNWYWx1ZUUKIF9fWk4zS0pTMTFKU0ltbWVkaWF0ZTh0b09iamVjdEVQS05T
XzdKU1ZhbHVlRVBOU185RXhlY1N0YXRlRQogX19aTjNLSlMxMUpTSW1tZWRpYXRlOHRvU3RyaW5n
RVBLTlNfN0pTVmFsdWVFCi1fX1pOM0tKUzExUHJvZ3JhbU5vZGVDMUVQTlNfMTRTb3VyY2VFbGVt
ZW50c0VQTjNXVEY2VmVjdG9ySVBOU18xMVZhckRlY2xOb2RlRUxtMTZFRUVQTlM0X0lQTlNfMTJG
dW5jRGVjbE5vZGVFTG0xNkVFRQorX19aTjNLSlMxMVByb2dyYW1Ob2RlQzFFUE5TXzE0U291cmNl
RWxlbWVudHNFUE4zV1RGNlZlY3RvcklTdDRwYWlySU5TXzEwSWRlbnRpZmllckVqRUxtMTZFRUVQ
TlM0X0lQTlNfMTJGdW5jRGVjbE5vZGVFTG0xNkVFRQogX19aTjNLSlMxMVByb3BlcnR5TWFwMTFn
ZXRMb2NhdGlvbkVSS05TXzEwSWRlbnRpZmllckUKIF9fWk4zS0pTMTFQcm9wZXJ0eU1hcDVjbGVh
ckV2CiBfX1pOM0tKUzExUHJvcGVydHlNYXA3cmVzdG9yZUVSS05TXzE1U2F2ZWRQcm9wZXJ0aWVz
RQpJbmRleDoga2pzL2dyYW1tYXIueQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBranMvZ3JhbW1hci55CShyZXZp
c2lvbiAyODk2MikKKysrIGtqcy9ncmFtbWFyLnkJKHdvcmtpbmcgY29weSkKQEAgLTcwLDYgKzcw
LDkgQEAgc3RhdGljIEV4cHJlc3Npb25Ob2RlKiBtYWtlVHlwZU9mTm9kZShFeAogc3RhdGljIEV4
cHJlc3Npb25Ob2RlKiBtYWtlRGVsZXRlTm9kZShFeHByZXNzaW9uTm9kZSopOwogc3RhdGljIEV4
cHJlc3Npb25Ob2RlKiBtYWtlTmVnYXRlTm9kZShFeHByZXNzaW9uTm9kZSopOwogc3RhdGljIE51
bWJlck5vZGUqIG1ha2VOdW1iZXJOb2RlKGRvdWJsZSk7CitzdGF0aWMgU3RhdGVtZW50Tm9kZSog
bWFrZVZhclN0YXRlbWVudE5vZGUoVmFyRGVjbE5vZGUqKTsKKyBzdGF0aWMgRXhwcmVzc2lvbk5v
ZGUqIG1ha2VWYXJFeHByTm9kZShWYXJEZWNsTm9kZSopOworCiAKICNpZiBDT01QSUxFUihNU1ZD
KQogCkBAIC0xMTEsMTEgKzExNCwyNCBAQCB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gVCBtZXJnZURl
Y2xhcmF0aW9uCiAgICAgcmV0dXJuIGRlY2xzMTsKIH0KIAotc3RhdGljIHZvaWQgYXBwZW5kVG9W
YXJEZWNsYXJhdGlvbkxpc3QoUGFyc2VyUmVmQ291bnRlZERhdGE8RGVjbGFyYXRpb25TdGFja3M6
OlZhclN0YWNrPiomIHZhckRlY2xzLCBWYXJEZWNsTm9kZSogZGVjbCkKK3N0YXRpYyB2b2lkIGFw
cGVuZFRvVmFyRGVjbGFyYXRpb25MaXN0KFBhcnNlclJlZkNvdW50ZWREYXRhPERlY2xhcmF0aW9u
U3RhY2tzOjpWYXJTdGFjaz4qJiB2YXJEZWNscywgY29uc3QgSWRlbnRpZmllciYgaWRlbnQsIGJv
b2wgaXNDb25zdGFudCwgYm9vbCBoYXNJbml0aWFsaXplcikKIHsKICAgICBpZiAoIXZhckRlY2xz
KQogICAgICAgICB2YXJEZWNscyA9IG5ldyBQYXJzZXJSZWZDb3VudGVkRGF0YTxEZWNsYXJhdGlv
blN0YWNrczo6VmFyU3RhY2s+OwotICAgIHZhckRlY2xzLT5kYXRhLmFwcGVuZChkZWNsKTsKKwor
ICAgIHVuc2lnbmVkIGF0dHJzID0gMDsKKyAgICBpZiAoaXNDb25zdGFudCkKKyAgICAgICAgYXR0
cnMgfD0gRGVjbGFyYXRpb25TdGFja3M6OklzQ29uc3RhbnQ7CisgICAgaWYgKGhhc0luaXRpYWxp
emVyKQorICAgICAgICBhdHRycyB8PSBEZWNsYXJhdGlvblN0YWNrczo6SGFzSW5pdGlhbGl6ZXI7
ICAgICAgICAKKworICAgIHZhckRlY2xzLT5kYXRhLmFwcGVuZChtYWtlX3BhaXIoaWRlbnQsIGF0
dHJzKSk7CisKK30KKworc3RhdGljIGlubGluZSB2b2lkIGFwcGVuZFRvVmFyRGVjbGFyYXRpb25M
aXN0KFBhcnNlclJlZkNvdW50ZWREYXRhPERlY2xhcmF0aW9uU3RhY2tzOjpWYXJTdGFjaz4qJiB2
YXJEZWNscywgVmFyRGVjbE5vZGUqIGRlY2wpCit7CisgICAgYXBwZW5kVG9WYXJEZWNsYXJhdGlv
bkxpc3QodmFyRGVjbHMsIGRlY2wtPmlkZW50LCBkZWNsLT52YXJUeXBlID09IFZhckRlY2xOb2Rl
OjpDb25zdGFudCwgZGVjbC0+aW5pdCk7CiB9CiAKICV9CkBAIC0xMzUsNyArMTUxLDYgQEAgc3Rh
dGljIHZvaWQgYXBwZW5kVG9WYXJEZWNsYXJhdGlvbkxpc3QoUAogICAgIENhc2VCbG9ja05vZGVJ
bmZvICAgY2FzZUJsb2NrTm9kZTsKICAgICBDYXNlQ2xhdXNlTm9kZUluZm8gIGNhc2VDbGF1c2VO
b2RlOwogICAgIEZ1bmNFeHByTm9kZSogICAgICAgZnVuY0V4cHJOb2RlOwotICAgIEFzc2lnbkV4
cHJOb2RlKiAgICAgYXNzaWduRXhwck5vZGU7CiAKICAgICAvLyBzdGF0ZW1lbnQgbm9kZXMKICAg
ICBTdGF0ZW1lbnROb2RlSW5mbyAgIHN0YXRlbWVudE5vZGU7CkBAIC0yMjgsNyArMjQzLDcgQEAg
c3RhdGljIHZvaWQgYXBwZW5kVG9WYXJEZWNsYXJhdGlvbkxpc3QoUAogJXR5cGUgPHN0YXRlbWVu
dE5vZGU+ICAgRGVidWdnZXJTdGF0ZW1lbnQKICV0eXBlIDxzdGF0ZW1lbnROb2RlPiAgIFNvdXJj
ZUVsZW1lbnQKIAotJXR5cGUgPGFzc2lnbkV4cHJOb2RlPiAgSW5pdGlhbGl6ZXIgSW5pdGlhbGl6
ZXJOb0luCisldHlwZSA8ZXhwcmVzc2lvbk5vZGU+ICBJbml0aWFsaXplciBJbml0aWFsaXplck5v
SW4KICV0eXBlIDxmdW5jRGVjbE5vZGU+ICAgIEZ1bmN0aW9uRGVjbGFyYXRpb24KICV0eXBlIDxm
dW5jRXhwck5vZGU+ICAgIEZ1bmN0aW9uRXhwcgogJXR5cGUgPGZ1bmN0aW9uQm9keU5vZGU+ICBG
dW5jdGlvbkJvZHkKQEAgLTcwMyw5ICs3MTgsOSBAQCBCbG9jazoKIDsKIAogVmFyaWFibGVTdGF0
ZW1lbnQ6Ci0gICAgVkFSIFZhcmlhYmxlRGVjbGFyYXRpb25MaXN0ICc7JyAgICAgeyAkJCA9IGNy
ZWF0ZU5vZGVJbmZvPFN0YXRlbWVudE5vZGUqPihuZXcgVmFyU3RhdGVtZW50Tm9kZSgkMi5tX25v
ZGUuaGVhZCksICQyLm1fdmFyRGVjbGFyYXRpb25zLCAkMi5tX2Z1bmNEZWNsYXJhdGlvbnMpOwor
ICAgIFZBUiBWYXJpYWJsZURlY2xhcmF0aW9uTGlzdCAnOycgICAgIHsgJCQgPSBjcmVhdGVOb2Rl
SW5mbzxTdGF0ZW1lbnROb2RlKj4obWFrZVZhclN0YXRlbWVudE5vZGUoJDIubV9ub2RlLmhlYWQp
LCAkMi5tX3ZhckRlY2xhcmF0aW9ucywgJDIubV9mdW5jRGVjbGFyYXRpb25zKTsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERCRygkJC5tX25vZGUsIEAxLCBAMyk7
IH0KLSAgfCBWQVIgVmFyaWFibGVEZWNsYXJhdGlvbkxpc3QgZXJyb3IgICB7ICQkID0gY3JlYXRl
Tm9kZUluZm88U3RhdGVtZW50Tm9kZSo+KG5ldyBWYXJTdGF0ZW1lbnROb2RlKCQyLm1fbm9kZS5o
ZWFkKSwgJDIubV92YXJEZWNsYXJhdGlvbnMsICQyLm1fZnVuY0RlY2xhcmF0aW9ucyk7CisgIHwg
VkFSIFZhcmlhYmxlRGVjbGFyYXRpb25MaXN0IGVycm9yICAgeyAkJCA9IGNyZWF0ZU5vZGVJbmZv
PFN0YXRlbWVudE5vZGUqPihtYWtlVmFyU3RhdGVtZW50Tm9kZSgkMi5tX25vZGUuaGVhZCksICQy
Lm1fdmFyRGVjbGFyYXRpb25zLCAkMi5tX2Z1bmNEZWNsYXJhdGlvbnMpOwogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgREJHKCQkLm1fbm9kZSwgQDEsIEAyKTsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFVVE9fU0VNSUNPTE9OOyB9
CiA7CkBAIC03MTQsNyArNzI5LDcgQEAgVmFyaWFibGVEZWNsYXJhdGlvbkxpc3Q6CiAgICAgVmFy
aWFibGVEZWNsYXJhdGlvbiAgICAgICAgICAgICAgICAgeyAkJC5tX25vZGUuaGVhZCA9ICQxOwog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCQubV9ub2RlLnRhaWwg
PSAkJC5tX25vZGUuaGVhZDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICQkLm1fdmFyRGVjbGFyYXRpb25zID0gbmV3IFBhcnNlclJlZkNvdW50ZWREYXRhPERlY2xh
cmF0aW9uU3RhY2tzOjpWYXJTdGFjaz47Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAkJC5tX3ZhckRlY2xhcmF0aW9ucy0+ZGF0YS5hcHBlbmQoJDEpOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kVG9WYXJEZWNsYXJhdGlv
bkxpc3QoJCQubV92YXJEZWNsYXJhdGlvbnMsICQxKTsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICQkLm1fZnVuY0RlY2xhcmF0aW9ucyA9IDA7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICB8IFZhcmlhYmxlRGVjbGFyYXRpb25M
aXN0ICcsJyBWYXJpYWJsZURlY2xhcmF0aW9uCkBAIC03MjIsNyArNzM3LDcgQEAgVmFyaWFibGVE
ZWNsYXJhdGlvbkxpc3Q6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAkMS5tX25vZGUudGFpbC0+bmV4dCA9ICQzOwogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgJCQubV9ub2RlLnRhaWwgPSAkMzsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICQkLm1fdmFyRGVjbGFyYXRpb25zID0gJDEubV92YXJEZWNs
YXJhdGlvbnM7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkJC5t
X3ZhckRlY2xhcmF0aW9ucy0+ZGF0YS5hcHBlbmQoJDMpOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYXBwZW5kVG9WYXJEZWNsYXJhdGlvbkxpc3QoJCQubV92YXJE
ZWNsYXJhdGlvbnMsICQzKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICQkLm1fZnVuY0RlY2xhcmF0aW9ucyA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfQogOwpAQCAtNzMxLDE0ICs3NDYsMTQgQEAgVmFyaWFibGVEZWNsYXJh
dGlvbkxpc3ROb0luOgogICAgIFZhcmlhYmxlRGVjbGFyYXRpb25Ob0luICAgICAgICAgICAgIHsg
JCQubV9ub2RlLmhlYWQgPSAkMTsgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAkJC5tX25vZGUudGFpbCA9ICQkLm1fbm9kZS5oZWFkOwogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgJCQubV92YXJEZWNsYXJhdGlvbnMgPSBuZXcgUGFy
c2VyUmVmQ291bnRlZERhdGE8RGVjbGFyYXRpb25TdGFja3M6OlZhclN0YWNrPjsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQkLm1fdmFyRGVjbGFyYXRpb25zLT5k
YXRhLmFwcGVuZCgkMSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBhcHBlbmRUb1ZhckRlY2xhcmF0aW9uTGlzdCgkJC5tX3ZhckRlY2xhcmF0aW9ucywgJDEpOwog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCQubV9mdW5jRGVjbGFy
YXRpb25zID0gMDsgfQogICB8IFZhcmlhYmxlRGVjbGFyYXRpb25MaXN0Tm9JbiAnLCcgVmFyaWFi
bGVEZWNsYXJhdGlvbk5vSW4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB7ICQkLm1fbm9kZS5oZWFkID0gJDEubV9ub2RlLmhlYWQ7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAkMS5tX25vZGUudGFpbC0+bmV4dCA9ICQzOwogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCQubV9ub2RlLnRhaWwgPSAkMzsg
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkJC5tX3ZhckRlY2xh
cmF0aW9ucyA9ICQxLm1fdmFyRGVjbGFyYXRpb25zOwotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgJCQubV92YXJEZWNsYXJhdGlvbnMtPmRhdGEuYXBwZW5kKCQzKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZFRvVmFyRGVj
bGFyYXRpb25MaXN0KCQkLm1fdmFyRGVjbGFyYXRpb25zLCAkMyk7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAkJC5tX2Z1bmNEZWNsYXJhdGlvbnMgPSAwOyB9CiA7
CiAKQEAgLTc2NCwxNCArNzc5LDE0IEBAIENvbnN0RGVjbGFyYXRpb25MaXN0OgogICAgIENvbnN0
RGVjbGFyYXRpb24gICAgICAgICAgICAgICAgICAgIHsgJCQubV9ub2RlLmhlYWQgPSAkMTsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQkLm1fbm9kZS50YWlsID0g
JCQubV9ub2RlLmhlYWQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAkJC5tX3ZhckRlY2xhcmF0aW9ucyA9IG5ldyBQYXJzZXJSZWZDb3VudGVkRGF0YTxEZWNsYXJh
dGlvblN0YWNrczo6VmFyU3RhY2s+OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgJCQubV92YXJEZWNsYXJhdGlvbnMtPmRhdGEuYXBwZW5kKCQxKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZFRvVmFyRGVjbGFyYXRpb25M
aXN0KCQkLm1fdmFyRGVjbGFyYXRpb25zLCAkMSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAkJC5tX2Z1bmNEZWNsYXJhdGlvbnMgPSAwOyB9CiAgIHwgQ29uc3RE
ZWNsYXJhdGlvbkxpc3QgJywnIENvbnN0RGVjbGFyYXRpb24KICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB7ICAkJC5tX25vZGUuaGVhZCA9ICQxLm1fbm9kZS5oZWFkOwog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJDEubV9ub2RlLnRhaWwt
Pm5leHQgPSAkMzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQk
Lm1fbm9kZS50YWlsID0gJDM7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAkJC5tX3ZhckRlY2xhcmF0aW9ucyA9ICQxLm1fdmFyRGVjbGFyYXRpb25zOwotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCQubV92YXJEZWNsYXJhdGlvbnMt
PmRhdGEuYXBwZW5kKCQzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGFwcGVuZFRvVmFyRGVjbGFyYXRpb25MaXN0KCQkLm1fdmFyRGVjbGFyYXRpb25zLCAkMyk7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkJC5tX2Z1bmNEZWNs
YXJhdGlvbnMgPSAwOyB9CiA7CiAKQEAgLTc4MSwxMSArNzk2LDExIEBAIENvbnN0RGVjbGFyYXRp
b246CiA7CiAKIEluaXRpYWxpemVyOgotICAgICc9JyBBc3NpZ25tZW50RXhwciAgICAgICAgICAg
ICAgICAgIHsgJCQgPSBuZXcgQXNzaWduRXhwck5vZGUoJDIpOyB9CisgICAgJz0nIEFzc2lnbm1l
bnRFeHByICAgICAgICAgICAgICAgICAgeyAkJCA9ICQyOyB9CiA7CiAKIEluaXRpYWxpemVyTm9J
bjoKLSAgICAnPScgQXNzaWdubWVudEV4cHJOb0luICAgICAgICAgICAgICB7ICQkID0gbmV3IEFz
c2lnbkV4cHJOb2RlKCQyKTsgfQorICAgICc9JyBBc3NpZ25tZW50RXhwck5vSW4gICAgICAgICAg
ICAgIHsgJCQgPSAkMjsgfQogOwogCiBFbXB0eVN0YXRlbWVudDoKQEAgLTc5Myw5ICs4MDgsOSBA
QCBFbXB0eVN0YXRlbWVudDoKIDsKIAogRXhwclN0YXRlbWVudDoKLSAgICBFeHByTm9CRiAnOycg
ICAgICAgICAgICAgICAgICAgICAgICB7ICQkID0gY3JlYXRlTm9kZUluZm88U3RhdGVtZW50Tm9k
ZSo+KG5ldyBFeHByU3RhdGVtZW50Tm9kZSgkMSksIDAsIDApOworICAgIEV4cHJOb0JGICc7JyAg
ICAgICAgICAgICAgICAgICAgICAgIHsgJCQgPSBjcmVhdGVOb2RlSW5mbzxTdGF0ZW1lbnROb2Rl
Kj4obmV3IEV4cHJTdGF0ZW1lbnROb2RlPGZhbHNlPigkMSksIDAsIDApOwogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgREJHKCQkLm1fbm9kZSwgQDEsIEAyKTsgfQot
ICB8IEV4cHJOb0JGIGVycm9yICAgICAgICAgICAgICAgICAgICAgIHsgJCQgPSBjcmVhdGVOb2Rl
SW5mbzxTdGF0ZW1lbnROb2RlKj4obmV3IEV4cHJTdGF0ZW1lbnROb2RlKCQxKSwgMCwgMCk7Cisg
IHwgRXhwck5vQkYgZXJyb3IgICAgICAgICAgICAgICAgICAgICAgeyAkJCA9IGNyZWF0ZU5vZGVJ
bmZvPFN0YXRlbWVudE5vZGUqPihuZXcgRXhwclN0YXRlbWVudE5vZGU8ZmFsc2U+KCQxKSwgMCwg
MCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEQkcoJCQubV9u
b2RlLCBAMSwgQDEpOyBBVVRPX1NFTUlDT0xPTjsgfQogOwogCkBAIC04MTYsMTEgKzgzMSwxMSBA
QCBJdGVyYXRpb25TdGF0ZW1lbnQ6CiAgIHwgV0hJTEUgJygnIEV4cHIgJyknIFN0YXRlbWVudCAg
ICAgICAgeyAkJCA9IGNyZWF0ZU5vZGVJbmZvPFN0YXRlbWVudE5vZGUqPihuZXcgV2hpbGVOb2Rl
KCQzLCAkNS5tX25vZGUpLCAkNS5tX3ZhckRlY2xhcmF0aW9ucywgJDUubV9mdW5jRGVjbGFyYXRp
b25zKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERCRygkJC5t
X25vZGUsIEAxLCBANCk7IH0KICAgfCBGT1IgJygnIEV4cHJOb0luT3B0ICc7JyBFeHByT3B0ICc7
JyBFeHByT3B0ICcpJyBTdGF0ZW1lbnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB7ICQkID0gY3JlYXRlTm9kZUluZm88U3RhdGVtZW50Tm9kZSo+KG5ldyBGb3JOb2Rl
KCQzLCAkNSwgJDcsICQ5Lm1fbm9kZSksICQ5Lm1fdmFyRGVjbGFyYXRpb25zLCAkOS5tX2Z1bmNE
ZWNsYXJhdGlvbnMpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsg
JCQgPSBjcmVhdGVOb2RlSW5mbzxTdGF0ZW1lbnROb2RlKj4obmV3IEZvck5vZGUoJDMsICQ1LCAk
NywgJDkubV9ub2RlLCBmYWxzZSksICQ5Lm1fdmFyRGVjbGFyYXRpb25zLCAkOS5tX2Z1bmNEZWNs
YXJhdGlvbnMpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgREJH
KCQkLm1fbm9kZSwgQDEsIEA4KTsgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfQogICB8IEZPUiAnKCcgVkFSIFZhcmlhYmxlRGVjbGFyYXRpb25MaXN0Tm9JbiAnOycg
RXhwck9wdCAnOycgRXhwck9wdCAnKScgU3RhdGVtZW50Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgeyAkJCA9IGNyZWF0ZU5vZGVJbmZvPFN0YXRlbWVudE5vZGUqPihu
ZXcgRm9yTm9kZSgkNC5tX25vZGUuaGVhZCwgJDYsICQ4LCAkMTAubV9ub2RlKSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB7ICQkID0gY3JlYXRlTm9kZUluZm88U3RhdGVtZW50Tm9kZSo+KG5ldyBGb3JO
b2RlKG1ha2VWYXJFeHByTm9kZSgkNC5tX25vZGUuaGVhZCksICQ2LCAkOCwgJDEwLm1fbm9kZSwg
dHJ1ZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXJnZURlY2xhcmF0aW9uTGlzdHMoJDQubV92
YXJEZWNsYXJhdGlvbnMsICQxMC5tX3ZhckRlY2xhcmF0aW9ucyksCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBtZXJnZURlY2xhcmF0aW9uTGlzdHMoJDQubV9mdW5jRGVjbGFyYXRpb25zLCAkMTAubV9m
dW5jRGVjbGFyYXRpb25zKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBEQkcoJCQubV9ub2RlLCBAMSwgQDkpOyB9CkBAIC04MzQsMTIgKzg0OSwxMiBAQCBJdGVy
YXRpb25TdGF0ZW1lbnQ6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fQogICB8IEZPUiAnKCcgVkFSIElERU5UIElOVE9LRU4gRXhwciAnKScgU3RhdGVtZW50CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBGb3JJbk5vZGUgKmZvckluID0g
bmV3IEZvckluTm9kZSgqJDQsIDAsICQ2LCAkOC5tX25vZGUpOwotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kVG9WYXJEZWNsYXJhdGlvbkxpc3QoJDgubV92
YXJEZWNsYXJhdGlvbnMsIGZvckluLT5nZXRWYXJEZWNsKCkpOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBhcHBlbmRUb1ZhckRlY2xhcmF0aW9uTGlzdCgkOC5t
X3ZhckRlY2xhcmF0aW9ucywgKiQ0LCBmYWxzZSwgdHJ1ZSk7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAkJCA9IGNyZWF0ZU5vZGVJbmZvPFN0YXRlbWVudE5vZGUq
Pihmb3JJbiwgJDgubV92YXJEZWNsYXJhdGlvbnMsICQ4Lm1fZnVuY0RlY2xhcmF0aW9ucyk7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEQkcoJCQubV9ub2RlLCBA
MSwgQDcpOyB9CiAgIHwgRk9SICcoJyBWQVIgSURFTlQgSW5pdGlhbGl6ZXJOb0luIElOVE9LRU4g
RXhwciAnKScgU3RhdGVtZW50CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgeyBGb3JJbk5vZGUgKmZvckluID0gbmV3IEZvckluTm9kZSgqJDQsICQ1LCAkNywgJDkubV9u
b2RlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZFRv
VmFyRGVjbGFyYXRpb25MaXN0KCQ5Lm1fdmFyRGVjbGFyYXRpb25zLCBmb3JJbi0+Z2V0VmFyRGVj
bCgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZFRv
VmFyRGVjbGFyYXRpb25MaXN0KCQ5Lm1fdmFyRGVjbGFyYXRpb25zLCAgKiQ0LCBmYWxzZSwgdHJ1
ZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkJCA9IGNyZWF0
ZU5vZGVJbmZvPFN0YXRlbWVudE5vZGUqPihmb3JJbiwgJDkubV92YXJEZWNsYXJhdGlvbnMsICQ5
Lm1fZnVuY0RlY2xhcmF0aW9ucyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBEQkcoJCQubV9ub2RlLCBAMSwgQDgpOyB9CiA7CkBAIC0xMjE4LDMgKzEyMzMsMzkg
QEAgc3RhdGljIGJvb2wgYWxsb3dBdXRvbWF0aWNTZW1pY29sb24oKQogewogICAgIHJldHVybiB5
eWNoYXIgPT0gJ30nIHx8IHl5Y2hhciA9PSAwIHx8IGxleGVyKCkucHJldlRlcm1pbmF0b3IoKTsK
IH0KKworLy8gV2UgdHVybiB2YXJpYWJsZSBkZWNsYXJhdGlvbnMgaW50byBlaXRoZXIgYXNzaWdu
bWVudHMgb3IgZW1wdHkKKy8vIHN0YXRlbWVudHMgKHdoaWNoIGxhdGVyIGdldCBzdHJpcHBlZCBv
dXQpLCBiZWNhdXNlIHRoZSBhY3R1YWwKKy8vIGRlY2xhcmF0aW9uIHdvcmsgaXMgaG9pc3RlZCB1
cCB0byB0aGUgc3RhcnQgb2YgdGhlIGZ1bmN0aW9uIGJvZHkKK3N0YXRpYyBFeHByZXNzaW9uTm9k
ZSogbWFrZVZhckV4cHJOb2RlKFZhckRlY2xOb2RlKiB2YXJEZWNscykKK3sKKyAgICBWZWN0b3I8
RXhwcmVzc2lvbk5vZGUqLCA4PiBhc3NpZ25tZW50czsKKyAgICBmb3IgKFZhckRlY2xOb2RlKiBk
ZWNsID0gdmFyRGVjbHM7IGRlY2w7IGRlY2wgPSBkZWNsLT5uZXh0LmdldCgpKSB7CisgICAgICAg
IGlmIChkZWNsLT5pbml0KQorICAgICAgICAgICAgYXNzaWdubWVudHMuYXBwZW5kKG5ldyBBc3Np
Z25SZXNvbHZlTm9kZShkZWNsLT5pZGVudCwgZGVjbC0+aW5pdC5nZXQoKSkpOworICAgIH0KKwor
ICAgIGlmIChhc3NpZ25tZW50cy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiAwOworCisgICAg
RXhwcmVzc2lvbk5vZGUqIGV4cHIgPSBhc3NpZ25tZW50cy5sYXN0KCk7CisgICAgYXNzaWdubWVu
dHMucmVtb3ZlTGFzdCgpOworICAgIHdoaWxlICghYXNzaWdubWVudHMuaXNFbXB0eSgpKSB7Cisg
ICAgICAgIEV4cHJlc3Npb25Ob2RlKiBhc3NpZ24gPSBhc3NpZ25tZW50cy5sYXN0KCk7CisgICAg
ICAgIGFzc2lnbm1lbnRzLnJlbW92ZUxhc3QoKTsKKyAgICAgICAgZXhwciA9IG5ldyBDb21tYU5v
ZGUoYXNzaWduLCBleHByKTsKKyAgICB9CisKKyAgICByZXR1cm4gZXhwcjsKK30KKworc3RhdGlj
IFN0YXRlbWVudE5vZGUqIG1ha2VWYXJTdGF0ZW1lbnROb2RlKFZhckRlY2xOb2RlKiB2YXJEZWNs
cykKK3sKKyAgICBFeHByZXNzaW9uTm9kZSogZXhwciA9IG1ha2VWYXJFeHByTm9kZSh2YXJEZWNs
cyk7CisKKyAgICBpZiAoIWV4cHIpCisgICAgICAgIHJldHVybiBuZXcgRW1wdHlTdGF0ZW1lbnRO
b2RlKCk7CisKKyAgICByZXR1cm4gbmV3IEV4cHJTdGF0ZW1lbnROb2RlPHRydWU+KGV4cHIpOwor
fQorCkluZGV4OiBranMvbm9kZXMyc3RyaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBranMvbm9kZXMy
c3RyaW5nLmNwcAkocmV2aXNpb24gMjg5NjIpCisrKyBranMvbm9kZXMyc3RyaW5nLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNzA3LDE2ICs3MDcsMTYgQEAgdm9pZCBDb21tYU5vZGU6OnN0cmVhbVRv
KFNvdXJjZVN0cmVhbSYgcwogICAgIHMgPDwgUHJlY0Fzc2lnbm1lbnQgPDwgZXhwcjEgPDwgIiwg
IiA8PCBQcmVjQXNzaWdubWVudCA8PCBleHByMjsKIH0KIAotdm9pZCBBc3NpZ25FeHByTm9kZTo6
c3RyZWFtVG8oU291cmNlU3RyZWFtJiBzKSBjb25zdAotewotICAgIHMgPDwgIiA9ICIgPDwgUHJl
Y0Fzc2lnbm1lbnQgPDwgZXhwcjsKLX0KLQogdm9pZCBWYXJEZWNsTm9kZTo6c3RyZWFtVG8oU291
cmNlU3RyZWFtJiBzKSBjb25zdAogewotICAgIHMgPDwgInZhciAiIDw8IGlkZW50IDw8IGluaXQ7
Ci0gICAgZm9yIChWYXJEZWNsTm9kZSogbiA9IG5leHQuZ2V0KCk7IG47IG4gPSBuLT5uZXh0Lmdl
dCgpKQotICAgICAgICBzIDw8ICIsICIgPDwgaWRlbnQgPDwgaW5pdDsKKyAgICBzIDw8ICJ2YXIg
IiA8PCBpZGVudDsKKyAgICBpZiAoaW5pdCkKKyAgICAgICAgcyA8PCAiID0gIiA8PCBpbml0Owor
ICAgIGZvciAoVmFyRGVjbE5vZGUqIG4gPSBuZXh0LmdldCgpOyBuOyBuID0gbi0+bmV4dC5nZXQo
KSkgeworICAgICAgICBzIDw8ICIsICIgPDwgaWRlbnQ7CisgICAgICAgIGlmIChpbml0KQorICAg
ICAgICAgICAgcyA8PCAiID0gIiA8PCBpbml0OworICAgIH0KIH0KIAogdm9pZCBWYXJTdGF0ZW1l
bnROb2RlOjpzdHJlYW1UbyhTb3VyY2VTdHJlYW0mIHMpIGNvbnN0CkBAIC03MzcsMTQgKzczNyw0
MCBAQCB2b2lkIEJsb2NrTm9kZTo6c3RyZWFtVG8oU291cmNlU3RyZWFtJiBzCiAgICAgcyA8PCBV
bmluZGVudCA8PCBFbmRsIDw8ICJ9IjsKIH0KIAordm9pZCBTY29wZU5vZGU6OnN0cmVhbVRvKFNv
dXJjZVN0cmVhbSYgcykgY29uc3QKK3sKKyAgICBzIDw8IEVuZGwgPDwgInsiIDw8IEluZGVudDsK
KworICAgIGJvb2wgcHJpbnRlZFZhciA9IGZhbHNlOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgbV92YXJTdGFjay5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAobV92YXJTdGFja1tpXS5z
ZWNvbmQgPT0gMCkgeworICAgICAgICAgICAgaWYgKCFwcmludGVkVmFyKSB7CisgICAgICAgICAg
ICAgICAgcyA8PCBFbmRsIDw8ICJ2YXIgIjsKKyAgICAgICAgICAgICAgICBwcmludGVkVmFyID0g
dHJ1ZTsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIHMgPDwgIiwgIjsKKyAg
ICAgICAgICAgIHMgPDwgbV92YXJTdGFja1tpXS5maXJzdDsKKyAgICAgICAgfQorICAgIH0KKyAg
ICBpZiAocHJpbnRlZFZhcikKKyAgICAgICAgcyA8PCAnOyc7CisKKyAgICBzdGF0ZW1lbnRMaXN0
U3RyZWFtVG8obV9jaGlsZHJlbiwgcyk7IAorICAgIHMgPDwgVW5pbmRlbnQgPDwgRW5kbCA8PCAi
fSI7Cit9CisKIHZvaWQgRW1wdHlTdGF0ZW1lbnROb2RlOjpzdHJlYW1UbyhTb3VyY2VTdHJlYW0m
IHMpIGNvbnN0CiB7CiAgICAgcyA8PCBFbmRsIDw8ICc7JzsKIH0KIAotdm9pZCBFeHByU3RhdGVt
ZW50Tm9kZTo6c3RyZWFtVG8oU291cmNlU3RyZWFtJiBzKSBjb25zdAordGVtcGxhdGUgPGJvb2wg
aXNWYXI+Cit2b2lkIEV4cHJTdGF0ZW1lbnROb2RlPGlzVmFyPjo6c3RyZWFtVG8oU291cmNlU3Ry
ZWFtJiBzKSBjb25zdAogewotICAgIHMgPDwgRW5kbCA8PCBleHByIDw8ICc7JzsKKyAgICBpZiAo
aXNWYXIpCisgICAgICAgIHMgPDwgRW5kbCA8PCAidmFyICIgPDwgZXhwciA8PCAnOyc7CisgICAg
ZWxzZQorICAgICAgICBzIDw8IEVuZGwgPDwgZXhwciA8PCAnOyc7CiB9CiAKIHZvaWQgSWZOb2Rl
OjpzdHJlYW1UbyhTb3VyY2VTdHJlYW0mIHMpIGNvbnN0CkBAIC03NzIsNiArNzk4LDcgQEAgdm9p
ZCBXaGlsZU5vZGU6OnN0cmVhbVRvKFNvdXJjZVN0cmVhbSYgcwogdm9pZCBGb3JOb2RlOjpzdHJl
YW1UbyhTb3VyY2VTdHJlYW0mIHMpIGNvbnN0CiB7CiAgICAgcyA8PCBFbmRsIDw8ICJmb3IgKCIK
KyAgICAgICAgPDwgKGV4cHIxV2FzVmFyRGVjbCA/ICJ2YXIgIiA6ICIiKQogICAgICAgICA8PCBl
eHByMQogICAgICAgICA8PCAiOyAiIDw8IGV4cHIyCiAgICAgICAgIDw8ICI7ICIgPDwgZXhwcjMK
SW5kZXg6IGtqcy9ub2Rlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga2pzL25vZGVzLmNwcAkocmV2aXNp
b24gMjg5NjIpCisrKyBranMvbm9kZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zODAsNiArMzgw
LDkgQEAgdm9pZCBTdGF0ZW1lbnROb2RlOjpzZXRMb2MoaW50IGZpcnN0TGluZQogCiB2b2lkIFNv
dXJjZUVsZW1lbnRzOjphcHBlbmQoUGFzc1JlZlB0cjxTdGF0ZW1lbnROb2RlPiBzdGF0ZW1lbnQp
CiB7CisgICAgaWYgKHN0YXRlbWVudC0+aXNFbXB0eVN0YXRlbWVudCgpKQorICAgICAgICByZXR1
cm47CisKICAgICBpZiAoRGVidWdnZXI6OmRlYnVnZ2Vyc1ByZXNlbnQpCiAgICAgICAgIG1fc3Rh
dGVtZW50cy5hcHBlbmQobmV3IEJyZWFrcG9pbnRDaGVja1N0YXRlbWVudChzdGF0ZW1lbnQpKTsK
ICAgICBlbHNlCkBAIC0zNDE5LDQyICszNDIyLDkgQEAgSlNWYWx1ZSogQ29tbWFOb2RlOjpldmFs
dWF0ZShFeGVjU3RhdGUgKgogICAgIHJldHVybiBleHByMi0+ZXZhbHVhdGUoZXhlYyk7CiB9CiAK
LS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBBc3NpZ25FeHByTm9kZSAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLXZvaWQgQXNzaWduRXhwck5vZGU6Om9wdGltaXpl
VmFyaWFibGVBY2Nlc3MoU3ltYm9sVGFibGUmLCBEZWNsYXJhdGlvblN0YWNrczo6Tm9kZVN0YWNr
JiBub2RlU3RhY2spCi17Ci0gICAgbm9kZVN0YWNrLmFwcGVuZChleHByLmdldCgpKTsKLX0KLQot
Ly8gRUNNQSAxMi4yCi1KU1ZhbHVlKiBBc3NpZ25FeHByTm9kZTo6ZXZhbHVhdGUoRXhlY1N0YXRl
KiBleGVjKQotewotICAgIHJldHVybiBleHByLT5ldmFsdWF0ZShleGVjKTsKLX0KLQotYm9vbCBB
c3NpZ25FeHByTm9kZTo6ZXZhbHVhdGVUb0Jvb2xlYW4oRXhlY1N0YXRlKiBleGVjKQotewotICAg
IHJldHVybiBleHByLT5ldmFsdWF0ZVRvQm9vbGVhbihleGVjKTsKLX0KLQotZG91YmxlIEFzc2ln
bkV4cHJOb2RlOjpldmFsdWF0ZVRvTnVtYmVyKEV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICByZXR1
cm4gZXhwci0+ZXZhbHVhdGVUb051bWJlcihleGVjKTsKLX0KLQotaW50MzJfdCBBc3NpZ25FeHBy
Tm9kZTo6ZXZhbHVhdGVUb0ludDMyKEV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICByZXR1cm4gZXhw
ci0+ZXZhbHVhdGVUb0ludDMyKGV4ZWMpOwotfQotCi11aW50MzJfdCBBc3NpZ25FeHByTm9kZTo6
ZXZhbHVhdGVUb1VJbnQzMihFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgcmV0dXJuIGV4cHItPmV2
YWx1YXRlVG9JbnQzMihleGVjKTsKLX0KLQogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tIFZhckRlY2xOb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotVmFy
RGVjbE5vZGU6OlZhckRlY2xOb2RlKGNvbnN0IElkZW50aWZpZXIgJmlkLCBBc3NpZ25FeHByTm9k
ZSAqaW4sIFR5cGUgdCkKK1ZhckRlY2xOb2RlOjpWYXJEZWNsTm9kZShjb25zdCBJZGVudGlmaWVy
JiBpZCwgRXhwcmVzc2lvbk5vZGUqIGluLCBUeXBlIHQpCiAgICAgOiB2YXJUeXBlKHQpCiAgICAg
LCBpZGVudChpZCkKICAgICAsIGluaXQoaW4pCkBAIC0zNjM5LDE5ICszNjA5LDI0IEBAIEpTVmFs
dWUqIEVtcHR5U3RhdGVtZW50Tm9kZTo6ZXhlY3V0ZShFeGUKIAogLy8gLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tIEV4cHJTdGF0ZW1lbnROb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KIAotdm9pZCBFeHByU3RhdGVtZW50Tm9kZTo6b3B0aW1pemVWYXJpYWJsZUFjY2VzcyhT
eW1ib2xUYWJsZSYsIERlY2xhcmF0aW9uU3RhY2tzOjpOb2RlU3RhY2smIG5vZGVTdGFjaykKK3Rl
bXBsYXRlIDxib29sIGlzVmFyPgordm9pZCBFeHByU3RhdGVtZW50Tm9kZTxpc1Zhcj46Om9wdGlt
aXplVmFyaWFibGVBY2Nlc3MoU3ltYm9sVGFibGUmLCBEZWNsYXJhdGlvblN0YWNrczo6Tm9kZVN0
YWNrJiBub2RlU3RhY2spCiB7CiAgICAgQVNTRVJUKGV4cHIpOwogICAgIG5vZGVTdGFjay5hcHBl
bmQoZXhwci5nZXQoKSk7CiB9CiAKIC8vIEVDTUEgMTIuNAotSlNWYWx1ZSogRXhwclN0YXRlbWVu
dE5vZGU6OmV4ZWN1dGUoRXhlY1N0YXRlKiBleGVjKQordGVtcGxhdGUgPGJvb2wgaXNWYXI+CitK
U1ZhbHVlKiBFeHByU3RhdGVtZW50Tm9kZTxpc1Zhcj46OmV4ZWN1dGUoRXhlY1N0YXRlKiBleGVj
KQogewogICAgIEpTVmFsdWUqIHZhbHVlID0gZXhwci0+ZXZhbHVhdGUoZXhlYyk7CiAgICAgS0pT
X0NIRUNLRVhDRVBUSU9OCiAKLSAgICByZXR1cm4gZXhlYy0+c2V0Tm9ybWFsQ29tcGxldGlvbih2
YWx1ZSk7CisgICAgaWYgKGlzVmFyKQorICAgICAgICByZXR1cm4gZXhlYy0+c2V0Tm9ybWFsQ29t
cGxldGlvbigpOworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIGV4ZWMtPnNldE5vcm1hbENvbXBs
ZXRpb24odmFsdWUpOwogfQogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gSWZO
b2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMzgzMCw3ICsz
ODA1LDcgQEAgRm9ySW5Ob2RlOjpGb3JJbk5vZGUoRXhwcmVzc2lvbk5vZGUqIGwsIAogewogfQog
Ci1Gb3JJbk5vZGU6OkZvckluTm9kZShjb25zdCBJZGVudGlmaWVyJiBpLCBBc3NpZ25FeHByTm9k
ZSogaW4sIEV4cHJlc3Npb25Ob2RlKiBlLCBTdGF0ZW1lbnROb2RlKiBzKQorRm9ySW5Ob2RlOjpG
b3JJbk5vZGUoY29uc3QgSWRlbnRpZmllciYgaSwgRXhwcmVzc2lvbk5vZGUqIGluLCBFeHByZXNz
aW9uTm9kZSogZSwgU3RhdGVtZW50Tm9kZSogcykKICAgOiBpZGVudChpKSwgaW5pdChpbiksIGV4
cHIoZSksIHN0YXRlbWVudChzKQogewogICAvLyBmb3IoIHZhciBmb28gPSBiYXIgaW4gYmF6ICkK
QEAgLTQyNjcsNyArNDI0Miw3IEBAIHZvaWQgRnVuY3Rpb25Cb2R5Tm9kZTo6aW5pdGlhbGl6ZVN5
bWJvbFQKICAgICB9CiAKICAgICBmb3IgKHNpemVfdCBpID0gMCwgc2l6ZSA9IG1fdmFyU3RhY2su
c2l6ZSgpOyBpIDwgc2l6ZTsgKytpLCArK2xvY2FsU3RvcmFnZUluZGV4KSB7Ci0gICAgICAgIElk
ZW50aWZpZXImIGlkZW50ID0gbV92YXJTdGFja1tpXS0+aWRlbnQ7CisgICAgICAgIElkZW50aWZp
ZXImIGlkZW50ID0gbV92YXJTdGFja1tpXS5maXJzdDsKICAgICAgICAgaWYgKGlkZW50ID09IGV4
ZWMtPnByb3BlcnR5TmFtZXMoKS5hcmd1bWVudHMpCiAgICAgICAgICAgICBjb250aW51ZTsKICAg
ICAgICAgc3ltYm9sVGFibGUuYWRkKGlkZW50LnVzdHJpbmcoKS5yZXAoKSwgbG9jYWxTdG9yYWdl
SW5kZXgpOwpAQCAtNDMwMSw3ICs0Mjc2LDcgQEAgdm9pZCBQcm9ncmFtTm9kZTo6aW5pdGlhbGl6
ZVN5bWJvbFRhYmxlKAogICAgIHNpemUgPSBtX3ZhclN0YWNrLnNpemUoKTsKICAgICBtX3Zhcklu
ZGV4ZXMucmVzaXplKHNpemUpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytp
KSB7Ci0gICAgICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50ID0gbV92YXJTdGFja1tpXS0+aWRl
bnQ7CisgICAgICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50ID0gbV92YXJTdGFja1tpXS5maXJz
dDsKICAgICAgICAgaWYgKHZhcmlhYmxlT2JqZWN0LT5nZXREaXJlY3QoaWRlbnQpKSB7CiAgICAg
ICAgICAgICBtX3ZhckluZGV4ZXNbaV0gPSBtaXNzaW5nU3ltYm9sTWFya2VyKCk7IC8vIFNpZ25h
bCBub3QgdG8gaW5pdGlhbGl6ZSB0aGlzIGRlY2xhcmF0aW9uLgogICAgICAgICAgICAgY29udGlu
dWU7CkBAIC00MzY4LDkgKzQzNDMsOSBAQCB2b2lkIEZ1bmN0aW9uQm9keU5vZGU6OnByb2Nlc3NE
ZWNsYXJhdGlvCiAgICAgfQogCiAgICAgZm9yIChzaXplX3QgaSA9IDAsIHNpemUgPSBtX3ZhclN0
YWNrLnNpemUoKTsgaSA8IHNpemU7ICsraSkgewotICAgICAgICBWYXJEZWNsTm9kZSogbm9kZSA9
IG1fdmFyU3RhY2tbaV07CisgICAgICAgIGJvb2wgaXNDb25zdGFudCA9IG1fdmFyU3RhY2tbaV0u
c2Vjb25kICYgRGVjbGFyYXRpb25TdGFja3M6OklzQ29uc3RhbnQ7CiAgICAgICAgIGludCBhdHRy
aWJ1dGVzID0gbWluQXR0cmlidXRlczsKLSAgICAgICAgaWYgKG5vZGUtPnZhclR5cGUgPT0gVmFy
RGVjbE5vZGU6OkNvbnN0YW50KQorICAgICAgICBpZiAoaXNDb25zdGFudCkKICAgICAgICAgICAg
IGF0dHJpYnV0ZXMgfD0gUmVhZE9ubHk7CiAgICAgICAgIGxvY2FsU3RvcmFnZS51bmNoZWNrZWRB
cHBlbmQoTG9jYWxTdG9yYWdlRW50cnkoanNVbmRlZmluZWQoKSwgYXR0cmlidXRlcykpOwogICAg
IH0KQEAgLTQ0MjAsOSArNDM5NSw5IEBAIHZvaWQgUHJvZ3JhbU5vZGU6OnByb2Nlc3NEZWNsYXJh
dGlvbnMoRXgKICAgICAgICAgaWYgKGluZGV4ID09IG1pc3NpbmdTeW1ib2xNYXJrZXIoKSkKICAg
ICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIFZhckRlY2xOb2RlKiBub2RlID0gbV92YXJT
dGFja1tpXTsKKyAgICAgICAgYm9vbCBpc0NvbnN0YW50ID0gbV92YXJTdGFja1tpXS5zZWNvbmQg
JiBEZWNsYXJhdGlvblN0YWNrczo6SXNDb25zdGFudDsKICAgICAgICAgaW50IGF0dHJpYnV0ZXMg
PSBtaW5BdHRyaWJ1dGVzOwotICAgICAgICBpZiAobm9kZS0+dmFyVHlwZSA9PSBWYXJEZWNsTm9k
ZTo6Q29uc3RhbnQpCisgICAgICAgIGlmIChpc0NvbnN0YW50KQogICAgICAgICAgICAgYXR0cmli
dXRlcyB8PSBSZWFkT25seTsKICAgICAgICAgTG9jYWxTdG9yYWdlRW50cnkgZW50cnkgPSBMb2Nh
bFN0b3JhZ2VFbnRyeShqc1VuZGVmaW5lZCgpLCBhdHRyaWJ1dGVzKTsKICAgICAgICAgICAgIApA
QCAtNDQ0MywxMyArNDQxOCwxNCBAQCB2b2lkIEV2YWxOb2RlOjpwcm9jZXNzRGVjbGFyYXRpb25z
KEV4ZWNTCiAgICAgaW50IG1pbkF0dHJpYnV0ZXMgPSBJbnRlcm5hbDsKIAogICAgIGZvciAoaSA9
IDAsIHNpemUgPSBtX3ZhclN0YWNrLnNpemUoKTsgaSA8IHNpemU7ICsraSkgewotICAgICAgICBW
YXJEZWNsTm9kZSogbm9kZSA9IG1fdmFyU3RhY2tbaV07Ci0gICAgICAgIGlmICh2YXJpYWJsZU9i
amVjdC0+aGFzT3duUHJvcGVydHkoZXhlYywgbm9kZS0+aWRlbnQpKQorICAgICAgICBJZGVudGlm
aWVyJiBpZGVudCA9IG1fdmFyU3RhY2tbaV0uZmlyc3Q7CisgICAgICAgIGJvb2wgaXNDb25zdGFu
dCA9IG1fdmFyU3RhY2tbaV0uc2Vjb25kICYgRGVjbGFyYXRpb25TdGFja3M6OklzQ29uc3RhbnQ7
CisgICAgICAgIGlmICh2YXJpYWJsZU9iamVjdC0+aGFzT3duUHJvcGVydHkoZXhlYywgaWRlbnQp
KQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIGludCBhdHRyaWJ1dGVzID0gbWluQXR0
cmlidXRlczsKLSAgICAgICAgaWYgKG5vZGUtPnZhclR5cGUgPT0gVmFyRGVjbE5vZGU6OkNvbnN0
YW50KQorICAgICAgICBpZiAoaXNDb25zdGFudCkKICAgICAgICAgICAgIGF0dHJpYnV0ZXMgfD0g
UmVhZE9ubHk7Ci0gICAgICAgIHZhcmlhYmxlT2JqZWN0LT5wdXQoZXhlYywgbm9kZS0+aWRlbnQs
IGpzVW5kZWZpbmVkKCksIGF0dHJpYnV0ZXMpOworICAgICAgICB2YXJpYWJsZU9iamVjdC0+cHV0
KGV4ZWMsIGlkZW50LCBqc1VuZGVmaW5lZCgpLCBhdHRyaWJ1dGVzKTsKICAgICB9CiAKICAgICBm
b3IgKGkgPSAwLCBzaXplID0gbV9mdW5jdGlvblN0YWNrLnNpemUoKTsgaSA8IHNpemU7ICsraSkg
ewpJbmRleDoga2pzL25vZGVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga2pzL25vZGVzLmgJKHJldmlzaW9u
IDI4OTYyKQorKysga2pzL25vZGVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTg4LDcgKzg4LDggQEAg
bmFtZXNwYWNlIEtKUyB7CiAgIAogICBzdHJ1Y3QgRGVjbGFyYXRpb25TdGFja3MgewogICAgICAg
dHlwZWRlZiBWZWN0b3I8Tm9kZSosIDE2PiBOb2RlU3RhY2s7Ci0gICAgICB0eXBlZGVmIFZlY3Rv
cjxWYXJEZWNsTm9kZSosIDE2PiBWYXJTdGFjazsKKyAgICAgIGVudW0geyBJc0NvbnN0YW50LCBI
YXNJbml0aWFsaXplciB9IFZhckF0dHJzOworICAgICAgdHlwZWRlZiBWZWN0b3I8c3RkOjpwYWly
PElkZW50aWZpZXIsIHVuc2lnbmVkPiwgMTY+IFZhclN0YWNrOwogICAgICAgdHlwZWRlZiBWZWN0
b3I8RnVuY0RlY2xOb2RlKiwgMTY+IEZ1bmN0aW9uU3RhY2s7CiAgICAgICAKICAgICAgIERlY2xh
cmF0aW9uU3RhY2tzKEV4ZWNTdGF0ZSogZSwgTm9kZVN0YWNrJiBuLCBWYXJTdGFjayYgdiwgRnVu
Y3Rpb25TdGFjayYgZikKQEAgLTIwMSw2ICsyMDIsNyBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICB2
aXJ0dWFsIEpTVmFsdWUqIGV4ZWN1dGUoRXhlY1N0YXRlICpleGVjKSBLSlNfRkFTVF9DQUxMID0g
MDsKICAgICB2b2lkIHB1c2hMYWJlbChjb25zdCBJZGVudGlmaWVyICZpZCkgS0pTX0ZBU1RfQ0FM
TCB7IGxzLnB1c2goaWQpOyB9CiAgICAgdmlydHVhbCBQcmVjZWRlbmNlIHByZWNlZGVuY2UoKSBj
b25zdCB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyByZXR1cm4gUHJlY0V4cHJlc3Npb247IH0KKyAg
ICB2aXJ0dWFsIGJvb2wgaXNFbXB0eVN0YXRlbWVudCgpIGNvbnN0IEtKU19GQVNUX0NBTEwgeyBy
ZXR1cm4gZmFsc2U7IH0KICAgcHJvdGVjdGVkOgogICAgIExhYmVsU3RhY2sgbHM7CiAgIHByaXZh
dGU6CkBAIC0xNjgzLDI1ICsxNjg1LDEwIEBAIG5hbWVzcGFjZSBLSlMgewogICAgIFJlZlB0cjxF
eHByZXNzaW9uTm9kZT4gZXhwcjI7CiAgIH07CiAKLSAgICBjbGFzcyBBc3NpZ25FeHByTm9kZSA6
IHB1YmxpYyBFeHByZXNzaW9uTm9kZSB7Ci0gIHB1YmxpYzoKLSAgICBBc3NpZ25FeHByTm9kZShF
eHByZXNzaW9uTm9kZSogZSkgS0pTX0ZBU1RfQ0FMTCA6IGV4cHIoZSkge30KLSAgICB2aXJ0dWFs
IHZvaWQgb3B0aW1pemVWYXJpYWJsZUFjY2VzcyhTeW1ib2xUYWJsZSYsIERlY2xhcmF0aW9uU3Rh
Y2tzOjpOb2RlU3RhY2smKSBLSlNfRkFTVF9DQUxMOwotICAgIHZpcnR1YWwgSlNWYWx1ZSogZXZh
bHVhdGUoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKLSAgICB2aXJ0dWFsIGJvb2wgZXZhbHVh
dGVUb0Jvb2xlYW4oRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKLSAgICB2aXJ0dWFsIGRvdWJs
ZSBldmFsdWF0ZVRvTnVtYmVyKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7Ci0gICAgdmlydHVh
bCBpbnQzMl90IGV2YWx1YXRlVG9JbnQzMihFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwotICAg
IHZpcnR1YWwgdWludDMyX3QgZXZhbHVhdGVUb1VJbnQzMihFeGVjU3RhdGUqKSBLSlNfRkFTVF9D
QUxMOwotICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBjb25zdCBLSlNf
RkFTVF9DQUxMOwotICAgIHZpcnR1YWwgUHJlY2VkZW5jZSBwcmVjZWRlbmNlKCkgY29uc3QgeyBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsgcmV0dXJuIFByZWNFeHByZXNzaW9uOyB9Ci0gIHByaXZhdGU6
Ci0gICAgUmVmUHRyPEV4cHJlc3Npb25Ob2RlPiBleHByOwotICB9OwotCiAgICAgY2xhc3MgVmFy
RGVjbE5vZGUgOiBwdWJsaWMgRXhwcmVzc2lvbk5vZGUgewogICBwdWJsaWM6CiAgICAgZW51bSBU
eXBlIHsgVmFyaWFibGUsIENvbnN0YW50IH07Ci0gICAgVmFyRGVjbE5vZGUoY29uc3QgSWRlbnRp
ZmllciAmaWQsIEFzc2lnbkV4cHJOb2RlICppbiwgVHlwZSB0KSBLSlNfRkFTVF9DQUxMOworICAg
IFZhckRlY2xOb2RlKGNvbnN0IElkZW50aWZpZXImIGlkLCBFeHByZXNzaW9uTm9kZSogaW4sIFR5
cGUgdCkgS0pTX0ZBU1RfQ0FMTDsKICAgICB2aXJ0dWFsIHZvaWQgb3B0aW1pemVWYXJpYWJsZUFj
Y2VzcyhTeW1ib2xUYWJsZSYsIERlY2xhcmF0aW9uU3RhY2tzOjpOb2RlU3RhY2smKSBLSlNfRkFT
VF9DQUxMOwogICAgIHZpcnR1YWwgS0pTOjpKU1ZhbHVlKiBldmFsdWF0ZShFeGVjU3RhdGUqKSBL
SlNfRkFTVF9DQUxMOwogICAgIHZvaWQgZXZhbHVhdGVTaW5nbGUoRXhlY1N0YXRlKikgS0pTX0ZB
U1RfQ0FMTDsKQEAgLTE3MTIsOSArMTY5OSw5IEBAIG5hbWVzcGFjZSBLSlMgewogICAgIFR5cGUg
dmFyVHlwZTsKICAgICBJZGVudGlmaWVyIGlkZW50OwogICAgIExpc3RSZWZQdHI8VmFyRGVjbE5v
ZGU+IG5leHQ7CisgICAgUmVmUHRyPEV4cHJlc3Npb25Ob2RlPiBpbml0OwogICBwcml2YXRlOgog
ICAgIHZvaWQgaGFuZGxlU2xvd0Nhc2UoRXhlY1N0YXRlKiwgY29uc3QgU2NvcGVDaGFpbiYsIEpT
VmFsdWUqKSBLSlNfRkFTVF9DQUxMIE5FVkVSX0lOTElORTsKLSAgICBSZWZQdHI8QXNzaWduRXhw
ck5vZGU+IGluaXQ7CiAgIH07CiAKICAgY2xhc3MgVmFyU3RhdGVtZW50Tm9kZSA6IHB1YmxpYyBT
dGF0ZW1lbnROb2RlIHsKQEAgLTE3NTYsOCArMTc0MywxMCBAQCBuYW1lc3BhY2UgS0pTIHsKICAg
ICBFbXB0eVN0YXRlbWVudE5vZGUoKSBLSlNfRkFTVF9DQUxMIHsgfSAvLyBkZWJ1ZwogICAgIHZp
cnR1YWwgSlNWYWx1ZSogZXhlY3V0ZShFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwogICAgIHZp
cnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBjb25zdCBLSlNfRkFTVF9DQUxMOwor
ICAgIHZpcnR1YWwgYm9vbCBpc0VtcHR5U3RhdGVtZW50KCkgY29uc3QgS0pTX0ZBU1RfQ0FMTCB7
IHJldHVybiB0cnVlOyB9CiAgIH07CiAKKyAgdGVtcGxhdGUgPGJvb2wgaXNWYXIgPSBmYWxzZT4K
ICAgY2xhc3MgRXhwclN0YXRlbWVudE5vZGUgOiBwdWJsaWMgU3RhdGVtZW50Tm9kZSB7CiAgIHB1
YmxpYzoKICAgICBFeHByU3RhdGVtZW50Tm9kZShFeHByZXNzaW9uTm9kZSogZSkgS0pTX0ZBU1Rf
Q0FMTCA6IGV4cHIoZSkgeyB9CkBAIC0xODE1LDExICsxODA0LDEyIEBAIG5hbWVzcGFjZSBLSlMg
ewogCiAgIGNsYXNzIEZvck5vZGUgOiBwdWJsaWMgU3RhdGVtZW50Tm9kZSB7CiAgIHB1YmxpYzoK
LSAgICBGb3JOb2RlKEV4cHJlc3Npb25Ob2RlKiBlMSwgRXhwcmVzc2lvbk5vZGUqIGUyLCBFeHBy
ZXNzaW9uTm9kZSogZTMsIFN0YXRlbWVudE5vZGUqIHMpIEtKU19GQVNUX0NBTEwKKyAgICAgIEZv
ck5vZGUoRXhwcmVzc2lvbk5vZGUqIGUxLCBFeHByZXNzaW9uTm9kZSogZTIsIEV4cHJlc3Npb25O
b2RlKiBlMywgU3RhdGVtZW50Tm9kZSogcywgYm9vbCBlMVdhc1ZhckRlY2wpIEtKU19GQVNUX0NB
TEwKICAgICAgICAgOiBleHByMShlMSA/IGUxIDogbmV3IFRydWVOb2RlKQogICAgICAgICAsIGV4
cHIyKGUyID8gZTIgOiBuZXcgVHJ1ZU5vZGUpCiAgICAgICAgICwgZXhwcjMoZTMgPyBlMyA6IG5l
dyBUcnVlTm9kZSkKICAgICAgICAgLCBzdGF0ZW1lbnQocykKKyAgICAgICAgLCBleHByMVdhc1Zh
ckRlY2woZTFXYXNWYXJEZWNsKQogICAgIHsKICAgICAgICAgQVNTRVJUKGV4cHIxKTsKICAgICAg
ICAgQVNTRVJUKGV4cHIyKTsKQEAgLTE4MzgsMTkgKzE4MjgsMjAgQEAgbmFtZXNwYWNlIEtKUyB7
CiAgICAgUmVmUHRyPEV4cHJlc3Npb25Ob2RlPiBleHByMjsKICAgICBSZWZQdHI8RXhwcmVzc2lv
bk5vZGU+IGV4cHIzOwogICAgIFJlZlB0cjxTdGF0ZW1lbnROb2RlPiBzdGF0ZW1lbnQ7CisgICAg
Ym9vbCBleHByMVdhc1ZhckRlY2w7CiAgIH07CiAKICAgY2xhc3MgRm9ySW5Ob2RlIDogcHVibGlj
IFN0YXRlbWVudE5vZGUgewogICBwdWJsaWM6CiAgICAgRm9ySW5Ob2RlKEV4cHJlc3Npb25Ob2Rl
KiAgbCwgRXhwcmVzc2lvbk5vZGUqIGUsIFN0YXRlbWVudE5vZGUgKnMpIEtKU19GQVNUX0NBTEw7
Ci0gICAgRm9ySW5Ob2RlKGNvbnN0IElkZW50aWZpZXIgJmksIEFzc2lnbkV4cHJOb2RlICppbiwg
RXhwcmVzc2lvbk5vZGUqIGUsIFN0YXRlbWVudE5vZGUgKnMpIEtKU19GQVNUX0NBTEw7CisgICAg
Rm9ySW5Ob2RlKGNvbnN0IElkZW50aWZpZXIgJmksIEV4cHJlc3Npb25Ob2RlICppbiwgRXhwcmVz
c2lvbk5vZGUqIGUsIFN0YXRlbWVudE5vZGUgKnMpIEtKU19GQVNUX0NBTEw7CiAgICAgdmlydHVh
bCB2b2lkIG9wdGltaXplVmFyaWFibGVBY2Nlc3MoU3ltYm9sVGFibGUmLCBEZWNsYXJhdGlvblN0
YWNrczo6Tm9kZVN0YWNrJikgS0pTX0ZBU1RfQ0FMTDsKICAgICB2aXJ0dWFsIEpTVmFsdWUqIGV4
ZWN1dGUoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFt
VG8oU291cmNlU3RyZWFtJikgY29uc3QgS0pTX0ZBU1RfQ0FMTDsKICAgICBWYXJEZWNsTm9kZSog
Z2V0VmFyRGVjbCgpIHsgcmV0dXJuIHZhckRlY2wuZ2V0KCk7IH0KICAgcHJpdmF0ZToKICAgICBJ
ZGVudGlmaWVyIGlkZW50OwotICAgIFJlZlB0cjxBc3NpZ25FeHByTm9kZT4gaW5pdDsKKyAgICBS
ZWZQdHI8RXhwcmVzc2lvbk5vZGU+IGluaXQ7CiAgICAgUmVmUHRyPEV4cHJlc3Npb25Ob2RlPiBs
ZXhwcjsKICAgICBSZWZQdHI8RXhwcmVzc2lvbk5vZGU+IGV4cHI7CiAgICAgUmVmUHRyPFZhckRl
Y2xOb2RlPiB2YXJEZWNsOwpAQCAtMTk1Niw2ICsxOTQ3LDcgQEAgbmFtZXNwYWNlIEtKUyB7CiAK
ICAgICBpbnQgc291cmNlSWQoKSBjb25zdCBLSlNfRkFTVF9DQUxMIHsgcmV0dXJuIG1fc291cmNl
SWQ7IH0KICAgICBjb25zdCBVU3RyaW5nJiBzb3VyY2VVUkwoKSBjb25zdCBLSlNfRkFTVF9DQUxM
IHsgcmV0dXJuIG1fc291cmNlVVJMOyB9CisgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJj
ZVN0cmVhbSYpIGNvbnN0IEtKU19GQVNUX0NBTEw7CiAKICAgcHJvdGVjdGVkOgogICAgIHZvaWQg
b3B0aW1pemVWYXJpYWJsZUFjY2VzcyhFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>18090</attachid>
            <date>2007-12-24 01:14:05 -0800</date>
            <delta_ts>2007-12-24 01:44:33 -0800</delta_ts>
            <desc>cleaned up version (now measures as 3.5% speedup)</desc>
            <filename>optimize-var-statements-2.patch.txt</filename>
            <type>text/plain</type>
            <size>41133</size>
            <attacher name="Maciej Stachowiak">mjs</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDI4OTcy
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsOTAgQEAKKzIwMDctMTIt
MjQgIE1hY2llaiBTdGFjaG93aWFrICA8bWpzQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAtIE9wdGltaXplIHZhcmlhYmxlIGRlY2xh
cmF0aW9ucworICAgICAgICBodHRwOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NjU4NQorICAgICAgICAKKyAgICAgICAgMy41JSBzcGVlZHVwIG9uIFN1blNwaWRlci4KKworICAg
ICAgICB2YXIgc3RhdGVtZW50cyBub3cgcmVzdWx0IGluIGVpdGhlciBhc3NpZ25tZW50cyBvciBl
bXB0eSBzdGF0ZW1lbnRzLgorICAgICAgICAKKyAgICAgICAgVGhpcyBhbGxvd3MgYSBjb3VwbGUg
b2Ygb3B0aW1pemF0aW9uIG9wcG9ydHVuaXRpZXM6CisgICAgICAgIC0gTm8gbmVlZCB0byBicmFu
Y2ggYXQgcnVudGltZSB0byBjaGVjayBpZiB0aGVyZSBpcyBhbiBpbml0aWFsaXplcgorICAgICAg
ICAtIEVtcHR5U3RhdGVtZW50Tm9kZXMgY2FuIGJlIHJlbW92ZWQgZW50aXJlbHkgKGFsc28gZG9u
ZSBpbiB0aGlzIHBhdGNoKQorICAgICAgICAtIEFzc2lnbm1lbnQgZXhwcmVzc2lvbnMgZ2V0IHBy
b3Blcmx5IG9wdGltaXplZCBmb3IgbG9jYWwgdmFyaWFibGVzCisgICAgICAgIAorICAgICAgICBU
aGlzIHBhdGNoIGFsc28gaW5jbHVkZXMgc29tZSBjb2RlIGNsZWFudXA6CisgICAgICAgIC0gTW9z
dCBvZiB0aGUgb2xkIFZhclN0YXRlbWVudC9WYXJEZWNsIGxvZ2ljIGlzIG5vdCBvbmx5IHVzZWQg
Zm9yIGNvbnN0IGRlY2xhcmF0aW9ucywgCisgICAgICAgICAgdGh1cyBpdCBpcyByZW5hbWVkIGFw
cHJvcHJpYXRlbHkKKyAgICAgICAgLSBBc3NpZ25FeHByTm9kZSBpcyBnb25lCisgICAgICAgIAor
ICAgICAgICAqIEphdmFTY3JpcHRDb3JlLmV4cDoKKyAgICAgICAgKiBranMvTm9kZUluZm8uaDoK
KyAgICAgICAgKiBranMvZ3JhbW1hci55OgorICAgICAgICAqIGtqcy9ub2Rlcy5jcHA6CisgICAg
ICAgIChLSlM6OlNvdXJjZUVsZW1lbnRzOjphcHBlbmQpOgorICAgICAgICAoS0pTOjpDb25zdERl
Y2xOb2RlOjpDb25zdERlY2xOb2RlKToKKyAgICAgICAgKEtKUzo6Q29uc3REZWNsTm9kZTo6b3B0
aW1pemVWYXJpYWJsZUFjY2Vzcyk6CisgICAgICAgIChLSlM6OkNvbnN0RGVjbE5vZGU6OmhhbmRs
ZVNsb3dDYXNlKToKKyAgICAgICAgKEtKUzo6Q29uc3REZWNsTm9kZTo6ZXZhbHVhdGVTaW5nbGUp
OgorICAgICAgICAoS0pTOjpDb25zdERlY2xOb2RlOjpldmFsdWF0ZSk6CisgICAgICAgIChLSlM6
OkNvbnN0U3RhdGVtZW50Tm9kZTo6b3B0aW1pemVWYXJpYWJsZUFjY2Vzcyk6CisgICAgICAgIChL
SlM6OkNvbnN0U3RhdGVtZW50Tm9kZTo6ZXhlY3V0ZSk6CisgICAgICAgIChLSlM6OlZhclN0YXRl
bWVudE5vZGU6Om9wdGltaXplVmFyaWFibGVBY2Nlc3MpOgorICAgICAgICAoS0pTOjpWYXJTdGF0
ZW1lbnROb2RlOjpleGVjdXRlKToKKyAgICAgICAgKEtKUzo6Rm9ySW5Ob2RlOjpGb3JJbk5vZGUp
OgorICAgICAgICAoS0pTOjpGb3JJbk5vZGU6Om9wdGltaXplVmFyaWFibGVBY2Nlc3MpOgorICAg
ICAgICAoS0pTOjpGb3JJbk5vZGU6OmV4ZWN1dGUpOgorICAgICAgICAoS0pTOjpGdW5jdGlvbkJv
ZHlOb2RlOjppbml0aWFsaXplU3ltYm9sVGFibGUpOgorICAgICAgICAoS0pTOjpQcm9ncmFtTm9k
ZTo6aW5pdGlhbGl6ZVN5bWJvbFRhYmxlKToKKyAgICAgICAgKEtKUzo6RnVuY3Rpb25Cb2R5Tm9k
ZTo6cHJvY2Vzc0RlY2xhcmF0aW9ucyk6CisgICAgICAgIChLSlM6OlByb2dyYW1Ob2RlOjpwcm9j
ZXNzRGVjbGFyYXRpb25zKToKKyAgICAgICAgKEtKUzo6RXZhbE5vZGU6OnByb2Nlc3NEZWNsYXJh
dGlvbnMpOgorICAgICAgICAqIGtqcy9ub2Rlcy5oOgorICAgICAgICAoS0pTOjpEZWNsYXJhdGlv
blN0YWNrczo6KToKKyAgICAgICAgKEtKUzo6U3RhdGVtZW50Tm9kZTo6KToKKyAgICAgICAgKEtK
Uzo6Q29uc3REZWNsTm9kZTo6KToKKyAgICAgICAgKEtKUzo6Q29uc3RTdGF0ZW1lbnROb2RlOjop
OgorICAgICAgICAoS0pTOjpFbXB0eVN0YXRlbWVudE5vZGU6Oik6CisgICAgICAgIChLSlM6OlZh
clN0YXRlbWVudE5vZGU6Oik6CisgICAgICAgIChLSlM6OkZvck5vZGU6Oik6CisgICAgICAgICog
a2pzL25vZGVzMnN0cmluZy5jcHA6CisgICAgICAgIChLSlM6OkNvbnN0RGVjbE5vZGU6OnN0cmVh
bVRvKToKKyAgICAgICAgKEtKUzo6Q29uc3RTdGF0ZW1lbnROb2RlOjpzdHJlYW1Ubyk6CisgICAg
ICAgIChLSlM6OlNjb3BlTm9kZTo6c3RyZWFtVG8pOgorICAgICAgICAoS0pTOjpWYXJTdGF0ZW1l
bnROb2RlOjpzdHJlYW1Ubyk6CisgICAgICAgIChLSlM6OkZvck5vZGU6OnN0cmVhbVRvKToKKyAg
ICAgICAgKEtKUzo6Rm9ySW5Ob2RlOjpzdHJlYW1Ubyk6CisKKzIwMDctMTItMjMgIE1hY2llaiBT
dGFjaG93aWFrICA8bWpzQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgICogSmF2YVNjcmlwdENvcmUuZXhwOgorICAgICAg
ICAqIGtqcy9ncmFtbWFyLnk6CisgICAgICAgICoga2pzL25vZGVzLmNwcDoKKyAgICAgICAgKEtK
Uzo6U291cmNlRWxlbWVudHM6OmFwcGVuZCk6CisgICAgICAgIChLSlM6OlZhckRlY2xOb2RlOjpW
YXJEZWNsTm9kZSk6CisgICAgICAgIChLSlM6Ojo6b3B0aW1pemVWYXJpYWJsZUFjY2Vzcyk6Cisg
ICAgICAgIChLSlM6Ojo6ZXhlY3V0ZSk6CisgICAgICAgIChLSlM6OkZvckluTm9kZTo6Rm9ySW5O
b2RlKToKKyAgICAgICAgKEtKUzo6RnVuY3Rpb25Cb2R5Tm9kZTo6aW5pdGlhbGl6ZVN5bWJvbFRh
YmxlKToKKyAgICAgICAgKEtKUzo6UHJvZ3JhbU5vZGU6OmluaXRpYWxpemVTeW1ib2xUYWJsZSk6
CisgICAgICAgIChLSlM6OkZ1bmN0aW9uQm9keU5vZGU6OnByb2Nlc3NEZWNsYXJhdGlvbnMpOgor
ICAgICAgICAoS0pTOjpQcm9ncmFtTm9kZTo6cHJvY2Vzc0RlY2xhcmF0aW9ucyk6CisgICAgICAg
IChLSlM6OkV2YWxOb2RlOjpwcm9jZXNzRGVjbGFyYXRpb25zKToKKyAgICAgICAgKiBranMvbm9k
ZXMuaDoKKyAgICAgICAgKEtKUzo6RGVjbGFyYXRpb25TdGFja3M6Oik6CisgICAgICAgIChLSlM6
OlN0YXRlbWVudE5vZGU6Oik6CisgICAgICAgIChLSlM6OkVtcHR5U3RhdGVtZW50Tm9kZTo6KToK
KyAgICAgICAgKEtKUzo6Rm9yTm9kZTo6KToKKyAgICAgICAgKiBranMvbm9kZXMyc3RyaW5nLmNw
cDoKKyAgICAgICAgKEtKUzo6VmFyRGVjbE5vZGU6OnN0cmVhbVRvKToKKyAgICAgICAgKEtKUzo6
U2NvcGVOb2RlOjpzdHJlYW1Ubyk6CisgICAgICAgIChLSlM6Ojo6c3RyZWFtVG8pOgorICAgICAg
ICAoS0pTOjpGb3JOb2RlOjpzdHJlYW1Ubyk6CisKIDIwMDctMTItMjEgIE1hcmsgUm93ZSAgPG1y
b3dlQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBPbGl2ZXIgSHVudC4KSW5kZXg6
IEphdmFTY3JpcHRDb3JlLmV4cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS5leHAJKHJl
dmlzaW9uIDI4OTYyKQorKysgSmF2YVNjcmlwdENvcmUuZXhwCSh3b3JraW5nIGNvcHkpCkBAIC0x
MjAsNyArMTIwLDcgQEAgX19aTjNLSlMxMUludGVycHJldGVyOGV2YWx1YXRlRVBOU185RXhlYwog
X19aTjNLSlMxMUpTSW1tZWRpYXRlNHR5cGVFUEtOU183SlNWYWx1ZUUKIF9fWk4zS0pTMTFKU0lt
bWVkaWF0ZTh0b09iamVjdEVQS05TXzdKU1ZhbHVlRVBOU185RXhlY1N0YXRlRQogX19aTjNLSlMx
MUpTSW1tZWRpYXRlOHRvU3RyaW5nRVBLTlNfN0pTVmFsdWVFCi1fX1pOM0tKUzExUHJvZ3JhbU5v
ZGVDMUVQTlNfMTRTb3VyY2VFbGVtZW50c0VQTjNXVEY2VmVjdG9ySVBOU18xMVZhckRlY2xOb2Rl
RUxtMTZFRUVQTlM0X0lQTlNfMTJGdW5jRGVjbE5vZGVFTG0xNkVFRQorX19aTjNLSlMxMVByb2dy
YW1Ob2RlQzFFUE5TXzE0U291cmNlRWxlbWVudHNFUE4zV1RGNlZlY3RvcklTdDRwYWlySU5TXzEw
SWRlbnRpZmllckVqRUxtMTZFRUVQTlM0X0lQTlNfMTJGdW5jRGVjbE5vZGVFTG0xNkVFRQogX19a
TjNLSlMxMVByb3BlcnR5TWFwMTFnZXRMb2NhdGlvbkVSS05TXzEwSWRlbnRpZmllckUKIF9fWk4z
S0pTMTFQcm9wZXJ0eU1hcDVjbGVhckV2CiBfX1pOM0tKUzExUHJvcGVydHlNYXA3cmVzdG9yZUVS
S05TXzE1U2F2ZWRQcm9wZXJ0aWVzRQpJbmRleDoga2pzL05vZGVJbmZvLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0ga2pzL05vZGVJbmZvLmgJKHJldmlzaW9uIDI4OTYyKQorKysga2pzL05vZGVJbmZvLmgJKHdv
cmtpbmcgY29weSkKQEAgLTM2LDcgKzM2LDggQEAgdHlwZWRlZiBOb2RlSW5mbzxDYXNlQmxvY2tO
b2RlKj4gQ2FzZUJsbwogdHlwZWRlZiBOb2RlSW5mbzxDYXNlQ2xhdXNlTm9kZSo+IENhc2VDbGF1
c2VOb2RlSW5mbzsKIHR5cGVkZWYgTm9kZUluZm88U291cmNlRWxlbWVudHMqPiBTb3VyY2VFbGVt
ZW50c0luZm87CiB0eXBlZGVmIE5vZGVJbmZvPENsYXVzZUxpc3Q+IENsYXVzZUxpc3RJbmZvOwot
dHlwZWRlZiBOb2RlSW5mbzxWYXJEZWNsTGlzdD4gVmFyRGVjbExpc3RJbmZvOwordHlwZWRlZiBO
b2RlSW5mbzxFeHByZXNzaW9uTm9kZSo+IFZhckRlY2xMaXN0SW5mbzsKK3R5cGVkZWYgTm9kZUlu
Zm88Q29uc3REZWNsTGlzdD4gQ29uc3REZWNsTGlzdEluZm87CiAKIH0gLy8gbmFtZXNwYWNlIEtK
UwogCkluZGV4OiBranMvZ3JhbW1hci55Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtqcy9ncmFtbWFyLnkJKHJl
dmlzaW9uIDI4OTYyKQorKysga2pzL2dyYW1tYXIueQkod29ya2luZyBjb3B5KQpAQCAtNzAsNiAr
NzAsOSBAQCBzdGF0aWMgRXhwcmVzc2lvbk5vZGUqIG1ha2VUeXBlT2ZOb2RlKEV4CiBzdGF0aWMg
RXhwcmVzc2lvbk5vZGUqIG1ha2VEZWxldGVOb2RlKEV4cHJlc3Npb25Ob2RlKik7CiBzdGF0aWMg
RXhwcmVzc2lvbk5vZGUqIG1ha2VOZWdhdGVOb2RlKEV4cHJlc3Npb25Ob2RlKik7CiBzdGF0aWMg
TnVtYmVyTm9kZSogbWFrZU51bWJlck5vZGUoZG91YmxlKTsKK3N0YXRpYyBTdGF0ZW1lbnROb2Rl
KiBtYWtlVmFyU3RhdGVtZW50Tm9kZShFeHByZXNzaW9uTm9kZSopOworc3RhdGljIEV4cHJlc3Np
b25Ob2RlKiBjb21iaW5lVmFySW5pdGlhbGl6ZXJzKEV4cHJlc3Npb25Ob2RlKiBsaXN0LCBBc3Np
Z25SZXNvbHZlTm9kZSogaW5pdCk7CisKIAogI2lmIENPTVBJTEVSKE1TVkMpCiAKQEAgLTExMSwx
MSArMTE0LDIxIEBAIHRlbXBsYXRlIDx0eXBlbmFtZSBUPiBUIG1lcmdlRGVjbGFyYXRpb24KICAg
ICByZXR1cm4gZGVjbHMxOwogfQogCi1zdGF0aWMgdm9pZCBhcHBlbmRUb1ZhckRlY2xhcmF0aW9u
TGlzdChQYXJzZXJSZWZDb3VudGVkRGF0YTxEZWNsYXJhdGlvblN0YWNrczo6VmFyU3RhY2s+KiYg
dmFyRGVjbHMsIFZhckRlY2xOb2RlKiBkZWNsKQorc3RhdGljIHZvaWQgYXBwZW5kVG9WYXJEZWNs
YXJhdGlvbkxpc3QoUGFyc2VyUmVmQ291bnRlZERhdGE8RGVjbGFyYXRpb25TdGFja3M6OlZhclN0
YWNrPiomIHZhckRlY2xzLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCwgdW5zaWduZWQgYXR0cnMp
CiB7CiAgICAgaWYgKCF2YXJEZWNscykKICAgICAgICAgdmFyRGVjbHMgPSBuZXcgUGFyc2VyUmVm
Q291bnRlZERhdGE8RGVjbGFyYXRpb25TdGFja3M6OlZhclN0YWNrPjsKLSAgICB2YXJEZWNscy0+
ZGF0YS5hcHBlbmQoZGVjbCk7CisKKyAgICB2YXJEZWNscy0+ZGF0YS5hcHBlbmQobWFrZV9wYWly
KGlkZW50LCBhdHRycykpOworCit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhcHBlbmRUb1ZhckRl
Y2xhcmF0aW9uTGlzdChQYXJzZXJSZWZDb3VudGVkRGF0YTxEZWNsYXJhdGlvblN0YWNrczo6VmFy
U3RhY2s+KiYgdmFyRGVjbHMsIENvbnN0RGVjbE5vZGUqIGRlY2wpCit7CisgICAgdW5zaWduZWQg
YXR0cnMgPSBEZWNsYXJhdGlvblN0YWNrczo6SXNDb25zdGFudDsKKyAgICBpZiAoZGVjbC0+aW5p
dCkKKyAgICAgICAgYXR0cnMgfD0gRGVjbGFyYXRpb25TdGFja3M6Okhhc0luaXRpYWxpemVyOyAg
ICAgICAgCisgICAgYXBwZW5kVG9WYXJEZWNsYXJhdGlvbkxpc3QodmFyRGVjbHMsIGRlY2wtPmlk
ZW50LCBhdHRycyk7CiB9CiAKICV9CkBAIC0xMzEsMTEgKzE0NCwxMCBAQCBzdGF0aWMgdm9pZCBh
cHBlbmRUb1ZhckRlY2xhcmF0aW9uTGlzdChQCiAgICAgRnVuY0RlY2xOb2RlKiAgICAgICBmdW5j
RGVjbE5vZGU7CiAgICAgUHJvcGVydHlOb2RlKiAgICAgICBwcm9wZXJ0eU5vZGU7CiAgICAgQXJn
dW1lbnRzTm9kZSogICAgICBhcmd1bWVudHNOb2RlOwotICAgIFZhckRlY2xOb2RlKiAgICAgICAg
dmFyRGVjbE5vZGU7CisgICAgQ29uc3REZWNsTm9kZSogICAgICBjb25zdERlY2xOb2RlOwogICAg
IENhc2VCbG9ja05vZGVJbmZvICAgY2FzZUJsb2NrTm9kZTsKICAgICBDYXNlQ2xhdXNlTm9kZUlu
Zm8gIGNhc2VDbGF1c2VOb2RlOwogICAgIEZ1bmNFeHByTm9kZSogICAgICAgZnVuY0V4cHJOb2Rl
OwotICAgIEFzc2lnbkV4cHJOb2RlKiAgICAgYXNzaWduRXhwck5vZGU7CiAKICAgICAvLyBzdGF0
ZW1lbnQgbm9kZXMKICAgICBTdGF0ZW1lbnROb2RlSW5mbyAgIHN0YXRlbWVudE5vZGU7CkBAIC0x
NDYsNiArMTU4LDcgQEAgc3RhdGljIHZvaWQgYXBwZW5kVG9WYXJEZWNsYXJhdGlvbkxpc3QoUAog
ICAgIFByb3BlcnR5TGlzdCAgICAgICAgcHJvcGVydHlMaXN0OwogICAgIEFyZ3VtZW50TGlzdCAg
ICAgICAgYXJndW1lbnRMaXN0OwogICAgIFZhckRlY2xMaXN0SW5mbyAgICAgdmFyRGVjbExpc3Q7
CisgICAgQ29uc3REZWNsTGlzdEluZm8gICBjb25zdERlY2xMaXN0OwogICAgIENsYXVzZUxpc3RJ
bmZvICAgICAgY2xhdXNlTGlzdDsKICAgICBFbGVtZW50TGlzdCAgICAgICAgIGVsZW1lbnRMaXN0
OwogICAgIFBhcmFtZXRlckxpc3QgICAgICAgcGFyYW1ldGVyTGlzdDsKQEAgLTIyOCw3ICsyNDEs
NyBAQCBzdGF0aWMgdm9pZCBhcHBlbmRUb1ZhckRlY2xhcmF0aW9uTGlzdChQCiAldHlwZSA8c3Rh
dGVtZW50Tm9kZT4gICBEZWJ1Z2dlclN0YXRlbWVudAogJXR5cGUgPHN0YXRlbWVudE5vZGU+ICAg
U291cmNlRWxlbWVudAogCi0ldHlwZSA8YXNzaWduRXhwck5vZGU+ICBJbml0aWFsaXplciBJbml0
aWFsaXplck5vSW4KKyV0eXBlIDxleHByZXNzaW9uTm9kZT4gIEluaXRpYWxpemVyIEluaXRpYWxp
emVyTm9JbgogJXR5cGUgPGZ1bmNEZWNsTm9kZT4gICAgRnVuY3Rpb25EZWNsYXJhdGlvbgogJXR5
cGUgPGZ1bmNFeHByTm9kZT4gICAgRnVuY3Rpb25FeHByCiAldHlwZSA8ZnVuY3Rpb25Cb2R5Tm9k
ZT4gIEZ1bmN0aW9uQm9keQpAQCAtMjM3LDggKzI1MCw5IEBAIHN0YXRpYyB2b2lkIGFwcGVuZFRv
VmFyRGVjbGFyYXRpb25MaXN0KFAKICV0eXBlIDxvcD4gICAgICAgICAgICAgIEFzc2lnbm1lbnRP
cGVyYXRvcgogJXR5cGUgPGFyZ3VtZW50c05vZGU+ICAgQXJndW1lbnRzCiAldHlwZSA8YXJndW1l
bnRMaXN0PiAgICBBcmd1bWVudExpc3QKLSV0eXBlIDx2YXJEZWNsTGlzdD4gICAgIFZhcmlhYmxl
RGVjbGFyYXRpb25MaXN0IFZhcmlhYmxlRGVjbGFyYXRpb25MaXN0Tm9JbiBDb25zdERlY2xhcmF0
aW9uTGlzdAotJXR5cGUgPHZhckRlY2xOb2RlPiAgICAgVmFyaWFibGVEZWNsYXJhdGlvbiBWYXJp
YWJsZURlY2xhcmF0aW9uTm9JbiBDb25zdERlY2xhcmF0aW9uCisldHlwZSA8dmFyRGVjbExpc3Q+
ICAgICBWYXJpYWJsZURlY2xhcmF0aW9uTGlzdCBWYXJpYWJsZURlY2xhcmF0aW9uTGlzdE5vSW4K
KyV0eXBlIDxjb25zdERlY2xMaXN0PiAgIENvbnN0RGVjbGFyYXRpb25MaXN0CisldHlwZSA8Y29u
c3REZWNsTm9kZT4gICBDb25zdERlY2xhcmF0aW9uCiAldHlwZSA8Y2FzZUJsb2NrTm9kZT4gICBD
YXNlQmxvY2sKICV0eXBlIDxjYXNlQ2xhdXNlTm9kZT4gIENhc2VDbGF1c2UgRGVmYXVsdENsYXVz
ZQogJXR5cGUgPGNsYXVzZUxpc3Q+ICAgICAgQ2FzZUNsYXVzZXMgQ2FzZUNsYXVzZXNPcHQKQEAg
LTcwMyw2MCArNzE3LDY4IEBAIEJsb2NrOgogOwogCiBWYXJpYWJsZVN0YXRlbWVudDoKLSAgICBW
QVIgVmFyaWFibGVEZWNsYXJhdGlvbkxpc3QgJzsnICAgICB7ICQkID0gY3JlYXRlTm9kZUluZm88
U3RhdGVtZW50Tm9kZSo+KG5ldyBWYXJTdGF0ZW1lbnROb2RlKCQyLm1fbm9kZS5oZWFkKSwgJDIu
bV92YXJEZWNsYXJhdGlvbnMsICQyLm1fZnVuY0RlY2xhcmF0aW9ucyk7CisgICAgVkFSIFZhcmlh
YmxlRGVjbGFyYXRpb25MaXN0ICc7JyAgICAgeyAkJCA9IGNyZWF0ZU5vZGVJbmZvPFN0YXRlbWVu
dE5vZGUqPihtYWtlVmFyU3RhdGVtZW50Tm9kZSgkMi5tX25vZGUpLCAkMi5tX3ZhckRlY2xhcmF0
aW9ucywgJDIubV9mdW5jRGVjbGFyYXRpb25zKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIERCRygkJC5tX25vZGUsIEAxLCBAMyk7IH0KLSAgfCBWQVIgVmFyaWFi
bGVEZWNsYXJhdGlvbkxpc3QgZXJyb3IgICB7ICQkID0gY3JlYXRlTm9kZUluZm88U3RhdGVtZW50
Tm9kZSo+KG5ldyBWYXJTdGF0ZW1lbnROb2RlKCQyLm1fbm9kZS5oZWFkKSwgJDIubV92YXJEZWNs
YXJhdGlvbnMsICQyLm1fZnVuY0RlY2xhcmF0aW9ucyk7CisgIHwgVkFSIFZhcmlhYmxlRGVjbGFy
YXRpb25MaXN0IGVycm9yICAgeyAkJCA9IGNyZWF0ZU5vZGVJbmZvPFN0YXRlbWVudE5vZGUqPiht
YWtlVmFyU3RhdGVtZW50Tm9kZSgkMi5tX25vZGUpLCAkMi5tX3ZhckRlY2xhcmF0aW9ucywgJDIu
bV9mdW5jRGVjbGFyYXRpb25zKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIERCRygkJC5tX25vZGUsIEAxLCBAMik7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBBVVRPX1NFTUlDT0xPTjsgfQogOwogCiBWYXJpYWJsZURlY2xhcmF0
aW9uTGlzdDoKLSAgICBWYXJpYWJsZURlY2xhcmF0aW9uICAgICAgICAgICAgICAgICB7ICQkLm1f
bm9kZS5oZWFkID0gJDE7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAkJC5tX25vZGUudGFpbCA9ICQkLm1fbm9kZS5oZWFkOworICAgIElERU5UICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHsgJCQubV9ub2RlID0gMDsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICQkLm1fdmFyRGVjbGFyYXRpb25zID0gbmV3IFBhcnNlclJl
ZkNvdW50ZWREYXRhPERlY2xhcmF0aW9uU3RhY2tzOjpWYXJTdGFjaz47Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkJC5tX3ZhckRlY2xhcmF0aW9ucy0+ZGF0YS5h
cHBlbmQoJDEpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBw
ZW5kVG9WYXJEZWNsYXJhdGlvbkxpc3QoJCQubV92YXJEZWNsYXJhdGlvbnMsICokMSwgMCk7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkJC5tX2Z1bmNEZWNsYXJh
dGlvbnMgPSAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAg
fCBWYXJpYWJsZURlY2xhcmF0aW9uTGlzdCAnLCcgVmFyaWFibGVEZWNsYXJhdGlvbgotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgJCQubV9ub2RlLmhlYWQgPSAkMS5t
X25vZGUuaGVhZDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQx
Lm1fbm9kZS50YWlsLT5uZXh0ID0gJDM7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAkJC5tX25vZGUudGFpbCA9ICQzOworICB8IElERU5UIEluaXRpYWxpemVyICAg
ICAgICAgICAgICAgICAgIHsgJCQubV9ub2RlID0gbmV3IEFzc2lnblJlc29sdmVOb2RlKCokMSwg
JDIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCQubV92YXJE
ZWNsYXJhdGlvbnMgPSBuZXcgUGFyc2VyUmVmQ291bnRlZERhdGE8RGVjbGFyYXRpb25TdGFja3M6
OlZhclN0YWNrPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFw
cGVuZFRvVmFyRGVjbGFyYXRpb25MaXN0KCQkLm1fdmFyRGVjbGFyYXRpb25zLCAqJDEsIERlY2xh
cmF0aW9uU3RhY2tzOjpIYXNJbml0aWFsaXplcik7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAkJC5tX2Z1bmNEZWNsYXJhdGlvbnMgPSAwOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgfCBWYXJpYWJsZURlY2xhcmF0aW9uTGlz
dCAnLCcgSURFTlQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7ICQk
Lm1fbm9kZSA9ICQxLm1fbm9kZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICQkLm1fdmFyRGVjbGFyYXRpb25zID0gJDEubV92YXJEZWNsYXJhdGlvbnM7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHBlbmRUb1ZhckRlY2xhcmF0
aW9uTGlzdCgkJC5tX3ZhckRlY2xhcmF0aW9ucywgKiQzLCAwKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICQkLm1fZnVuY0RlY2xhcmF0aW9ucyA9IDA7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICB8IFZhcmlhYmxlRGVjbGFy
YXRpb25MaXN0ICcsJyBJREVOVCBJbml0aWFsaXplcgorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHsgJCQubV9ub2RlID0gY29tYmluZVZhckluaXRpYWxpemVycygkMS5t
X25vZGUsIG5ldyBBc3NpZ25SZXNvbHZlTm9kZSgqJDMsICQ0KSk7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAkJC5tX3ZhckRlY2xhcmF0aW9ucyA9ICQxLm1fdmFy
RGVjbGFyYXRpb25zOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
JCQubV92YXJEZWNsYXJhdGlvbnMtPmRhdGEuYXBwZW5kKCQzKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZFRvVmFyRGVjbGFyYXRpb25MaXN0KCQkLm1f
dmFyRGVjbGFyYXRpb25zLCAqJDMsIERlY2xhcmF0aW9uU3RhY2tzOjpIYXNJbml0aWFsaXplcik7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkJC5tX2Z1bmNEZWNs
YXJhdGlvbnMgPSAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0K
IDsKIAogVmFyaWFibGVEZWNsYXJhdGlvbkxpc3ROb0luOgotICAgIFZhcmlhYmxlRGVjbGFyYXRp
b25Ob0luICAgICAgICAgICAgIHsgJCQubV9ub2RlLmhlYWQgPSAkMTsgCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkJC5tX25vZGUudGFpbCA9ICQkLm1fbm9kZS5o
ZWFkOworICAgIElERU5UICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgJCQubV9ub2Rl
ID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQkLm1fdmFy
RGVjbGFyYXRpb25zID0gbmV3IFBhcnNlclJlZkNvdW50ZWREYXRhPERlY2xhcmF0aW9uU3RhY2tz
OjpWYXJTdGFjaz47Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAk
JC5tX3ZhckRlY2xhcmF0aW9ucy0+ZGF0YS5hcHBlbmQoJDEpOwotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgJCQubV9mdW5jRGVjbGFyYXRpb25zID0gMDsgfQotICB8
IFZhcmlhYmxlRGVjbGFyYXRpb25MaXN0Tm9JbiAnLCcgVmFyaWFibGVEZWNsYXJhdGlvbk5vSW4K
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7ICQkLm1fbm9kZS5oZWFk
ID0gJDEubV9ub2RlLmhlYWQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAkMS5tX25vZGUudGFpbC0+bmV4dCA9ICQzOwotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgJCQubV9ub2RlLnRhaWwgPSAkMzsgCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBhcHBlbmRUb1ZhckRlY2xhcmF0aW9uTGlzdCgkJC5t
X3ZhckRlY2xhcmF0aW9ucywgKiQxLCAwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICQkLm1fZnVuY0RlY2xhcmF0aW9ucyA9IDA7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfQorICB8IElERU5UIEluaXRpYWxpemVyTm9JbiAgICAg
ICAgICAgICAgIHsgJCQubV9ub2RlID0gbmV3IEFzc2lnblJlc29sdmVOb2RlKCokMSwgJDIpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCQubV92YXJEZWNsYXJh
dGlvbnMgPSBuZXcgUGFyc2VyUmVmQ291bnRlZERhdGE8RGVjbGFyYXRpb25TdGFja3M6OlZhclN0
YWNrPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZFRv
VmFyRGVjbGFyYXRpb25MaXN0KCQkLm1fdmFyRGVjbGFyYXRpb25zLCAqJDEsIERlY2xhcmF0aW9u
U3RhY2tzOjpIYXNJbml0aWFsaXplcik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAkJC5tX2Z1bmNEZWNsYXJhdGlvbnMgPSAwOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0KKyAgfCBWYXJpYWJsZURlY2xhcmF0aW9uTGlzdE5vSW4g
JywnIElERU5UCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyAkJC5t
X25vZGUgPSAkMS5tX25vZGU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAkJC5tX3ZhckRlY2xhcmF0aW9ucyA9ICQxLm1fdmFyRGVjbGFyYXRpb25zOwotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCQubV92YXJEZWNsYXJhdGlvbnMt
PmRhdGEuYXBwZW5kKCQzKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICQkLm1fZnVuY0RlY2xhcmF0aW9ucyA9IDA7IH0KLTsKLQotVmFyaWFibGVEZWNsYXJhdGlv
bjoKLSAgICBJREVOVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7ICQkID0gbmV3IFZh
ckRlY2xOb2RlKCokMSwgMCwgVmFyRGVjbE5vZGU6OlZhcmlhYmxlKTsgfQotICB8IElERU5UIElu
aXRpYWxpemVyICAgICAgICAgICAgICAgICAgIHsgJCQgPSBuZXcgVmFyRGVjbE5vZGUoKiQxLCAk
MiwgVmFyRGVjbE5vZGU6OlZhcmlhYmxlKTsgfQotOwotCi1WYXJpYWJsZURlY2xhcmF0aW9uTm9J
bjoKLSAgICBJREVOVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7ICQkID0gbmV3IFZh
ckRlY2xOb2RlKCokMSwgMCwgVmFyRGVjbE5vZGU6OlZhcmlhYmxlKTsgfQotICB8IElERU5UIElu
aXRpYWxpemVyTm9JbiAgICAgICAgICAgICAgIHsgJCQgPSBuZXcgVmFyRGVjbE5vZGUoKiQxLCAk
MiwgVmFyRGVjbE5vZGU6OlZhcmlhYmxlKTsgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYXBwZW5kVG9WYXJEZWNsYXJhdGlvbkxpc3QoJCQubV92YXJEZWNsYXJh
dGlvbnMsICokMywgMCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAkJC5tX2Z1bmNEZWNsYXJhdGlvbnMgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0KKyAgfCBWYXJpYWJsZURlY2xhcmF0aW9uTGlzdE5vSW4gJywnIElERU5U
IEluaXRpYWxpemVyTm9JbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHsgJCQubV9ub2RlID0gY29tYmluZVZhckluaXRpYWxpemVycygkMS5tX25vZGUsIG5ldyBBc3Np
Z25SZXNvbHZlTm9kZSgqJDMsICQ0KSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAkJC5tX3ZhckRlY2xhcmF0aW9ucyA9ICQxLm1fdmFyRGVjbGFyYXRpb25zOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kVG9WYXJEZWNs
YXJhdGlvbkxpc3QoJCQubV92YXJEZWNsYXJhdGlvbnMsICokMywgRGVjbGFyYXRpb25TdGFja3M6
Okhhc0luaXRpYWxpemVyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICQkLm1fZnVuY0RlY2xhcmF0aW9ucyA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfQogOwogCiBDb25zdFN0YXRlbWVudDoKLSAgICBDT05TVFRPS0VOIENv
bnN0RGVjbGFyYXRpb25MaXN0ICc7JyB7ICQkID0gY3JlYXRlTm9kZUluZm88U3RhdGVtZW50Tm9k
ZSo+KG5ldyBWYXJTdGF0ZW1lbnROb2RlKCQyLm1fbm9kZS5oZWFkKSwgJDIubV92YXJEZWNsYXJh
dGlvbnMsICQyLm1fZnVuY0RlY2xhcmF0aW9ucyk7CisgICAgQ09OU1RUT0tFTiBDb25zdERlY2xh
cmF0aW9uTGlzdCAnOycgeyAkJCA9IGNyZWF0ZU5vZGVJbmZvPFN0YXRlbWVudE5vZGUqPihuZXcg
Q29uc3RTdGF0ZW1lbnROb2RlKCQyLm1fbm9kZS5oZWFkKSwgJDIubV92YXJEZWNsYXJhdGlvbnMs
ICQyLm1fZnVuY0RlY2xhcmF0aW9ucyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBEQkcoJCQubV9ub2RlLCBAMSwgQDMpOyB9CiAgIHwgQ09OU1RUT0tFTiBDb25z
dERlY2xhcmF0aW9uTGlzdCBlcnJvcgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHsgJCQgPSBjcmVhdGVOb2RlSW5mbzxTdGF0ZW1lbnROb2RlKj4obmV3IFZhclN0YXRl
bWVudE5vZGUoJDIubV9ub2RlLmhlYWQpLCAkMi5tX3ZhckRlY2xhcmF0aW9ucywgJDIubV9mdW5j
RGVjbGFyYXRpb25zKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7
ICQkID0gY3JlYXRlTm9kZUluZm88U3RhdGVtZW50Tm9kZSo+KG5ldyBDb25zdFN0YXRlbWVudE5v
ZGUoJDIubV9ub2RlLmhlYWQpLCAkMi5tX3ZhckRlY2xhcmF0aW9ucywgJDIubV9mdW5jRGVjbGFy
YXRpb25zKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERCRygk
JC5tX25vZGUsIEAxLCBAMik7IEFVVE9fU0VNSUNPTE9OOyB9CiA7CiAKQEAgLTc2NCwyOCArNzg2
LDI4IEBAIENvbnN0RGVjbGFyYXRpb25MaXN0OgogICAgIENvbnN0RGVjbGFyYXRpb24gICAgICAg
ICAgICAgICAgICAgIHsgJCQubV9ub2RlLmhlYWQgPSAkMTsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICQkLm1fbm9kZS50YWlsID0gJCQubV9ub2RlLmhlYWQ7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkJC5tX3ZhckRlY2xhcmF0
aW9ucyA9IG5ldyBQYXJzZXJSZWZDb3VudGVkRGF0YTxEZWNsYXJhdGlvblN0YWNrczo6VmFyU3Rh
Y2s+OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCQubV92YXJE
ZWNsYXJhdGlvbnMtPmRhdGEuYXBwZW5kKCQxKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGFwcGVuZFRvVmFyRGVjbGFyYXRpb25MaXN0KCQkLm1fdmFyRGVjbGFy
YXRpb25zLCAkMSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAk
JC5tX2Z1bmNEZWNsYXJhdGlvbnMgPSAwOyB9CiAgIHwgQ29uc3REZWNsYXJhdGlvbkxpc3QgJywn
IENvbnN0RGVjbGFyYXRpb24KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB7ICAkJC5tX25vZGUuaGVhZCA9ICQxLm1fbm9kZS5oZWFkOwogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgJDEubV9ub2RlLnRhaWwtPm5leHQgPSAkMzsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQkLm1fbm9kZS50YWlsID0gJDM7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkJC5tX3ZhckRlY2xh
cmF0aW9ucyA9ICQxLm1fdmFyRGVjbGFyYXRpb25zOwotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgJCQubV92YXJEZWNsYXJhdGlvbnMtPmRhdGEuYXBwZW5kKCQzKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZFRvVmFyRGVj
bGFyYXRpb25MaXN0KCQkLm1fdmFyRGVjbGFyYXRpb25zLCAkMyk7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAkJC5tX2Z1bmNEZWNsYXJhdGlvbnMgPSAwOyB9CiA7
CiAKIENvbnN0RGVjbGFyYXRpb246Ci0gICAgSURFTlQgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgeyAkJCA9IG5ldyBWYXJEZWNsTm9kZSgqJDEsIDAsIFZhckRlY2xOb2RlOjpDb25zdGFu
dCk7IH0KLSAgfCBJREVOVCBJbml0aWFsaXplciAgICAgICAgICAgICAgICAgICB7ICQkID0gbmV3
IFZhckRlY2xOb2RlKCokMSwgJDIsIFZhckRlY2xOb2RlOjpDb25zdGFudCk7IH0KKyAgICBJREVO
VCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7ICQkID0gbmV3IENvbnN0RGVjbE5vZGUo
KiQxLCAwKTsgfQorICB8IElERU5UIEluaXRpYWxpemVyICAgICAgICAgICAgICAgICAgIHsgJCQg
PSBuZXcgQ29uc3REZWNsTm9kZSgqJDEsICQyKTsgfQogOwogCiBJbml0aWFsaXplcjoKLSAgICAn
PScgQXNzaWdubWVudEV4cHIgICAgICAgICAgICAgICAgICB7ICQkID0gbmV3IEFzc2lnbkV4cHJO
b2RlKCQyKTsgfQorICAgICc9JyBBc3NpZ25tZW50RXhwciAgICAgICAgICAgICAgICAgIHsgJCQg
PSAkMjsgfQogOwogCiBJbml0aWFsaXplck5vSW46Ci0gICAgJz0nIEFzc2lnbm1lbnRFeHByTm9J
biAgICAgICAgICAgICAgeyAkJCA9IG5ldyBBc3NpZ25FeHByTm9kZSgkMik7IH0KKyAgICAnPScg
QXNzaWdubWVudEV4cHJOb0luICAgICAgICAgICAgICB7ICQkID0gJDI7IH0KIDsKIAogRW1wdHlT
dGF0ZW1lbnQ6CkBAIC04MTYsMTEgKzgzOCwxMSBAQCBJdGVyYXRpb25TdGF0ZW1lbnQ6CiAgIHwg
V0hJTEUgJygnIEV4cHIgJyknIFN0YXRlbWVudCAgICAgICAgeyAkJCA9IGNyZWF0ZU5vZGVJbmZv
PFN0YXRlbWVudE5vZGUqPihuZXcgV2hpbGVOb2RlKCQzLCAkNS5tX25vZGUpLCAkNS5tX3ZhckRl
Y2xhcmF0aW9ucywgJDUubV9mdW5jRGVjbGFyYXRpb25zKTsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIERCRygkJC5tX25vZGUsIEAxLCBANCk7IH0KICAgfCBGT1Ig
JygnIEV4cHJOb0luT3B0ICc7JyBFeHByT3B0ICc7JyBFeHByT3B0ICcpJyBTdGF0ZW1lbnQKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7ICQkID0gY3JlYXRlTm9kZUlu
Zm88U3RhdGVtZW50Tm9kZSo+KG5ldyBGb3JOb2RlKCQzLCAkNSwgJDcsICQ5Lm1fbm9kZSksICQ5
Lm1fdmFyRGVjbGFyYXRpb25zLCAkOS5tX2Z1bmNEZWNsYXJhdGlvbnMpOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgJCQgPSBjcmVhdGVOb2RlSW5mbzxTdGF0ZW1l
bnROb2RlKj4obmV3IEZvck5vZGUoJDMsICQ1LCAkNywgJDkubV9ub2RlLCBmYWxzZSksICQ5Lm1f
dmFyRGVjbGFyYXRpb25zLCAkOS5tX2Z1bmNEZWNsYXJhdGlvbnMpOwogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgREJHKCQkLm1fbm9kZSwgQDEsIEA4KTsgCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICB8IEZPUiAnKCcgVkFSIFZh
cmlhYmxlRGVjbGFyYXRpb25MaXN0Tm9JbiAnOycgRXhwck9wdCAnOycgRXhwck9wdCAnKScgU3Rh
dGVtZW50Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyAkJCA9IGNy
ZWF0ZU5vZGVJbmZvPFN0YXRlbWVudE5vZGUqPihuZXcgRm9yTm9kZSgkNC5tX25vZGUuaGVhZCwg
JDYsICQ4LCAkMTAubV9ub2RlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7ICQkID0gY3JlYXRlTm9k
ZUluZm88U3RhdGVtZW50Tm9kZSo+KG5ldyBGb3JOb2RlKCQ0Lm1fbm9kZSwgJDYsICQ4LCAkMTAu
bV9ub2RlLCB0cnVlKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lcmdlRGVjbGFyYXRpb25MaXN0
cygkNC5tX3ZhckRlY2xhcmF0aW9ucywgJDEwLm1fdmFyRGVjbGFyYXRpb25zKSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG1lcmdlRGVjbGFyYXRpb25MaXN0cygkNC5tX2Z1bmNEZWNsYXJhdGlvbnMs
ICQxMC5tX2Z1bmNEZWNsYXJhdGlvbnMpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIERCRygkJC5tX25vZGUsIEAxLCBAOSk7IH0KQEAgLTgzNCwxMiArODU2LDEy
IEBAIEl0ZXJhdGlvblN0YXRlbWVudDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9CiAgIHwgRk9SICcoJyBWQVIgSURFTlQgSU5UT0tFTiBFeHByICcpJyBTdGF0ZW1l
bnQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IEZvckluTm9kZSAq
Zm9ySW4gPSBuZXcgRm9ySW5Ob2RlKCokNCwgMCwgJDYsICQ4Lm1fbm9kZSk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHBlbmRUb1ZhckRlY2xhcmF0aW9uTGlz
dCgkOC5tX3ZhckRlY2xhcmF0aW9ucywgZm9ySW4tPmdldFZhckRlY2woKSk7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHBlbmRUb1ZhckRlY2xhcmF0aW9uTGlz
dCgkOC5tX3ZhckRlY2xhcmF0aW9ucywgKiQ0LCBEZWNsYXJhdGlvblN0YWNrczo6SGFzSW5pdGlh
bGl6ZXIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCQgPSBj
cmVhdGVOb2RlSW5mbzxTdGF0ZW1lbnROb2RlKj4oZm9ySW4sICQ4Lm1fdmFyRGVjbGFyYXRpb25z
LCAkOC5tX2Z1bmNEZWNsYXJhdGlvbnMpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgREJHKCQkLm1fbm9kZSwgQDEsIEA3KTsgfQogICB8IEZPUiAnKCcgVkFSIElE
RU5UIEluaXRpYWxpemVyTm9JbiBJTlRPS0VOIEV4cHIgJyknIFN0YXRlbWVudAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgRm9ySW5Ob2RlICpmb3JJbiA9IG5ldyBG
b3JJbk5vZGUoKiQ0LCAkNSwgJDcsICQ5Lm1fbm9kZSk7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBhcHBlbmRUb1ZhckRlY2xhcmF0aW9uTGlzdCgkOS5tX3ZhckRl
Y2xhcmF0aW9ucywgZm9ySW4tPmdldFZhckRlY2woKSk7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBhcHBlbmRUb1ZhckRlY2xhcmF0aW9uTGlzdCgkOS5tX3ZhckRl
Y2xhcmF0aW9ucywgKiQ0LCBEZWNsYXJhdGlvblN0YWNrczo6SGFzSW5pdGlhbGl6ZXIpOwogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCQgPSBjcmVhdGVOb2RlSW5m
bzxTdGF0ZW1lbnROb2RlKj4oZm9ySW4sICQ5Lm1fdmFyRGVjbGFyYXRpb25zLCAkOS5tX2Z1bmNE
ZWNsYXJhdGlvbnMpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
REJHKCQkLm1fbm9kZSwgQDEsIEA4KTsgfQogOwpAQCAtOTgwLDcgKzEwMDIsNyBAQCBGb3JtYWxQ
YXJhbWV0ZXJMaXN0OgogRnVuY3Rpb25Cb2R5OgogICAgIC8qIG5vdCBpbiBzcGVjICovICAgICAg
ICAgICB7ICQkID0gbmV3IEZ1bmN0aW9uQm9keU5vZGUoMCwgMCwgMCk7IH0KICAgfCBTb3VyY2VF
bGVtZW50cyAgICAgICAgICAgICAgeyAkJCA9IG5ldyBGdW5jdGlvbkJvZHlOb2RlKCQxLm1fbm9k
ZSwgJDEubV92YXJEZWNsYXJhdGlvbnMgPyAmJDEubV92YXJEZWNsYXJhdGlvbnMtPmRhdGEgOiAw
LCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkMS5tX2Z1bmNEZWNsYXJhdGlvbnMgPyAmJDEu
bV9mdW5jRGVjbGFyYXRpb25zLT5kYXRhIDogMCk7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkMS5tX2Z1bmNEZWNsYXJhdGlvbnMg
PyAmJDEubV9mdW5jRGVjbGFyYXRpb25zLT5kYXRhIDogMCk7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gQXMgaW4gbWVyZ2VEZWNsYXJhdGlvbkxpc3RzKCkgd2UgaGF2ZSB0
byByZWYvZGVyZWYgdG8gc2FmZWx5IGdldCByaWQgb2YKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAvLyB0aGUgZGVjbGFyYXRpb24gbGlzdHMuCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKCQxLm1fdmFyRGVjbGFyYXRpb25zKSB7CkBAIC0xMjE4LDMgKzEy
NDAsMjEgQEAgc3RhdGljIGJvb2wgYWxsb3dBdXRvbWF0aWNTZW1pY29sb24oKQogewogICAgIHJl
dHVybiB5eWNoYXIgPT0gJ30nIHx8IHl5Y2hhciA9PSAwIHx8IGxleGVyKCkucHJldlRlcm1pbmF0
b3IoKTsKIH0KKworc3RhdGljIEV4cHJlc3Npb25Ob2RlKiBjb21iaW5lVmFySW5pdGlhbGl6ZXJz
KEV4cHJlc3Npb25Ob2RlKiBsaXN0LCBBc3NpZ25SZXNvbHZlTm9kZSogaW5pdCkKK3sKKyAgICBp
ZiAoIWxpc3QpCisgICAgICAgIHJldHVybiBpbml0OworICAgIHJldHVybiBuZXcgQ29tbWFOb2Rl
KGxpc3QsIGluaXQpOworfQorCisvLyBXZSB0dXJuIHZhcmlhYmxlIGRlY2xhcmF0aW9ucyBpbnRv
IGVpdGhlciBhc3NpZ25tZW50cyBvciBlbXB0eQorLy8gc3RhdGVtZW50cyAod2hpY2ggbGF0ZXIg
Z2V0IHN0cmlwcGVkIG91dCksIGJlY2F1c2UgdGhlIGFjdHVhbAorLy8gZGVjbGFyYXRpb24gd29y
ayBpcyBob2lzdGVkIHVwIHRvIHRoZSBzdGFydCBvZiB0aGUgZnVuY3Rpb24gYm9keQorc3RhdGlj
IFN0YXRlbWVudE5vZGUqIG1ha2VWYXJTdGF0ZW1lbnROb2RlKEV4cHJlc3Npb25Ob2RlKiBleHBy
KQoreworICAgIGlmICghZXhwcikKKyAgICAgICAgcmV0dXJuIG5ldyBFbXB0eVN0YXRlbWVudE5v
ZGUoKTsKKyAgICByZXR1cm4gbmV3IFZhclN0YXRlbWVudE5vZGUoZXhwcik7Cit9CisKSW5kZXg6
IGtqcy9ub2RlczJzdHJpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtqcy9ub2RlczJzdHJpbmcuY3Bw
CShyZXZpc2lvbiAyODk2MikKKysrIGtqcy9ub2RlczJzdHJpbmcuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC03MDcsMjEgKzcwNywyMSBAQCB2b2lkIENvbW1hTm9kZTo6c3RyZWFtVG8oU291cmNlU3Ry
ZWFtJiBzCiAgICAgcyA8PCBQcmVjQXNzaWdubWVudCA8PCBleHByMSA8PCAiLCAiIDw8IFByZWNB
c3NpZ25tZW50IDw8IGV4cHIyOwogfQogCi12b2lkIEFzc2lnbkV4cHJOb2RlOjpzdHJlYW1UbyhT
b3VyY2VTdHJlYW0mIHMpIGNvbnN0Cit2b2lkIENvbnN0RGVjbE5vZGU6OnN0cmVhbVRvKFNvdXJj
ZVN0cmVhbSYgcykgY29uc3QKIHsKLSAgICBzIDw8ICIgPSAiIDw8IFByZWNBc3NpZ25tZW50IDw8
IGV4cHI7CisgICAgcyA8PCBpZGVudDsKKyAgICBpZiAoaW5pdCkKKyAgICAgICAgcyA8PCAiID0g
IiA8PCBpbml0OworICAgIGZvciAoQ29uc3REZWNsTm9kZSogbiA9IG5leHQuZ2V0KCk7IG47IG4g
PSBuLT5uZXh0LmdldCgpKSB7CisgICAgICAgIHMgPDwgIiwgIiA8PCBpZGVudDsKKyAgICAgICAg
aWYgKGluaXQpCisgICAgICAgICAgICBzIDw8ICIgPSAiIDw8IGluaXQ7CisgICAgfQogfQogCi12
b2lkIFZhckRlY2xOb2RlOjpzdHJlYW1UbyhTb3VyY2VTdHJlYW0mIHMpIGNvbnN0Cit2b2lkIENv
bnN0U3RhdGVtZW50Tm9kZTo6c3RyZWFtVG8oU291cmNlU3RyZWFtJiBzKSBjb25zdAogewotICAg
IHMgPDwgInZhciAiIDw8IGlkZW50IDw8IGluaXQ7Ci0gICAgZm9yIChWYXJEZWNsTm9kZSogbiA9
IG5leHQuZ2V0KCk7IG47IG4gPSBuLT5uZXh0LmdldCgpKQotICAgICAgICBzIDw8ICIsICIgPDwg
aWRlbnQgPDwgaW5pdDsKLX0KLQotdm9pZCBWYXJTdGF0ZW1lbnROb2RlOjpzdHJlYW1UbyhTb3Vy
Y2VTdHJlYW0mIHMpIGNvbnN0Ci17Ci0gICAgcyA8PCBFbmRsIDw8IG5leHQgPDwgJzsnOworICAg
IHMgPDwgRW5kbCA8PCAiY29uc3QgIiA8PCBuZXh0IDw8ICc7JzsKIH0KIAogc3RhdGljIGlubGlu
ZSB2b2lkIHN0YXRlbWVudExpc3RTdHJlYW1Ubyhjb25zdCBWZWN0b3I8UmVmUHRyPFN0YXRlbWVu
dE5vZGU+ID4mIG5vZGVzLCBTb3VyY2VTdHJlYW0mIHMpCkBAIC03MzcsNiArNzM3LDI4IEBAIHZv
aWQgQmxvY2tOb2RlOjpzdHJlYW1UbyhTb3VyY2VTdHJlYW0mIHMKICAgICBzIDw8IFVuaW5kZW50
IDw8IEVuZGwgPDwgIn0iOwogfQogCit2b2lkIFNjb3BlTm9kZTo6c3RyZWFtVG8oU291cmNlU3Ry
ZWFtJiBzKSBjb25zdAoreworICAgIHMgPDwgRW5kbCA8PCAieyIgPDwgSW5kZW50OworCisgICAg
Ym9vbCBwcmludGVkVmFyID0gZmFsc2U7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3Zh
clN0YWNrLnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmIChtX3ZhclN0YWNrW2ldLnNlY29uZCA9
PSAwKSB7CisgICAgICAgICAgICBpZiAoIXByaW50ZWRWYXIpIHsKKyAgICAgICAgICAgICAgICBz
IDw8IEVuZGwgPDwgInZhciAiOworICAgICAgICAgICAgICAgIHByaW50ZWRWYXIgPSB0cnVlOwor
ICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgcyA8PCAiLCAiOworICAgICAgICAg
ICAgcyA8PCBtX3ZhclN0YWNrW2ldLmZpcnN0OworICAgICAgICB9CisgICAgfQorICAgIGlmIChw
cmludGVkVmFyKQorICAgICAgICBzIDw8ICc7JzsKKworICAgIHN0YXRlbWVudExpc3RTdHJlYW1U
byhtX2NoaWxkcmVuLCBzKTsgCisgICAgcyA8PCBVbmluZGVudCA8PCBFbmRsIDw8ICJ9IjsKK30K
Kwogdm9pZCBFbXB0eVN0YXRlbWVudE5vZGU6OnN0cmVhbVRvKFNvdXJjZVN0cmVhbSYgcykgY29u
c3QKIHsKICAgICBzIDw8IEVuZGwgPDwgJzsnOwpAQCAtNzQ3LDYgKzc2OSwxMSBAQCB2b2lkIEV4
cHJTdGF0ZW1lbnROb2RlOjpzdHJlYW1UbyhTb3VyY2VTCiAgICAgcyA8PCBFbmRsIDw8IGV4cHIg
PDwgJzsnOwogfQogCit2b2lkIFZhclN0YXRlbWVudE5vZGU6OnN0cmVhbVRvKFNvdXJjZVN0cmVh
bSYgcykgY29uc3QKK3sKKyAgICBzIDw8IEVuZGwgPDwgInZhciAiIDw8IGV4cHIgPDwgJzsnOwor
fQorCiB2b2lkIElmTm9kZTo6c3RyZWFtVG8oU291cmNlU3RyZWFtJiBzKSBjb25zdAogewogICAg
IHMgPDwgRW5kbCA8PCAiaWYgKCIgPDwgbV9jb25kaXRpb24gPDwgJyknIDw8IEluZGVudCA8PCBt
X2lmQmxvY2sgPDwgVW5pbmRlbnQ7CkBAIC03NzIsNiArNzk5LDcgQEAgdm9pZCBXaGlsZU5vZGU6
OnN0cmVhbVRvKFNvdXJjZVN0cmVhbSYgcwogdm9pZCBGb3JOb2RlOjpzdHJlYW1UbyhTb3VyY2VT
dHJlYW0mIHMpIGNvbnN0CiB7CiAgICAgcyA8PCBFbmRsIDw8ICJmb3IgKCIKKyAgICAgICAgPDwg
KGV4cHIxV2FzVmFyRGVjbCA/ICJ2YXIgIiA6ICIiKQogICAgICAgICA8PCBleHByMQogICAgICAg
ICA8PCAiOyAiIDw8IGV4cHIyCiAgICAgICAgIDw8ICI7ICIgPDwgZXhwcjMKQEAgLTc4MSw5ICs4
MDksMTMgQEAgdm9pZCBGb3JOb2RlOjpzdHJlYW1UbyhTb3VyY2VTdHJlYW0mIHMpIAogdm9pZCBG
b3JJbk5vZGU6OnN0cmVhbVRvKFNvdXJjZVN0cmVhbSYgcykgY29uc3QKIHsKICAgICBzIDw8IEVu
ZGwgPDwgImZvciAoIjsKLSAgICBpZiAodmFyRGVjbCkKLSAgICAgICAgcyA8PCB2YXJEZWNsOwot
ICAgIGVsc2UKKyAgICBpZiAoaWRlbnRJc1ZhckRlY2wpIHsKKyAgICAgICAgcyA8PCAidmFyICI7
CisgICAgICAgIGlmIChpbml0KQorICAgICAgICAgICAgcyA8PCBpbml0OworICAgICAgICBlbHNl
CisgICAgICAgICAgICBzIDw8IFByZWNMZWZ0SGFuZFNpZGUgPDwgbGV4cHI7CisgICAgfSBlbHNl
CiAgICAgICAgIHMgPDwgUHJlY0xlZnRIYW5kU2lkZSA8PCBsZXhwcjsKIAogICAgIHMgPDwgIiBp
biAiIDw8IGV4cHIgPDwgJyknIDw8IEluZGVudCA8PCBzdGF0ZW1lbnQgPDwgVW5pbmRlbnQ7Cklu
ZGV4OiBranMvbm9kZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtqcy9ub2Rlcy5jcHAJKHJldmlzaW9u
IDI4OTYyKQorKysga2pzL25vZGVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgwLDYgKzM4MCw5
IEBAIHZvaWQgU3RhdGVtZW50Tm9kZTo6c2V0TG9jKGludCBmaXJzdExpbmUKIAogdm9pZCBTb3Vy
Y2VFbGVtZW50czo6YXBwZW5kKFBhc3NSZWZQdHI8U3RhdGVtZW50Tm9kZT4gc3RhdGVtZW50KQog
eworICAgIGlmIChzdGF0ZW1lbnQtPmlzRW1wdHlTdGF0ZW1lbnQoKSkKKyAgICAgICAgcmV0dXJu
OworCiAgICAgaWYgKERlYnVnZ2VyOjpkZWJ1Z2dlcnNQcmVzZW50KQogICAgICAgICBtX3N0YXRl
bWVudHMuYXBwZW5kKG5ldyBCcmVha3BvaW50Q2hlY2tTdGF0ZW1lbnQoc3RhdGVtZW50KSk7CiAg
ICAgZWxzZQpAQCAtMzQxOSw0OSArMzQyMiwxNSBAQCBKU1ZhbHVlKiBDb21tYU5vZGU6OmV2YWx1
YXRlKEV4ZWNTdGF0ZSAqCiAgICAgcmV0dXJuIGV4cHIyLT5ldmFsdWF0ZShleGVjKTsKIH0KIAot
Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEFzc2lnbkV4cHJOb2RlIC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotdm9pZCBBc3NpZ25FeHByTm9kZTo6b3B0aW1pemVW
YXJpYWJsZUFjY2VzcyhTeW1ib2xUYWJsZSYsIERlY2xhcmF0aW9uU3RhY2tzOjpOb2RlU3RhY2sm
IG5vZGVTdGFjaykKLXsKLSAgICBub2RlU3RhY2suYXBwZW5kKGV4cHIuZ2V0KCkpOwotfQorLy8g
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIENvbnN0RGVjbE5vZGUgLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi0vLyBFQ01BIDEyLjIKLUpTVmFsdWUqIEFzc2lnbkV4
cHJOb2RlOjpldmFsdWF0ZShFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgcmV0dXJuIGV4cHItPmV2
YWx1YXRlKGV4ZWMpOwotfQotCi1ib29sIEFzc2lnbkV4cHJOb2RlOjpldmFsdWF0ZVRvQm9vbGVh
bihFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgcmV0dXJuIGV4cHItPmV2YWx1YXRlVG9Cb29sZWFu
KGV4ZWMpOwotfQotCi1kb3VibGUgQXNzaWduRXhwck5vZGU6OmV2YWx1YXRlVG9OdW1iZXIoRXhl
Y1N0YXRlKiBleGVjKQotewotICAgIHJldHVybiBleHByLT5ldmFsdWF0ZVRvTnVtYmVyKGV4ZWMp
OwotfQotCi1pbnQzMl90IEFzc2lnbkV4cHJOb2RlOjpldmFsdWF0ZVRvSW50MzIoRXhlY1N0YXRl
KiBleGVjKQotewotICAgIHJldHVybiBleHByLT5ldmFsdWF0ZVRvSW50MzIoZXhlYyk7Ci19Ci0K
LXVpbnQzMl90IEFzc2lnbkV4cHJOb2RlOjpldmFsdWF0ZVRvVUludDMyKEV4ZWNTdGF0ZSogZXhl
YykKLXsKLSAgICByZXR1cm4gZXhwci0+ZXZhbHVhdGVUb0ludDMyKGV4ZWMpOwotfQotCi0vLyAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gVmFyRGVjbE5vZGUgLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQotCi1WYXJEZWNsTm9kZTo6VmFyRGVjbE5vZGUoY29uc3QgSWRl
bnRpZmllciAmaWQsIEFzc2lnbkV4cHJOb2RlICppbiwgVHlwZSB0KQotICAgIDogdmFyVHlwZSh0
KQotICAgICwgaWRlbnQoaWQpCitDb25zdERlY2xOb2RlOjpDb25zdERlY2xOb2RlKGNvbnN0IElk
ZW50aWZpZXImIGlkLCBFeHByZXNzaW9uTm9kZSogaW4pCisgICAgOiBpZGVudChpZCkKICAgICAs
IGluaXQoaW4pCiB7CiB9CiAKLXZvaWQgVmFyRGVjbE5vZGU6Om9wdGltaXplVmFyaWFibGVBY2Nl
c3MoU3ltYm9sVGFibGUmLCBEZWNsYXJhdGlvblN0YWNrczo6Tm9kZVN0YWNrJiBub2RlU3RhY2sp
Cit2b2lkIENvbnN0RGVjbE5vZGU6Om9wdGltaXplVmFyaWFibGVBY2Nlc3MoU3ltYm9sVGFibGUm
LCBEZWNsYXJhdGlvblN0YWNrczo6Tm9kZVN0YWNrJiBub2RlU3RhY2spCiB7CiAgICAgaWYgKG5l
eHQpCiAgICAgICAgIG5vZGVTdGFjay5hcHBlbmQobmV4dC5nZXQoKSk7CkBAIC0zNDY5LDcgKzM0
MzgsNyBAQCB2b2lkIFZhckRlY2xOb2RlOjpvcHRpbWl6ZVZhcmlhYmxlQWNjZXNzCiAgICAgICAg
IG5vZGVTdGFjay5hcHBlbmQoaW5pdC5nZXQoKSk7CiB9CiAKLXZvaWQgVmFyRGVjbE5vZGU6Omhh
bmRsZVNsb3dDYXNlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgU2NvcGVDaGFpbiYgY2hhaW4sIEpT
VmFsdWUqIHZhbCkKK3ZvaWQgQ29uc3REZWNsTm9kZTo6aGFuZGxlU2xvd0Nhc2UoRXhlY1N0YXRl
KiBleGVjLCBjb25zdCBTY29wZUNoYWluJiBjaGFpbiwgSlNWYWx1ZSogdmFsKQogewogICAgIFNj
b3BlQ2hhaW5JdGVyYXRvciBpdGVyID0gY2hhaW4uYmVnaW4oKTsKICAgICBTY29wZUNoYWluSXRl
cmF0b3IgZW5kID0gY2hhaW4uZW5kKCk7CkBAIC0zNDkwLDE0ICszNDU5LDEzIEBAIHZvaWQgVmFy
RGVjbE5vZGU6OmhhbmRsZVNsb3dDYXNlKEV4ZWNTdGEKICAgICAKICAgICB1bnNpZ25lZCBmbGFn
cyA9IDA7CiAgICAgYmFzZS0+Z2V0UHJvcGVydHlBdHRyaWJ1dGVzKGlkZW50LCBmbGFncyk7Ci0g
ICAgaWYgKHZhclR5cGUgPT0gVmFyRGVjbE5vZGU6OkNvbnN0YW50KQotICAgICAgICBmbGFncyB8
PSBSZWFkT25seTsKKyAgICBmbGFncyB8PSBSZWFkT25seTsKICAgICAKICAgICBiYXNlLT5wdXQo
ZXhlYywgaWRlbnQsIHZhbCwgZmxhZ3MpOwogfQogCiAvLyBFQ01BIDEyLjIKLWlubGluZSB2b2lk
IFZhckRlY2xOb2RlOjpldmFsdWF0ZVNpbmdsZShFeGVjU3RhdGUqIGV4ZWMpCitpbmxpbmUgdm9p
ZCBDb25zdERlY2xOb2RlOjpldmFsdWF0ZVNpbmdsZShFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAg
QVNTRVJUKGV4ZWMtPnZhcmlhYmxlT2JqZWN0KCktPmhhc093blByb3BlcnR5KGV4ZWMsIGlkZW50
KSB8fCBleGVjLT5jb2RlVHlwZSgpID09IEV2YWxDb2RlKTsgLy8gR3VhcmFudGVlZCBieSBwcm9j
ZXNzRGVjbGFyYXRpb25zLgogICAgIGNvbnN0IFNjb3BlQ2hhaW4mIGNoYWluID0gZXhlYy0+c2Nv
cGVDaGFpbigpOwpAQCAtMzUxMyw4ICszNDgxLDcgQEAgaW5saW5lIHZvaWQgVmFyRGVjbE5vZGU6
OmV2YWx1YXRlU2luZ2xlKAogICAgICAgICAgICAgaW50IGZsYWdzID0gSW50ZXJuYWw7CiAgICAg
ICAgICAgICBpZiAoZXhlYy0+Y29kZVR5cGUoKSAhPSBFdmFsQ29kZSkKICAgICAgICAgICAgICAg
ICBmbGFncyB8PSBEb250RGVsZXRlOwotICAgICAgICAgICAgaWYgKHZhclR5cGUgPT0gVmFyRGVj
bE5vZGU6OkNvbnN0YW50KQotICAgICAgICAgICAgICAgIGZsYWdzIHw9IFJlYWRPbmx5OworICAg
ICAgICAgICAgZmxhZ3MgfD0gUmVhZE9ubHk7CiAgICAgICAgICAgICB2YXJpYWJsZU9iamVjdC0+
cHV0KGV4ZWMsIGlkZW50LCB2YWwsIGZsYWdzKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAg
ICAgIEpTVmFsdWUqIHZhbCA9IGluaXQtPmV2YWx1YXRlKGV4ZWMpOwpAQCAtMzUyOCwxOSArMzQ5
NSwxOCBAQCBpbmxpbmUgdm9pZCBWYXJEZWNsTm9kZTo6ZXZhbHVhdGVTaW5nbGUoCiAKICAgICAg
ICAgICAgIHVuc2lnbmVkIGZsYWdzID0gMDsKICAgICAgICAgICAgIHZhcmlhYmxlT2JqZWN0LT5n
ZXRQcm9wZXJ0eUF0dHJpYnV0ZXMoaWRlbnQsIGZsYWdzKTsKLSAgICAgICAgICAgIGlmICh2YXJU
eXBlID09IFZhckRlY2xOb2RlOjpDb25zdGFudCkKLSAgICAgICAgICAgICAgICBmbGFncyB8PSBS
ZWFkT25seTsKKyAgICAgICAgICAgIGZsYWdzIHw9IFJlYWRPbmx5OwogICAgICAgICAgICAgCiAg
ICAgICAgICAgICB2YXJpYWJsZU9iamVjdC0+cHV0KGV4ZWMsIGlkZW50LCB2YWwsIGZsYWdzKTsK
ICAgICAgICAgfQogICAgIH0KIH0KIAotSlNWYWx1ZSogVmFyRGVjbE5vZGU6OmV2YWx1YXRlKEV4
ZWNTdGF0ZSogZXhlYykKK0pTVmFsdWUqIENvbnN0RGVjbE5vZGU6OmV2YWx1YXRlKEV4ZWNTdGF0
ZSogZXhlYykKIHsKICAgICBldmFsdWF0ZVNpbmdsZShleGVjKTsKIAotICAgIGlmIChWYXJEZWNs
Tm9kZSogbiA9IG5leHQuZ2V0KCkpIHsKKyAgICBpZiAoQ29uc3REZWNsTm9kZSogbiA9IG5leHQu
Z2V0KCkpIHsKICAgICAgICAgZG8gewogICAgICAgICAgICAgbi0+ZXZhbHVhdGVTaW5nbGUoZXhl
Yyk7CiAgICAgICAgICAgICBLSlNfQ0hFQ0tFWENFUFRJT05WQUxVRQpAQCAtMzU1MCwxNiArMzUx
NiwxNiBAQCBKU1ZhbHVlKiBWYXJEZWNsTm9kZTo6ZXZhbHVhdGUoRXhlY1N0YXRlCiAgICAgcmV0
dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LSBWYXJTdGF0ZW1lbnROb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQ29uc3RTdGF0ZW1lbnROb2RlIC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCiAKLXZvaWQgVmFyU3RhdGVtZW50Tm9kZTo6b3B0aW1pemVWYXJp
YWJsZUFjY2VzcyhTeW1ib2xUYWJsZSYsIERlY2xhcmF0aW9uU3RhY2tzOjpOb2RlU3RhY2smIG5v
ZGVTdGFjaykKK3ZvaWQgQ29uc3RTdGF0ZW1lbnROb2RlOjpvcHRpbWl6ZVZhcmlhYmxlQWNjZXNz
KFN5bWJvbFRhYmxlJiwgRGVjbGFyYXRpb25TdGFja3M6Ok5vZGVTdGFjayYgbm9kZVN0YWNrKQog
ewogICAgIEFTU0VSVChuZXh0KTsKICAgICBub2RlU3RhY2suYXBwZW5kKG5leHQuZ2V0KCkpOwog
fQogCiAvLyBFQ01BIDEyLjIKLUpTVmFsdWUqIFZhclN0YXRlbWVudE5vZGU6OmV4ZWN1dGUoRXhl
Y1N0YXRlKiBleGVjKQorSlNWYWx1ZSogQ29uc3RTdGF0ZW1lbnROb2RlOjpleGVjdXRlKEV4ZWNT
dGF0ZSogZXhlYykKIHsKICAgICBuZXh0LT5ldmFsdWF0ZShleGVjKTsKICAgICBLSlNfQ0hFQ0tF
WENFUFRJT04KQEAgLTM2NTQsNiArMzYyMCwyMiBAQCBKU1ZhbHVlKiBFeHByU3RhdGVtZW50Tm9k
ZTo6ZXhlY3V0ZShFeGVjCiAgICAgcmV0dXJuIGV4ZWMtPnNldE5vcm1hbENvbXBsZXRpb24odmFs
dWUpOwogfQogCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gVmFyU3RhdGVtZW50
Tm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK3ZvaWQgVmFyU3RhdGVtZW50Tm9k
ZTo6b3B0aW1pemVWYXJpYWJsZUFjY2VzcyhTeW1ib2xUYWJsZSYsIERlY2xhcmF0aW9uU3RhY2tz
OjpOb2RlU3RhY2smIG5vZGVTdGFjaykKK3sKKyAgICBBU1NFUlQoZXhwcik7CisgICAgbm9kZVN0
YWNrLmFwcGVuZChleHByLmdldCgpKTsKK30KKworSlNWYWx1ZSogVmFyU3RhdGVtZW50Tm9kZTo6
ZXhlY3V0ZShFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgZXhwci0+ZXZhbHVhdGUoZXhlYyk7Cisg
ICAgS0pTX0NIRUNLRVhDRVBUSU9OCisKKyAgICByZXR1cm4gZXhlYy0+c2V0Tm9ybWFsQ29tcGxl
dGlvbigpOworfQorCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gSWZOb2RlIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiB2b2lkIElmTm9kZTo6b3B0
aW1pemVWYXJpYWJsZUFjY2VzcyhTeW1ib2xUYWJsZSYsIERlY2xhcmF0aW9uU3RhY2tzOjpOb2Rl
U3RhY2smIG5vZGVTdGFjaykKQEAgLTM4MjYsMTYgKzM4MDgsMTYgQEAgY29udGludWVGb3JMb29w
OgogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEZvckluTm9kZSAtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogRm9ySW5Ob2RlOjpGb3JJbk5vZGUoRXhwcmVz
c2lvbk5vZGUqIGwsIEV4cHJlc3Npb25Ob2RlKiBlLCBTdGF0ZW1lbnROb2RlKiBzKQotICA6IGlu
aXQoMEwpLCBsZXhwcihsKSwgZXhwcihlKSwgdmFyRGVjbCgwTCksIHN0YXRlbWVudChzKQorICAg
IDogaW5pdCgwTCksIGxleHByKGwpLCBleHByKGUpLCBzdGF0ZW1lbnQocyksIGlkZW50SXNWYXJE
ZWNsKGZhbHNlKQogewogfQogCi1Gb3JJbk5vZGU6OkZvckluTm9kZShjb25zdCBJZGVudGlmaWVy
JiBpLCBBc3NpZ25FeHByTm9kZSogaW4sIEV4cHJlc3Npb25Ob2RlKiBlLCBTdGF0ZW1lbnROb2Rl
KiBzKQotICA6IGlkZW50KGkpLCBpbml0KGluKSwgZXhwcihlKSwgc3RhdGVtZW50KHMpCitGb3JJ
bk5vZGU6OkZvckluTm9kZShjb25zdCBJZGVudGlmaWVyJiBpLCBFeHByZXNzaW9uTm9kZSogaW4s
IEV4cHJlc3Npb25Ob2RlKiBlLCBTdGF0ZW1lbnROb2RlKiBzKQorICAgIDogaWRlbnQoaSksIGxl
eHByKG5ldyBSZXNvbHZlTm9kZShpKSksIGV4cHIoZSksIHN0YXRlbWVudChzKSwgaWRlbnRJc1Zh
ckRlY2wodHJ1ZSkKIHsKKyAgaWYgKGluKQorICAgICAgaW5pdCA9IG5ldyBBc3NpZ25SZXNvbHZl
Tm9kZShpLCBpbik7CiAgIC8vIGZvciggdmFyIGZvbyA9IGJhciBpbiBiYXogKQotICB2YXJEZWNs
ID0gbmV3IFZhckRlY2xOb2RlKGlkZW50LCBpbml0LmdldCgpLCBWYXJEZWNsTm9kZTo6VmFyaWFi
bGUpOwotICBsZXhwciA9IG5ldyBSZXNvbHZlTm9kZShpZGVudCk7CiB9CiAKIHZvaWQgRm9ySW5O
b2RlOjpvcHRpbWl6ZVZhcmlhYmxlQWNjZXNzKFN5bWJvbFRhYmxlJiwgRGVjbGFyYXRpb25TdGFj
a3M6Ok5vZGVTdGFjayYgbm9kZVN0YWNrKQpAQCAtMzg0Myw4ICszODI1LDggQEAgdm9pZCBGb3JJ
bk5vZGU6Om9wdGltaXplVmFyaWFibGVBY2Nlc3MoUwogICAgIG5vZGVTdGFjay5hcHBlbmQoc3Rh
dGVtZW50LmdldCgpKTsKICAgICBub2RlU3RhY2suYXBwZW5kKGV4cHIuZ2V0KCkpOwogICAgIG5v
ZGVTdGFjay5hcHBlbmQobGV4cHIuZ2V0KCkpOwotICAgIGlmICh2YXJEZWNsKQotICAgICAgICBu
b2RlU3RhY2suYXBwZW5kKHZhckRlY2wuZ2V0KCkpOworICAgIGlmIChpbml0KQorICAgICAgICBu
b2RlU3RhY2suYXBwZW5kKGluaXQuZ2V0KCkpOwogfQogCiAvLyBFQ01BIDEyLjYuNApAQCAtMzg1
Miw4ICszODM0LDggQEAgSlNWYWx1ZSogRm9ySW5Ob2RlOjpleGVjdXRlKEV4ZWNTdGF0ZSogZQog
ewogICBKU1ZhbHVlKiB2YWx1ZSA9IDA7CiAKLSAgaWYgKHZhckRlY2wpIHsKLSAgICB2YXJEZWNs
LT5ldmFsdWF0ZShleGVjKTsKKyAgaWYgKGluaXQpIHsKKyAgICBpbml0LT5ldmFsdWF0ZShleGVj
KTsKICAgICBLSlNfQ0hFQ0tFWENFUFRJT04KICAgfQogCkBAIC00MjY3LDcgKzQyNDksNyBAQCB2
b2lkIEZ1bmN0aW9uQm9keU5vZGU6OmluaXRpYWxpemVTeW1ib2xUCiAgICAgfQogCiAgICAgZm9y
IChzaXplX3QgaSA9IDAsIHNpemUgPSBtX3ZhclN0YWNrLnNpemUoKTsgaSA8IHNpemU7ICsraSwg
Kytsb2NhbFN0b3JhZ2VJbmRleCkgewotICAgICAgICBJZGVudGlmaWVyJiBpZGVudCA9IG1fdmFy
U3RhY2tbaV0tPmlkZW50OworICAgICAgICBJZGVudGlmaWVyJiBpZGVudCA9IG1fdmFyU3RhY2tb
aV0uZmlyc3Q7CiAgICAgICAgIGlmIChpZGVudCA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuYXJn
dW1lbnRzKQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIHN5bWJvbFRhYmxlLmFkZChp
ZGVudC51c3RyaW5nKCkucmVwKCksIGxvY2FsU3RvcmFnZUluZGV4KTsKQEAgLTQzMDEsNyArNDI4
Myw3IEBAIHZvaWQgUHJvZ3JhbU5vZGU6OmluaXRpYWxpemVTeW1ib2xUYWJsZSgKICAgICBzaXpl
ID0gbV92YXJTdGFjay5zaXplKCk7CiAgICAgbV92YXJJbmRleGVzLnJlc2l6ZShzaXplKTsKICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkgewotICAgICAgICBjb25zdCBJZGVu
dGlmaWVyJiBpZGVudCA9IG1fdmFyU3RhY2tbaV0tPmlkZW50OworICAgICAgICBjb25zdCBJZGVu
dGlmaWVyJiBpZGVudCA9IG1fdmFyU3RhY2tbaV0uZmlyc3Q7CiAgICAgICAgIGlmICh2YXJpYWJs
ZU9iamVjdC0+Z2V0RGlyZWN0KGlkZW50KSkgewogICAgICAgICAgICAgbV92YXJJbmRleGVzW2ld
ID0gbWlzc2luZ1N5bWJvbE1hcmtlcigpOyAvLyBTaWduYWwgbm90IHRvIGluaXRpYWxpemUgdGhp
cyBkZWNsYXJhdGlvbi4KICAgICAgICAgICAgIGNvbnRpbnVlOwpAQCAtNDM2OCw5ICs0MzUwLDkg
QEAgdm9pZCBGdW5jdGlvbkJvZHlOb2RlOjpwcm9jZXNzRGVjbGFyYXRpbwogICAgIH0KIAogICAg
IGZvciAoc2l6ZV90IGkgPSAwLCBzaXplID0gbV92YXJTdGFjay5zaXplKCk7IGkgPCBzaXplOyAr
K2kpIHsKLSAgICAgICAgVmFyRGVjbE5vZGUqIG5vZGUgPSBtX3ZhclN0YWNrW2ldOworICAgICAg
ICBib29sIGlzQ29uc3RhbnQgPSBtX3ZhclN0YWNrW2ldLnNlY29uZCAmIERlY2xhcmF0aW9uU3Rh
Y2tzOjpJc0NvbnN0YW50OwogICAgICAgICBpbnQgYXR0cmlidXRlcyA9IG1pbkF0dHJpYnV0ZXM7
Ci0gICAgICAgIGlmIChub2RlLT52YXJUeXBlID09IFZhckRlY2xOb2RlOjpDb25zdGFudCkKKyAg
ICAgICAgaWYgKGlzQ29uc3RhbnQpCiAgICAgICAgICAgICBhdHRyaWJ1dGVzIHw9IFJlYWRPbmx5
OwogICAgICAgICBsb2NhbFN0b3JhZ2UudW5jaGVja2VkQXBwZW5kKExvY2FsU3RvcmFnZUVudHJ5
KGpzVW5kZWZpbmVkKCksIGF0dHJpYnV0ZXMpKTsKICAgICB9CkBAIC00NDIwLDkgKzQ0MDIsOSBA
QCB2b2lkIFByb2dyYW1Ob2RlOjpwcm9jZXNzRGVjbGFyYXRpb25zKEV4CiAgICAgICAgIGlmIChp
bmRleCA9PSBtaXNzaW5nU3ltYm9sTWFya2VyKCkpCiAgICAgICAgICAgICBjb250aW51ZTsKIAot
ICAgICAgICBWYXJEZWNsTm9kZSogbm9kZSA9IG1fdmFyU3RhY2tbaV07CisgICAgICAgIGJvb2wg
aXNDb25zdGFudCA9IG1fdmFyU3RhY2tbaV0uc2Vjb25kICYgRGVjbGFyYXRpb25TdGFja3M6Oklz
Q29uc3RhbnQ7CiAgICAgICAgIGludCBhdHRyaWJ1dGVzID0gbWluQXR0cmlidXRlczsKLSAgICAg
ICAgaWYgKG5vZGUtPnZhclR5cGUgPT0gVmFyRGVjbE5vZGU6OkNvbnN0YW50KQorICAgICAgICBp
ZiAoaXNDb25zdGFudCkKICAgICAgICAgICAgIGF0dHJpYnV0ZXMgfD0gUmVhZE9ubHk7CiAgICAg
ICAgIExvY2FsU3RvcmFnZUVudHJ5IGVudHJ5ID0gTG9jYWxTdG9yYWdlRW50cnkoanNVbmRlZmlu
ZWQoKSwgYXR0cmlidXRlcyk7CiAgICAgICAgICAgICAKQEAgLTQ0NDMsMTMgKzQ0MjUsMTQgQEAg
dm9pZCBFdmFsTm9kZTo6cHJvY2Vzc0RlY2xhcmF0aW9ucyhFeGVjUwogICAgIGludCBtaW5BdHRy
aWJ1dGVzID0gSW50ZXJuYWw7CiAKICAgICBmb3IgKGkgPSAwLCBzaXplID0gbV92YXJTdGFjay5z
aXplKCk7IGkgPCBzaXplOyArK2kpIHsKLSAgICAgICAgVmFyRGVjbE5vZGUqIG5vZGUgPSBtX3Zh
clN0YWNrW2ldOwotICAgICAgICBpZiAodmFyaWFibGVPYmplY3QtPmhhc093blByb3BlcnR5KGV4
ZWMsIG5vZGUtPmlkZW50KSkKKyAgICAgICAgSWRlbnRpZmllciYgaWRlbnQgPSBtX3ZhclN0YWNr
W2ldLmZpcnN0OworICAgICAgICBib29sIGlzQ29uc3RhbnQgPSBtX3ZhclN0YWNrW2ldLnNlY29u
ZCAmIERlY2xhcmF0aW9uU3RhY2tzOjpJc0NvbnN0YW50OworICAgICAgICBpZiAodmFyaWFibGVP
YmplY3QtPmhhc093blByb3BlcnR5KGV4ZWMsIGlkZW50KSkKICAgICAgICAgICAgIGNvbnRpbnVl
OwogICAgICAgICBpbnQgYXR0cmlidXRlcyA9IG1pbkF0dHJpYnV0ZXM7Ci0gICAgICAgIGlmIChu
b2RlLT52YXJUeXBlID09IFZhckRlY2xOb2RlOjpDb25zdGFudCkKKyAgICAgICAgaWYgKGlzQ29u
c3RhbnQpCiAgICAgICAgICAgICBhdHRyaWJ1dGVzIHw9IFJlYWRPbmx5OwotICAgICAgICB2YXJp
YWJsZU9iamVjdC0+cHV0KGV4ZWMsIG5vZGUtPmlkZW50LCBqc1VuZGVmaW5lZCgpLCBhdHRyaWJ1
dGVzKTsKKyAgICAgICAgdmFyaWFibGVPYmplY3QtPnB1dChleGVjLCBpZGVudCwganNVbmRlZmlu
ZWQoKSwgYXR0cmlidXRlcyk7CiAgICAgfQogCiAgICAgZm9yIChpID0gMCwgc2l6ZSA9IG1fZnVu
Y3Rpb25TdGFjay5zaXplKCk7IGkgPCBzaXplOyArK2kpIHsKSW5kZXg6IGtqcy9ub2Rlcy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIGtqcy9ub2Rlcy5oCShyZXZpc2lvbiAyODk2MikKKysrIGtqcy9ub2Rlcy5o
CSh3b3JraW5nIGNvcHkpCkBAIC00NSw3ICs0NSw3IEBAIG5hbWVzcGFjZSBLSlMgewogICAgIGNs
YXNzIE5vZGU7CiAgICAgY2xhc3MgUHJvcGVydHlMaXN0Tm9kZTsKICAgICBjbGFzcyBTb3VyY2VT
dHJlYW07Ci0gICAgY2xhc3MgVmFyRGVjbE5vZGU7CisgICAgY2xhc3MgQ29uc3REZWNsTm9kZTsK
IAogICAgIGVudW0gT3BlcmF0b3IgewogICAgICAgICBPcEVxdWFsLApAQCAtODgsNyArODgsOCBA
QCBuYW1lc3BhY2UgS0pTIHsKICAgCiAgIHN0cnVjdCBEZWNsYXJhdGlvblN0YWNrcyB7CiAgICAg
ICB0eXBlZGVmIFZlY3RvcjxOb2RlKiwgMTY+IE5vZGVTdGFjazsKLSAgICAgIHR5cGVkZWYgVmVj
dG9yPFZhckRlY2xOb2RlKiwgMTY+IFZhclN0YWNrOworICAgICAgZW51bSB7IElzQ29uc3RhbnQs
IEhhc0luaXRpYWxpemVyIH0gVmFyQXR0cnM7CisgICAgICB0eXBlZGVmIFZlY3RvcjxzdGQ6OnBh
aXI8SWRlbnRpZmllciwgdW5zaWduZWQ+LCAxNj4gVmFyU3RhY2s7CiAgICAgICB0eXBlZGVmIFZl
Y3RvcjxGdW5jRGVjbE5vZGUqLCAxNj4gRnVuY3Rpb25TdGFjazsKICAgICAgIAogICAgICAgRGVj
bGFyYXRpb25TdGFja3MoRXhlY1N0YXRlKiBlLCBOb2RlU3RhY2smIG4sIFZhclN0YWNrJiB2LCBG
dW5jdGlvblN0YWNrJiBmKQpAQCAtMjAxLDYgKzIwMiw3IEBAIG5hbWVzcGFjZSBLSlMgewogICAg
IHZpcnR1YWwgSlNWYWx1ZSogZXhlY3V0ZShFeGVjU3RhdGUgKmV4ZWMpIEtKU19GQVNUX0NBTEwg
PSAwOwogICAgIHZvaWQgcHVzaExhYmVsKGNvbnN0IElkZW50aWZpZXIgJmlkKSBLSlNfRkFTVF9D
QUxMIHsgbHMucHVzaChpZCk7IH0KICAgICB2aXJ0dWFsIFByZWNlZGVuY2UgcHJlY2VkZW5jZSgp
IGNvbnN0IHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IHJldHVybiBQcmVjRXhwcmVzc2lvbjsgfQor
ICAgIHZpcnR1YWwgYm9vbCBpc0VtcHR5U3RhdGVtZW50KCkgY29uc3QgS0pTX0ZBU1RfQ0FMTCB7
IHJldHVybiBmYWxzZTsgfQogICBwcm90ZWN0ZWQ6CiAgICAgTGFiZWxTdGFjayBsczsKICAgcHJp
dmF0ZToKQEAgLTE2ODMsNDggKzE2ODUsMzEgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgUmVmUHRy
PEV4cHJlc3Npb25Ob2RlPiBleHByMjsKICAgfTsKIAotICAgIGNsYXNzIEFzc2lnbkV4cHJOb2Rl
IDogcHVibGljIEV4cHJlc3Npb25Ob2RlIHsKKyAgY2xhc3MgQ29uc3REZWNsTm9kZSA6IHB1Ymxp
YyBFeHByZXNzaW9uTm9kZSB7CiAgIHB1YmxpYzoKLSAgICBBc3NpZ25FeHByTm9kZShFeHByZXNz
aW9uTm9kZSogZSkgS0pTX0ZBU1RfQ0FMTCA6IGV4cHIoZSkge30KLSAgICB2aXJ0dWFsIHZvaWQg
b3B0aW1pemVWYXJpYWJsZUFjY2VzcyhTeW1ib2xUYWJsZSYsIERlY2xhcmF0aW9uU3RhY2tzOjpO
b2RlU3RhY2smKSBLSlNfRkFTVF9DQUxMOwotICAgIHZpcnR1YWwgSlNWYWx1ZSogZXZhbHVhdGUo
RXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKLSAgICB2aXJ0dWFsIGJvb2wgZXZhbHVhdGVUb0Jv
b2xlYW4oRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKLSAgICB2aXJ0dWFsIGRvdWJsZSBldmFs
dWF0ZVRvTnVtYmVyKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7Ci0gICAgdmlydHVhbCBpbnQz
Ml90IGV2YWx1YXRlVG9JbnQzMihFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwotICAgIHZpcnR1
YWwgdWludDMyX3QgZXZhbHVhdGVUb1VJbnQzMihFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwot
ICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBjb25zdCBLSlNfRkFTVF9D
QUxMOwotICAgIHZpcnR1YWwgUHJlY2VkZW5jZSBwcmVjZWRlbmNlKCkgY29uc3QgeyBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsgcmV0dXJuIFByZWNFeHByZXNzaW9uOyB9Ci0gIHByaXZhdGU6Ci0gICAg
UmVmUHRyPEV4cHJlc3Npb25Ob2RlPiBleHByOwotICB9OwotCi0gICAgY2xhc3MgVmFyRGVjbE5v
ZGUgOiBwdWJsaWMgRXhwcmVzc2lvbk5vZGUgewotICBwdWJsaWM6Ci0gICAgZW51bSBUeXBlIHsg
VmFyaWFibGUsIENvbnN0YW50IH07Ci0gICAgVmFyRGVjbE5vZGUoY29uc3QgSWRlbnRpZmllciAm
aWQsIEFzc2lnbkV4cHJOb2RlICppbiwgVHlwZSB0KSBLSlNfRkFTVF9DQUxMOworICAgIENvbnN0
RGVjbE5vZGUoY29uc3QgSWRlbnRpZmllciYgaWQsIEV4cHJlc3Npb25Ob2RlKiBpbikgS0pTX0ZB
U1RfQ0FMTDsKICAgICB2aXJ0dWFsIHZvaWQgb3B0aW1pemVWYXJpYWJsZUFjY2VzcyhTeW1ib2xU
YWJsZSYsIERlY2xhcmF0aW9uU3RhY2tzOjpOb2RlU3RhY2smKSBLSlNfRkFTVF9DQUxMOwogICAg
IHZpcnR1YWwgS0pTOjpKU1ZhbHVlKiBldmFsdWF0ZShFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxM
OwogICAgIHZvaWQgZXZhbHVhdGVTaW5nbGUoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKICAg
ICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3QgS0pTX0ZBU1RfQ0FM
TDsKICAgICB2aXJ0dWFsIFByZWNlZGVuY2UgcHJlY2VkZW5jZSgpIGNvbnN0IHsgQVNTRVJUX05P
VF9SRUFDSEVEKCk7IHJldHVybiBQcmVjRXhwcmVzc2lvbjsgfQotICAgIFBhc3NSZWZQdHI8VmFy
RGVjbE5vZGU+IHJlbGVhc2VOZXh0KCkgS0pTX0ZBU1RfQ0FMTCB7IHJldHVybiBuZXh0LnJlbGVh
c2UoKTsgfQorICAgIFBhc3NSZWZQdHI8Q29uc3REZWNsTm9kZT4gcmVsZWFzZU5leHQoKSBLSlNf
RkFTVF9DQUxMIHsgcmV0dXJuIG5leHQucmVsZWFzZSgpOyB9CiAKLSAgICBUeXBlIHZhclR5cGU7
CiAgICAgSWRlbnRpZmllciBpZGVudDsKLSAgICBMaXN0UmVmUHRyPFZhckRlY2xOb2RlPiBuZXh0
OworICAgIExpc3RSZWZQdHI8Q29uc3REZWNsTm9kZT4gbmV4dDsKKyAgICBSZWZQdHI8RXhwcmVz
c2lvbk5vZGU+IGluaXQ7CiAgIHByaXZhdGU6CiAgICAgdm9pZCBoYW5kbGVTbG93Q2FzZShFeGVj
U3RhdGUqLCBjb25zdCBTY29wZUNoYWluJiwgSlNWYWx1ZSopIEtKU19GQVNUX0NBTEwgTkVWRVJf
SU5MSU5FOwotICAgIFJlZlB0cjxBc3NpZ25FeHByTm9kZT4gaW5pdDsKICAgfTsKIAotICBjbGFz
cyBWYXJTdGF0ZW1lbnROb2RlIDogcHVibGljIFN0YXRlbWVudE5vZGUgeworICBjbGFzcyBDb25z
dFN0YXRlbWVudE5vZGUgOiBwdWJsaWMgU3RhdGVtZW50Tm9kZSB7CiAgIHB1YmxpYzoKLSAgICBW
YXJTdGF0ZW1lbnROb2RlKFZhckRlY2xOb2RlKiBsKSBLSlNfRkFTVF9DQUxMIDogbmV4dChsKSB7
IH0KKyAgICBDb25zdFN0YXRlbWVudE5vZGUoQ29uc3REZWNsTm9kZSogbCkgS0pTX0ZBU1RfQ0FM
TCA6IG5leHQobCkgeyB9CiAgICAgdmlydHVhbCB2b2lkIG9wdGltaXplVmFyaWFibGVBY2Nlc3Mo
U3ltYm9sVGFibGUmLCBEZWNsYXJhdGlvblN0YWNrczo6Tm9kZVN0YWNrJikgS0pTX0ZBU1RfQ0FM
TDsKICAgICB2aXJ0dWFsIEpTVmFsdWUqIGV4ZWN1dGUoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FM
TDsKICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3QgS0pTX0ZB
U1RfQ0FMTDsKICAgcHJpdmF0ZToKLSAgICBSZWZQdHI8VmFyRGVjbE5vZGU+IG5leHQ7CisgICAg
UmVmUHRyPENvbnN0RGVjbE5vZGU+IG5leHQ7CiAgIH07CiAKICAgdHlwZWRlZiBWZWN0b3I8UmVm
UHRyPFN0YXRlbWVudE5vZGU+ID4gU3RhdGVtZW50VmVjdG9yOwpAQCAtMTc1Niw2ICsxNzQxLDcg
QEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgRW1wdHlTdGF0ZW1lbnROb2RlKCkgS0pTX0ZBU1RfQ0FM
TCB7IH0gLy8gZGVidWcKICAgICB2aXJ0dWFsIEpTVmFsdWUqIGV4ZWN1dGUoRXhlY1N0YXRlKikg
S0pTX0ZBU1RfQ0FMTDsKICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtJikg
Y29uc3QgS0pTX0ZBU1RfQ0FMTDsKKyAgICB2aXJ0dWFsIGJvb2wgaXNFbXB0eVN0YXRlbWVudCgp
IGNvbnN0IEtKU19GQVNUX0NBTEwgeyByZXR1cm4gdHJ1ZTsgfQogICB9OwogCiAgIGNsYXNzIEV4
cHJTdGF0ZW1lbnROb2RlIDogcHVibGljIFN0YXRlbWVudE5vZGUgewpAQCAtMTc2OCw2ICsxNzU0
LDE2IEBAIG5hbWVzcGFjZSBLSlMgewogICAgIFJlZlB0cjxFeHByZXNzaW9uTm9kZT4gZXhwcjsK
ICAgfTsKIAorICBjbGFzcyBWYXJTdGF0ZW1lbnROb2RlIDogcHVibGljIFN0YXRlbWVudE5vZGUg
eworICBwdWJsaWM6CisgICAgVmFyU3RhdGVtZW50Tm9kZShFeHByZXNzaW9uTm9kZSogZSkgS0pT
X0ZBU1RfQ0FMTCA6IGV4cHIoZSkgeyB9CisgICAgdmlydHVhbCB2b2lkIG9wdGltaXplVmFyaWFi
bGVBY2Nlc3MoU3ltYm9sVGFibGUmLCBEZWNsYXJhdGlvblN0YWNrczo6Tm9kZVN0YWNrJikgS0pT
X0ZBU1RfQ0FMTDsKKyAgICB2aXJ0dWFsIEpTVmFsdWUqIGV4ZWN1dGUoRXhlY1N0YXRlKikgS0pT
X0ZBU1RfQ0FMTDsKKyAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29u
c3QgS0pTX0ZBU1RfQ0FMTDsKKyAgcHJpdmF0ZToKKyAgICBSZWZQdHI8RXhwcmVzc2lvbk5vZGU+
IGV4cHI7CisgIH07CisKICAgY2xhc3MgSWZOb2RlIDogcHVibGljIFN0YXRlbWVudE5vZGUgewog
ICBwdWJsaWM6CiAgICAgSWZOb2RlKEV4cHJlc3Npb25Ob2RlKiBlLCBTdGF0ZW1lbnROb2RlICpz
KSBLSlNfRkFTVF9DQUxMCkBAIC0xODE1LDExICsxODExLDEyIEBAIG5hbWVzcGFjZSBLSlMgewog
CiAgIGNsYXNzIEZvck5vZGUgOiBwdWJsaWMgU3RhdGVtZW50Tm9kZSB7CiAgIHB1YmxpYzoKLSAg
ICBGb3JOb2RlKEV4cHJlc3Npb25Ob2RlKiBlMSwgRXhwcmVzc2lvbk5vZGUqIGUyLCBFeHByZXNz
aW9uTm9kZSogZTMsIFN0YXRlbWVudE5vZGUqIHMpIEtKU19GQVNUX0NBTEwKKyAgICAgIEZvck5v
ZGUoRXhwcmVzc2lvbk5vZGUqIGUxLCBFeHByZXNzaW9uTm9kZSogZTIsIEV4cHJlc3Npb25Ob2Rl
KiBlMywgU3RhdGVtZW50Tm9kZSogcywgYm9vbCBlMVdhc1ZhckRlY2wpIEtKU19GQVNUX0NBTEwK
ICAgICAgICAgOiBleHByMShlMSA/IGUxIDogbmV3IFRydWVOb2RlKQogICAgICAgICAsIGV4cHIy
KGUyID8gZTIgOiBuZXcgVHJ1ZU5vZGUpCiAgICAgICAgICwgZXhwcjMoZTMgPyBlMyA6IG5ldyBU
cnVlTm9kZSkKICAgICAgICAgLCBzdGF0ZW1lbnQocykKKyAgICAgICAgLCBleHByMVdhc1ZhckRl
Y2woZTFXYXNWYXJEZWNsKQogICAgIHsKICAgICAgICAgQVNTRVJUKGV4cHIxKTsKICAgICAgICAg
QVNTRVJUKGV4cHIyKTsKQEAgLTE4MzgsMjMgKzE4MzUsMjMgQEAgbmFtZXNwYWNlIEtKUyB7CiAg
ICAgUmVmUHRyPEV4cHJlc3Npb25Ob2RlPiBleHByMjsKICAgICBSZWZQdHI8RXhwcmVzc2lvbk5v
ZGU+IGV4cHIzOwogICAgIFJlZlB0cjxTdGF0ZW1lbnROb2RlPiBzdGF0ZW1lbnQ7CisgICAgYm9v
bCBleHByMVdhc1ZhckRlY2w7CiAgIH07CiAKICAgY2xhc3MgRm9ySW5Ob2RlIDogcHVibGljIFN0
YXRlbWVudE5vZGUgewogICBwdWJsaWM6CiAgICAgRm9ySW5Ob2RlKEV4cHJlc3Npb25Ob2RlKiAg
bCwgRXhwcmVzc2lvbk5vZGUqIGUsIFN0YXRlbWVudE5vZGUgKnMpIEtKU19GQVNUX0NBTEw7Ci0g
ICAgRm9ySW5Ob2RlKGNvbnN0IElkZW50aWZpZXIgJmksIEFzc2lnbkV4cHJOb2RlICppbiwgRXhw
cmVzc2lvbk5vZGUqIGUsIFN0YXRlbWVudE5vZGUgKnMpIEtKU19GQVNUX0NBTEw7CisgICAgRm9y
SW5Ob2RlKGNvbnN0IElkZW50aWZpZXIgJmksIEV4cHJlc3Npb25Ob2RlICppbiwgRXhwcmVzc2lv
bk5vZGUqIGUsIFN0YXRlbWVudE5vZGUgKnMpIEtKU19GQVNUX0NBTEw7CiAgICAgdmlydHVhbCB2
b2lkIG9wdGltaXplVmFyaWFibGVBY2Nlc3MoU3ltYm9sVGFibGUmLCBEZWNsYXJhdGlvblN0YWNr
czo6Tm9kZVN0YWNrJikgS0pTX0ZBU1RfQ0FMTDsKICAgICB2aXJ0dWFsIEpTVmFsdWUqIGV4ZWN1
dGUoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8o
U291cmNlU3RyZWFtJikgY29uc3QgS0pTX0ZBU1RfQ0FMTDsKLSAgICBWYXJEZWNsTm9kZSogZ2V0
VmFyRGVjbCgpIHsgcmV0dXJuIHZhckRlY2wuZ2V0KCk7IH0KICAgcHJpdmF0ZToKICAgICBJZGVu
dGlmaWVyIGlkZW50OwotICAgIFJlZlB0cjxBc3NpZ25FeHByTm9kZT4gaW5pdDsKKyAgICBSZWZQ
dHI8RXhwcmVzc2lvbk5vZGU+IGluaXQ7CiAgICAgUmVmUHRyPEV4cHJlc3Npb25Ob2RlPiBsZXhw
cjsKICAgICBSZWZQdHI8RXhwcmVzc2lvbk5vZGU+IGV4cHI7Ci0gICAgUmVmUHRyPFZhckRlY2xO
b2RlPiB2YXJEZWNsOwogICAgIFJlZlB0cjxTdGF0ZW1lbnROb2RlPiBzdGF0ZW1lbnQ7CisgICAg
Ym9vbCBpZGVudElzVmFyRGVjbDsKICAgfTsKIAogICBjbGFzcyBDb250aW51ZU5vZGUgOiBwdWJs
aWMgU3RhdGVtZW50Tm9kZSB7CkBAIC0xOTU2LDYgKzE5NTMsNyBAQCBuYW1lc3BhY2UgS0pTIHsK
IAogICAgIGludCBzb3VyY2VJZCgpIGNvbnN0IEtKU19GQVNUX0NBTEwgeyByZXR1cm4gbV9zb3Vy
Y2VJZDsgfQogICAgIGNvbnN0IFVTdHJpbmcmIHNvdXJjZVVSTCgpIGNvbnN0IEtKU19GQVNUX0NB
TEwgeyByZXR1cm4gbV9zb3VyY2VVUkw7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291
cmNlU3RyZWFtJikgY29uc3QgS0pTX0ZBU1RfQ0FMTDsKIAogICBwcm90ZWN0ZWQ6CiAgICAgdm9p
ZCBvcHRpbWl6ZVZhcmlhYmxlQWNjZXNzKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CkBAIC0y
MTI0LDkgKzIxMjIsOSBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICAgIEFyZ3VtZW50TGlzdE5vZGUq
IHRhaWw7CiAgIH07CiAKLSAgc3RydWN0IFZhckRlY2xMaXN0IHsKLSAgICAgIFZhckRlY2xOb2Rl
KiBoZWFkOwotICAgICAgVmFyRGVjbE5vZGUqIHRhaWw7CisgIHN0cnVjdCBDb25zdERlY2xMaXN0
IHsKKyAgICAgIENvbnN0RGVjbE5vZGUqIGhlYWQ7CisgICAgICBDb25zdERlY2xOb2RlKiB0YWls
OwogICB9OwogCiAgIHN0cnVjdCBQYXJhbWV0ZXJMaXN0IHsK
</data>
<flag name="review"
          id="7851"
          type_id="1"
          status="+"
          setter="eric"
    />
          </attachment>
      

    </bug>

</bugzilla>