From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-2.2 required=3.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,SPF_HELO_NONE, SPF_PASS,UNPARSEABLE_RELAY,USER_AGENT_SANE_1 autolearn=no autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 1CE7BC2D0B1 for ; Thu, 6 Feb 2020 13:11:20 +0000 (UTC) Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id E17DB214AF for ; Thu, 6 Feb 2020 13:11:19 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="cj9VrLOB" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org E17DB214AF Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=allwinnertech.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-mtd-bounces+linux-mtd=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20170209; h=Sender:Content-Type: Content-Transfer-Encoding:Cc:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:In-Reply-To:MIME-Version:Date:Message-ID:From: References:To:Subject:Reply-To:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=BsxL3Crrv+sTqAoK3/b+WW7NXReVQ63Aav35nCW3n14=; b=cj9VrLOBJzor8Da0M2KKNWPDs Gtw4p8nkSOWoM2JrttRUYiPaGW0XNCRq/ioUSg3ndsw8avUpfaERQRTclRVrpGmb3InjuXFjQaceb +Jl0lMzrEUFcUy5hm0g9/hN4nm3ezXzJnqrEXzrbNsGCy5sXCMy0rzRNmwJmPAAyX5sgg44sYz8IZ xVBUs8/y2JnBLfV63w2SeLarxWmvN8sCmu+jtDLkUw6ojFbDcfkLIGENF2UFxmQ+FT7RSYw/nD2Kb G3qHb79d79ou0S/2PGmpoRrExq0TDVICHfr309NrDEyqWvaxZU49sGAex78/luHcoQ+ly8gSaMIXF pwMeJh2+A==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1izgvs-0005xk-Kq; Thu, 06 Feb 2020 13:11:00 +0000 Received: from smtp2207-205.mail.aliyun.com ([121.197.207.205]) by bombadil.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1izgvp-0005wZ-5b for linux-mtd@lists.infradead.org; Thu, 06 Feb 2020 13:10:59 +0000 X-Alimail-AntiSpam: AC=CONTINUE; BC=0.07436282|-1; CH=green; DM=CONTINUE|CONTINUE|true|0.774386-0.00992849-0.215685; DS=SPAM|spam_ad|0.977435-0.000146245-0.0224188; FP=0|0|0|0|0|-1|-1|-1; HT=e01l07426; MF=liaoweixiong@allwinnertech.com; NM=1; PH=DS; RN=16; RT=16; SR=0; TI=SMTPD_---.GlHG0bB_1580994647; Received: from 192.168.31.126(mailfrom:liaoweixiong@allwinnertech.com fp:SMTPD_---.GlHG0bB_1580994647) by smtp.aliyun-inc.com(10.147.42.135); Thu, 06 Feb 2020 21:10:48 +0800 Subject: Re: [PATCH v1 11/11] mtd: new support oops logger based on pstore/blk To: Miquel Raynal References: <1579482233-2672-1-git-send-email-liaoweixiong@allwinnertech.com> <1579482233-2672-12-git-send-email-liaoweixiong@allwinnertech.com> <20200120110306.32e53fd8@xps13> <27226590-379c-8784-f461-f5d701015611@allwinnertech.com> <20200121094802.61f8cb4d@xps13> <2c6000b1-ae25-564b-911a-2879e9c244b2@allwinnertech.com> <20200122184114.125b42c8@xps13> From: liaoweixiong Message-ID: Date: Thu, 6 Feb 2020 21:10:47 +0800 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.4.1 MIME-Version: 1.0 In-Reply-To: <20200122184114.125b42c8@xps13> Content-Language: en-US X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20200206_051057_532098_CEA96529 X-CRM114-Status: GOOD ( 34.13 ) X-BeenThere: linux-mtd@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Linux MTD discussion mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Rob Herring , Tony Luck , Kees Cook , Jonathan Corbet , Richard Weinberger , Anton Vorontsov , linux-doc@vger.kernel.org, Greg Kroah-Hartman , linux-kernel@vger.kernel.org, linux-mtd@lists.infradead.org, Jonathan Cameron , Colin Cross , Mauro Carvalho Chehab , "David S. Miller" , Vignesh Raghavendra Content-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Sender: "linux-mtd" Errors-To: linux-mtd-bounces+linux-mtd=archiver.kernel.org@lists.infradead.org aGkgTWlxdWVsIFJheW5hbCwKCk9uIDIwMjAvMS8yMyBBTSAxOjQxLCBNaXF1ZWwgUmF5bmFsIHdy b3RlOgo+IEhlbGxvLAo+IAo+IAo+Pj4+Pj4gKy8qCj4+Pj4+PiArICogQWxsIHpvbmVzIHdpbGwg YmUgcmVhZCBhcyBwc3RvcmUvYmxrIHdpbGwgcmVhZCB6b25lIG9uZSBieSBvbmUgd2hlbiBkbwo+ Pj4+Pj4gKyAqIHJlY292ZXIuCj4+Pj4+PiArICovCj4+Pj4+PiArc3RhdGljIHNzaXplX3QgbXRk cHN0b3JlX3JlYWQoY2hhciAqYnVmLCBzaXplX3Qgc2l6ZSwgbG9mZl90IG9mZikKPj4+Pj4+ICt7 Cj4+Pj4+PiArCXN0cnVjdCBtdGRwc3RvcmVfY29udGV4dCAqY3h0ID0gJm9vcHNfY3h0Owo+Pj4+ Pj4gKwlzaXplX3QgcmV0bGVuOwo+Pj4+Pj4gKwlpbnQgcmV0Owo+Pj4+Pj4gKwo+Pj4+Pj4gKwlp ZiAobXRkcHN0b3JlX2Jsb2NrX2lzYmFkKGN4dCwgb2ZmKSkKPj4+Pj4+ICsJCXJldHVybiAtRU5F WFQ7Cj4+Pj4+PiArCj4+Pj4+PiArCXByX2RlYnVnKCJ0cnkgdG8gcmVhZCBvZmYgMHglbGx4IHNp emUgJXp1XG4iLCBvZmYsIHNpemUpOwo+Pj4+Pj4gKwlyZXQgPSBtdGRfcmVhZChjeHQtPm10ZCwg b2ZmLCBzaXplLCAmcmV0bGVuLCAodV9jaGFyICopYnVmKTsKPj4+Pj4+ICsJaWYgKChyZXQgPCAw ICYmICFtdGRfaXNfYml0ZmxpcChyZXQpKSB8fCBzaXplICE9IHJldGxlbikgIHsKPj4+Pj4KPj4+ Pj4gSUlSQyBzaXplICE9IHJldGxlbiBkb2VzIG5vdCBtZWFuIGl0IGZhaWxlZCwgYnV0IHRoYXQg eW91IHNob3VsZAo+Pj4+PiBjb250aW51ZSByZWFkaW5nIGFmdGVyIHJldGxlbiBieXRlcywgbm8/ Cj4+Pj4+ICAgICA+Pgo+Pj4+IFllcywgeW91IGFyZSByaWdodC4gSSB3aWxsIGZpeCBpdC4gVGhh bmtzLgo+Pj4+ICAgCj4+Pj4+IEFsc28sIG10ZF9pc19iaXRmbGlwKCkgZG9lcyBub3QgbWVhbiB0 aGF0IHlvdSBhcmUgcmVhZGluZyBhIGZhbHNlCj4+Pj4+IGJ1ZmZlciwgYnV0IHRoYXQgdGhlIGRh dGEgaGFzIGJlZW4gY29ycmVjdGVkIGFzIGl0IGNvbnRhaW5lZCBiaXRmbGlwcy4KPj4+Pj4gbXRk X2lzX2VjY2VycigpIGhvd2V2ZXIsIHdvdWxkIGJlIG1lYW5pbmdmdWwuCj4+Pj4+ICAgICA+Pgo+ Pj4+IFN1cmUgSSBrbm93IG10ZF9pc19iaXRmbGlwKCkgZG9lcyBub3QgbWVhbiBmYWlsdXJlLCBi dXQgSSBkbyBub3QgdGhpbmsKPj4+PiBtdGRfaXNfZWNjZXJyKCkgc2hvdWxkIGJlIGhlcmUgc2lu Y2UgdGhlIGNvZGVzIGFyZSByZXQgPCAwIGFuZCBOT1QKPj4+PiBtdGRfaXNfYml0ZmxpcCgpLgo+ Pj4KPj4+IFllcywganVzdCBkcm9wIHRoaXMgY2hlY2ssIG9ubHkga2VlcCByZXQgPCAwLgo+Pj4g ICAgCj4+Cj4+IElmIEkgZG9uJ3QgZ2V0IGl0IHdyb25nLCBpdCBzaG91bGQgbm90CSBiZSBkcm9w cGVkIGhlcmUuIExpa2UgeW91ciB3b3JkcywKPj4gIm10ZF9pc19iaXRmbGlwKCkgZG9lcyBub3Qg bWVhbiB0aGF0IHlvdSBhcmUgcmVhZGluZyBhIGZhbHNlIGJ1ZmZlciwKPj4gYnV0IHRoYXQgdGhl IGRhdGEgaGFzIGJlZW4gY29ycmVjdGVkIGFzIGl0IGNvbnRhaW5lZCBiaXRmbGlwcy4iLCB0aGUK Pj4gZGF0YSBJIGdldCBhcmUgdmFsaWQgZXZlbiBpZiBtdGRfaXNfYml0ZmxpcCgpIHJldHVybiB0 cnVlLiBJdCdzIGNvcnJlY3QKPj4gZGF0YSBhbmQgaXQncyBubyBuZWVkIHRvIGdvIHRvIGhhbmRs ZSBlcnJvci4gVG8gbWUsIHRoZSBjb2Rlcwo+PiBzaG91bGQgYmU6Cj4+IAlpZiAocmV0IDwgMCAm JiAhbWl0X2lzX2JpdGZsaXAoKSkKPj4gCQlbZXJyb3IgaGFuZGxpbmddCj4gCj4gUGxlYXNlIGNo ZWNrIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBtdGRfaXNfYml0ZmxpcCgpLiBZb3UnbGwgcHJvYmFi bHkKPiBmaWd1cmUgb3V0IHdoYXQgSSBhbSBzYXlpbmcuCj4gCj4gaHR0cHM6Ly9lbGl4aXIuYm9v dGxpbi5jb20vbGludXgvbGF0ZXN0L3NvdXJjZS9pbmNsdWRlL2xpbnV4L210ZC9tdGQuaCNMNTg1 Cj4gCgpIb3cgYWJvdXQgdGhlIGNvZGVzIGFzIGZvbGxvd3M6Cgpmb3IgKGRvbmUgPSAwLCByZXRs ZW4gPSAwOyBkb25lIDwgc2l6ZTsgZG9uZSArPSByZXRsZW4pIHsKCXJldCA9IG10ZF9yZWFkKC4u LiwgJnJldGxlbiwgLi4uKTsKCWlmICghcmV0KQoJCWNvbnRpbnVlOwoJLyoKCSAqIGRvIG5vdGhp bmcgaWYgYml0ZmxpcCBhbmQgZWNjIGVycm9yIG9jY3VycyBiZWNhdXNlIHdoZXRoZXIKCSAqIGl0 J3MgYml0ZmxpcCBvciBFQ0MgZXJyb3IsIGp1c3QgYSBzbWFsbCBudW1iZXIgb2YgYml0cyBmbGlw CgkgKiBhbmQgdGhlIGltcGFjdCBvbiBsb2cgZGF0YSBpcyBzbyBzbWFsbC4gVGhlIG10ZHBzdG9y ZSBqdXN0CgkgKiBoYW5kcyBvdmVyIHdoYXQgaXQgZ2V0cyBhbmQgdXNlciBjYW4ganVkZ2Ugd2hl dGhlciB0aGUgZGF0YQoJICogaXMgdmFsaWQgb3Igbm90LgoJICovCglpZiAobXRkX2lzX2JpdGZs aXAocmV0KSkgewoJCWRldl93YXJuKCJiaXRmbGlwIGF0Li4uLiIpOwoJCWNvbnRpbnVlOwoJfSBl bHNlIGlmIChtdGRfaXNfZWNjZXJyKHJldCkpIHsKCQlkZXZfd2FybigiZWNjZXJyIGF0Li4uLiIp OwoJCXJldGxlbiA9IHJldGxlbiA9PSAwID8gc2l6ZSA6IHJldGxlbjsKCQljb250aW51ZTsKCX0g ZWxzZSB7CgkJZGV2X2VycigicmVhZCBmYWlsdXJlIGF0Li4uIik7CgkJLyogdGhpcyB6b25lIGlz IGJyb2tlbiwgdHJ5IG5leHQgb25lICovCgkJcmV0dXJuIC1FTkVYVDsKCX0KfQoKPiAKPiB8Li4u XQo+IAo+Pj4+Pj4gKwkJcmV0dXJuOwo+Pj4+Pj4gKwl9Cj4+Pj4+PiArCWlmICh1bmxpa2VseShp bmZvLT5kbWVzZ19zaXplICUgbXRkLT53cml0ZXNpemUpKSB7Cj4+Pj4+PiArCQlwcl9lcnIoInJl Y29yZCBzaXplICVsdSBLQiBtdXN0IGFsaWduIHRvIHdyaXRlIHNpemUgJWQgS0JcbiIsCj4+Pj4+ PiArCQkJCWluZm8tPmRtZXNnX3NpemUgLyAxMDI0LAo+Pj4+Pj4gKwkJCQltdGQtPndyaXRlc2l6 ZSAvIDEwMjQpOwo+Pj4+Pgo+Pj4+PiBUaGlzIGNvbmRpdGlvbiBpcyB3ZWlyZCwgd2h5IHdvdWxk IHlvdSBjaGVjayB0aGlzPwo+Pj4+PiAgICAgPj4KPj4+PiBwc3RvcmUvYmxrIHdpbGwgd3JpdGUg J3JlY29yZF9zaXplJyBkbWVzZyBsb2cgYXQgb25lIHRpbWUuCj4+Pj4gU2luY2UgZWFjaCB3cml0 ZSBkYXRhIG11c3QgYmUgYWxpZ25lZCB0byAnd3JpdGVzaXplJyBmb3IgZmxhc2gsIEkgYW0gbm90 Cj4+Pj4gc3VyZQo+Pj4+IGFsbCBmbGFzaCBkcml2ZXJzIGFyZSBjb21wYXRpYmxlIHdpdGggbWlz YWxpZ25lZCBkYXRhLCB0aGF0J3Mgd2h5IGkKPj4+PiBjaGVjayB0aGlzLgo+Pj4KPj4+IEkgdGhp bmsgeW91IHNob3VsZCBlbmZvcmNlIHRoaXMgYWxpZ25tZW50IGluc3RlYWQgb2YgY2hlY2tpbmcg aXQuCj4+PiAgICAKPj4KPj4gRG8geW91IG1lYW4gdGhhdCBtdGRwc3RvcmUgc2hvdWxkIGVuZm9y Y2UgdGhpcyBhbGlnbm1lbnQgd2hpbGUgcnVubmluZz8KPj4gVGhlIHdheSBJIGNhbiB0aGluayBv ZiBpcyB0byBoYW5kbGUgYSBidWZmZXIgYWxpZ25lZCB0byB3cml0ZXNpemUgYW5kCj4+IHdyaXRl IHRvIGZsYXNoIHdpdGggdGhpcyBhbGlnbmVkIGJ1ZmZlci4KPj4KPj4gVGhhdCBjYXVzZXMgc29t ZSBlcnJvci4gVGhlIE1URCBkZXZpY2Ugd2lsbCBiZSBkaXZpZGVkIGludG8gbXV0aWwKPj4gY2h1 bmtzIGFjY3JvZGluZyB0byBkbWVzZ19zaXplLiBFYWNoIGNodW5rIHN0b3JlcyBhIGluZGl2aWR1 YWwKPj4gT09QUy9QYW5pYyBsb2cuIElmIGRtZXNnX3NpemUgaXMgbWlzYWxpZ25lZCB0byB3cml0 ZXNpemUsIHRoZSBsYXN0Cj4+IHdyaXRlIHJlc3VsdHMgaW4gbmV4dCB3cml0ZSBmYWlsdXJlIGJl Y2F1c2UgdGhlIHBhZ2Ugb2YgZmxhc2ggY2FuIG9ubHkKPj4gYmUgcHJvZ3JhbWVkIG9uY2UgYmVm b3JlIG5leHQgZXJhc2UgYW5kIHRoZSBwYWdlIHNoYXJlZCBieSB0d28gY2h1bmtzCj4+IGhhcyBi ZWVuIHVzZWQgYnkgdGhlIGxhc3Qgd3JpdGUuIEJlc2lkZXMsIHdlIGNhbiBub3QgcmVhZCB0byBi dWZmZXIsCj4+IGVyc2FlIGFuZCB3cml0ZSBiYWNrIGFzIHRoZXJlIGlzIG5vIHJlYWQvZXJhc2Ug Zm9yIHBhbmljIGNhc2UuCj4gCj4gSSBtZWFuOiB3aGF0IGlzIHRoZSB1c3VhbCBzaXplIG9mIGRt ZXNnPyBJIGRvbid0IGdldCB3aHkgeW91IG5lZWQgaXQgdG8KClRoZSB1c3VhbCBzaXplIG9mIGRt ZXNnIGlzIDY0SywgdXN1YWxseSBiZSBlcXVhbCB0byBsb2dfYnVmIHNpemUuCgo+IGJlIGllLiBh IG11bHRpcGxlIG9mIDJrLiBJdCBwcm9iYWJseSBpcyBhY3R1YWxseSwgSSBkb24ndCBrbm93IGlm IHRoZXJlCj4gaXMgYSBzdGFuZGFyZC4gQnV0IGlmIGRtZXNnX3NpemUgaXMgZWcgM2ssIGp1c3Qg c2tpcCB0aGUgZW5kIG9mIHRoZQo+IHBhcnRpYWxseSB3cml0dGVuIHBhZ2UgYW5kIHN0YXJ0IHdy aXRpbmcgYXQgdGhlIG5leHQgcGFnZT8KPiAKCjEuIHVwcGVyIGxheWVyIGRvIG5vdCBzdXBwb3J0 IHRvIHNraXAgcGFydGlhbGx5IHdyaXR0ZW4gcGFnZQpUaGUgdXBwZXIgbGF5ZXIgcHN0b3JlL2Js ayB3aWxsIG5vdCBza2lwIHRoZSBlbmQgb2YgdGhlIHBhcnRpYWxseQp3cml0dGVuIHBhZ2Ugc2lu Y2UgaXQgaXMgbm90IG9ubHkgdXNlZCBmb3IgTVREIGRldmljZSwgYnV0IGFsc28KYmxvY2sgZGV2 aWNlLCB3aGljaCBoYXMgbm8gcGFnZSBsaW1pdGVkLiBBIGNvbW1vbiBwcmFjdGljZSBhdCB0aGUK dXBwZXIgbGF5ZXIgaXMgdG8gY2hlY2sgdGhlIHNpemUgYW5kIGxpbWl0IHNpemUgdG8gYmUgYWxp Z25lZC4gV2UKbWFrZSBkbWVzZ19zaXplIHRvIGJlIGEgbXVsdGlwbGUgb2YgNEsgZm9yIGdyZWF0 ZXIgY29tcGF0aWJpbGl0eS4KCjIuIGNodW5rcyBtYW5hZ2VtZW50IGFuZCBzaXplIHBlciB3cml0 ZQpUaGUgbXRkcHN0b3JlIHRlbGxzIHBzdG9yZS9ibGsgaG93IGxhcmdlIHRoZSBkZXZpY2UgaXMu IFRoZW4KcHN0b3JlL2JsayB3aWxsIGRpdmlkZSBpdCBpbnRvIHNldmVyYWwgY2h1bmtzIGFjY29y ZGluZyB0bwpkbWVzZ19zaXplLiBUaGUgcHN0b3JlL2JsayB3aWxsIHdyaXRlIGRtZXNnX3NpemUg ZGF0YSBhdCBhIHRpbWUuCgpJbiBhIHdvcmQsIHRoZSBhbW91bnQgb2YgZGF0YSB3cml0dGVuIGVh Y2ggdGltZSBjYW4gbm90IGxlYWQgdG8gcGFnZQpzbGljaW5nLCBzbywgZG1lc2dfc2l6ZSBtdXN0 IGJlIGFsaWduZWQgdG8gd3JpdGVzaXplLgoKPj4KPj4+PiAgIAo+Pj4+Pj4gKwkJcmV0dXJuOwo+ Pj4+Pj4gKwl9Cj4+Pj4+PiArCWlmICh1bmxpa2VseShtdGQtPnNpemUgPiBNVERQU1RPUkVfTUFY X01URF9TSVpFKSkgewo+Pj4+Pj4gKwkJcHJfZXJyKCJtdGQlZCBpcyB0b28gbGFyZ2UgKGxpbWl0 IGlzICVkIE1pQilcbiIsCj4+Pj4+PiArCQkJCW10ZC0+aW5kZXgsCj4+Pj4+PiArCQkJCU1URFBT VE9SRV9NQVhfTVREX1NJWkUgLyAxMDI0IC8gMTAyNCk7Cj4+Pj4+Cj4+Pj4+IFNhbWUgcXVlc3Rp b24/IEkgY291bGQgdW5kZXJzdGFuZCB0aGF0IGl0IGlzIGVhc2llciB0byBtYW5hZ2UgYmxvY2tz Cj4+Pj4+IGtub3dpbmcgdGhlaXIgbWF4aW11bSBudW1iZXIgdGhvdWdoLgo+Pj4+PiAgICAgPj4K Pj4+PiBJdCByZWZlcnMgdG8gbXRkb29wcy4KPj4+Cj4+PiBXaGF0IGRvIHlvdSBtZWFuPwo+Pj4g ICAgCj4+Cj4+IFRvIG1lLCBpdCdzIHVubmVjZXNzYXJ5IHRvIGNoZWNrIGF0IGFsbCwgaG93ZXZl ciBpdCBpcyByZWFsbHkgdGhlcmUKPj4gb24gY29kZXMgb2YgbXRkb29wcy4gSSByZWZlciB0byBt b2R1bGUgbXRkb29wcyB3aGVuIEkgZGVzaWduIG10ZHBzdG9yZS4KPj4gSXQgbWF5IGJlIGhlbHBm dWxsIGZvciBzb21lIGNhc2VzIG91dCBvZiBteSB0aGluaywgdGhhdCdzIHdoeSBJIGtlZXAgaXQu Cj4gCj4gV2h5IG5vdC4KPiAKCk9LLCBJIHdpbGwgZHJvcCBpdC4KCj4gWy4uLl0KPiAKPj4+Pgo+ Pj4+IEluIGNhc2Ugb2YgcmVwZWF0ZWQgZXJhc2Ugd2hlbiB1c2VycyByZW1vdmUgc2V2ZXJhbCBs b2cgZmlsZXMsIG10ZHBzdG9yZQo+Pj4+IGRvIHJlbW92ZSBqb2JzIHdoZW4gZXhpdC4KPj4+Pgo+ Pj4+IEJlc2lkZXMsIG10ZHBzdG9yZSBkbyBub3QgY2hlY2sgdGhlIHJldHVybiBjb2RlIHRvIGVu c3VyZSB3cml0ZSBiYWNrIHZhbGlkCj4+Pj4gbG9nIGFzIG11Y2ggYXMgcG9zc2libGUuCj4+Pgo+ Pj4gWW91IGFyZSBub3QgaW4gYSBjcml0aWNhbCBwYXRoLCBJIGRvbid0IHVuZGVyc3RhbmQgd2h5 IHlvdSBkb24ndCBjaGVjawo+Pj4gaXQ/IElmIGl0IHJldHVybnMgYW4gZXJyb3IsIGl0IG1lYW5z IHRoZSBkYXRhIGlzIG5vdCB3cml0dGVuLiBJTUhPIGl0Cj4+PiBpcyBiZXN0IHRvIGFsZXJ0IHRo ZSB1c2VyIHRoYW4gdG8gc2lsZW50bHkgZmFpbC4KPj4+ICAgIAo+Pgo+PiBUaGlzIGZ1bmN0aW9u IHdpbGwgYmUgY2FsbGVkIG9ubHkgd2hlbiBtdGQgZGV2aWNlIGlzIHJlbW92aW5nLiBJdCdzCj4+ IHVzZWxlc3MgdG8gYWxlcnQgdGhlIHVzZXIgYnV0IHRyeSB0byBmbHVzaCB0aGUgb3RoZXIgdmFs aWQgZGF0YSB0bwo+IAo+IEl0IGlzIHVzZWZ1bCB0byBhbGVydCB0aGUgdXNlciEgSXQgbWVhbnMg c29tZXRoaW5nIHdlbnQgd3Jvbmcgd2hpbGUKPiBldmVyeXRoaW5nIHNlZW1zIGZpbmUuCj4gCj4+ IGZsYXNoIGFzIG11c2ggYXMgcG9zc2libGUgYnkgd2hpY2ggcmVkdWNlIGxvc3Nlcy4gSWYgaXQn cyBqdXN0Cj4+IGJlY2F1c2Ugb2YgYnVzeSwgd2hhdCBoYXBwZW5zIG5leHQgdGltZT8KPiAKPiBK dXN0IGJlY2F1c2Ugb2YgYnVzeT8gSSBkb24ndCBnZXQgaXQuCgpJIHdhbnQgdG8gZXhwcmVzcyB0 aGF0IGlmIHRoZSB3cml0ZSBmYWlscyBkdWUgdG8gYnVzeSwgdGhlIG5leHQgb25lCm1heSBzdWNj ZWVkLgoKPiAKPiBJJ20gb2theSB3aXRoIHRoZSBpZGVhIG9mIHRyeWluZyB0byB3cml0ZSB0aGUg b3RoZXIgY2h1bmtzIHRob3VnaDoKPiAKPiAJd2hpbGUgKHJlbWFpbmluZ19jaHVuaykgewo+IAkJ cmV0ID0gbXRkX3dyaXRlKCkKPiAJCWlmIChyZXQpIHsKPiAJCQlhbGVydC11c2VyOwo+IAkJCWNv bnRpbnVlOwo+IAkJfQo+IAl9Cj4gCgpPSywgSSB3aWxsIGZpeCBpdC4KCj4+Cj4+Pj4gICAKPj4+ Pj4+ICsuID4+Pj4gKwkJb2ZmICs9IHpvbmVzaXplOwo+Pj4+Pj4gKwkJc2l6ZSAtPSBtaW5fdCh1 bnNpZ25lZCBpbnQsIHpvbmVzaXplLCBzaXplKTsKPj4+Pj4+ICsJfQo+Pj4+Pj4gKwo+Pj4+Pj4g K2ZyZWU6Cj4+Pj4+PiArCWtmcmVlKGJ1Zik7Cj4+Pj4+PiArCXJldHVybiByZXQ7Cj4+Pj4+PiAr fQo+Pj4+Pj4gKwo+Pj4KPj4+Cj4+PiBbLi4uXQo+Pj4gICAgCj4+Pj4+Cj4+Pj4+IFRoYW5rcywK Pj4+Pj4gTWlxdcOobAo+Pj4+PiAgICAgPj4KPj4+PiBJIHdpbGwgY29sbGVjdCBtb3JlIHN1Z2dl c3Rpb25zIGFuZCBzdWJtaXQgdGhlIG5ldyB2ZXJzaW9uIGF0IG9uZSB0aW1lLgo+Pj4+ICAgCj4+ Pgo+Pj4gU3VyZSwgbm8gaHVycnkuCj4+PiAgICAKPj4KPj4gSSBhbSBvbiBob2xpZGF5LCBwbGVh c2UgZm9yZ2l2ZSBtZSBmb3IgbXkgc2xvdyByZXNwb25zZS4KPiAKPiBUYWtlIHlvdXIgdGltZSwg YXMgSSBzYWlkLCBubyBodXJyeS4KPiAKPj4KPj4+Cj4+PiBUaGFua3MsCj4+PiBNaXF1w6hsCj4+ PiAgICAKPiAKPiAKPiAKPiAKPiBUaGFua3MsCj4gTWlxdcOobAo+IAoKX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkxpbnV4IE1URCBkaXNjdXNz aW9uIG1haWxpbmcgbGlzdApodHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3Rp bmZvL2xpbnV4LW10ZC8K