<?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>27094</bug_id>
          
          <creation_ts>2009-07-08 14:22:10 -0700</creation_ts>
          <short_desc>[Chromium] Upstream V8 npruntime bindings</short_desc>
          <delta_ts>2009-07-08 14:51:55 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>0</everconfirmed>
          <reporter name="Nate Chapin">japhet</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>130511</commentid>
    <comment_count>0</comment_count>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2009-07-08 14:22:10 -0700</bug_when>
    <thetext>See summary.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>130514</commentid>
    <comment_count>1</comment_count>
      <attachid>32473</attachid>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2009-07-08 14:25:27 -0700</bug_when>
    <thetext>Created attachment 32473
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>130520</commentid>
    <comment_count>2</comment_count>
      <attachid>32474</attachid>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2009-07-08 14:33:04 -0700</bug_when>
    <thetext>Created attachment 32474
patch2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>130523</commentid>
    <comment_count>3</comment_count>
      <attachid>32474</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2009-07-08 14:42:05 -0700</bug_when>
    <thetext>Comment on attachment 32474
patch2

r=me, with nits:

&gt; +// Commenting out the locks to avoid dependencies on chrome for now.
&gt; +// Need a platform abstraction which we can use.
&gt; +// static Lock StringIdentifierMapLock;
&gt; +

Remove commented code.

&gt; +// FIXME: Consider removing locks if we&apos;re singlethreaded already.
&gt; +// static Lock IntIdentifierMapLock;

Ditto.

&gt; +        // AutoLock safeLock(StringIdentifierMapLock);

Ditto.

&gt; +    // AutoLock safeLock(IntIdentifierMapLock);

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>130525</commentid>
    <comment_count>4</comment_count>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2009-07-08 14:51:55 -0700</bug_when>
    <thetext>Landed as r45641.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>32473</attachid>
            <date>2009-07-08 14:25:27 -0700</date>
            <delta_ts>2009-07-08 14:33:04 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>24655</size>
            <attacher name="Nate Chapin">japhet</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NTYzNykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjMgQEAKKzIwMDktMDctMDggIE5hdGUgQ2hhcGluICA8amFwaGV0QGNocm9taXVt
Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBV
cHN0cmVhbSBWOCBucHJ1bnRpbWUgYmluZGluZ3MuCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI3MDk0CisKKyAgICAgICAgKiBiaW5kaW5ncy92OC9u
cHJ1bnRpbWUuY3BwOiBVcHN0cmVhbWVkIGZyb20gc3JjLmNocm9taXVtLm9yZy4KKyAgICAgICAg
KFN0cmluZ0tleTo6b3BlcmF0b3I9PSk6CisgICAgICAgIChTdHJpbmdLZXk6OlN0cmluZ0tleUhh
c2g6Omhhc2gpOgorICAgICAgICAoU3RyaW5nS2V5OjpTdHJpbmdLZXlIYXNoOjplcXVhbCk6Cisg
ICAgICAgIChTdHJpbmdLZXlIYXNoVHJhaXRzOjpjb25zdHJ1Y3REZWxldGVkVmFsdWUpOgorICAg
ICAgICAoU3RyaW5nS2V5SGFzaFRyYWl0czo6aXNEZWxldGVkVmFsdWUpOgorICAgICAgICAoZ2V0
U3RyaW5nSWRlbnRpZmllck1hcCk6CisgICAgICAgIChnZXRJbnRJZGVudGlmaWVyTWFwKToKKyAg
ICAgICAgKiBiaW5kaW5ncy92OC9ucHJ1bnRpbWVfaW1wbC5oOiBVcHN0cmVhbWVkIGZyb20gc3Jj
LmNocm9taXVtLm9yZy4KKyAgICAgICAgKiBiaW5kaW5ncy92OC9ucHJ1bnRpbWVfaW50ZXJuYWwu
aDogVXBzdHJlYW1lZCBmcm9tIHNyYy5jaHJvbWl1bS5vcmcuCisgICAgICAgICogYmluZGluZ3Mv
djgvbnBydW50aW1lX3ByaXYuaDogVXBzdHJlYW1lZCBmcm9tIHNyYy5jaHJvbWl1bS5vcmcuCisK
IDIwMDktMDctMDggIE1hcmMtQW50b2luZSBSdWVsICA8bWFydWVsQGNocm9taXVtLm9yZz4KIAog
ICAgICAgICBSZXZpZXdlZCBieSBEaW1pdHJpIEdsYXprb3YuCkluZGV4OiBXZWJDb3JlL2JpbmRp
bmdzL3Y4L25wcnVudGltZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9u
cHJ1bnRpbWUuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9ucHJ1bnRp
bWUuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQzMyBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAwNCwgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAwNy0yMDA5IEdvb2dsZSwgSW5jLiAgQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
Q09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJOUFY4T2JqZWN0
LmgiCisjaW5jbHVkZSAibnBydW50aW1lX3ByaXYuaCIKKyNpbmNsdWRlICJWOE5QT2JqZWN0Lmgi
CisKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+Cisj
aW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKworLy8gRklYTUU6IENvbnNpZGVyIHJlbW92aW5n
IGxvY2tzIGlmIHdlJ3JlIHNpbmdsZXRocmVhZGVkIGFscmVhZHkuCisvLyBUaGUgc3RhdGljIGlu
aXRpYWxpemVyIGhlcmUgc2hvdWxkIHdvcmsgb2theSwgYnV0IHdlIHdhbnQgdG8gYXZvaWQKKy8v
IHN0YXRpYyBpbml0aWFsaXphdGlvbiBpbiBnZW5lcmFsLgorLy8KKy8vIENvbW1lbnRpbmcgb3V0
IHRoZSBsb2NrcyB0byBhdm9pZCBkZXBlbmRlbmNpZXMgb24gY2hyb21lIGZvciBub3cuCisvLyBO
ZWVkIGEgcGxhdGZvcm0gYWJzdHJhY3Rpb24gd2hpY2ggd2UgY2FuIHVzZS4KKy8vIHN0YXRpYyBM
b2NrIFN0cmluZ0lkZW50aWZpZXJNYXBMb2NrOworCituYW1lc3BhY2UgeworCisvLyBXZSB1c2Ug
U3RyaW5nS2V5IGhlcmUgYXMgdGhlIGtleS10eXBlIHRvIGF2b2lkIGEgc3RyaW5nIGNvcHkgdG8K
Ky8vIGNvbnN0cnVjdCB0aGUgbWFwIGtleSBhbmQgZm9yIGZhc3RlciBjb21wYXJpc29ucyB0aGFu
IHN0cmNtcC4KK2NsYXNzIFN0cmluZ0tleSB7CitwdWJsaWM6CisgICAgZXhwbGljaXQgU3RyaW5n
S2V5KGNvbnN0IGNoYXIqIHN0cikgOiBtX3N0cmluZyhzdHIpLCBtX2xlbmd0aChzdHJsZW4oc3Ry
KSkgeyB9CisgICAgU3RyaW5nS2V5KCkgOiBtX3N0cmluZygwKSwgbV9sZW5ndGgoMCkgeyB9Cisg
ICAgZXhwbGljaXQgU3RyaW5nS2V5KFdURjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlVHlwZSkgOiBt
X3N0cmluZyhoYXNoVGFibGVEZWxldGVkVmFsdWUoKSksIG1fbGVuZ3RoKDApIHsgfQorCisgICAg
U3RyaW5nS2V5JiBvcGVyYXRvcj0oY29uc3QgU3RyaW5nS2V5JiBvdGhlcikKKyAgICB7CisgICAg
ICAgIHRoaXMtPm1fc3RyaW5nID0gb3RoZXIubV9zdHJpbmc7CisgICAgICAgIHRoaXMtPm1fbGVu
Z3RoID0gb3RoZXIubV9sZW5ndGg7CisgICAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisKKyAg
ICBib29sIGlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJl
dHVybiBtX3N0cmluZyA9PSBoYXNoVGFibGVEZWxldGVkVmFsdWUoKTsKKyAgICB9CisKKyAgICBj
b25zdCBjaGFyKiBtX3N0cmluZzsKKyAgICBzaXplX3QgbV9sZW5ndGg7CisKK3ByaXZhdGU6Cisg
ICAgY29uc3QgY2hhciogaGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkgY29uc3QKKyAgICB7CisgICAg
ICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPigtMSk7CisgICAgfQorfTsK
KworaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBTdHJpbmdLZXkmIHgsIGNvbnN0IFN0cmlu
Z0tleSYgeSkKK3sKKyAgICBpZiAoeC5tX2xlbmd0aCAhPSB5Lm1fbGVuZ3RoKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgaWYgKHgubV9zdHJpbmcgPT0geS5tX3N0cmluZykKKyAgICAgICAg
cmV0dXJuIHRydWU7CisKKyAgICBBU1NFUlQoIXguaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKSAm
JiAheS5pc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpKTsKKyAgICByZXR1cm4gIW1lbWNtcCh4Lm1f
c3RyaW5nLCB5Lm1fc3RyaW5nLCB5Lm1fbGVuZ3RoKTsKK30KKworLy8gSW1wbGVtZW50IFdURjo6
RGVmYXVsdEhhc2g8U3RyaW5nS2V5Pjo6SGFzaCBpbnRlcmZhY2UuCitzdHJ1Y3QgU3RyaW5nS2V5
SGFzaCB7CisgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgU3RyaW5nS2V5JiBrZXkpCisg
ICAgeworICAgICAgICAvLyBDb21wdXRlIHN0cmluZyBoYXNoLgorICAgICAgICB1bnNpZ25lZCBo
YXNoID0gMDsKKyAgICAgICAgc2l6ZV90IGxlbiA9IGtleS5tX2xlbmd0aDsKKyAgICAgICAgY29u
c3QgY2hhciogc3RyID0ga2V5Lm1fc3RyaW5nOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IGxlbjsgaSsrKSB7CisgICAgICAgICAgICBjaGFyIGMgPSBzdHJbaV07CisgICAgICAgICAg
ICBoYXNoICs9IGM7CisgICAgICAgICAgICBoYXNoICs9IChoYXNoIDw8IDEwKTsKKyAgICAgICAg
ICAgIGhhc2ggXj0gKGhhc2ggPj4gNik7CisgICAgICAgIH0KKyAgICAgICAgaGFzaCArPSAoaGFz
aCA8PCAzKTsKKyAgICAgICAgaGFzaCBePSAoaGFzaCA+PiAxMSk7CisgICAgICAgIGhhc2ggKz0g
KGhhc2ggPDwgMTUpOworICAgICAgICBpZiAoaGFzaCA9PSAwKQorICAgICAgICAgICAgaGFzaCA9
IDI3OworICAgICAgICByZXR1cm4gaGFzaDsKKyAgICB9CisKKyAgICBzdGF0aWMgYm9vbCBlcXVh
bChjb25zdCBTdHJpbmdLZXkmIHgsIGNvbnN0IFN0cmluZ0tleSYgeSkKKyAgICB7CisgICAgICAg
IHJldHVybiB4ID09IHk7CisgICAgfQorCisgICAgc3RhdGljIGNvbnN0IGJvb2wgc2FmZVRvQ29t
cGFyZVRvRW1wdHlPckRlbGV0ZWQgPSB0cnVlOworfTsKKworfSAgLy8gbmFtZXNwYWNlCisKKy8v
IEltcGxlbWVudCBIYXNoVHJhaXRzPFN0cmluZ0tleT4KK3N0cnVjdCBTdHJpbmdLZXlIYXNoVHJh
aXRzIDogV1RGOjpHZW5lcmljSGFzaFRyYWl0czxTdHJpbmdLZXk+IHsKKyAgICBzdGF0aWMgdm9p
ZCBjb25zdHJ1Y3REZWxldGVkVmFsdWUoU3RyaW5nS2V5JiBzbG90KQorICAgIHsKKyAgICAgICAg
bmV3ICgmc2xvdCkgU3RyaW5nS2V5KFdURjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlKTsKKyAgICB9
CisKKyAgICBzdGF0aWMgYm9vbCBpc0RlbGV0ZWRWYWx1ZShjb25zdCBTdHJpbmdLZXkmIHZhbHVl
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHZhbHVlLmlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCk7
CisgICAgfQorfTsKKwordHlwZWRlZiBXVEY6Okhhc2hNYXA8U3RyaW5nS2V5LCBQcml2YXRlSWRl
bnRpZmllciosIFN0cmluZ0tleUhhc2gsIFN0cmluZ0tleUhhc2hUcmFpdHM+IFN0cmluZ0lkZW50
aWZpZXJNYXA7CisKK3N0YXRpYyBTdHJpbmdJZGVudGlmaWVyTWFwKiBnZXRTdHJpbmdJZGVudGlm
aWVyTWFwKCkgeworICAgIHN0YXRpYyBTdHJpbmdJZGVudGlmaWVyTWFwKiBzdHJpbmdJZGVudGlm
aWVyTWFwID0gMDsKKyAgICBpZiAoIXN0cmluZ0lkZW50aWZpZXJNYXApCisgICAgICAgIHN0cmlu
Z0lkZW50aWZpZXJNYXAgPSBuZXcgU3RyaW5nSWRlbnRpZmllck1hcCgpOworICAgIHJldHVybiBz
dHJpbmdJZGVudGlmaWVyTWFwOworfQorCisvLyBGSVhNRTogQ29uc2lkZXIgcmVtb3ZpbmcgbG9j
a3MgaWYgd2UncmUgc2luZ2xldGhyZWFkZWQgYWxyZWFkeS4KKy8vIHN0YXRpYyBMb2NrIEludElk
ZW50aWZpZXJNYXBMb2NrOworCit0eXBlZGVmIFdURjo6SGFzaE1hcDxpbnQsIFByaXZhdGVJZGVu
dGlmaWVyKj4gSW50SWRlbnRpZmllck1hcDsKKworc3RhdGljIEludElkZW50aWZpZXJNYXAqIGdl
dEludElkZW50aWZpZXJNYXAoKSB7CisgICAgc3RhdGljIEludElkZW50aWZpZXJNYXAqIGludElk
ZW50aWZpZXJNYXAgPSAwOworICAgIGlmICghaW50SWRlbnRpZmllck1hcCkKKyAgICAgICAgaW50
SWRlbnRpZmllck1hcCA9IG5ldyBJbnRJZGVudGlmaWVyTWFwKCk7CisgICAgcmV0dXJuIGludElk
ZW50aWZpZXJNYXA7Cit9CisKK2V4dGVybiAiQyIgeworCitOUElkZW50aWZpZXIgTlBOX0dldFN0
cmluZ0lkZW50aWZpZXIoY29uc3QgTlBVVEY4KiBuYW1lKSB7CisgICAgQVNTRVJUKG5hbWUpOwor
CisgICAgaWYgKG5hbWUpIHsKKyAgICAgICAgLy8gQXV0b0xvY2sgc2FmZUxvY2soU3RyaW5nSWRl
bnRpZmllck1hcExvY2spOworCisgICAgICAgIFN0cmluZ0tleSBrZXkobmFtZSk7CisgICAgICAg
IFN0cmluZ0lkZW50aWZpZXJNYXAqIGlkZW50TWFwID0gZ2V0U3RyaW5nSWRlbnRpZmllck1hcCgp
OworICAgICAgICBTdHJpbmdJZGVudGlmaWVyTWFwOjppdGVyYXRvciBpdGVyID0gaWRlbnRNYXAt
PmZpbmQoa2V5KTsKKyAgICAgICAgaWYgKGl0ZXIgIT0gaWRlbnRNYXAtPmVuZCgpKQorICAgICAg
ICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PE5QSWRlbnRpZmllcj4oaXRlci0+c2Vjb25kKTsKKwor
ICAgICAgICBzaXplX3QgbmFtZUxlbiA9IGtleS5tX2xlbmd0aDsKKworICAgICAgICAvLyBXZSBu
ZXZlciByZWxlYXNlIGlkZW50aWZpZXJzLCBzbyB0aGlzIGRpY3Rpb25hcnkgd2lsbCBncm93Lgor
ICAgICAgICBQcml2YXRlSWRlbnRpZmllciogaWRlbnRpZmllciA9IHN0YXRpY19jYXN0PFByaXZh
dGVJZGVudGlmaWVyKj4obWFsbG9jKHNpemVvZihQcml2YXRlSWRlbnRpZmllcikgKyBuYW1lTGVu
ICsgMSkpOworICAgICAgICBjaGFyKiBuYW1lU3RvcmFnZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hh
cio+KGlkZW50aWZpZXIgKyAxKTsKKyAgICAgICAgbWVtY3B5KG5hbWVTdG9yYWdlLCBuYW1lLCBu
YW1lTGVuICsgMSk7CisgICAgICAgIGlkZW50aWZpZXItPmlzU3RyaW5nID0gdHJ1ZTsKKyAgICAg
ICAgaWRlbnRpZmllci0+dmFsdWUuc3RyaW5nID0gcmVpbnRlcnByZXRfY2FzdDxOUFVURjgqPihu
YW1lU3RvcmFnZSk7CisgICAgICAgIGtleS5tX3N0cmluZyA9IG5hbWVTdG9yYWdlOworICAgICAg
ICBpZGVudE1hcC0+c2V0KGtleSwgaWRlbnRpZmllcik7CisgICAgICAgIHJldHVybiAoTlBJZGVu
dGlmaWVyKWlkZW50aWZpZXI7CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgTlBO
X0dldFN0cmluZ0lkZW50aWZpZXJzKGNvbnN0IE5QVVRGOCoqIG5hbWVzLCBpbnQzMl90IG5hbWVD
b3VudCwgTlBJZGVudGlmaWVyKiBpZGVudGlmaWVycykgeworICAgIEFTU0VSVChuYW1lcyk7Cisg
ICAgQVNTRVJUKGlkZW50aWZpZXJzKTsKKworICAgIGlmIChuYW1lcyAmJiBpZGVudGlmaWVycykg
eworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG5hbWVDb3VudDsgaSsrKQorICAgICAgICAg
ICAgaWRlbnRpZmllcnNbaV0gPSBOUE5fR2V0U3RyaW5nSWRlbnRpZmllcihuYW1lc1tpXSk7Cisg
ICAgfQorfQorCitOUElkZW50aWZpZXIgTlBOX0dldEludElkZW50aWZpZXIoaW50MzJfdCBpbnRJ
ZCkgeworICAgIC8vIEF1dG9Mb2NrIHNhZmVMb2NrKEludElkZW50aWZpZXJNYXBMb2NrKTsKKyAg
ICAvLyBTcGVjaWFsIGNhc2UgZm9yIC0xIGFuZCAwLCBib3RoIGNhbm5vdCBiZSB1c2VkIGFzIGtl
eSBpbiBIYXNoTWFwLgorICAgIGlmICghaW50SWQgfHwgaW50SWQgPT0gLTEpIHsKKyAgICAgICAg
c3RhdGljIFByaXZhdGVJZGVudGlmaWVyKiBtaW51c09uZU9yWmVyb0lkc1syXTsKKyAgICAgICAg
UHJpdmF0ZUlkZW50aWZpZXIqIGlkID0gbWludXNPbmVPclplcm9JZHNbaW50SWQgKyAxXTsKKyAg
ICAgICAgaWYgKCFpZCkgeworICAgICAgICAgICAgaWQgPSByZWludGVycHJldF9jYXN0PFByaXZh
dGVJZGVudGlmaWVyKj4obWFsbG9jKHNpemVvZihQcml2YXRlSWRlbnRpZmllcikpKTsKKyAgICAg
ICAgICAgIGlkLT5pc1N0cmluZyA9IGZhbHNlOworICAgICAgICAgICAgaWQtPnZhbHVlLm51bWJl
ciA9IGludElkOworICAgICAgICAgICAgbWludXNPbmVPclplcm9JZHNbaW50SWQgKyAxXSA9IGlk
OworICAgICAgICB9CisgICAgICAgIHJldHVybiAoTlBJZGVudGlmaWVyKSBpZDsKKyAgICB9CisK
KyAgICBJbnRJZGVudGlmaWVyTWFwKiBpZGVudE1hcCA9IGdldEludElkZW50aWZpZXJNYXAoKTsK
KyAgICBJbnRJZGVudGlmaWVyTWFwOjppdGVyYXRvciBpdGVyID0gaWRlbnRNYXAtPmZpbmQoaW50
SWQpOworICAgIGlmIChpdGVyICE9IGlkZW50TWFwLT5lbmQoKSkKKyAgICAgICAgcmV0dXJuIHN0
YXRpY19jYXN0PE5QSWRlbnRpZmllcj4oaXRlci0+c2Vjb25kKTsKKworICAgIC8vIFdlIG5ldmVy
IHJlbGVhc2UgaWRlbnRpZmllcnMsIHNvIHRoaXMgZGljdGlvbmFyeSB3aWxsIGdyb3cuCisgICAg
UHJpdmF0ZUlkZW50aWZpZXIqIGlkZW50aWZpZXIgPSByZWludGVycHJldF9jYXN0PFByaXZhdGVJ
ZGVudGlmaWVyKj4obWFsbG9jKHNpemVvZihQcml2YXRlSWRlbnRpZmllcikpKTsKKyAgICBpZGVu
dGlmaWVyLT5pc1N0cmluZyA9IGZhbHNlOworICAgIGlkZW50aWZpZXItPnZhbHVlLm51bWJlciA9
IGludElkOworICAgIGlkZW50TWFwLT5zZXQoaW50SWQsIGlkZW50aWZpZXIpOworICAgIHJldHVy
biAoTlBJZGVudGlmaWVyKWlkZW50aWZpZXI7Cit9CisKK2Jvb2wgTlBOX0lkZW50aWZpZXJJc1N0
cmluZyhOUElkZW50aWZpZXIgaWRlbnRpZmllcikgeworICAgIFByaXZhdGVJZGVudGlmaWVyKiBw
cml2YXRlSWRlbnRpZmllciA9IHJlaW50ZXJwcmV0X2Nhc3Q8UHJpdmF0ZUlkZW50aWZpZXIqPihp
ZGVudGlmaWVyKTsKKyAgICByZXR1cm4gcHJpdmF0ZUlkZW50aWZpZXItPmlzU3RyaW5nOworfQor
CitOUFVURjggKk5QTl9VVEY4RnJvbUlkZW50aWZpZXIoTlBJZGVudGlmaWVyIGlkZW50aWZpZXIp
IHsKKyAgICBQcml2YXRlSWRlbnRpZmllciogcHJpdmF0ZUlkZW50aWZpZXIgPSByZWludGVycHJl
dF9jYXN0PFByaXZhdGVJZGVudGlmaWVyKj4oaWRlbnRpZmllcik7CisgICAgaWYgKCFwcml2YXRl
SWRlbnRpZmllci0+aXNTdHJpbmcgfHwgIXByaXZhdGVJZGVudGlmaWVyLT52YWx1ZS5zdHJpbmcp
CisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIChOUFVURjgqKSBzdHJkdXAocHJpdmF0
ZUlkZW50aWZpZXItPnZhbHVlLnN0cmluZyk7Cit9CisKK2ludDMyX3QgTlBOX0ludEZyb21JZGVu
dGlmaWVyKE5QSWRlbnRpZmllciBpZGVudGlmaWVyKSB7CisgICAgUHJpdmF0ZUlkZW50aWZpZXIq
IHByaXZhdGVJZGVudGlmaWVyID0gcmVpbnRlcnByZXRfY2FzdDxQcml2YXRlSWRlbnRpZmllcio+
KGlkZW50aWZpZXIpOworICAgIGlmIChwcml2YXRlSWRlbnRpZmllci0+aXNTdHJpbmcpCisgICAg
ICAgIHJldHVybiAwOworICAgIHJldHVybiBwcml2YXRlSWRlbnRpZmllci0+dmFsdWUubnVtYmVy
OworfQorCit2b2lkIE5QTl9SZWxlYXNlVmFyaWFudFZhbHVlKE5QVmFyaWFudCogdmFyaWFudCkg
eworICAgIEFTU0VSVCh2YXJpYW50KTsKKworICAgIGlmICh2YXJpYW50LT50eXBlID09IE5QVmFy
aWFudFR5cGVfT2JqZWN0KSB7CisgICAgICAgIE5QTl9SZWxlYXNlT2JqZWN0KHZhcmlhbnQtPnZh
bHVlLm9iamVjdFZhbHVlKTsKKyAgICAgICAgdmFyaWFudC0+dmFsdWUub2JqZWN0VmFsdWUgPSAw
OworICAgIH0gZWxzZSBpZiAodmFyaWFudC0+dHlwZSA9PSBOUFZhcmlhbnRUeXBlX1N0cmluZykg
eworICAgICAgICBmcmVlKCh2b2lkKil2YXJpYW50LT52YWx1ZS5zdHJpbmdWYWx1ZS5VVEY4Q2hh
cmFjdGVycyk7CisgICAgICAgIHZhcmlhbnQtPnZhbHVlLnN0cmluZ1ZhbHVlLlVURjhDaGFyYWN0
ZXJzID0gMDsKKyAgICAgICAgdmFyaWFudC0+dmFsdWUuc3RyaW5nVmFsdWUuVVRGOExlbmd0aCA9
IDA7CisgICAgfQorCisgICAgdmFyaWFudC0+dHlwZSA9IE5QVmFyaWFudFR5cGVfVm9pZDsKK30K
KworTlBPYmplY3QgKk5QTl9DcmVhdGVPYmplY3QoTlBQIG5wcCwgTlBDbGFzcyogbnBDbGFzcykg
eworICAgIEFTU0VSVChucENsYXNzKTsKKworICAgIGlmIChucENsYXNzKSB7CisgICAgICAgIE5Q
T2JqZWN0KiBucE9iamVjdDsKKyAgICAgICAgaWYgKG5wQ2xhc3MtPmFsbG9jYXRlICE9IDApCisg
ICAgICAgICAgICBucE9iamVjdCA9IG5wQ2xhc3MtPmFsbG9jYXRlKG5wcCwgbnBDbGFzcyk7Cisg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgIG5wT2JqZWN0ID0gcmVpbnRlcnByZXRfY2FzdDxOUE9i
amVjdCo+KG1hbGxvYyhzaXplb2YoTlBPYmplY3QpKSk7CisKKyAgICAgICAgbnBPYmplY3QtPl9j
bGFzcyA9IG5wQ2xhc3M7CisgICAgICAgIG5wT2JqZWN0LT5yZWZlcmVuY2VDb3VudCA9IDE7Cisg
ICAgICAgIHJldHVybiBucE9iamVjdDsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKworTlBP
YmplY3QqIE5QTl9SZXRhaW5PYmplY3QoTlBPYmplY3QqIG5wT2JqZWN0KSB7CisgICAgQVNTRVJU
KG5wT2JqZWN0KTsKKyAgICBBU1NFUlQobnBPYmplY3QtPnJlZmVyZW5jZUNvdW50ID4gMCk7CisK
KyAgICBpZiAobnBPYmplY3QpCisgICAgICAgIG5wT2JqZWN0LT5yZWZlcmVuY2VDb3VudCsrOwor
CisgICAgcmV0dXJuIG5wT2JqZWN0OworfQorCisvLyBfTlBOX0RlYWxsb2NhdGVPYmplY3QgYWN0
dWFsbHkgZGVsZXRlcyB0aGUgb2JqZWN0LiAgVGVjaG5pY2FsbHksCisvLyBjYWxsZXJzIHNob3Vs
ZCB1c2UgTlBOX1JlbGVhc2VPYmplY3QuICBXZWJraXQgZXhwb3NlcyB0aGlzIGZ1bmN0aW9uCisv
LyB0byBraWxsIG9iamVjdHMgd2hpY2ggcGx1Z2lucyBtYXkgbm90IGhhdmUgcHJvcGVybHkgcmVs
ZWFzZWQuCit2b2lkIF9OUE5fRGVhbGxvY2F0ZU9iamVjdChOUE9iamVjdCogbnBPYmplY3QpIHsK
KyAgICBBU1NFUlQobnBPYmplY3QpOworICAgIEFTU0VSVChucE9iamVjdC0+cmVmZXJlbmNlQ291
bnQgPj0gMCk7CisKKyAgICBpZiAobnBPYmplY3QpIHsKKyAgICAgICAgLy8gTlBPYmplY3RzIHRo
YXQgcmVtYWluIGluIHB1cmUgQysrIG1heSBuZXZlciBoYXZlIHdyYXBwZXJzLgorICAgICAgICAv
LyBIZW5jZSwgaWYgaXQncyBub3QgYWxyZWFkeSBhbGl2ZSwgZG9uJ3QgdW5yZWdpc3RlciBpdC4K
KyAgICAgICAgLy8gSWYgaXQgaXMgYWxpdmUsIHVucmVnaXN0ZXIgaXQgYXMgdGhlICpsYXN0KiB0
aGluZyB3ZSBkbworICAgICAgICAvLyBzbyB0aGF0IGl0IGNhbiBkbyBhcyBtdWNoIGNsZWFudXAg
YXMgcG9zc2libGUgb24gaXRzIG93bi4KKyAgICAgICAgaWYgKF9OUE5fSXNBbGl2ZShucE9iamVj
dCkpCisgICAgICAgICAgICBfTlBOX1VucmVnaXN0ZXJPYmplY3QobnBPYmplY3QpOworCisgICAg
ICAgIG5wT2JqZWN0LT5yZWZlcmVuY2VDb3VudCA9IC0xOworICAgICAgICBpZiAobnBPYmplY3Qt
Pl9jbGFzcy0+ZGVhbGxvY2F0ZSkKKyAgICAgICAgICAgIG5wT2JqZWN0LT5fY2xhc3MtPmRlYWxs
b2NhdGUobnBPYmplY3QpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBmcmVlKG5wT2JqZWN0
KTsKKyAgICB9Cit9CisKK3ZvaWQgTlBOX1JlbGVhc2VPYmplY3QoTlBPYmplY3QqIG5wT2JqZWN0
KSB7CisgICAgQVNTRVJUKG5wT2JqZWN0KTsKKyAgICBBU1NFUlQobnBPYmplY3QtPnJlZmVyZW5j
ZUNvdW50ID49IDEpOworCisgICAgaWYgKG5wT2JqZWN0ICYmIG5wT2JqZWN0LT5yZWZlcmVuY2VD
b3VudCA+PSAxKSB7CisgICAgICAgIGlmICghLS1ucE9iamVjdC0+cmVmZXJlbmNlQ291bnQpCisg
ICAgICAgICAgICBfTlBOX0RlYWxsb2NhdGVPYmplY3QobnBPYmplY3QpOworICAgIH0KK30KKwor
dm9pZCBfTlBOX0luaXRpYWxpemVWYXJpYW50V2l0aFN0cmluZ0NvcHkoTlBWYXJpYW50KiB2YXJp
YW50LCBjb25zdCBOUFN0cmluZyogdmFsdWUpIHsKKyAgICB2YXJpYW50LT50eXBlID0gTlBWYXJp
YW50VHlwZV9TdHJpbmc7CisgICAgdmFyaWFudC0+dmFsdWUuc3RyaW5nVmFsdWUuVVRGOExlbmd0
aCA9IHZhbHVlLT5VVEY4TGVuZ3RoOworICAgIHZhcmlhbnQtPnZhbHVlLnN0cmluZ1ZhbHVlLlVU
RjhDaGFyYWN0ZXJzID0gcmVpbnRlcnByZXRfY2FzdDxOUFVURjgqPihtYWxsb2Moc2l6ZW9mKE5Q
VVRGOCkgKiB2YWx1ZS0+VVRGOExlbmd0aCkpOworICAgIG1lbWNweSgodm9pZCopdmFyaWFudC0+
dmFsdWUuc3RyaW5nVmFsdWUuVVRGOENoYXJhY3RlcnMsIHZhbHVlLT5VVEY4Q2hhcmFjdGVycywg
c2l6ZW9mKE5QVVRGOCkgKiB2YWx1ZS0+VVRGOExlbmd0aCk7Cit9CisKKworLy8gTlBOX1JlZ2lz
dHJ5CisvLworLy8gVGhlIHJlZ2lzdHJ5IGlzIGRlc2lnbmVkIGZvciBxdWljayBsb29rdXAgb2Yg
TlBPYmplY3RzLgorLy8gSlMgbmVlZHMgdG8gYmUgYWJsZSB0byBxdWlja2x5IGxvb2t1cCBhIGdp
dmVuIE5QT2JqZWN0IHRvIGRldGVybWluZQorLy8gaWYgaXQgaXMgYWxpdmUgb3Igbm90LgorLy8g
VGhlIGJyb3dzZXIgbmVlZHMgdG8gYmUgYWJsZSB0byBxdWlja2x5IGxvb2t1cCBhbGwgTlBPYmpl
Y3RzIHdoaWNoIGFyZQorLy8gIm93bmVkIiBieSBhbiBvYmplY3QuCisvLworLy8gVGhlIGxpdmVP
YmplY3RNYXAgaXMgYSBoYXNoIHRhYmxlIG9mIGFsbCBsaXZlIG9iamVjdHMgdG8gdGhlaXIgb3du
ZXIKKy8vIG9iamVjdHMuICBQcmVzZW5jZSBpbiB0aGlzIHRhYmxlIGlzIHVzZWQgcHJpbWFyaWx5
IHRvIGRldGVybWluZSBpZgorLy8gb2JqZWN0cyBhcmUgbGl2ZSBvciBub3QuCisvLworLy8gVGhl
IHJvb3RPYmplY3RNYXAgaXMgYSBoYXNoIHRhYmxlIG9mIHJvb3Qgb2JqZWN0cyB0byBhIHNldCBv
ZgorLy8gb2JqZWN0cyB0aGF0IHNob3VsZCBiZSBkZWFjdGl2YXRlZCBpbiBzeW5jIHdpdGggdGhl
IHJvb3QuICBBCisvLyByb290IGlzIGRlZmluZWQgYXMgYSB0b3AtbGV2ZWwgb3duZXIgb2JqZWN0
LiAgVGhpcyBpcyB1c2VkIG9uCisvLyBGcmFtZSB0ZWFyZG93biB0byBkZWFjdGl2YXRlIGFsbCBv
YmplY3RzIGFzc29jaWF0ZWQKKy8vIHdpdGggYSBwYXJ0aWN1bGFyIHBsdWdpbi4KKwordHlwZWRl
ZiBXVEY6Okhhc2hTZXQ8TlBPYmplY3QqPiBOUE9iamVjdFNldDsKK3R5cGVkZWYgV1RGOjpIYXNo
TWFwPE5QT2JqZWN0KiwgTlBPYmplY3QqPiBOUE9iamVjdE1hcDsKK3R5cGVkZWYgV1RGOjpIYXNo
TWFwPE5QT2JqZWN0KiwgTlBPYmplY3RTZXQqPiBOUFJvb3RPYmplY3RNYXA7CisKKy8vIEEgbWFw
IG9mIGxpdmUgTlBPYmplY3RzIHdpdGggcG9pbnRlcnMgdG8gdGhlaXIgUm9vdHMuCitOUE9iamVj
dE1hcCBsaXZlT2JqZWN0TWFwOworCisvLyBBIG1hcCBvZiB0aGUgcm9vdCBvYmplY3RzIGFuZCB0
aGUgbGlzdCBvZiBOUE9iamVjdHMKKy8vIGFzc29jaWF0ZWQgd2l0aCB0aGF0IG9iamVjdC4KK05Q
Um9vdE9iamVjdE1hcCByb290T2JqZWN0TWFwOworCit2b2lkIF9OUE5fUmVnaXN0ZXJPYmplY3Qo
TlBPYmplY3QqIG5wT2JqZWN0LCBOUE9iamVjdCogb3duZXIpIHsKKyAgICBBU1NFUlQobnBPYmpl
Y3QpOworCisgICAgLy8gQ2hlY2sgaWYgYWxyZWFkeSByZWdpc3RlcmVkLgorICAgIGlmIChsaXZl
T2JqZWN0TWFwLmZpbmQobnBPYmplY3QpICE9IGxpdmVPYmplY3RNYXAuZW5kKCkpCisgICAgICAg
IHJldHVybjsKKworICAgIGlmICghb3duZXIpIHsKKyAgICAgICAgLy8gUmVnaXN0ZXJpbmcgYSBu
ZXcgb3duZXIgb2JqZWN0LgorICAgICAgICBBU1NFUlQocm9vdE9iamVjdE1hcC5maW5kKG5wT2Jq
ZWN0KSA9PSByb290T2JqZWN0TWFwLmVuZCgpKTsKKyAgICAgICAgcm9vdE9iamVjdE1hcC5zZXQo
bnBPYmplY3QsIG5ldyBOUE9iamVjdFNldCgpKTsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBB
bHdheXMgYXNzb2NpYXRlIHRoaXMgb2JqZWN0IHdpdGggaXQncyB0b3AtbW9zdCBwYXJlbnQuCisg
ICAgICAgIC8vIFNpbmNlIHdlIGFsd2F5cyBmbGF0dGVuLCB3ZSBvbmx5IGhhdmUgdG8gbG9vayB1
cCBvbmUgbGV2ZWwuCisgICAgICAgIE5QT2JqZWN0TWFwOjppdGVyYXRvciBvd25lckVudHJ5ID0g
bGl2ZU9iamVjdE1hcC5maW5kKG93bmVyKTsKKyAgICAgICAgTlBPYmplY3QqIHBhcmVudCA9IDA7
CisgICAgICAgIGlmIChsaXZlT2JqZWN0TWFwLmVuZCgpICE9IG93bmVyRW50cnkpCisgICAgICAg
ICAgICBwYXJlbnQgPSBvd25lckVudHJ5LT5zZWNvbmQ7CisKKyAgICAgICAgaWYgKHBhcmVudCkK
KyAgICAgICAgICAgIG93bmVyID0gcGFyZW50OworICAgICAgICBBU1NFUlQocm9vdE9iamVjdE1h
cC5maW5kKG5wT2JqZWN0KSA9PSByb290T2JqZWN0TWFwLmVuZCgpKTsKKyAgICAgICAgaWYgKHJv
b3RPYmplY3RNYXAuZmluZChvd25lcikgIT0gcm9vdE9iamVjdE1hcC5lbmQoKSkKKyAgICAgICAg
ICAgIHJvb3RPYmplY3RNYXAuZ2V0KG93bmVyKS0+YWRkKG5wT2JqZWN0KTsKKyAgICB9CisKKyAg
ICBBU1NFUlQobGl2ZU9iamVjdE1hcC5maW5kKG5wT2JqZWN0KSA9PSBsaXZlT2JqZWN0TWFwLmVu
ZCgpKTsKKyAgICBsaXZlT2JqZWN0TWFwLnNldChucE9iamVjdCwgb3duZXIpOworfQorCit2b2lk
IF9OUE5fVW5yZWdpc3Rlck9iamVjdChOUE9iamVjdCogbnBPYmplY3QpIHsKKyAgICBBU1NFUlQo
bnBPYmplY3QpOworICAgIEFTU0VSVChsaXZlT2JqZWN0TWFwLmZpbmQobnBPYmplY3QpICE9IGxp
dmVPYmplY3RNYXAuZW5kKCkpOworCisgICAgTlBPYmplY3QqIG93bmVyID0gMDsKKyAgICBpZiAo
bGl2ZU9iamVjdE1hcC5maW5kKG5wT2JqZWN0KSAhPSBsaXZlT2JqZWN0TWFwLmVuZCgpKQorICAg
ICAgICBvd25lciA9IGxpdmVPYmplY3RNYXAuZmluZChucE9iamVjdCktPnNlY29uZDsKKworICAg
IGlmICghb3duZXIpIHsKKyAgICAgICAgLy8gVW5yZWdpc3RlcmluZyBhIG93bmVyIG9iamVjdDsg
YWxzbyB1bnJlZ2lzdGVyIGl0J3MgZGVzY2VuZGFudHMuCisgICAgICAgIEFTU0VSVChyb290T2Jq
ZWN0TWFwLmZpbmQobnBPYmplY3QpICE9IHJvb3RPYmplY3RNYXAuZW5kKCkpOworICAgICAgICBO
UE9iamVjdFNldCogc2V0ID0gcm9vdE9iamVjdE1hcC5nZXQobnBPYmplY3QpOworICAgICAgICB3
aGlsZSAoc2V0LT5zaXplKCkgPiAwKSB7CisjaWZuZGVmIE5ERUJVRworICAgICAgICAgICAgaW50
IHNpemUgPSBzZXQtPnNpemUoKTsKKyNlbmRpZgorICAgICAgICAgICAgTlBPYmplY3QqIHN1Yl9v
YmplY3QgPSAqKHNldC0+YmVnaW4oKSk7CisgICAgICAgICAgICAvLyBUaGUgc3ViLW9iamVjdCBz
aG91bGQgbm90IGJlIGEgb3duZXIhCisgICAgICAgICAgICBBU1NFUlQocm9vdE9iamVjdE1hcC5m
aW5kKHN1Yl9vYmplY3QpID09IHJvb3RPYmplY3RNYXAuZW5kKCkpOworCisgICAgICAgICAgICAv
LyBGaXJzdCwgdW5yZWdpc3RlciB0aGUgb2JqZWN0LgorICAgICAgICAgICAgc2V0LT5yZW1vdmUo
c3ViX29iamVjdCk7CisgICAgICAgICAgICBsaXZlT2JqZWN0TWFwLnJlbW92ZShzdWJfb2JqZWN0
KTsKKworICAgICAgICAgICAgLy8gUmVtb3ZlIHRoZSBKUyByZWZlcmVuY2VzIHRvIHRoZSBvYmpl
Y3QuCisgICAgICAgICAgICBmb3JnZXRWOE9iamVjdEZvck5QT2JqZWN0KHN1Yl9vYmplY3QpOwor
CisgICAgICAgICAgICBBU1NFUlQoc2V0LT5zaXplKCkgPCBzaXplKTsKKyAgICAgICAgfQorICAg
ICAgICBkZWxldGUgc2V0OworICAgICAgICByb290T2JqZWN0TWFwLnJlbW92ZShucE9iamVjdCk7
CisgICAgfSBlbHNlIHsKKyAgICAgICAgTlBSb290T2JqZWN0TWFwOjppdGVyYXRvciBvd25lckVu
dHJ5ID0gcm9vdE9iamVjdE1hcC5maW5kKG93bmVyKTsKKyAgICAgICAgaWYgKG93bmVyRW50cnkg
IT0gcm9vdE9iamVjdE1hcC5lbmQoKSkgeworICAgICAgICAgICAgTlBPYmplY3RTZXQqIGxpc3Qg
PSBvd25lckVudHJ5LT5zZWNvbmQ7CisgICAgICAgICAgICBBU1NFUlQobGlzdC0+ZmluZChucE9i
amVjdCkgIT0gbGlzdC0+ZW5kKCkpOworICAgICAgICAgICAgbGlzdC0+cmVtb3ZlKG5wT2JqZWN0
KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGxpdmVPYmplY3RNYXAucmVtb3ZlKG5wT2JqZWN0
KTsKKyAgICBmb3JnZXRWOE9iamVjdEZvck5QT2JqZWN0KG5wT2JqZWN0KTsKK30KKworYm9vbCBf
TlBOX0lzQWxpdmUoTlBPYmplY3QqIG5wT2JqZWN0KSB7CisgICAgcmV0dXJuIGxpdmVPYmplY3RN
YXAuZmluZChucE9iamVjdCkgIT0gbGl2ZU9iamVjdE1hcC5lbmQoKTsKK30KKworfSAgLy8gZXh0
ZXJuICJDIgpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9ucHJ1bnRpbWVfaW1wbC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvbnBydW50aW1lX2ltcGwuaAkocmV2aXNpb24g
MCkKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvbnBydW50aW1lX2ltcGwuaAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSw0MyBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwOCwgMjAwOSwgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICog
Y29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhl
ciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
IGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJ
R0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIG5wcnVudGltZV9pbXBsX2gKKyNkZWZpbmUg
bnBydW50aW1lX2ltcGxfaAorCisjaW5jbHVkZSAiYmluZGluZ3MvbnBydW50aW1lLmgiCisKKy8v
IFRoaXMgZmlsZSBleGlzdHMgdG8gc3VwcG9ydCBXZWJDb3JlLCB3aGljaCBleHBlY3RzIHRvIGJl
IGFibGUgdG8gY2FsbCB1cG9uCisvLyBwb3J0aW9ucyBvZiB0aGUgTlBSdW50aW1lIGltcGxlbWVu
dGF0aW9uLgorCisvLyBBIHNpbXBsZSBtYXBwaW5nIGZvciBub3cuICBGSVhNRSBXZSBzaG91bGQg
cHJvYmFibHkganVzdCBhZG9wdCB0aGUKKy8vIHVuZGVyc2NvcmUgcHJlZml4IGFzIG91ciBuYW1p
bmcgY29udmVudGlvbiB0b28uCisjZGVmaW5lIF9OUE5fUmVsZWFzZU9iamVjdCBOUE5fUmVsZWFz
ZU9iamVjdAorCisjZW5kaWYKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvbnBydW50aW1lX2lu
dGVybmFsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9ucHJ1bnRpbWVfaW50
ZXJuYWwuaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvbnBydW50aW1lX2lu
dGVybmFsLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDEgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDcgQ29sbGFib3JhLCBMdGQuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJh
bCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor
ICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKKyAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorICogU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKgorICoKKyAqIFRo
aXMgaXMgYSBpbnRlcm5hbCBpbmNsdWRlIGhlYWRlciBmb3IgbnBhcGkuaAorICoKKyAqIFNvbWUg
b2YgdGhlICNkZWZpbmVzIHdoaWNoIGFyZSBpbiBYMTEgaGVhZGVycyBjb25mbGljdCB3aXRoIHR5
cGUgYW5kIGVudW0KKyAqIG5hbWVzIGluIEphdmFTY3JpcHRDb3JlIGFuZCBXZWJDb3JlCisgKiBU
aGlzIGhlYWRlciAjdW5kZWZzIHRob3NlIGRlZmluZXMgdG8gZml4IHRoZSBjb25mbGljdHMKKyAq
IElmIHlvdSBuZWVkIHRvIGluY2x1ZGUgbnBhcGkuaCBvciBucHJ1bnRpbWUuaCB3aGVuIGJ1aWxk
aW5nIG9uIFgxMSwKKyAqIGluY2x1ZGUgdGhpcyBmaWxlIGluc3RlYWQgb2YgdGhlIGFjdHVhbCBu
cGFwaS5oIG9yIG5wcnVudGltZS5oCisgKi8KKworI2luY2x1ZGUgIm5wYXBpLmgiCisjaW5jbHVk
ZSAibnBydW50aW1lLmgiCisjaW5jbHVkZSAibnBmdW5jdGlvbnMuaCIKKworI2lmZGVmIFhQX1VO
SVgKKyAgICAjaW5jbHVkZSA8WDExL1hyZXNvdXJjZS5oPgorCisgICAgI3VuZGVmIE5vbmUKKyAg
ICAjdW5kZWYgQWJvdmUKKyAgICAjdW5kZWYgQmVsb3cKKyAgICAjdW5kZWYgQXV0bworICAgICN1
bmRlZiBDb21wbGV4CisgICAgI3VuZGVmIFN0YXR1cworI2VuZGlmCkluZGV4OiBXZWJDb3JlL2Jp
bmRpbmdzL3Y4L25wcnVudGltZV9wcml2LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5n
cy92OC9ucHJ1bnRpbWVfcHJpdi5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9iaW5kaW5ncy92
OC9ucHJ1bnRpbWVfcHJpdi5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDkxIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDAzLCAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgbnBydW50aW1lX3ByaXZfaAorI2RlZmluZSBucHJ1
bnRpbWVfcHJpdl9oCisKKyNpbmNsdWRlICJ0aGlyZF9wYXJ0eS9ucGFwaS9iaW5kaW5ncy9ucHJ1
bnRpbWUuaCIKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisv
KgorICAgIF9OUE5fSW5pdGlhbGl6ZVZhcmlhbnRXaXRoU3RyaW5nQ29weSgpIHdpbGwgY29weSBz
dHJpbmcgZGF0YS4gIFRoZSBzdHJpbmcgZGF0YQorICAgIHdpbGwgYmUgZGVhbGxvY2F0ZWQgYnkg
Y2FsbHMgdG8gTlBSZWxlYXNlVmFyaWFudFZhbHVlKCkuCisqLwordm9pZCBfTlBOX0luaXRpYWxp
emVWYXJpYW50V2l0aFN0cmluZ0NvcHkoTlBWYXJpYW50KiwgY29uc3QgTlBTdHJpbmcqKTsKK3Zv
aWQgX05QTl9EZWFsbG9jYXRlT2JqZWN0KE5QT2JqZWN0Kik7CisKKy8vIFRoZSBmb2xsb3dpbmcg
cm91dGluZXMgYWxsb3cgdGhlIGJyb3dzZXIgdG8gYWdncmVzc2l2ZWx5IGNsZWFudXAgTlBPYmpl
Y3RzCisvLyBvbiBhIHBlciBwbHVnaW4gYmFzaXMuICBBbGwgTlBPYmplY3RzIHVzZWQgdGhyb3Vn
aCB0aGUgTlBSdW50aW1lIEFQSSBzaG91bGQKKy8vIGJlICJyZWdpc3RlcmVkIiB3aGlsZSB0aGV5
IGFyZSBhbGl2ZS4gIEFmdGVyIGFuIG9iamVjdCBoYXMgYmVlbgorLy8gZGVsZXRlZCwgaXQgaXMg
cG9zc2libGUgZm9yIEphdmFzY3JpcHQgdG8gaGF2ZSBhIHJlZmVyZW5jZSB0byB0aGF0IG9iamVj
dAorLy8gd2hpY2ggaGFzIG5vdCB5ZXQgYmVlbiBnYXJiYWdlIGNvbGxlY3RlZC4gIEphdmFzY3Jp
cHQgYWNjZXNzIHRvIE5QT2JqZWN0cworLy8gd2lsbCByZWZlcmVuY2UgdGhpcyByZWdpc3RyeSB0
byBkZXRlcm1pbmUgaWYgdGhlIG9iamVjdCBpcyBhY2Nlc3NpYmxlIG9yCisvLyBub3QuCisKKy8v
IFdpbmRvd3MgaW50cm9kdWNlcyBhbiBhZGRpdGlvbmFsIGNvbXBsaWNhdGlvbiBmb3Igb2JqZWN0
cyBjcmVhdGVkIGJ5IHRoZQorLy8gcGx1Z2luLiAgUGx1Z2lucyBsb2FkIGluc2lkZSBvZiBhIERM
TC4gIEVhY2ggRExMIGhhcyBpdCdzIG93biBoZWFwLiAgSWYKKy8vIHRoZSBicm93c2VyIHVubG9h
ZHMgdGhlIHBsdWdpbiBETEwsIGFsbCBvYmplY3RzIGNyZWF0ZWQgd2l0aGluIHRoZSBETEwncwor
Ly8gaGVhcCBpbnN0YW50bHkgYmVjb21lIGludmFsaWQuICBOb3JtYWxseSwgd2hlbiBXZWJLaXQg
ZHJvcHMgdGhlIHJlZmVyZW5jZQorLy8gb24gdGhlIHRvcC1sZXZlbCBwbHVnaW4gb2JqZWN0LCBp
dCB0ZWxscyB0aGUgcGx1Z2luIG1hbmFnZXIgdGhhdCB0aGUKKy8vIHBsdWdpbiBjYW4gYmUgZGVz
dHJveWVkLCB3aGljaCBjYW4gdW5sb2FkIHRoZSBETEwuICBTbywgd2UgbXVzdCBlbGltaW5hdGUK
Ky8vIGFsbCBwb2ludGVycyB0byBhbnkgb2JqZWN0IGV2ZXIgY3JlYXRlZCBieSB0aGUgcGx1Z2lu
LgorCisvLyBXZSBnZW5lcmFsbHkgYXNzb2NpYXRlIE5QT2JqZWN0cyB3aXRoIGFuIG93bmVyLiAg
VGhlIG93bmVyIG9mIGFuIE5QT2JqZWN0CisvLyBpcyBhbiBOUE9iamVjdCB3aGljaCwgd2hlbiBk
ZXN0cm95ZWQsIGFsc28gZGVzdHJveXMgYWxsIG9iamVjdHMgaXQgb3ducy4KKy8vIEZvciBleGFt
cGxlLCBpZiBhbiBOUEFQSSBwbHVnaW4gY3JlYXRlcyAxMCBzdWItTlBPYmplY3RzLCBhbGwgMTEg
b2JqZWN0cworLy8gKHRoZSBOUEFQSSBwbHVnaW4gKyBpdHMgMTAgc3ViLW9iamVjdHMpIHNob3Vs
ZCBiZWNvbWUgaW5hY2Nlc3NpYmxlCisvLyBzaW11bHRhbmVvdXNseS4KKworLy8gVGhlIG93bmVy
c2hpcCBoaWVyYXJjaHkgaXMgZmxhdCwgYW5kIG5vdCBhIHRyZWUuICBJbWFnaW5lIHRoZSBmb2xs
b3dpbmcKKy8vIG9iamVjdCBjcmVhdGlvbjoKKy8vICAgICBQbHVnaW5PYmplY3QKKy8vICAgICAg
ICAgIHwKKy8vICAgICAgICAgICstLSBDcmVhdGVzIC0tLS0tPiBPYmplY3QxCisvLyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICstLSBDcmVhdGVzIC0tLS0tPiBPYmplY3QyCisvLworLy8gUGx1Z2luT2JqZWN0IHdpbGwg
YmUgdGhlICJvd25lciIgZm9yIGJvdGggT2JqZWN0MSBhbmQgT2JqZWN0Mi4KKworLy8gUmVnaXN0
ZXIgYW4gTlBPYmplY3Qgd2l0aCB0aGUgcnVudGltZS4gIElmIHRoZSBvd25lciBpcyBOVUxMLCB0
aGUKKy8vIG9iamVjdCBpcyB0cmVhdGVkIGFzIGFuIG93bmluZyBvYmplY3QuICBJZiBvd25lciBp
cyBub3QgTlVMTCwKKy8vIHRoaXMgb2JqZWN0IHdpbGwgYmUgcmVnaXN0ZXJlZCBhcyBvd25lZCBi
eSBvd25lcidzIHRvcC1sZXZlbCBvd25lci4KK3ZvaWQgX05QTl9SZWdpc3Rlck9iamVjdChOUE9i
amVjdCosIE5QT2JqZWN0KiBvd25lcik7CisKKy8vIFVucmVnaXN0ZXIgYW4gTlBPYmplY3Qgd2l0
aCB0aGUgcnVudGltZS4gIElmIG9iaiBpcyBhbiBvd25pbmcKKy8vIG9iamVjdCwgdGhpcyBjYWxs
IHdpbGwgYWxzbyB1bnJlZ2lzdGVyIGFsbCBvZiB0aGUgb3duZWQgb2JqZWN0cy4KK3ZvaWQgX05Q
Tl9VbnJlZ2lzdGVyT2JqZWN0KE5QT2JqZWN0Kik7CisKKy8vIENoZWNrIHRvIHNlZSBpZiBhbiBv
YmplY3QgaXMgcmVnaXN0ZXJlZCB3aXRoIHRoZSBydW50aW1lLgorLy8gUmV0dXJuIHRydWUgaWYg
cmVnaXN0ZXJlZCwgZmFsc2Ugb3RoZXJ3aXNlLgorYm9vbCBfTlBOX0lzQWxpdmUoTlBPYmplY3Qq
KTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9ICAvKiBlbmQgZXh0ZXJuICJDIiAqLworI2VuZGlm
CisKKyNlbmRpZiAvLyBucHJ1bnRpbWVfcHJpdl9oCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>32474</attachid>
            <date>2009-07-08 14:33:04 -0700</date>
            <delta_ts>2009-07-08 14:42:05 -0700</delta_ts>
            <desc>patch2</desc>
            <filename>patch2.txt</filename>
            <type>text/plain</type>
            <size>24672</size>
            <attacher name="Nate Chapin">japhet</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NTYzNykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjMgQEAKKzIwMDktMDctMDggIE5hdGUgQ2hhcGluICA8amFwaGV0QGNocm9taXVt
Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBV
cHN0cmVhbSBWOCBucHJ1bnRpbWUgYmluZGluZ3MuCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI3MDk0CisKKyAgICAgICAgKiBiaW5kaW5ncy92OC9u
cHJ1bnRpbWUuY3BwOiBVcHN0cmVhbWVkIGZyb20gc3JjLmNocm9taXVtLm9yZy4KKyAgICAgICAg
KFN0cmluZ0tleTo6b3BlcmF0b3I9PSk6CisgICAgICAgIChTdHJpbmdLZXk6OlN0cmluZ0tleUhh
c2g6Omhhc2gpOgorICAgICAgICAoU3RyaW5nS2V5OjpTdHJpbmdLZXlIYXNoOjplcXVhbCk6Cisg
ICAgICAgIChTdHJpbmdLZXlIYXNoVHJhaXRzOjpjb25zdHJ1Y3REZWxldGVkVmFsdWUpOgorICAg
ICAgICAoU3RyaW5nS2V5SGFzaFRyYWl0czo6aXNEZWxldGVkVmFsdWUpOgorICAgICAgICAoZ2V0
U3RyaW5nSWRlbnRpZmllck1hcCk6CisgICAgICAgIChnZXRJbnRJZGVudGlmaWVyTWFwKToKKyAg
ICAgICAgKiBiaW5kaW5ncy92OC9ucHJ1bnRpbWVfaW1wbC5oOiBVcHN0cmVhbWVkIGZyb20gc3Jj
LmNocm9taXVtLm9yZy4KKyAgICAgICAgKiBiaW5kaW5ncy92OC9ucHJ1bnRpbWVfaW50ZXJuYWwu
aDogVXBzdHJlYW1lZCBmcm9tIHNyYy5jaHJvbWl1bS5vcmcuCisgICAgICAgICogYmluZGluZ3Mv
djgvbnBydW50aW1lX3ByaXYuaDogVXBzdHJlYW1lZCBmcm9tIHNyYy5jaHJvbWl1bS5vcmcuCisK
IDIwMDktMDctMDggIE1hcmMtQW50b2luZSBSdWVsICA8bWFydWVsQGNocm9taXVtLm9yZz4KIAog
ICAgICAgICBSZXZpZXdlZCBieSBEaW1pdHJpIEdsYXprb3YuCkluZGV4OiBXZWJDb3JlL2JpbmRp
bmdzL3Y4L25wcnVudGltZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9u
cHJ1bnRpbWUuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9ucHJ1bnRp
bWUuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ1MCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAwNCwgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAwNy0yMDA5IEdvb2dsZSwgSW5jLiAgQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
Q09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJOUFY4T2JqZWN0
LmgiCisjaW5jbHVkZSAibnBydW50aW1lX3ByaXYuaCIKKyNpbmNsdWRlICJWOE5QT2JqZWN0Lmgi
CisKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+Cisj
aW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKworLy8gRklYTUU6IENvbnNpZGVyIHJlbW92aW5n
IGxvY2tzIGlmIHdlJ3JlIHNpbmdsZXRocmVhZGVkIGFscmVhZHkuCisvLyBUaGUgc3RhdGljIGlu
aXRpYWxpemVyIGhlcmUgc2hvdWxkIHdvcmsgb2theSwgYnV0IHdlIHdhbnQgdG8gYXZvaWQKKy8v
IHN0YXRpYyBpbml0aWFsaXphdGlvbiBpbiBnZW5lcmFsLgorLy8KKy8vIENvbW1lbnRpbmcgb3V0
IHRoZSBsb2NrcyB0byBhdm9pZCBkZXBlbmRlbmNpZXMgb24gY2hyb21lIGZvciBub3cuCisvLyBO
ZWVkIGEgcGxhdGZvcm0gYWJzdHJhY3Rpb24gd2hpY2ggd2UgY2FuIHVzZS4KKy8vIHN0YXRpYyBM
b2NrIFN0cmluZ0lkZW50aWZpZXJNYXBMb2NrOworCituYW1lc3BhY2UgeworCisvLyBXZSB1c2Ug
U3RyaW5nS2V5IGhlcmUgYXMgdGhlIGtleS10eXBlIHRvIGF2b2lkIGEgc3RyaW5nIGNvcHkgdG8K
Ky8vIGNvbnN0cnVjdCB0aGUgbWFwIGtleSBhbmQgZm9yIGZhc3RlciBjb21wYXJpc29ucyB0aGFu
IHN0cmNtcC4KK2NsYXNzIFN0cmluZ0tleSB7CitwdWJsaWM6CisgICAgZXhwbGljaXQgU3RyaW5n
S2V5KGNvbnN0IGNoYXIqIHN0cikgOiBtX3N0cmluZyhzdHIpLCBtX2xlbmd0aChzdHJsZW4oc3Ry
KSkgeyB9CisgICAgU3RyaW5nS2V5KCkgOiBtX3N0cmluZygwKSwgbV9sZW5ndGgoMCkgeyB9Cisg
ICAgZXhwbGljaXQgU3RyaW5nS2V5KFdURjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlVHlwZSkgOiBt
X3N0cmluZyhoYXNoVGFibGVEZWxldGVkVmFsdWUoKSksIG1fbGVuZ3RoKDApIHsgfQorCisgICAg
U3RyaW5nS2V5JiBvcGVyYXRvcj0oY29uc3QgU3RyaW5nS2V5JiBvdGhlcikKKyAgICB7CisgICAg
ICAgIHRoaXMtPm1fc3RyaW5nID0gb3RoZXIubV9zdHJpbmc7CisgICAgICAgIHRoaXMtPm1fbGVu
Z3RoID0gb3RoZXIubV9sZW5ndGg7CisgICAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisKKyAg
ICBib29sIGlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJl
dHVybiBtX3N0cmluZyA9PSBoYXNoVGFibGVEZWxldGVkVmFsdWUoKTsKKyAgICB9CisKKyAgICBj
b25zdCBjaGFyKiBtX3N0cmluZzsKKyAgICBzaXplX3QgbV9sZW5ndGg7CisKK3ByaXZhdGU6Cisg
ICAgY29uc3QgY2hhciogaGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkgY29uc3QKKyAgICB7CisgICAg
ICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPigtMSk7CisgICAgfQorfTsK
KworaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBTdHJpbmdLZXkmIHgsIGNvbnN0IFN0cmlu
Z0tleSYgeSkKK3sKKyAgICBpZiAoeC5tX2xlbmd0aCAhPSB5Lm1fbGVuZ3RoKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgaWYgKHgubV9zdHJpbmcgPT0geS5tX3N0cmluZykKKyAgICAgICAg
cmV0dXJuIHRydWU7CisKKyAgICBBU1NFUlQoIXguaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKSAm
JiAheS5pc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpKTsKKyAgICByZXR1cm4gIW1lbWNtcCh4Lm1f
c3RyaW5nLCB5Lm1fc3RyaW5nLCB5Lm1fbGVuZ3RoKTsKK30KKworLy8gSW1wbGVtZW50IFdURjo6
RGVmYXVsdEhhc2g8U3RyaW5nS2V5Pjo6SGFzaCBpbnRlcmZhY2UuCitzdHJ1Y3QgU3RyaW5nS2V5
SGFzaCB7CisgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgU3RyaW5nS2V5JiBrZXkpCisg
ICAgeworICAgICAgICAvLyBDb21wdXRlIHN0cmluZyBoYXNoLgorICAgICAgICB1bnNpZ25lZCBo
YXNoID0gMDsKKyAgICAgICAgc2l6ZV90IGxlbiA9IGtleS5tX2xlbmd0aDsKKyAgICAgICAgY29u
c3QgY2hhciogc3RyID0ga2V5Lm1fc3RyaW5nOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IGxlbjsgaSsrKSB7CisgICAgICAgICAgICBjaGFyIGMgPSBzdHJbaV07CisgICAgICAgICAg
ICBoYXNoICs9IGM7CisgICAgICAgICAgICBoYXNoICs9IChoYXNoIDw8IDEwKTsKKyAgICAgICAg
ICAgIGhhc2ggXj0gKGhhc2ggPj4gNik7CisgICAgICAgIH0KKyAgICAgICAgaGFzaCArPSAoaGFz
aCA8PCAzKTsKKyAgICAgICAgaGFzaCBePSAoaGFzaCA+PiAxMSk7CisgICAgICAgIGhhc2ggKz0g
KGhhc2ggPDwgMTUpOworICAgICAgICBpZiAoaGFzaCA9PSAwKQorICAgICAgICAgICAgaGFzaCA9
IDI3OworICAgICAgICByZXR1cm4gaGFzaDsKKyAgICB9CisKKyAgICBzdGF0aWMgYm9vbCBlcXVh
bChjb25zdCBTdHJpbmdLZXkmIHgsIGNvbnN0IFN0cmluZ0tleSYgeSkKKyAgICB7CisgICAgICAg
IHJldHVybiB4ID09IHk7CisgICAgfQorCisgICAgc3RhdGljIGNvbnN0IGJvb2wgc2FmZVRvQ29t
cGFyZVRvRW1wdHlPckRlbGV0ZWQgPSB0cnVlOworfTsKKworfSAgLy8gbmFtZXNwYWNlCisKKy8v
IEltcGxlbWVudCBIYXNoVHJhaXRzPFN0cmluZ0tleT4KK3N0cnVjdCBTdHJpbmdLZXlIYXNoVHJh
aXRzIDogV1RGOjpHZW5lcmljSGFzaFRyYWl0czxTdHJpbmdLZXk+IHsKKyAgICBzdGF0aWMgdm9p
ZCBjb25zdHJ1Y3REZWxldGVkVmFsdWUoU3RyaW5nS2V5JiBzbG90KQorICAgIHsKKyAgICAgICAg
bmV3ICgmc2xvdCkgU3RyaW5nS2V5KFdURjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlKTsKKyAgICB9
CisKKyAgICBzdGF0aWMgYm9vbCBpc0RlbGV0ZWRWYWx1ZShjb25zdCBTdHJpbmdLZXkmIHZhbHVl
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHZhbHVlLmlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCk7
CisgICAgfQorfTsKKwordHlwZWRlZiBXVEY6Okhhc2hNYXA8U3RyaW5nS2V5LCBQcml2YXRlSWRl
bnRpZmllciosIFN0cmluZ0tleUhhc2gsIFN0cmluZ0tleUhhc2hUcmFpdHM+IFN0cmluZ0lkZW50
aWZpZXJNYXA7CisKK3N0YXRpYyBTdHJpbmdJZGVudGlmaWVyTWFwKiBnZXRTdHJpbmdJZGVudGlm
aWVyTWFwKCkKK3sKKyAgICBzdGF0aWMgU3RyaW5nSWRlbnRpZmllck1hcCogc3RyaW5nSWRlbnRp
Zmllck1hcCA9IDA7CisgICAgaWYgKCFzdHJpbmdJZGVudGlmaWVyTWFwKQorICAgICAgICBzdHJp
bmdJZGVudGlmaWVyTWFwID0gbmV3IFN0cmluZ0lkZW50aWZpZXJNYXAoKTsKKyAgICByZXR1cm4g
c3RyaW5nSWRlbnRpZmllck1hcDsKK30KKworLy8gRklYTUU6IENvbnNpZGVyIHJlbW92aW5nIGxv
Y2tzIGlmIHdlJ3JlIHNpbmdsZXRocmVhZGVkIGFscmVhZHkuCisvLyBzdGF0aWMgTG9jayBJbnRJ
ZGVudGlmaWVyTWFwTG9jazsKKwordHlwZWRlZiBXVEY6Okhhc2hNYXA8aW50LCBQcml2YXRlSWRl
bnRpZmllcio+IEludElkZW50aWZpZXJNYXA7CisKK3N0YXRpYyBJbnRJZGVudGlmaWVyTWFwKiBn
ZXRJbnRJZGVudGlmaWVyTWFwKCkKK3sKKyAgICBzdGF0aWMgSW50SWRlbnRpZmllck1hcCogaW50
SWRlbnRpZmllck1hcCA9IDA7CisgICAgaWYgKCFpbnRJZGVudGlmaWVyTWFwKQorICAgICAgICBp
bnRJZGVudGlmaWVyTWFwID0gbmV3IEludElkZW50aWZpZXJNYXAoKTsKKyAgICByZXR1cm4gaW50
SWRlbnRpZmllck1hcDsKK30KKworZXh0ZXJuICJDIiB7CisKK05QSWRlbnRpZmllciBOUE5fR2V0
U3RyaW5nSWRlbnRpZmllcihjb25zdCBOUFVURjgqIG5hbWUpCit7CisgICAgQVNTRVJUKG5hbWUp
OworCisgICAgaWYgKG5hbWUpIHsKKyAgICAgICAgLy8gQXV0b0xvY2sgc2FmZUxvY2soU3RyaW5n
SWRlbnRpZmllck1hcExvY2spOworCisgICAgICAgIFN0cmluZ0tleSBrZXkobmFtZSk7CisgICAg
ICAgIFN0cmluZ0lkZW50aWZpZXJNYXAqIGlkZW50TWFwID0gZ2V0U3RyaW5nSWRlbnRpZmllck1h
cCgpOworICAgICAgICBTdHJpbmdJZGVudGlmaWVyTWFwOjppdGVyYXRvciBpdGVyID0gaWRlbnRN
YXAtPmZpbmQoa2V5KTsKKyAgICAgICAgaWYgKGl0ZXIgIT0gaWRlbnRNYXAtPmVuZCgpKQorICAg
ICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PE5QSWRlbnRpZmllcj4oaXRlci0+c2Vjb25kKTsK
KworICAgICAgICBzaXplX3QgbmFtZUxlbiA9IGtleS5tX2xlbmd0aDsKKworICAgICAgICAvLyBX
ZSBuZXZlciByZWxlYXNlIGlkZW50aWZpZXJzLCBzbyB0aGlzIGRpY3Rpb25hcnkgd2lsbCBncm93
LgorICAgICAgICBQcml2YXRlSWRlbnRpZmllciogaWRlbnRpZmllciA9IHN0YXRpY19jYXN0PFBy
aXZhdGVJZGVudGlmaWVyKj4obWFsbG9jKHNpemVvZihQcml2YXRlSWRlbnRpZmllcikgKyBuYW1l
TGVuICsgMSkpOworICAgICAgICBjaGFyKiBuYW1lU3RvcmFnZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8
Y2hhcio+KGlkZW50aWZpZXIgKyAxKTsKKyAgICAgICAgbWVtY3B5KG5hbWVTdG9yYWdlLCBuYW1l
LCBuYW1lTGVuICsgMSk7CisgICAgICAgIGlkZW50aWZpZXItPmlzU3RyaW5nID0gdHJ1ZTsKKyAg
ICAgICAgaWRlbnRpZmllci0+dmFsdWUuc3RyaW5nID0gcmVpbnRlcnByZXRfY2FzdDxOUFVURjgq
PihuYW1lU3RvcmFnZSk7CisgICAgICAgIGtleS5tX3N0cmluZyA9IG5hbWVTdG9yYWdlOworICAg
ICAgICBpZGVudE1hcC0+c2V0KGtleSwgaWRlbnRpZmllcik7CisgICAgICAgIHJldHVybiAoTlBJ
ZGVudGlmaWVyKWlkZW50aWZpZXI7CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQg
TlBOX0dldFN0cmluZ0lkZW50aWZpZXJzKGNvbnN0IE5QVVRGOCoqIG5hbWVzLCBpbnQzMl90IG5h
bWVDb3VudCwgTlBJZGVudGlmaWVyKiBpZGVudGlmaWVycykKK3sKKyAgICBBU1NFUlQobmFtZXMp
OworICAgIEFTU0VSVChpZGVudGlmaWVycyk7CisKKyAgICBpZiAobmFtZXMgJiYgaWRlbnRpZmll
cnMpIHsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuYW1lQ291bnQ7IGkrKykKKyAgICAg
ICAgICAgIGlkZW50aWZpZXJzW2ldID0gTlBOX0dldFN0cmluZ0lkZW50aWZpZXIobmFtZXNbaV0p
OworICAgIH0KK30KKworTlBJZGVudGlmaWVyIE5QTl9HZXRJbnRJZGVudGlmaWVyKGludDMyX3Qg
aW50SWQpCit7CisgICAgLy8gQXV0b0xvY2sgc2FmZUxvY2soSW50SWRlbnRpZmllck1hcExvY2sp
OworICAgIC8vIFNwZWNpYWwgY2FzZSBmb3IgLTEgYW5kIDAsIGJvdGggY2Fubm90IGJlIHVzZWQg
YXMga2V5IGluIEhhc2hNYXAuCisgICAgaWYgKCFpbnRJZCB8fCBpbnRJZCA9PSAtMSkgeworICAg
ICAgICBzdGF0aWMgUHJpdmF0ZUlkZW50aWZpZXIqIG1pbnVzT25lT3JaZXJvSWRzWzJdOworICAg
ICAgICBQcml2YXRlSWRlbnRpZmllciogaWQgPSBtaW51c09uZU9yWmVyb0lkc1tpbnRJZCArIDFd
OworICAgICAgICBpZiAoIWlkKSB7CisgICAgICAgICAgICBpZCA9IHJlaW50ZXJwcmV0X2Nhc3Q8
UHJpdmF0ZUlkZW50aWZpZXIqPihtYWxsb2Moc2l6ZW9mKFByaXZhdGVJZGVudGlmaWVyKSkpOwor
ICAgICAgICAgICAgaWQtPmlzU3RyaW5nID0gZmFsc2U7CisgICAgICAgICAgICBpZC0+dmFsdWUu
bnVtYmVyID0gaW50SWQ7CisgICAgICAgICAgICBtaW51c09uZU9yWmVyb0lkc1tpbnRJZCArIDFd
ID0gaWQ7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIChOUElkZW50aWZpZXIpIGlkOworICAg
IH0KKworICAgIEludElkZW50aWZpZXJNYXAqIGlkZW50TWFwID0gZ2V0SW50SWRlbnRpZmllck1h
cCgpOworICAgIEludElkZW50aWZpZXJNYXA6Oml0ZXJhdG9yIGl0ZXIgPSBpZGVudE1hcC0+Zmlu
ZChpbnRJZCk7CisgICAgaWYgKGl0ZXIgIT0gaWRlbnRNYXAtPmVuZCgpKQorICAgICAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8TlBJZGVudGlmaWVyPihpdGVyLT5zZWNvbmQpOworCisgICAgLy8gV2Ug
bmV2ZXIgcmVsZWFzZSBpZGVudGlmaWVycywgc28gdGhpcyBkaWN0aW9uYXJ5IHdpbGwgZ3Jvdy4K
KyAgICBQcml2YXRlSWRlbnRpZmllciogaWRlbnRpZmllciA9IHJlaW50ZXJwcmV0X2Nhc3Q8UHJp
dmF0ZUlkZW50aWZpZXIqPihtYWxsb2Moc2l6ZW9mKFByaXZhdGVJZGVudGlmaWVyKSkpOworICAg
IGlkZW50aWZpZXItPmlzU3RyaW5nID0gZmFsc2U7CisgICAgaWRlbnRpZmllci0+dmFsdWUubnVt
YmVyID0gaW50SWQ7CisgICAgaWRlbnRNYXAtPnNldChpbnRJZCwgaWRlbnRpZmllcik7CisgICAg
cmV0dXJuIChOUElkZW50aWZpZXIpaWRlbnRpZmllcjsKK30KKworYm9vbCBOUE5fSWRlbnRpZmll
cklzU3RyaW5nKE5QSWRlbnRpZmllciBpZGVudGlmaWVyKQoreworICAgIFByaXZhdGVJZGVudGlm
aWVyKiBwcml2YXRlSWRlbnRpZmllciA9IHJlaW50ZXJwcmV0X2Nhc3Q8UHJpdmF0ZUlkZW50aWZp
ZXIqPihpZGVudGlmaWVyKTsKKyAgICByZXR1cm4gcHJpdmF0ZUlkZW50aWZpZXItPmlzU3RyaW5n
OworfQorCitOUFVURjggKk5QTl9VVEY4RnJvbUlkZW50aWZpZXIoTlBJZGVudGlmaWVyIGlkZW50
aWZpZXIpCit7CisgICAgUHJpdmF0ZUlkZW50aWZpZXIqIHByaXZhdGVJZGVudGlmaWVyID0gcmVp
bnRlcnByZXRfY2FzdDxQcml2YXRlSWRlbnRpZmllcio+KGlkZW50aWZpZXIpOworICAgIGlmICgh
cHJpdmF0ZUlkZW50aWZpZXItPmlzU3RyaW5nIHx8ICFwcml2YXRlSWRlbnRpZmllci0+dmFsdWUu
c3RyaW5nKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiAoTlBVVEY4Kikgc3RyZHVw
KHByaXZhdGVJZGVudGlmaWVyLT52YWx1ZS5zdHJpbmcpOworfQorCitpbnQzMl90IE5QTl9JbnRG
cm9tSWRlbnRpZmllcihOUElkZW50aWZpZXIgaWRlbnRpZmllcikKK3sKKyAgICBQcml2YXRlSWRl
bnRpZmllciogcHJpdmF0ZUlkZW50aWZpZXIgPSByZWludGVycHJldF9jYXN0PFByaXZhdGVJZGVu
dGlmaWVyKj4oaWRlbnRpZmllcik7CisgICAgaWYgKHByaXZhdGVJZGVudGlmaWVyLT5pc1N0cmlu
ZykKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIHByaXZhdGVJZGVudGlmaWVyLT52YWx1
ZS5udW1iZXI7Cit9CisKK3ZvaWQgTlBOX1JlbGVhc2VWYXJpYW50VmFsdWUoTlBWYXJpYW50KiB2
YXJpYW50KQoreworICAgIEFTU0VSVCh2YXJpYW50KTsKKworICAgIGlmICh2YXJpYW50LT50eXBl
ID09IE5QVmFyaWFudFR5cGVfT2JqZWN0KSB7CisgICAgICAgIE5QTl9SZWxlYXNlT2JqZWN0KHZh
cmlhbnQtPnZhbHVlLm9iamVjdFZhbHVlKTsKKyAgICAgICAgdmFyaWFudC0+dmFsdWUub2JqZWN0
VmFsdWUgPSAwOworICAgIH0gZWxzZSBpZiAodmFyaWFudC0+dHlwZSA9PSBOUFZhcmlhbnRUeXBl
X1N0cmluZykgeworICAgICAgICBmcmVlKCh2b2lkKil2YXJpYW50LT52YWx1ZS5zdHJpbmdWYWx1
ZS5VVEY4Q2hhcmFjdGVycyk7CisgICAgICAgIHZhcmlhbnQtPnZhbHVlLnN0cmluZ1ZhbHVlLlVU
RjhDaGFyYWN0ZXJzID0gMDsKKyAgICAgICAgdmFyaWFudC0+dmFsdWUuc3RyaW5nVmFsdWUuVVRG
OExlbmd0aCA9IDA7CisgICAgfQorCisgICAgdmFyaWFudC0+dHlwZSA9IE5QVmFyaWFudFR5cGVf
Vm9pZDsKK30KKworTlBPYmplY3QgKk5QTl9DcmVhdGVPYmplY3QoTlBQIG5wcCwgTlBDbGFzcyog
bnBDbGFzcykKK3sKKyAgICBBU1NFUlQobnBDbGFzcyk7CisKKyAgICBpZiAobnBDbGFzcykgewor
ICAgICAgICBOUE9iamVjdCogbnBPYmplY3Q7CisgICAgICAgIGlmIChucENsYXNzLT5hbGxvY2F0
ZSAhPSAwKQorICAgICAgICAgICAgbnBPYmplY3QgPSBucENsYXNzLT5hbGxvY2F0ZShucHAsIG5w
Q2xhc3MpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBucE9iamVjdCA9IHJlaW50ZXJwcmV0
X2Nhc3Q8TlBPYmplY3QqPihtYWxsb2Moc2l6ZW9mKE5QT2JqZWN0KSkpOworCisgICAgICAgIG5w
T2JqZWN0LT5fY2xhc3MgPSBucENsYXNzOworICAgICAgICBucE9iamVjdC0+cmVmZXJlbmNlQ291
bnQgPSAxOworICAgICAgICByZXR1cm4gbnBPYmplY3Q7CisgICAgfQorCisgICAgcmV0dXJuIDA7
Cit9CisKK05QT2JqZWN0KiBOUE5fUmV0YWluT2JqZWN0KE5QT2JqZWN0KiBucE9iamVjdCkKK3sK
KyAgICBBU1NFUlQobnBPYmplY3QpOworICAgIEFTU0VSVChucE9iamVjdC0+cmVmZXJlbmNlQ291
bnQgPiAwKTsKKworICAgIGlmIChucE9iamVjdCkKKyAgICAgICAgbnBPYmplY3QtPnJlZmVyZW5j
ZUNvdW50Kys7CisKKyAgICByZXR1cm4gbnBPYmplY3Q7Cit9CisKKy8vIF9OUE5fRGVhbGxvY2F0
ZU9iamVjdCBhY3R1YWxseSBkZWxldGVzIHRoZSBvYmplY3QuICBUZWNobmljYWxseSwKKy8vIGNh
bGxlcnMgc2hvdWxkIHVzZSBOUE5fUmVsZWFzZU9iamVjdC4gIFdlYmtpdCBleHBvc2VzIHRoaXMg
ZnVuY3Rpb24KKy8vIHRvIGtpbGwgb2JqZWN0cyB3aGljaCBwbHVnaW5zIG1heSBub3QgaGF2ZSBw
cm9wZXJseSByZWxlYXNlZC4KK3ZvaWQgX05QTl9EZWFsbG9jYXRlT2JqZWN0KE5QT2JqZWN0KiBu
cE9iamVjdCkKK3sKKyAgICBBU1NFUlQobnBPYmplY3QpOworICAgIEFTU0VSVChucE9iamVjdC0+
cmVmZXJlbmNlQ291bnQgPj0gMCk7CisKKyAgICBpZiAobnBPYmplY3QpIHsKKyAgICAgICAgLy8g
TlBPYmplY3RzIHRoYXQgcmVtYWluIGluIHB1cmUgQysrIG1heSBuZXZlciBoYXZlIHdyYXBwZXJz
LgorICAgICAgICAvLyBIZW5jZSwgaWYgaXQncyBub3QgYWxyZWFkeSBhbGl2ZSwgZG9uJ3QgdW5y
ZWdpc3RlciBpdC4KKyAgICAgICAgLy8gSWYgaXQgaXMgYWxpdmUsIHVucmVnaXN0ZXIgaXQgYXMg
dGhlICpsYXN0KiB0aGluZyB3ZSBkbworICAgICAgICAvLyBzbyB0aGF0IGl0IGNhbiBkbyBhcyBt
dWNoIGNsZWFudXAgYXMgcG9zc2libGUgb24gaXRzIG93bi4KKyAgICAgICAgaWYgKF9OUE5fSXNB
bGl2ZShucE9iamVjdCkpCisgICAgICAgICAgICBfTlBOX1VucmVnaXN0ZXJPYmplY3QobnBPYmpl
Y3QpOworCisgICAgICAgIG5wT2JqZWN0LT5yZWZlcmVuY2VDb3VudCA9IC0xOworICAgICAgICBp
ZiAobnBPYmplY3QtPl9jbGFzcy0+ZGVhbGxvY2F0ZSkKKyAgICAgICAgICAgIG5wT2JqZWN0LT5f
Y2xhc3MtPmRlYWxsb2NhdGUobnBPYmplY3QpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBm
cmVlKG5wT2JqZWN0KTsKKyAgICB9Cit9CisKK3ZvaWQgTlBOX1JlbGVhc2VPYmplY3QoTlBPYmpl
Y3QqIG5wT2JqZWN0KQoreworICAgIEFTU0VSVChucE9iamVjdCk7CisgICAgQVNTRVJUKG5wT2Jq
ZWN0LT5yZWZlcmVuY2VDb3VudCA+PSAxKTsKKworICAgIGlmIChucE9iamVjdCAmJiBucE9iamVj
dC0+cmVmZXJlbmNlQ291bnQgPj0gMSkgeworICAgICAgICBpZiAoIS0tbnBPYmplY3QtPnJlZmVy
ZW5jZUNvdW50KQorICAgICAgICAgICAgX05QTl9EZWFsbG9jYXRlT2JqZWN0KG5wT2JqZWN0KTsK
KyAgICB9Cit9CisKK3ZvaWQgX05QTl9Jbml0aWFsaXplVmFyaWFudFdpdGhTdHJpbmdDb3B5KE5Q
VmFyaWFudCogdmFyaWFudCwgY29uc3QgTlBTdHJpbmcqIHZhbHVlKQoreworICAgIHZhcmlhbnQt
PnR5cGUgPSBOUFZhcmlhbnRUeXBlX1N0cmluZzsKKyAgICB2YXJpYW50LT52YWx1ZS5zdHJpbmdW
YWx1ZS5VVEY4TGVuZ3RoID0gdmFsdWUtPlVURjhMZW5ndGg7CisgICAgdmFyaWFudC0+dmFsdWUu
c3RyaW5nVmFsdWUuVVRGOENoYXJhY3RlcnMgPSByZWludGVycHJldF9jYXN0PE5QVVRGOCo+KG1h
bGxvYyhzaXplb2YoTlBVVEY4KSAqIHZhbHVlLT5VVEY4TGVuZ3RoKSk7CisgICAgbWVtY3B5KCh2
b2lkKil2YXJpYW50LT52YWx1ZS5zdHJpbmdWYWx1ZS5VVEY4Q2hhcmFjdGVycywgdmFsdWUtPlVU
RjhDaGFyYWN0ZXJzLCBzaXplb2YoTlBVVEY4KSAqIHZhbHVlLT5VVEY4TGVuZ3RoKTsKK30KKwor
CisvLyBOUE5fUmVnaXN0cnkKKy8vCisvLyBUaGUgcmVnaXN0cnkgaXMgZGVzaWduZWQgZm9yIHF1
aWNrIGxvb2t1cCBvZiBOUE9iamVjdHMuCisvLyBKUyBuZWVkcyB0byBiZSBhYmxlIHRvIHF1aWNr
bHkgbG9va3VwIGEgZ2l2ZW4gTlBPYmplY3QgdG8gZGV0ZXJtaW5lCisvLyBpZiBpdCBpcyBhbGl2
ZSBvciBub3QuCisvLyBUaGUgYnJvd3NlciBuZWVkcyB0byBiZSBhYmxlIHRvIHF1aWNrbHkgbG9v
a3VwIGFsbCBOUE9iamVjdHMgd2hpY2ggYXJlCisvLyAib3duZWQiIGJ5IGFuIG9iamVjdC4KKy8v
CisvLyBUaGUgbGl2ZU9iamVjdE1hcCBpcyBhIGhhc2ggdGFibGUgb2YgYWxsIGxpdmUgb2JqZWN0
cyB0byB0aGVpciBvd25lcgorLy8gb2JqZWN0cy4gIFByZXNlbmNlIGluIHRoaXMgdGFibGUgaXMg
dXNlZCBwcmltYXJpbHkgdG8gZGV0ZXJtaW5lIGlmCisvLyBvYmplY3RzIGFyZSBsaXZlIG9yIG5v
dC4KKy8vCisvLyBUaGUgcm9vdE9iamVjdE1hcCBpcyBhIGhhc2ggdGFibGUgb2Ygcm9vdCBvYmpl
Y3RzIHRvIGEgc2V0IG9mCisvLyBvYmplY3RzIHRoYXQgc2hvdWxkIGJlIGRlYWN0aXZhdGVkIGlu
IHN5bmMgd2l0aCB0aGUgcm9vdC4gIEEKKy8vIHJvb3QgaXMgZGVmaW5lZCBhcyBhIHRvcC1sZXZl
bCBvd25lciBvYmplY3QuICBUaGlzIGlzIHVzZWQgb24KKy8vIEZyYW1lIHRlYXJkb3duIHRvIGRl
YWN0aXZhdGUgYWxsIG9iamVjdHMgYXNzb2NpYXRlZAorLy8gd2l0aCBhIHBhcnRpY3VsYXIgcGx1
Z2luLgorCit0eXBlZGVmIFdURjo6SGFzaFNldDxOUE9iamVjdCo+IE5QT2JqZWN0U2V0OwordHlw
ZWRlZiBXVEY6Okhhc2hNYXA8TlBPYmplY3QqLCBOUE9iamVjdCo+IE5QT2JqZWN0TWFwOwordHlw
ZWRlZiBXVEY6Okhhc2hNYXA8TlBPYmplY3QqLCBOUE9iamVjdFNldCo+IE5QUm9vdE9iamVjdE1h
cDsKKworLy8gQSBtYXAgb2YgbGl2ZSBOUE9iamVjdHMgd2l0aCBwb2ludGVycyB0byB0aGVpciBS
b290cy4KK05QT2JqZWN0TWFwIGxpdmVPYmplY3RNYXA7CisKKy8vIEEgbWFwIG9mIHRoZSByb290
IG9iamVjdHMgYW5kIHRoZSBsaXN0IG9mIE5QT2JqZWN0cworLy8gYXNzb2NpYXRlZCB3aXRoIHRo
YXQgb2JqZWN0LgorTlBSb290T2JqZWN0TWFwIHJvb3RPYmplY3RNYXA7CisKK3ZvaWQgX05QTl9S
ZWdpc3Rlck9iamVjdChOUE9iamVjdCogbnBPYmplY3QsIE5QT2JqZWN0KiBvd25lcikKK3sKKyAg
ICBBU1NFUlQobnBPYmplY3QpOworCisgICAgLy8gQ2hlY2sgaWYgYWxyZWFkeSByZWdpc3RlcmVk
LgorICAgIGlmIChsaXZlT2JqZWN0TWFwLmZpbmQobnBPYmplY3QpICE9IGxpdmVPYmplY3RNYXAu
ZW5kKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghb3duZXIpIHsKKyAgICAgICAgLy8g
UmVnaXN0ZXJpbmcgYSBuZXcgb3duZXIgb2JqZWN0LgorICAgICAgICBBU1NFUlQocm9vdE9iamVj
dE1hcC5maW5kKG5wT2JqZWN0KSA9PSByb290T2JqZWN0TWFwLmVuZCgpKTsKKyAgICAgICAgcm9v
dE9iamVjdE1hcC5zZXQobnBPYmplY3QsIG5ldyBOUE9iamVjdFNldCgpKTsKKyAgICB9IGVsc2Ug
eworICAgICAgICAvLyBBbHdheXMgYXNzb2NpYXRlIHRoaXMgb2JqZWN0IHdpdGggaXQncyB0b3At
bW9zdCBwYXJlbnQuCisgICAgICAgIC8vIFNpbmNlIHdlIGFsd2F5cyBmbGF0dGVuLCB3ZSBvbmx5
IGhhdmUgdG8gbG9vayB1cCBvbmUgbGV2ZWwuCisgICAgICAgIE5QT2JqZWN0TWFwOjppdGVyYXRv
ciBvd25lckVudHJ5ID0gbGl2ZU9iamVjdE1hcC5maW5kKG93bmVyKTsKKyAgICAgICAgTlBPYmpl
Y3QqIHBhcmVudCA9IDA7CisgICAgICAgIGlmIChsaXZlT2JqZWN0TWFwLmVuZCgpICE9IG93bmVy
RW50cnkpCisgICAgICAgICAgICBwYXJlbnQgPSBvd25lckVudHJ5LT5zZWNvbmQ7CisKKyAgICAg
ICAgaWYgKHBhcmVudCkKKyAgICAgICAgICAgIG93bmVyID0gcGFyZW50OworICAgICAgICBBU1NF
UlQocm9vdE9iamVjdE1hcC5maW5kKG5wT2JqZWN0KSA9PSByb290T2JqZWN0TWFwLmVuZCgpKTsK
KyAgICAgICAgaWYgKHJvb3RPYmplY3RNYXAuZmluZChvd25lcikgIT0gcm9vdE9iamVjdE1hcC5l
bmQoKSkKKyAgICAgICAgICAgIHJvb3RPYmplY3RNYXAuZ2V0KG93bmVyKS0+YWRkKG5wT2JqZWN0
KTsKKyAgICB9CisKKyAgICBBU1NFUlQobGl2ZU9iamVjdE1hcC5maW5kKG5wT2JqZWN0KSA9PSBs
aXZlT2JqZWN0TWFwLmVuZCgpKTsKKyAgICBsaXZlT2JqZWN0TWFwLnNldChucE9iamVjdCwgb3du
ZXIpOworfQorCit2b2lkIF9OUE5fVW5yZWdpc3Rlck9iamVjdChOUE9iamVjdCogbnBPYmplY3Qp
Cit7CisgICAgQVNTRVJUKG5wT2JqZWN0KTsKKyAgICBBU1NFUlQobGl2ZU9iamVjdE1hcC5maW5k
KG5wT2JqZWN0KSAhPSBsaXZlT2JqZWN0TWFwLmVuZCgpKTsKKworICAgIE5QT2JqZWN0KiBvd25l
ciA9IDA7CisgICAgaWYgKGxpdmVPYmplY3RNYXAuZmluZChucE9iamVjdCkgIT0gbGl2ZU9iamVj
dE1hcC5lbmQoKSkKKyAgICAgICAgb3duZXIgPSBsaXZlT2JqZWN0TWFwLmZpbmQobnBPYmplY3Qp
LT5zZWNvbmQ7CisKKyAgICBpZiAoIW93bmVyKSB7CisgICAgICAgIC8vIFVucmVnaXN0ZXJpbmcg
YSBvd25lciBvYmplY3Q7IGFsc28gdW5yZWdpc3RlciBpdCdzIGRlc2NlbmRhbnRzLgorICAgICAg
ICBBU1NFUlQocm9vdE9iamVjdE1hcC5maW5kKG5wT2JqZWN0KSAhPSByb290T2JqZWN0TWFwLmVu
ZCgpKTsKKyAgICAgICAgTlBPYmplY3RTZXQqIHNldCA9IHJvb3RPYmplY3RNYXAuZ2V0KG5wT2Jq
ZWN0KTsKKyAgICAgICAgd2hpbGUgKHNldC0+c2l6ZSgpID4gMCkgeworI2lmbmRlZiBOREVCVUcK
KyAgICAgICAgICAgIGludCBzaXplID0gc2V0LT5zaXplKCk7CisjZW5kaWYKKyAgICAgICAgICAg
IE5QT2JqZWN0KiBzdWJfb2JqZWN0ID0gKihzZXQtPmJlZ2luKCkpOworICAgICAgICAgICAgLy8g
VGhlIHN1Yi1vYmplY3Qgc2hvdWxkIG5vdCBiZSBhIG93bmVyIQorICAgICAgICAgICAgQVNTRVJU
KHJvb3RPYmplY3RNYXAuZmluZChzdWJfb2JqZWN0KSA9PSByb290T2JqZWN0TWFwLmVuZCgpKTsK
KworICAgICAgICAgICAgLy8gRmlyc3QsIHVucmVnaXN0ZXIgdGhlIG9iamVjdC4KKyAgICAgICAg
ICAgIHNldC0+cmVtb3ZlKHN1Yl9vYmplY3QpOworICAgICAgICAgICAgbGl2ZU9iamVjdE1hcC5y
ZW1vdmUoc3ViX29iamVjdCk7CisKKyAgICAgICAgICAgIC8vIFJlbW92ZSB0aGUgSlMgcmVmZXJl
bmNlcyB0byB0aGUgb2JqZWN0LgorICAgICAgICAgICAgZm9yZ2V0VjhPYmplY3RGb3JOUE9iamVj
dChzdWJfb2JqZWN0KTsKKworICAgICAgICAgICAgQVNTRVJUKHNldC0+c2l6ZSgpIDwgc2l6ZSk7
CisgICAgICAgIH0KKyAgICAgICAgZGVsZXRlIHNldDsKKyAgICAgICAgcm9vdE9iamVjdE1hcC5y
ZW1vdmUobnBPYmplY3QpOworICAgIH0gZWxzZSB7CisgICAgICAgIE5QUm9vdE9iamVjdE1hcDo6
aXRlcmF0b3Igb3duZXJFbnRyeSA9IHJvb3RPYmplY3RNYXAuZmluZChvd25lcik7CisgICAgICAg
IGlmIChvd25lckVudHJ5ICE9IHJvb3RPYmplY3RNYXAuZW5kKCkpIHsKKyAgICAgICAgICAgIE5Q
T2JqZWN0U2V0KiBsaXN0ID0gb3duZXJFbnRyeS0+c2Vjb25kOworICAgICAgICAgICAgQVNTRVJU
KGxpc3QtPmZpbmQobnBPYmplY3QpICE9IGxpc3QtPmVuZCgpKTsKKyAgICAgICAgICAgIGxpc3Qt
PnJlbW92ZShucE9iamVjdCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBsaXZlT2JqZWN0TWFw
LnJlbW92ZShucE9iamVjdCk7CisgICAgZm9yZ2V0VjhPYmplY3RGb3JOUE9iamVjdChucE9iamVj
dCk7Cit9CisKK2Jvb2wgX05QTl9Jc0FsaXZlKE5QT2JqZWN0KiBucE9iamVjdCkKK3sKKyAgICBy
ZXR1cm4gbGl2ZU9iamVjdE1hcC5maW5kKG5wT2JqZWN0KSAhPSBsaXZlT2JqZWN0TWFwLmVuZCgp
OworfQorCit9ICAvLyBleHRlcm4gIkMiCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L25wcnVu
dGltZV9pbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9ucHJ1bnRpbWVf
aW1wbC5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9ucHJ1bnRpbWVfaW1w
bC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQzIEBACisvKgorICogQ29weXJpZ2h0IChjKSAy
MDA4LCAyMDA5LCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24u
CisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMg
b2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3Rl
IHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMi
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgbnBydW50aW1l
X2ltcGxfaAorI2RlZmluZSBucHJ1bnRpbWVfaW1wbF9oCisKKyNpbmNsdWRlICJiaW5kaW5ncy9u
cHJ1bnRpbWUuaCIKKworLy8gVGhpcyBmaWxlIGV4aXN0cyB0byBzdXBwb3J0IFdlYkNvcmUsIHdo
aWNoIGV4cGVjdHMgdG8gYmUgYWJsZSB0byBjYWxsIHVwb24KKy8vIHBvcnRpb25zIG9mIHRoZSBO
UFJ1bnRpbWUgaW1wbGVtZW50YXRpb24uCisKKy8vIEEgc2ltcGxlIG1hcHBpbmcgZm9yIG5vdy4g
IEZJWE1FIFdlIHNob3VsZCBwcm9iYWJseSBqdXN0IGFkb3B0IHRoZQorLy8gdW5kZXJzY29yZSBw
cmVmaXggYXMgb3VyIG5hbWluZyBjb252ZW50aW9uIHRvby4KKyNkZWZpbmUgX05QTl9SZWxlYXNl
T2JqZWN0IE5QTl9SZWxlYXNlT2JqZWN0CisKKyNlbmRpZgpJbmRleDogV2ViQ29yZS9iaW5kaW5n
cy92OC9ucHJ1bnRpbWVfaW50ZXJuYWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdz
L3Y4L25wcnVudGltZV9pbnRlcm5hbC5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9iaW5kaW5n
cy92OC9ucHJ1bnRpbWVfaW50ZXJuYWwuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0MSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBDb2xsYWJvcmEsIEx0ZC4gIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIuMSBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisgKiBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVT
QS4KKyAqCisgKgorICogVGhpcyBpcyBhIGludGVybmFsIGluY2x1ZGUgaGVhZGVyIGZvciBucGFw
aS5oCisgKgorICogU29tZSBvZiB0aGUgI2RlZmluZXMgd2hpY2ggYXJlIGluIFgxMSBoZWFkZXJz
IGNvbmZsaWN0IHdpdGggdHlwZSBhbmQgZW51bQorICogbmFtZXMgaW4gSmF2YVNjcmlwdENvcmUg
YW5kIFdlYkNvcmUKKyAqIFRoaXMgaGVhZGVyICN1bmRlZnMgdGhvc2UgZGVmaW5lcyB0byBmaXgg
dGhlIGNvbmZsaWN0cworICogSWYgeW91IG5lZWQgdG8gaW5jbHVkZSBucGFwaS5oIG9yIG5wcnVu
dGltZS5oIHdoZW4gYnVpbGRpbmcgb24gWDExLAorICogaW5jbHVkZSB0aGlzIGZpbGUgaW5zdGVh
ZCBvZiB0aGUgYWN0dWFsIG5wYXBpLmggb3IgbnBydW50aW1lLmgKKyAqLworCisjaW5jbHVkZSAi
bnBhcGkuaCIKKyNpbmNsdWRlICJucHJ1bnRpbWUuaCIKKyNpbmNsdWRlICJucGZ1bmN0aW9ucy5o
IgorCisjaWZkZWYgWFBfVU5JWAorICAgICNpbmNsdWRlIDxYMTEvWHJlc291cmNlLmg+CisKKyAg
ICAjdW5kZWYgTm9uZQorICAgICN1bmRlZiBBYm92ZQorICAgICN1bmRlZiBCZWxvdworICAgICN1
bmRlZiBBdXRvCisgICAgI3VuZGVmIENvbXBsZXgKKyAgICAjdW5kZWYgU3RhdHVzCisjZW5kaWYK
SW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvbnBydW50aW1lX3ByaXYuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2JpbmRpbmdzL3Y4L25wcnVudGltZV9wcml2LmgJKHJldmlzaW9uIDApCisrKyBX
ZWJDb3JlL2JpbmRpbmdzL3Y4L25wcnVudGltZV9wcml2LmgJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsOTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDYgQXBwbGUgQ29tcHV0ZXIs
IEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBucHJ1bnRpbWVfcHJp
dl9oCisjZGVmaW5lIG5wcnVudGltZV9wcml2X2gKKworI2luY2x1ZGUgInRoaXJkX3BhcnR5L25w
YXBpL2JpbmRpbmdzL25wcnVudGltZS5oIgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAi
QyIgeworI2VuZGlmCisKKy8qCisgICAgX05QTl9Jbml0aWFsaXplVmFyaWFudFdpdGhTdHJpbmdD
b3B5KCkgd2lsbCBjb3B5IHN0cmluZyBkYXRhLiAgVGhlIHN0cmluZyBkYXRhCisgICAgd2lsbCBi
ZSBkZWFsbG9jYXRlZCBieSBjYWxscyB0byBOUFJlbGVhc2VWYXJpYW50VmFsdWUoKS4KKyovCit2
b2lkIF9OUE5fSW5pdGlhbGl6ZVZhcmlhbnRXaXRoU3RyaW5nQ29weShOUFZhcmlhbnQqLCBjb25z
dCBOUFN0cmluZyopOwordm9pZCBfTlBOX0RlYWxsb2NhdGVPYmplY3QoTlBPYmplY3QqKTsKKwor
Ly8gVGhlIGZvbGxvd2luZyByb3V0aW5lcyBhbGxvdyB0aGUgYnJvd3NlciB0byBhZ2dyZXNzaXZl
bHkgY2xlYW51cCBOUE9iamVjdHMKKy8vIG9uIGEgcGVyIHBsdWdpbiBiYXNpcy4gIEFsbCBOUE9i
amVjdHMgdXNlZCB0aHJvdWdoIHRoZSBOUFJ1bnRpbWUgQVBJIHNob3VsZAorLy8gYmUgInJlZ2lz
dGVyZWQiIHdoaWxlIHRoZXkgYXJlIGFsaXZlLiAgQWZ0ZXIgYW4gb2JqZWN0IGhhcyBiZWVuCisv
LyBkZWxldGVkLCBpdCBpcyBwb3NzaWJsZSBmb3IgSmF2YXNjcmlwdCB0byBoYXZlIGEgcmVmZXJl
bmNlIHRvIHRoYXQgb2JqZWN0CisvLyB3aGljaCBoYXMgbm90IHlldCBiZWVuIGdhcmJhZ2UgY29s
bGVjdGVkLiAgSmF2YXNjcmlwdCBhY2Nlc3MgdG8gTlBPYmplY3RzCisvLyB3aWxsIHJlZmVyZW5j
ZSB0aGlzIHJlZ2lzdHJ5IHRvIGRldGVybWluZSBpZiB0aGUgb2JqZWN0IGlzIGFjY2Vzc2libGUg
b3IKKy8vIG5vdC4KKworLy8gV2luZG93cyBpbnRyb2R1Y2VzIGFuIGFkZGl0aW9uYWwgY29tcGxp
Y2F0aW9uIGZvciBvYmplY3RzIGNyZWF0ZWQgYnkgdGhlCisvLyBwbHVnaW4uICBQbHVnaW5zIGxv
YWQgaW5zaWRlIG9mIGEgRExMLiAgRWFjaCBETEwgaGFzIGl0J3Mgb3duIGhlYXAuICBJZgorLy8g
dGhlIGJyb3dzZXIgdW5sb2FkcyB0aGUgcGx1Z2luIERMTCwgYWxsIG9iamVjdHMgY3JlYXRlZCB3
aXRoaW4gdGhlIERMTCdzCisvLyBoZWFwIGluc3RhbnRseSBiZWNvbWUgaW52YWxpZC4gIE5vcm1h
bGx5LCB3aGVuIFdlYktpdCBkcm9wcyB0aGUgcmVmZXJlbmNlCisvLyBvbiB0aGUgdG9wLWxldmVs
IHBsdWdpbiBvYmplY3QsIGl0IHRlbGxzIHRoZSBwbHVnaW4gbWFuYWdlciB0aGF0IHRoZQorLy8g
cGx1Z2luIGNhbiBiZSBkZXN0cm95ZWQsIHdoaWNoIGNhbiB1bmxvYWQgdGhlIERMTC4gIFNvLCB3
ZSBtdXN0IGVsaW1pbmF0ZQorLy8gYWxsIHBvaW50ZXJzIHRvIGFueSBvYmplY3QgZXZlciBjcmVh
dGVkIGJ5IHRoZSBwbHVnaW4uCisKKy8vIFdlIGdlbmVyYWxseSBhc3NvY2lhdGUgTlBPYmplY3Rz
IHdpdGggYW4gb3duZXIuICBUaGUgb3duZXIgb2YgYW4gTlBPYmplY3QKKy8vIGlzIGFuIE5QT2Jq
ZWN0IHdoaWNoLCB3aGVuIGRlc3Ryb3llZCwgYWxzbyBkZXN0cm95cyBhbGwgb2JqZWN0cyBpdCBv
d25zLgorLy8gRm9yIGV4YW1wbGUsIGlmIGFuIE5QQVBJIHBsdWdpbiBjcmVhdGVzIDEwIHN1Yi1O
UE9iamVjdHMsIGFsbCAxMSBvYmplY3RzCisvLyAodGhlIE5QQVBJIHBsdWdpbiArIGl0cyAxMCBz
dWItb2JqZWN0cykgc2hvdWxkIGJlY29tZSBpbmFjY2Vzc2libGUKKy8vIHNpbXVsdGFuZW91c2x5
LgorCisvLyBUaGUgb3duZXJzaGlwIGhpZXJhcmNoeSBpcyBmbGF0LCBhbmQgbm90IGEgdHJlZS4g
IEltYWdpbmUgdGhlIGZvbGxvd2luZworLy8gb2JqZWN0IGNyZWF0aW9uOgorLy8gICAgIFBsdWdp
bk9iamVjdAorLy8gICAgICAgICAgfAorLy8gICAgICAgICAgKy0tIENyZWF0ZXMgLS0tLS0+IE9i
amVjdDEKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisvLyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgKy0tIENyZWF0ZXMgLS0tLS0+IE9iamVjdDIKKy8vCisvLyBQ
bHVnaW5PYmplY3Qgd2lsbCBiZSB0aGUgIm93bmVyIiBmb3IgYm90aCBPYmplY3QxIGFuZCBPYmpl
Y3QyLgorCisvLyBSZWdpc3RlciBhbiBOUE9iamVjdCB3aXRoIHRoZSBydW50aW1lLiAgSWYgdGhl
IG93bmVyIGlzIE5VTEwsIHRoZQorLy8gb2JqZWN0IGlzIHRyZWF0ZWQgYXMgYW4gb3duaW5nIG9i
amVjdC4gIElmIG93bmVyIGlzIG5vdCBOVUxMLAorLy8gdGhpcyBvYmplY3Qgd2lsbCBiZSByZWdp
c3RlcmVkIGFzIG93bmVkIGJ5IG93bmVyJ3MgdG9wLWxldmVsIG93bmVyLgordm9pZCBfTlBOX1Jl
Z2lzdGVyT2JqZWN0KE5QT2JqZWN0KiwgTlBPYmplY3QqIG93bmVyKTsKKworLy8gVW5yZWdpc3Rl
ciBhbiBOUE9iamVjdCB3aXRoIHRoZSBydW50aW1lLiAgSWYgb2JqIGlzIGFuIG93bmluZworLy8g
b2JqZWN0LCB0aGlzIGNhbGwgd2lsbCBhbHNvIHVucmVnaXN0ZXIgYWxsIG9mIHRoZSBvd25lZCBv
YmplY3RzLgordm9pZCBfTlBOX1VucmVnaXN0ZXJPYmplY3QoTlBPYmplY3QqKTsKKworLy8gQ2hl
Y2sgdG8gc2VlIGlmIGFuIG9iamVjdCBpcyByZWdpc3RlcmVkIHdpdGggdGhlIHJ1bnRpbWUuCisv
LyBSZXR1cm4gdHJ1ZSBpZiByZWdpc3RlcmVkLCBmYWxzZSBvdGhlcndpc2UuCitib29sIF9OUE5f
SXNBbGl2ZShOUE9iamVjdCopOworCisjaWZkZWYgX19jcGx1c3BsdXMKK30gIC8qIGVuZCBleHRl
cm4gIkMiICovCisjZW5kaWYKKworI2VuZGlmIC8vIG5wcnVudGltZV9wcml2X2gK
</data>
<flag name="review"
          id="16904"
          type_id="1"
          status="+"
          setter="dglazkov"
    />
          </attachment>
      

    </bug>

</bugzilla>