From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 16944 invoked by alias); 28 Nov 2012 09:15:38 -0000 Received: (qmail 16927 invoked by uid 22791); 28 Nov 2012 09:15:34 -0000 X-SWARE-Spam-Status: No, hits=-5.4 required=5.0 tests=AWL,BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,KHOP_RCVD_TRUST,RCVD_IN_DNSWL_LOW,RCVD_IN_HOSTKARMA_YE,RP_MATCHES_RCVD,TW_LV X-Spam-Check-By: sourceware.org Received: from mail-qa0-f47.google.com (HELO mail-qa0-f47.google.com) (209.85.216.47) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Wed, 28 Nov 2012 09:15:21 +0000 Received: by mail-qa0-f47.google.com with SMTP id t11so4535762qaa.20 for ; Wed, 28 Nov 2012 01:15:20 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20120113; h=mime-version:date:message-id:subject:from:to:cc:content-type :x-gm-message-state; bh=NYV7/fZHL45lxqGfiwwR46BtxuigQZldtamHGJChXxM=; b=PQy4pBcIcb2NJuD3Fpgdo2U4h0oHxyhXEnhM4ExEGNs+qzqrRfLvFFjuomkxDW+51l nXiaQ8ZVrq33Qt6AdOSR8u5zGc5eClCbqtIyKIdRJeCfceAqeE+JpYAPhw80sx/dU5Bl nGMjMr3q1oWJJhqgOHPzw/ZeKXJ2cZi/U33zkZrTELPmFN6wC/pSn40JgT/ESa2PYpRw RdiMcPGML9aJuWZqtDwdmckk9gaLa865LmcDouNui1BdRIHlfBEpccCxU6jZ3S4vZC/B 8X24C9+CsmB+SxIuspYPMFVcwiANF7hD3q7BVwdZfOcHthpK/T8lCsIDjwFt2WhTU8qp 1oew== MIME-Version: 1.0 Received: by 10.229.78.200 with SMTP id m8mr4409103qck.96.1354094120224; Wed, 28 Nov 2012 01:15:20 -0800 (PST) Received: by 10.49.132.225 with HTTP; Wed, 28 Nov 2012 01:15:20 -0800 (PST) Date: Wed, 28 Nov 2012 09:15:00 -0000 Message-ID: Subject: [PATCH] asan unit tests from llvm lit-test From: Wei Mi To: GCC Patches Cc: David Li , Diego Novillo , Jakub Jelinek , Kostya Serebryany , Dodji Seketeli Content-Type: multipart/mixed; boundary=00235429e0f0074a3e04cf8a9b83 X-Gm-Message-State: ALoCoQkFaUB07UOprIjEByE9Wtg/4yz1SoeekDBZujru7CWeLpOaQk9DbQbkD6hpREiwlTrCHmCJ8sKwPo0mlOHI4RaUcuYA1R4GUDsCaFOjZpw406ubpHYsQ21O/uLvvQQwBFL0cx08kVXgIgVo1cv5ry3TgO5OQCjk/PRvaiePnxyx/rucVY0oi3tP0XPCk7r8tciDTKOP Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org X-SW-Source: 2012-11/txt/msg02293.txt.bz2 --00235429e0f0074a3e04cf8a9b83 Content-Type: text/plain; charset=ISO-8859-1 Content-length: 3358 Hi, I try to migrate the left asan lit-tests from llvm (class3). This is a preliminary version patch. Please forgive it has many mistakes. A known problems: I hardcoded -m32 in (set link_flags "[asan_link_flags [get_multilibs -m32]] $link_flags") in gcc/testsuite/lib/asan-dg.exp to make 32 bit library path included in ld_library_path. I don't know the elegant way to fix it. Thanks, Wei. gcc/testsuite/ 2012-11-28 Wei Mi * gcc.dg/asan/asan.exp: Case by case processing for some special testcases. * g++.dg/asan/asan.exp: Likewise. * lib/asan-dg.exp: Likewise. * g++.dg/asan/linux: New, migrate from llvm asan lit-test. * g++.dg/asan/linux/interception-test-1.C: Likewise. * g++.dg/asan/linux/interception-failure-test-1.C: Likewise. * g++.dg/asan/linux/interception-malloc-test-1.C: Likewise. * g++.dg/asan/Helpers: Likewise. * g++.dg/asan/Helpers/initialization-blacklist-1.tmp: Likewise. * g++.dg/asan/Helpers/initialization-blacklist-extra-1.C: Likewise. * g++.dg/asan/deep-thread-stack-1.C: Likewise. * g++.dg/asan/shared-lib-test-1.C: Likewise. * g++.dg/asan/deep-stack-uaf-1.C: Likewise. * g++.dg/asan/on-error-callback-1.C: Likewise. * g++.dg/asan/initialization-blacklist-1.C: Likewise. * g++.dg/asan/initialization-nobug-1.C: Likewise. * g++.dg/asan/large-func-test-1.C: Likewise. * g++.dg/asan/SharedLibs: Likewise. * g++.dg/asan/SharedLibs/dlclose-test-1-so.C: Likewise. * g++.dg/asan/SharedLibs/shared-lib-test-1-so.C: Likewise. * g++.dg/asan/dlclose-test-1.C: Likewise. * g++.dg/asan/malloc-hook-1.C: Likewise. * g++.dg/asan/symbolize-callback-1.C: Likewise. * g++.dg/asan/default-options-1.C: Likewise. * g++.dg/asan/deep-tail-call-1.C: Likewise. * c-c++-common/asan/linux: Likewise. * c-c++-common/asan/linux/initialization-bug-any-order-1.c: Likewise. * c-c++-common/asan/linux/rlimit-mmap-test-1.c: Likewise. * c-c++-common/asan/linux/swapcontext-test-1.c: Likewise. * c-c++-common/asan/linux/clone-test-1.c: Likewise. * c-c++-common/asan/sleep-before-dying-1.c: Likewise. * c-c++-common/asan/Helpers: Likewise. * c-c++-common/asan/Helpers/blacklist-extra-1.c: Likewise. * c-c++-common/asan/Helpers/interface_symbols.sh: Likewise. * c-c++-common/asan/Helpers/initialization-bug-extra-1.c: Likewise. * c-c++-common/asan/Helpers/blacklist-1.tmp: Likewise. * c-c++-common/asan/interface-symbols-1.c: Likewise. * c-c++-common/asan/strip-path-prefix-1.c: Likewise. * c-c++-common/asan/force-inline-opt0-1.c: Likewise. * c-c++-common/asan/null-deref-1.c: Likewise. * c-c++-common/asan/global-overflow-1.c: Likewise. * c-c++-common/asan/initialization-bug-1.c: Likewise. * c-c++-common/asan/strncpy-overflow-1.c: Likewise. * c-c++-common/asan/stack-overflow-1.c: Likewise. * c-c++-common/asan/blacklist-1.c: Likewise. * c-c++-common/asan/use-after-free-1.c: Likewise. * c-c++-common/asan/sanity-check-pure-c-1.c: Likewise. * c-c++-common/asan/stack-use-after-return-1.c: Likewise. * c-c++-common/asan/heap-overflow-1.c: Likewise. --00235429e0f0074a3e04cf8a9b83 Content-Type: text/plain; charset=US-ASCII; name="patch.txt" Content-Disposition: attachment; filename="patch.txt" Content-Transfer-Encoding: base64 X-Attachment-Id: f_ha28kesq0 Content-length: 74368 SW5kZXg6IGdjYy90ZXN0c3VpdGUvZ2NjLmRnL2FzYW4vYXNhbi5leHAKPT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PQotLS0gZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcv YXNhbi9hc2FuLmV4cAkocmV2aXNpb24gMTkzODgxKQorKysgZ2NjL3Rlc3Rz dWl0ZS9nY2MuZGcvYXNhbi9hc2FuLmV4cAkod29ya2luZyBjb3B5KQpAQCAt MTYsOCArMTYsNiBAQAogIyBhbG9uZyB3aXRoIEdDQzsgc2VlIHRoZSBmaWxl IENPUFlJTkczLiAgSWYgbm90IHNlZQogIyA8aHR0cDovL3d3dy5nbnUub3Jn L2xpY2Vuc2VzLz4uCiAKLSMgR0NDIHRlc3RzdWl0ZSB0aGF0IHVzZXMgdGhl IGBkZy5leHAnIGRyaXZlci4KLQogIyBMb2FkIHN1cHBvcnQgcHJvY3MuCiBs b2FkX2xpYiBnY2MtZGcuZXhwCiBsb2FkX2xpYiBhc2FuLWRnLmV4cApAQCAt MzAsOCArMjgsODkgQEAgaWYgIVtjaGVja19lZmZlY3RpdmVfdGFyZ2V0X2Zh ZGRyZXNzX3NhbgogZGctaW5pdAogYXNhbl9pbml0CiAKK3NldCBkZWZhdWx0 X2FzYW5fdG9ydHVyZV9vcHRpb25zIFtsaXN0IHsgLU8wIC1tMzIgfSB7IC1P MSAtbTMyIH0geyAtTzIgLW0zMiB9IHsgLU8zIC1tMzIgfSBcCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgeyAtTzAgLW02NCB9IHsgLU8x IC1tNjQgfSB7IC1PMiAtbTY0IH0geyAtTzMgLW02NCB9XQorCitpZiB7IFtp bmZvIHByb2NzIHRhcmdldF9jb21waWxlXSAhPSBbbGlzdF0gXAorICAgICAg JiYgW2luZm8gcHJvY3Mgc2F2ZWRfYXNhbl90YXJnZXRfY29tcGlsZV0gPT0g W2xpc3RdIH0geworICByZW5hbWUgdGFyZ2V0X2NvbXBpbGUgc2F2ZWRfYXNh bl90YXJnZXRfY29tcGlsZQorCisgIHByb2MgdGFyZ2V0X2NvbXBpbGUgeyBz b3VyY2UgZGVzdCB0eXBlIG9wdGlvbnMgfSB7CisgICAgZ2xvYmFsIHNyY2Rp ciBzdWJkaXIKKworICAgIGlmIHsgW3N0cmluZyBtYXRjaCAiKmJsYWNrbGlz dC0xLmMiICRzb3VyY2VdIH0geworICAgICAgc2V0IGJsYWNrbGlzdF9vcHRp b25zICRvcHRpb25zCisgICAgICBzZXQgYmxpc3RfdG1wIFtnbG9iICRzcmNk aXIvYy1jKystY29tbW9uL2FzYW4vSGVscGVycy9ibGFja2xpc3QtMS50bXBd CisgICAgICBsYXBwZW5kIGJsYWNrbGlzdF9vcHRpb25zICJhZGRpdGlvbmFs X2ZsYWdzPS1hc2FuLWJsYWNrbGlzdD0kYmxpc3RfdG1wIgorICAgICAgc2V0 IHJlc3VsdCBbZXZhbCBbbGlzdCBzYXZlZF9hc2FuX3RhcmdldF9jb21waWxl ICRzb3VyY2UgJGRlc3QgJHR5cGUgJGJsYWNrbGlzdF9vcHRpb25zXV0KKyAg ICAgIHJldHVybiAkcmVzdWx0CisgICAgfSBlbHNlaWYgeyBbc3RyaW5nIG1h dGNoICIqaW50ZXJmYWNlLXN5bWJvbHMtMS5jIiAkc291cmNlXSB9IHsKKyAg ICAgIHNldCByZXN1bHQgW2V2YWwgW2xpc3Qgc2F2ZWRfYXNhbl90YXJnZXRf Y29tcGlsZSBcCisgICAgICAgICAgICAgICAgICAgICAgICAkc291cmNlICJp bnRlcmZhY2Utc3ltYm9scy0xLmV4ZSIgXAorICAgICAgICAgICAgICAgICAg ICAgICAgImV4ZWN1dGFibGUiICRvcHRpb25zXV0KKyAgICAgIGlmIHsgW3N0 cmluZyBtYXRjaCAiIiAkcmVzdWx0XSB9IHsKKyAgICAgICAgc2V0IGV4ZWZp bGUgW2dsb2IgaW50ZXJmYWNlLXN5bWJvbHMtMS5leGVdCisgICAgICAgIHNl dCBhc2FuX2ludGVyZmFjZV9oIFtnbG9iICRzcmNkaXIvLi4vLi4vbGlic2Fu aXRpemVyL2luY2x1ZGUvc2FuaXRpemVyL2FzYW5faW50ZXJmYWNlLmhdCisg ICAgICAgIHNldCBzY3JpcHQgW2dsb2IgJHNyY2Rpci9jLWMrKy1jb21tb24v YXNhbi9IZWxwZXJzL2ludGVyZmFjZV9zeW1ib2xzLnNoXQorICAgICAgICBz ZXQgZGlmZl9yZXN1bHQgW2V4ZWMgc2ggJHNjcmlwdCAkZXhlZmlsZSAkYXNh bl9pbnRlcmZhY2VfaF0KKyAgICAgICAgaWYgeyAhW3N0cmluZyBtYXRjaCAi IiAkZGlmZl9yZXN1bHRdIH0geworICAgICAgICAgIGZhaWwgIiRzb3VyY2Ug LS0gZGlmZiByZXN1bHQgbm90IGVtcHR5OiAkZGlmZl9yZXN1bHQiCisgICAg ICAgIH0KKyAgICAgIH0KKyAgICB9IGVsc2VpZiB7IFtzdHJpbmcgbWF0Y2gg Iippbml0aWFsaXphdGlvbi1idWctYW55LW9yZGVyLTEuYyIgJHNvdXJjZV0g fSB7CisgICAgICBzZXQgYXV4ZmlsZSBbZ2xvYiAkc3JjZGlyL2MtYysrLWNv bW1vbi9hc2FuL0hlbHBlcnMvaW5pdGlhbGl6YXRpb24tYnVnLWV4dHJhLTEu Y10KKyAgICAgIGdsb2JhbCBzdWJ0ZXN0CisgICAgICBpZiB7IFtzdHJpbmcg bWF0Y2ggInN1YnRlc3QxIiAkc3VidGVzdF0gfSB7CisgICAgICAgIHNldCBz b3VyY2UgIiRzb3VyY2UgJGF1eGZpbGUiCisgICAgICB9IGVsc2UgeworICAg ICAgICBzZXQgc291cmNlICIkYXV4ZmlsZSAkc291cmNlIgorICAgICAgfQor ICAgICAgc2V0IHJlc3VsdCBbZXZhbCBbbGlzdCBzYXZlZF9hc2FuX3Rhcmdl dF9jb21waWxlICRzb3VyY2UgJGRlc3QgJHR5cGUgJG9wdGlvbnNdXQorICAg IH0gZWxzZSB7CisgICAgICBzZXQgcmVzdWx0IFtldmFsIFtsaXN0IHNhdmVk X2FzYW5fdGFyZ2V0X2NvbXBpbGUgJHNvdXJjZSAkZGVzdCAkdHlwZSAkb3B0 aW9uc11dCisgICAgfQorICAgIHJldHVybiAkcmVzdWx0CisgIH0KK30KKwog IyBNYWluIGxvb3AuCi1nY2MtZGctcnVudGVzdCBbbHNvcnQgW2dsb2IgLW5v Y29tcGxhaW4gJHNyY2Rpci8kc3ViZGlyLyouYyAkc3JjZGlyL2MtYysrLWNv bW1vbi9hc2FuLyouY11dICIiCitmb3JlYWNoIHNyY2ZpbGUgW2xzb3J0IFtn bG9iIC1ub2NvbXBsYWluIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICRz cmNkaXIvJHN1YmRpci8qLmMgXAorICAgICAgICAgICAgICAgICAgICAgICAg JHNyY2Rpci9jLWMrKy1jb21tb24vYXNhbi8qLmMgXAorICAgICAgICAgICAg ICAgICAgICAgICAgJHNyY2Rpci9jLWMrKy1jb21tb24vYXNhbi9saW51eC8q LmNdXSB7CisgIHNldCBhc2FuX3RvcnR1cmVfb3B0aW9ucyAkZGVmYXVsdF9h c2FuX3RvcnR1cmVfb3B0aW9ucworICBpZiB7IFtzdHJpbmcgbWF0Y2ggIipm b3JjZS1pbmxpbmUtb3B0MC0xLmMiICRzcmNmaWxlXSB9IHsgCisgICAgc2V0 IGFzYW5fdG9ydHVyZV9vcHRpb25zIFtsaXN0IHsgLU8wIC1tNjQgfSB7IC1P MSAtbTY0IH1dCisgIH0gZWxzZWlmIHsgW3N0cmluZyBtYXRjaCAiKmluaXRp YWxpemF0aW9uLWJ1Zy0xLmMiICRzcmNmaWxlXSB9IHsKKyAgICBzZXQgYXNh bl90b3J0dXJlX29wdGlvbnMgW2xpc3QgeyAtTzAgLW0zMiB9IHsgLU8wIC1t NjQgfV0KKyAgfSBlbHNlaWYgeyBbc3RyaW5nIG1hdGNoICIqaW50ZXJmYWNl LXN5bWJvbHMtMS5jIiAkc3JjZmlsZV0gfSB7CisgICAgc2V0IGFzYW5fdG9y dHVyZV9vcHRpb25zIFtsaXN0IHsgLU8yIH1dCisgIH0gZWxzZWlmIHsgW3N0 cmluZyBtYXRjaCAiKnNsZWVwLWJlZm9yZS1keWluZy0xLmMiICRzcmNmaWxl XSB9IHsKKyAgICBzZXRlbnYgQVNBTl9PUFRJT05TICJzbGVlcF9iZWZvcmVf ZHlpbmc9MSIKKyAgICBzZXQgYXNhbl90b3J0dXJlX29wdGlvbnMgW2xpc3Qg eyAtTzIgfV0KKyAgfSBlbHNlaWYgeyBbc3RyaW5nIG1hdGNoICIqc3RyaXAt cGF0aC1wcmVmaXgtMS5jIiAkc3JjZmlsZV0gfSB7CisgICAgc2V0ZW52IEFT QU5fT1BUSU9OUyAic3RyaXBfcGF0aF9wcmVmaXg9Jy8nIgorICAgIHNldCBh c2FuX3RvcnR1cmVfb3B0aW9ucyBbbGlzdCB7IC1PMiB9XQorICB9IGVsc2Vp ZiB7IFtzdHJpbmcgbWF0Y2ggIippbml0aWFsaXphdGlvbi1idWctYW55LW9y ZGVyLTEuYyIgJHNyY2ZpbGVdIH0geworICAgIHNldCBhc2FuX3RvcnR1cmVf b3B0aW9ucyBbbGlzdCB7IC1PMCB9XQorICAgIHNldC10b3J0dXJlLW9wdGlv bnMgJGFzYW5fdG9ydHVyZV9vcHRpb25zCisgICAgZ2xvYmFsIHN1YnRlc3QK KyAgICBzZXQgc3VidGVzdCAic3VidGVzdDEiCisgICAgZ2NjLWRnLXJ1bnRl c3QgJHNyY2ZpbGUgIiIKKyAgICBzZXQgc3VidGVzdCAic3VidGVzdDIiCisg IH0gZWxzZWlmIHsgW3N0cmluZyBtYXRjaCAiKnJsaW1pdC1tbWFwLXRlc3Qt MS5jIiAkc3JjZmlsZV0gfSB7CisgICAgc2V0IGFzYW5fdG9ydHVyZV9vcHRp b25zIFtsaXN0IHsgfV0KKyAgICBzZXQtdG9ydHVyZS1vcHRpb25zICRhc2Fu X3RvcnR1cmVfb3B0aW9ucworICB9CisKKyAgc2V0LXRvcnR1cmUtb3B0aW9u cyAkYXNhbl90b3J0dXJlX29wdGlvbnMKKyAgZ2NjLWRnLXJ1bnRlc3QgJHNy Y2ZpbGUgIiIKKworICBpZiB7IFtzdHJpbmcgbWF0Y2ggIipzbGVlcC1iZWZv cmUtZHlpbmctMS5jIiAkc3JjZmlsZV0KKyAgICAgICB8fCBbc3RyaW5nIG1h dGNoICIqc3RyaXAtcGF0aC1wcmVmaXgtMS5jIiAkc3JjZmlsZV0gfSB7Cisg ICAgdW5zZXRlbnYgQVNBTl9PUFRJT05TCisgIH0KK30KIAogIyBBbGwgZG9u ZS4KIGFzYW5fZmluaXNoCkluZGV4OiBnY2MvdGVzdHN1aXRlL2crKy5kZy9h c2FuL0hlbHBlcnMvaW5pdGlhbGl6YXRpb24tYmxhY2tsaXN0LTEudG1wCj09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT0KLS0tIGdjYy90ZXN0c3VpdGUvZysrLmRn L2FzYW4vSGVscGVycy9pbml0aWFsaXphdGlvbi1ibGFja2xpc3QtMS50bXAJ KHJldmlzaW9uIDApCisrKyBnY2MvdGVzdHN1aXRlL2crKy5kZy9hc2FuL0hl bHBlcnMvaW5pdGlhbGl6YXRpb24tYmxhY2tsaXN0LTEudG1wCShyZXZpc2lv biAwKQpAQCAtMCwwICsxLDIgQEAKK2dsb2JhbC1pbml0OipiYWRHbG9iYWwq CitnbG9iYWwtaW5pdC10eXBlOipiYWROYW1lc3BhY2U6OkJhZENsYXNzKgpJ bmRleDogZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvYXNhbi9IZWxwZXJzL2luaXRp YWxpemF0aW9uLWJsYWNrbGlzdC1leHRyYS0xLkMKPT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PQotLS0gZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvYXNhbi9IZWxwZXJz L2luaXRpYWxpemF0aW9uLWJsYWNrbGlzdC1leHRyYS0xLkMJKHJldmlzaW9u IDApCisrKyBnY2MvdGVzdHN1aXRlL2crKy5kZy9hc2FuL0hlbHBlcnMvaW5p dGlhbGl6YXRpb24tYmxhY2tsaXN0LWV4dHJhLTEuQwkocmV2aXNpb24gMCkK QEAgLTAsMCArMSwxNSBAQAoraW50IHplcm9faW5pdCgpIHsgcmV0dXJuIDA7 IH0KK2ludCBiYWRHbG9iYWwgPSB6ZXJvX2luaXQoKTsKK2ludCByZWFkQmFk R2xvYmFsKCkgeyByZXR1cm4gYmFkR2xvYmFsOyB9CisKK25hbWVzcGFjZSBi YWROYW1lc3BhY2UgeworY2xhc3MgQmFkQ2xhc3MgeworIHB1YmxpYzoKKyAg QmFkQ2xhc3MoKSB7IHZhbHVlID0gMDsgfQorICBpbnQgdmFsdWU7Cit9Owor Ly8gR2xvYmFsIG9iamVjdCB3aXRoIG5vbi10cml2aWFsIGNvbnN0cnVjdG9y LgorQmFkQ2xhc3MgYmFkX29iamVjdDsKK30gIC8vIG5hbWVzcGFjZSBiYWRO YW1lc3BhY2UKKworaW50IGFjY2Vzc0JhZE9iamVjdCgpIHsgcmV0dXJuIGJh ZE5hbWVzcGFjZTo6YmFkX29iamVjdC52YWx1ZTsgfQpJbmRleDogZ2NjL3Rl c3RzdWl0ZS9nKysuZGcvYXNhbi9kZWVwLXRocmVhZC1zdGFjay0xLkMKPT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PQotLS0gZ2NjL3Rlc3RzdWl0ZS9nKysuZGcv YXNhbi9kZWVwLXRocmVhZC1zdGFjay0xLkMJKHJldmlzaW9uIDApCisrKyBn Y2MvdGVzdHN1aXRlL2crKy5kZy9hc2FuL2RlZXAtdGhyZWFkLXN0YWNrLTEu QwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1NSBAQAorLyogeyBkZy1kbyBy dW4gfSAqLworLyogeyBkZy1zaG91bGRmYWlsICJhc2FuIiB9ICovCisKKyNp bmNsdWRlIDxwdGhyZWFkLmg+CisKK2ludCAqeDsKKwordm9pZCAqQWxsb2NU aHJlYWQodm9pZCAqYXJnKSB7CisgIHggPSBuZXcgaW50OworICAqeCA9IDQy OworICByZXR1cm4gTlVMTDsKK30KKwordm9pZCAqRnJlZVRocmVhZCh2b2lk ICphcmcpIHsKKyAgZGVsZXRlIHg7CisgIHJldHVybiBOVUxMOworfQorCit2 b2lkICpBY2Nlc3NUaHJlYWQodm9pZCAqYXJnKSB7CisgICp4ID0gNDM7ICAv LyBCT09NCisgIHJldHVybiBOVUxMOworfQorCit0eXBlZGVmIHZvaWQqICgq Y2FsbGJhY2tfdHlwZSkodm9pZCogYXJnKTsKKwordm9pZCAqUnVubmVyVGhy ZWFkKHZvaWQgKmZ1bmN0aW9uKSB7CisgIHB0aHJlYWRfdCB0aHJlYWQ7Cisg IHB0aHJlYWRfY3JlYXRlKCZ0aHJlYWQsIE5VTEwsIChjYWxsYmFja190eXBl KWZ1bmN0aW9uLCBOVUxMKTsKKyAgcHRocmVhZF9qb2luKHRocmVhZCwgTlVM TCk7CisgIHJldHVybiBOVUxMOworfQorCit2b2lkIFJ1blRocmVhZChjYWxs YmFja190eXBlIGZ1bmN0aW9uKSB7CisgIHB0aHJlYWRfdCBydW5uZXI7Cisg IHB0aHJlYWRfY3JlYXRlKCZydW5uZXIsIE5VTEwsIFJ1bm5lclRocmVhZCwg KHZvaWQqKWZ1bmN0aW9uKTsKKyAgcHRocmVhZF9qb2luKHJ1bm5lciwgTlVM TCk7Cit9CisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pIHsK KyAgUnVuVGhyZWFkKEFsbG9jVGhyZWFkKTsKKyAgUnVuVGhyZWFkKEZyZWVU aHJlYWQpOworICBSdW5UaHJlYWQoQWNjZXNzVGhyZWFkKTsKKyAgcmV0dXJu ICh4ICE9IDApOworfQorCisvKiB7IGRnLW91dHB1dCAiRVJST1I6IEFkZHJl c3NTYW5pdGl6ZXI6IGhlYXAtdXNlLWFmdGVyLWZyZWUuKihcbnxcclxufFxy KSIgfSAqLworLyogeyBkZy1vdXRwdXQgIldSSVRFIG9mIHNpemUgNCBhdCAw eFxbMC05YS1mXF0rIHRocmVhZCBUKFxbMC05XF0rKS4qKFxufFxyXG58XHIp IiB9ICovCisvKiB7IGRnLW91dHB1dCAiZnJlZWQgYnkgdGhyZWFkIFQoXFsw LTlcXSspIGhlcmU6LiooXG58XHJcbnxccikiIH0gKi8KKy8qIHsgZGctb3V0 cHV0ICJwcmV2aW91c2x5IGFsbG9jYXRlZCBieSB0aHJlYWQgVChcWzAtOVxd KykgaGVyZTouKihcbnxcclxufFxyKSIgfSAqLworLyogeyBkZy1vdXRwdXQg IlRocmVhZCBUXFwyIGNyZWF0ZWQgYnkgVChcWzAtOVxdKykgaGVyZTouKihc bnxcclxufFxyKSIgfSAqLworLyogeyBkZy1vdXRwdXQgIlRocmVhZCBUXFw4 IGNyZWF0ZWQgYnkgVDAgaGVyZTouKihcbnxcclxufFxyKSIgfSAqLworLyog eyBkZy1vdXRwdXQgIlRocmVhZCBUXFw0IGNyZWF0ZWQgYnkgVChcWzAtOVxd KykgaGVyZTouKihcbnxcclxufFxyKSIgfSAqLworLyogeyBkZy1vdXRwdXQg IlRocmVhZCBUXFwxMSBjcmVhdGVkIGJ5IFQwIGhlcmU6LiooXG58XHJcbnxc cikiIH0gKi8KKy8qIHsgZGctb3V0cHV0ICJUaHJlYWQgVFxcNiBjcmVhdGVk IGJ5IFQoXFswLTlcXSspIGhlcmU6LiooXG58XHJcbnxccikiIH0gKi8KKy8q IHsgZGctb3V0cHV0ICJUaHJlYWQgVFxcMTQgY3JlYXRlZCBieSBUMCBoZXJl OiIgfSAqLwpJbmRleDogZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvYXNhbi9zaGFy ZWQtbGliLXRlc3QtMS5DCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGdj Yy90ZXN0c3VpdGUvZysrLmRnL2FzYW4vc2hhcmVkLWxpYi10ZXN0LTEuQwko cmV2aXNpb24gMCkKKysrIGdjYy90ZXN0c3VpdGUvZysrLmRnL2FzYW4vc2hh cmVkLWxpYi10ZXN0LTEuQwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzMyBA QAorLyogeyBkZy1kbyBydW4gfSAqLworLyogeyBkZy1zaG91bGRmYWlsICJh c2FuIiB9ICovCisKKyNpbmNsdWRlIDxkbGZjbi5oPgorI2luY2x1ZGUgPHN0 ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpbmNsdWRlIDxzdHJp bmc+CisKK3VzaW5nIHN0ZDo6c3RyaW5nOworCit0eXBlZGVmIHZvaWQgKGZ1 bl90KShpbnQgeCk7CisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2 W10pIHsKKyAgc3RyaW5nIHBhdGggPSBzdHJpbmcoYXJndlswXSkgKyAiLXNv LnNvIjsKKyAgcHJpbnRmKCJvcGVuaW5nICVzIC4uLiBcbiIsIHBhdGguY19z dHIoKSk7CisgIHZvaWQgKmxpYiA9IGRsb3BlbihwYXRoLmNfc3RyKCksIFJU TERfTk9XKTsKKyAgaWYgKCFsaWIpIHsKKyAgICBwcmludGYoImVycm9yIGlu IGRsb3BlbigpOiAlc1xuIiwgZGxlcnJvcigpKTsKKyAgICByZXR1cm4gMTsK KyAgfQorICBmdW5fdCAqaW5jID0gKGZ1bl90KilkbHN5bShsaWIsICJpbmMi KTsKKyAgaWYgKCFpbmMpIHJldHVybiAxOworICBwcmludGYoIm9rXG4iKTsK KyAgaW5jKDEpOworICBpbmMoLTEpOyAgLy8gQk9PTQorICByZXR1cm4gMDsK K30KKworLyogeyBkZy1vdXRwdXQgIkVSUk9SOiBBZGRyZXNzU2FuaXRpemVy IGdsb2JhbC1idWZmZXItb3ZlcmZsb3dcW15cblxyXSooXG58XHJcbnxcciki IH0gKi8KKy8qIHsgZGctb3V0cHV0ICJSRUFEIG9mIHNpemUgNCBhdCAweFxb MC05YS1mXF0rIHRocmVhZCBUMFxbXlxuXHJdKihcbnxcclxufFxyKSIgfSAq LworLyogeyBkZy1vdXRwdXQgIiAgICAjMCAweFxbMC05YS1mXF0rXFteXG5c cl0qKFxufFxyXG58XHIpIiB9ICovCisvKiB7IGRnLW91dHB1dCAiICAgICMx IDB4XFswLTlhLWZcXSsgKGluIF8qbWFpbiBcW15cblxyXSooc2hhcmVkLWxp Yi10ZXN0LTEuQzoyNnxcWz9cXVxbP1xdOjApfFxbKFxdKVxbXlxuXHJdKihc bnxcclxufFxyKSIgfSAqLwpJbmRleDogZ2NjL3Rlc3RzdWl0ZS9nKysuZGcv YXNhbi9kZWVwLXN0YWNrLXVhZi0xLkMKPT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PQotLS0gZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvYXNhbi9kZWVwLXN0YWNrLXVh Zi0xLkMJKHJldmlzaW9uIDApCisrKyBnY2MvdGVzdHN1aXRlL2crKy5kZy9h c2FuL2RlZXAtc3RhY2stdWFmLTEuQwkocmV2aXNpb24gMCkKQEAgLTAsMCAr MSwzMiBAQAorLy8gQ2hlY2sgdGhhdCB3ZSBjYW4gc3RvcmUgbG90cyBvZiBz dGFjayBmcmFtZXMgaWYgYXNrZWQgdG8uCisKKy8qIHsgZGctZG8gcnVuIH0g Ki8KKy8qIHsgZGctc2hvdWxkZmFpbCAiYXNhbiIgfSAqLworI2luY2x1ZGUg PHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisKK3RlbXBsYXRlIDxp bnQgZGVwdGg+CitzdHJ1Y3QgRGVlcEZyZWUgeworICBzdGF0aWMgdm9pZCBm cmVlKGNoYXIgKngpIHsKKyAgICBEZWVwRnJlZTxkZXB0aCAtIDE+OjpmcmVl KHgpOworICB9Cit9OworCit0ZW1wbGF0ZTw+CitzdHJ1Y3QgRGVlcEZyZWU8 MD4geworICBzdGF0aWMgdm9pZCBmcmVlKGNoYXIgKngpIHsKKyAgICA6OmZy ZWUoeCk7CisgIH0KK307CisKK2ludCBtYWluKCkgeworICBjaGFyICp4ID0g bmV3IGNoYXJbMTBdOworICAvLyBkZWVwX2ZyZWUoeCk7CisgIERlZXBGcmVl PDIwMD46OmZyZWUoeCk7CisgIHJldHVybiB4WzVdOworfQorCisvKiB7IGRn LW91dHB1dCAiRVJST1I6IEFkZHJlc3NTYW5pdGl6ZXIgaGVhcC11c2UtYWZ0 ZXItZnJlZSBvbiBhZGRyZXNzLiooXG58XHJcbnxccikiIH0gKi8KKy8qIHsg ZGctb3V0cHV0ICIgICAgIzM3IDB4XFswLTlhLWZcXSsgKGluIFxbXlxuXHJd KkRlZXBGcmVlXFteXG5ccl0qMzZ8XFsoXF0pLiooXG58XHJcbnxccikiIH0g Ki8KKy8qIHsgZGctb3V0cHV0ICIgICAgIzk5IDB4XFswLTlhLWZcXSsgKGlu IFxbXlxuXHJdKkRlZXBGcmVlXFteXG5ccl0qOTh8XFsoXF0pLiooXG58XHJc bnxccikiIH0gKi8KKy8qIHsgZGctb3V0cHV0ICIgICAgIzExNiAweFxbMC05 YS1mXF0rIChpbiBcW15cblxyXSpEZWVwRnJlZVxbXlxuXHJdKjExNXxcWyhc XSlcW15cblxyXSooXG58XHJcbnxccikiIH0gKi8KSW5kZXg6IGdjYy90ZXN0 c3VpdGUvZysrLmRnL2FzYW4vb24tZXJyb3ItY2FsbGJhY2stMS5DCj09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT0KLS0tIGdjYy90ZXN0c3VpdGUvZysrLmRnL2Fz YW4vb24tZXJyb3ItY2FsbGJhY2stMS5DCShyZXZpc2lvbiAwKQorKysgZ2Nj L3Rlc3RzdWl0ZS9nKysuZGcvYXNhbi9vbi1lcnJvci1jYWxsYmFjay0xLkMJ KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTggQEAKKy8qIHsgZGctZG8gcnVu IH0gKi8KKy8qIHsgZGctc2hvdWxkZmFpbCAiYXNhbiIgfSAqLworCisjaW5j bHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKworZXh0ZXJu ICJDIgordm9pZCBfX2FzYW5fb25fZXJyb3IoKSB7CisgIGZwcmludGYoc3Rk ZXJyLCAiX19hc2FuX29uX2Vycm9yIGNhbGxlZCIpOworfQorCitpbnQgbWFp bigpIHsKKyAgY2hhciAqeCA9IChjaGFyKiltYWxsb2MoMTAgKiBzaXplb2Yo Y2hhcikpOworICBmcmVlKHgpOworICByZXR1cm4geFs1XTsKK30KKworLyog eyBkZy1vdXRwdXQgIl9fYXNhbl9vbl9lcnJvciBjYWxsZWQuKihcbnxcclxu fFxyKSIgfSAqLwpJbmRleDogZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvYXNhbi9p bml0aWFsaXphdGlvbi1ibGFja2xpc3QtMS5DCj09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT0KLS0tIGdjYy90ZXN0c3VpdGUvZysrLmRnL2FzYW4vaW5pdGlhbGl6 YXRpb24tYmxhY2tsaXN0LTEuQwkocmV2aXNpb24gMCkKKysrIGdjYy90ZXN0 c3VpdGUvZysrLmRnL2FzYW4vaW5pdGlhbGl6YXRpb24tYmxhY2tsaXN0LTEu QwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNSBAQAorLyogeyBkZy1kbyBy dW4gfSAqLworLyogeyBkZy1vcHRpb25zICItYXNhbi1pbml0aWFsaXphdGlv bi1vcmRlciIgfSAqLworLyogeyBkZy1hZGRpdGlvbmFsLXNvdXJjZXMgIkhl bHBlcnMvaW5pdGlhbGl6YXRpb24tYmxhY2tsaXN0LWV4dHJhLTEuQyIgfSAq LworCisvLyBGdW5jdGlvbiBpcyBkZWZpbmVkIGluIGFub3RoZXIgVFUuCitp bnQgcmVhZEJhZEdsb2JhbCgpOworaW50IHggPSByZWFkQmFkR2xvYmFsKCk7 ICAvLyBpbml0LW9yZGVyIGJ1Zy4KKworLy8gRnVuY3Rpb24gaXMgZGVmaW5l ZCBpbiBhbm90aGVyIFRVLgoraW50IGFjY2Vzc0JhZE9iamVjdCgpOworaW50 IHkgPSBhY2Nlc3NCYWRPYmplY3QoKTsgIC8vIGluaXQtb3JkZXIgYnVnLgor CitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpIHsKKyAgcmV0dXJu IGFyZ2MgKyB4ICsgeSAtIDE7Cit9CkluZGV4OiBnY2MvdGVzdHN1aXRlL2cr Ky5kZy9hc2FuL2FzYW4uZXhwCj09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t IGdjYy90ZXN0c3VpdGUvZysrLmRnL2FzYW4vYXNhbi5leHAJKHJldmlzaW9u IDE5Mzg4MSkKKysrIGdjYy90ZXN0c3VpdGUvZysrLmRnL2FzYW4vYXNhbi5l eHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDggKzI4LDEyNCBAQCBpZiAhW2No ZWNrX2VmZmVjdGl2ZV90YXJnZXRfZmFkZHJlc3Nfc2FuCiBkZy1pbml0CiBh c2FuX2luaXQKIAorIyBDb21waWxpbmcgZGxjbG9zZS10ZXN0LTEuQyBuZWVk cyB0byBidWlsZCBkbGNsb3NlLXRlc3Qtc28tMS5zbyBiZWZvcmVoYW5kLiAK K2lmIHsgW2luZm8gcHJvY3MgdGFyZ2V0X2NvbXBpbGVdICE9IFtsaXN0XSBc CisgICAgICAmJiBbaW5mbyBwcm9jcyBzYXZlZF9hc2FuX3RhcmdldF9jb21w aWxlXSA9PSBbbGlzdF0gfSB7CisgIHJlbmFtZSB0YXJnZXRfY29tcGlsZSBz YXZlZF9hc2FuX3RhcmdldF9jb21waWxlCisKKyAgcHJvYyB0YXJnZXRfY29t cGlsZSB7IHNvdXJjZSBkZXN0IHR5cGUgb3B0aW9ucyB9IHsKKyAgICBnbG9i YWwgc3JjZGlyIHN1YmRpcgorCisgICAgaWYgeyBbc3RyaW5nIG1hdGNoICIq YmxhY2tsaXN0LTEuYyIgJHNvdXJjZV0gfSB7CisgICAgICBzZXQgYmxhY2ts aXN0X29wdGlvbnMgJG9wdGlvbnMKKyAgICAgIHNldCBibGlzdF90bXAgW2ds b2IgJHNyY2Rpci9jLWMrKy1jb21tb24vYXNhbi9IZWxwZXJzL2JsYWNrbGlz dC0xLnRtcF0KKyAgICAgIGxhcHBlbmQgYmxhY2tsaXN0X29wdGlvbnMgImFk ZGl0aW9uYWxfZmxhZ3M9LWFzYW4tYmxhY2tsaXN0PSRibGlzdF90bXAiCisg ICAgICBzZXQgcmVzdWx0IFtldmFsIFtsaXN0IHNhdmVkX2FzYW5fdGFyZ2V0 X2NvbXBpbGUgXAorICAgICAgICAgICAgICAgICAgICAgICAgJHNvdXJjZSAk ZGVzdCAkdHlwZSAkYmxhY2tsaXN0X29wdGlvbnNdXQorICAgIH0gZWxzZWlm IHsgW3N0cmluZyBtYXRjaCAiKmluaXRpYWxpemF0aW9uLWJsYWNrbGlzdC0x LkMiICRzb3VyY2VdIH0geworICAgICAgc2V0IGJsYWNrbGlzdF9vcHRpb25z ICRvcHRpb25zCisgICAgICBzZXQgYmxpc3RfdG1wIFtnbG9iICRzcmNkaXIv JHN1YmRpci9IZWxwZXJzL2luaXRpYWxpemF0aW9uLWJsYWNrbGlzdC0xLnRt cF0KKyAgICAgIGxhcHBlbmQgYmxhY2tsaXN0X29wdGlvbnMgImFkZGl0aW9u YWxfZmxhZ3M9LWFzYW4tYmxhY2tsaXN0PSRibGlzdF90bXAiCisgICAgICBz ZXQgcmVzdWx0IFtldmFsIFtsaXN0IHNhdmVkX2FzYW5fdGFyZ2V0X2NvbXBp bGUgXAorICAgICAgICAgICAgICAgICAgICAgICAgJHNvdXJjZSAkZGVzdCAk dHlwZSAkYmxhY2tsaXN0X29wdGlvbnNdXQorICAgIH0gZWxzZWlmIHsgW3N0 cmluZyBtYXRjaCAiKmRsY2xvc2UtdGVzdC0xLkMiICRzb3VyY2VdIH0gewor ICAgICAgc2V0IGRsY2xvc2Vfc29fb3B0aW9ucyAkb3B0aW9ucworICAgICAg bGFwcGVuZCBkbGNsb3NlX3NvX29wdGlvbnMgImFkZGl0aW9uYWxfZmxhZ3M9 LWZQSUMgLXNoYXJlZCIKKyAgICAgIHNldCBhdXhmaWxlIFtnbG9iICRzcmNk aXIvJHN1YmRpci9TaGFyZWRMaWJzL2RsY2xvc2UtdGVzdC0xLXNvLkNdCisg ICAgICBzZXQgcmVzdWx0IFtldmFsIFtsaXN0IHNhdmVkX2FzYW5fdGFyZ2V0 X2NvbXBpbGUgXAorICAgICAgICAgICAgICAgICAgICAgICAgJGF1eGZpbGUg XAorICAgICAgICAgICAgICAgICAgICAgICAgImRsY2xvc2UtdGVzdC0xLmV4 ZS1zby5zbyIgXAorICAgICAgICAgICAgICAgICAgICAgICAgImV4ZWN1dGFi bGUiICRkbGNsb3NlX3NvX29wdGlvbnNdXQorICAgICAgc2V0IHJlc3VsdCBb ZXZhbCBbbGlzdCBzYXZlZF9hc2FuX3RhcmdldF9jb21waWxlIFwKKyAgICAg ICAgICAgICAgICAgICAgICAgICRzb3VyY2UgJGRlc3QgJHR5cGUgJG9wdGlv bnNdXQorICAgICAgZmlsZSBkZWxldGUgImRsY2xvc2UtdGVzdC0xLmV4ZS1z by5zbyIKKyAgICB9IGVsc2VpZiB7IFtzdHJpbmcgbWF0Y2ggIipzaGFyZWQt bGliLXRlc3QtMS5DIiAkc291cmNlXSB9IHsKKyAgICAgIHNldCBzaGFyZWRf bGliX3NvX29wdGlvbnMgJG9wdGlvbnMKKyAgICAgIGxhcHBlbmQgc2hhcmVk X2xpYl9zb19vcHRpb25zICJhZGRpdGlvbmFsX2ZsYWdzPS1mUElDIC1zaGFy ZWQiCisgICAgICBzZXQgYXV4ZmlsZSBbZ2xvYiAkc3JjZGlyLyRzdWJkaXIv U2hhcmVkTGlicy9zaGFyZWQtbGliLXRlc3QtMS1zby5DXQorICAgICAgc2V0 IHJlc3VsdCBbZXZhbCBbbGlzdCBzYXZlZF9hc2FuX3RhcmdldF9jb21waWxl IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICRhdXhmaWxlIFwKKyAgICAg ICAgICAgICAgICAgICAgICAgICJzaGFyZWQtbGliLXRlc3QtMS5leGUtc28u c28iIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICJleGVjdXRhYmxlIiAk c2hhcmVkX2xpYl9zb19vcHRpb25zXV0KKyAgICAgIHNldCByZXN1bHQgW2V2 YWwgW2xpc3Qgc2F2ZWRfYXNhbl90YXJnZXRfY29tcGlsZSBcCisgICAgICAg ICAgICAgICAgICAgICAgICAkc291cmNlICRkZXN0ICR0eXBlICRvcHRpb25z XV0KKyAgICAgIGZpbGUgZGVsZXRlICJzaGFyZWQtbGliLXRlc3QtMS5leGUt c28uc28iCisgICAgfSBlbHNlaWYgeyBbc3RyaW5nIG1hdGNoICIqaW50ZXJm YWNlLXN5bWJvbHMtMS5jIiAkc291cmNlXSB9IHsKKyAgICAgIHNldCByZXN1 bHQgW2V2YWwgW2xpc3Qgc2F2ZWRfYXNhbl90YXJnZXRfY29tcGlsZSBcCisg ICAgICAgICAgICAgICAgICAgICAgICAkc291cmNlICJpbnRlcmZhY2Utc3lt Ym9scy0xLmV4ZSIgXAorICAgICAgICAgICAgICAgICAgICAgICAgImV4ZWN1 dGFibGUiICRvcHRpb25zXV0KKyAgICAgIGlmIHsgW3N0cmluZyBtYXRjaCAi IiAkcmVzdWx0XSB9IHsKKyAgICAgICAgc2V0IGV4ZWZpbGUgW2dsb2IgaW50 ZXJmYWNlLXN5bWJvbHMtMS5leGVdCisgICAgICAgIHNldCBhc2FuX2ludGVy ZmFjZV9oIFtnbG9iICRzcmNkaXIvLi4vLi4vbGlic2FuaXRpemVyL2luY2x1 ZGUvc2FuaXRpemVyL2FzYW5faW50ZXJmYWNlLmhdCisgICAgICAgIHNldCBz Y3JpcHQgW2dsb2IgJHNyY2Rpci9jLWMrKy1jb21tb24vYXNhbi9IZWxwZXJz L2ludGVyZmFjZV9zeW1ib2xzLnNoXQorICAgICAgICBzZXQgZGlmZl9yZXN1 bHQgW2V4ZWMgc2ggJHNjcmlwdCAkZXhlZmlsZSAkYXNhbl9pbnRlcmZhY2Vf aF0KKyAgICAgICAgaWYgeyAhW3N0cmluZyBtYXRjaCAiIiAkZGlmZl9yZXN1 bHRdIH0geworICAgICAgICAgIGZhaWwgIiRzb3VyY2UgLS0gZGlmZiByZXN1 bHQgbm90IGVtcHR5OiAkZGlmZl9yZXN1bHQiCisgICAgICAgIH0KKyAgICAg IH0KKyAgICB9IGVsc2VpZiB7IFtzdHJpbmcgbWF0Y2ggIippbml0aWFsaXph dGlvbi1idWctYW55LW9yZGVyLTEuYyIgJHNvdXJjZV0gfSB7CisgICAgICBz ZXQgYXV4ZmlsZSBbZ2xvYiAkc3JjZGlyL2MtYysrLWNvbW1vbi9hc2FuL0hl bHBlcnMvaW5pdGlhbGl6YXRpb24tYnVnLWV4dHJhLTEuY10KKyAgICAgIGds b2JhbCBzdWJ0ZXN0CisgICAgICBpZiB7IFtzdHJpbmcgbWF0Y2ggInN1YnRl c3QxIiAkc3VidGVzdF0gfSB7CisgICAgICAgIHNldCBzb3VyY2UgIiRzb3Vy Y2UgJGF1eGZpbGUiCisgICAgICB9IGVsc2UgeworICAgICAgICBzZXQgc291 cmNlICIkYXV4ZmlsZSAkc291cmNlIgorICAgICAgfQorICAgICAgc2V0IHJl c3VsdCBbZXZhbCBbbGlzdCBzYXZlZF9hc2FuX3RhcmdldF9jb21waWxlICRz b3VyY2UgJGRlc3QgJHR5cGUgJG9wdGlvbnNdXQorICAgIH0gZWxzZSB7Cisg ICAgICBzZXQgcmVzdWx0IFtldmFsIFtsaXN0IHNhdmVkX2FzYW5fdGFyZ2V0 X2NvbXBpbGUgJHNvdXJjZSAkZGVzdCAkdHlwZSAkb3B0aW9uc11dCisgICAg fQorICAgIHJldHVybiAkcmVzdWx0CisgIH0KK30KKworc2V0IGRlZmF1bHRf YXNhbl90b3J0dXJlX29wdGlvbnMgW2xpc3QgeyAtTzAgLW0zMiB9IHsgLU8x IC1tMzIgfSB7IC1PMiAtbTMyIH0geyAtTzMgLW0zMiB9IFwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB7IC1PMCAtbTY0IH0geyAtTzEg LW02NCB9IHsgLU8yIC1tNjQgfSB7IC1PMyAtbTY0IH1dCisKICMgTWFpbiBs b29wLgotZ2NjLWRnLXJ1bnRlc3QgW2xzb3J0IFtnbG9iIC1ub2NvbXBsYWlu ICRzcmNkaXIvJHN1YmRpci8qLkMgJHNyY2Rpci9jLWMrKy1jb21tb24vYXNh bi8qLmNdXSAiIgorZm9yZWFjaCBzcmNmaWxlIFtsc29ydCBbZ2xvYiAtbm9j b21wbGFpbiBcCisgICAgICAgICAgICAgICAgICAgICAgICAkc3JjZGlyLyRz dWJkaXIvKi5DIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICRzcmNkaXIv JHN1YmRpci9saW51eC8qLkMgXAorICAgICAgICAgICAgICAgICAgICAgICAg JHNyY2Rpci9jLWMrKy1jb21tb24vYXNhbi8qLmMgXAorICAgICAgICAgICAg ICAgICAgICAgICAgJHNyY2Rpci9jLWMrKy1jb21tb24vYXNhbi9saW51eC8q LmNdXSB7CisgIAorICBzZXQgYXNhbl90b3J0dXJlX29wdGlvbnMgJGRlZmF1 bHRfYXNhbl90b3J0dXJlX29wdGlvbnMKKyAgaWYgeyBbc3RyaW5nIG1hdGNo ICIqZGVlcC1zdGFjay11YWYtMS5DIiAkc3JjZmlsZV0gfSB7CisgICAgc2V0 ZW52IEFTQU5fT1BUSU9OUyAibWFsbG9jX2NvbnRleHRfc2l6ZT0xMjA6cmVk em9uZT01MTIiCisgIH0gZWxzZWlmIHsgW3N0cmluZyBtYXRjaCAiKmZvcmNl LWlubGluZS1vcHQwLTEuYyIgJHNyY2ZpbGVdIH0geworICAgIHNldCBhc2Fu X3RvcnR1cmVfb3B0aW9ucyBbbGlzdCB7IC1PMCAtbTY0IH0geyAtTzEgLW02 NCB9XQorICB9IGVsc2VpZiB7IFtzdHJpbmcgbWF0Y2ggIippbml0aWFsaXph dGlvbi1idWctMS5jIiAkc3JjZmlsZV0gfSB7CisgICAgc2V0IGFzYW5fdG9y dHVyZV9vcHRpb25zIFtsaXN0IHsgLU8wIC1tMzIgfSB7IC1PMCAtbTY0IH1d CisgIH0gZWxzZWlmIHsgW3N0cmluZyBtYXRjaCAiKmludGVyZmFjZS1zeW1i b2xzLTEuYyIgJHNyY2ZpbGVdIAorICAgICAgICAgICAgIHx8IFtzdHJpbmcg bWF0Y2ggIipzeW1ib2xpemUtY2FsbGJhY2stMS5DIiAkc3JjZmlsZV0KKyAg ICAgICAgICAgICB8fCBbc3RyaW5nIG1hdGNoICIqbWFsbG9jLWhvb2stMS5D IiAkc3JjZmlsZV0gfSB7CisgICAgc2V0IGFzYW5fdG9ydHVyZV9vcHRpb25z IFtsaXN0IHsgLU8yIH1dCisgIH0gZWxzZWlmIHsgW3N0cmluZyBtYXRjaCAi KnNsZWVwLWJlZm9yZS1keWluZy0xLmMiICRzcmNmaWxlXSB9IHsKKyAgICBz ZXRlbnYgQVNBTl9PUFRJT05TICJzbGVlcF9iZWZvcmVfZHlpbmc9MSIKKyAg ICBzZXQgYXNhbl90b3J0dXJlX29wdGlvbnMgW2xpc3QgeyAtTzIgfV0KKyAg fSBlbHNlaWYgeyBbc3RyaW5nIG1hdGNoICIqc3RyaXAtcGF0aC1wcmVmaXgt MS5jIiAkc3JjZmlsZV0gfSB7CisgICAgc2V0ZW52IEFTQU5fT1BUSU9OUyAi c3RyaXBfcGF0aF9wcmVmaXg9Jy8nIgorICAgIHNldCBhc2FuX3RvcnR1cmVf b3B0aW9ucyBbbGlzdCB7IC1PMiB9XQorICB9IGVsc2VpZiB7IFtzdHJpbmcg bWF0Y2ggIippbml0aWFsaXphdGlvbi1idWctYW55LW9yZGVyLTEuYyIgJHNy Y2ZpbGVdIH0geworICAgIHNldCBhc2FuX3RvcnR1cmVfb3B0aW9ucyBbbGlz dCB7IC1PMCB9XQorICAgIHNldC10b3J0dXJlLW9wdGlvbnMgJGFzYW5fdG9y dHVyZV9vcHRpb25zCisgICAgZ2xvYmFsIHN1YnRlc3QKKyAgICBzZXQgc3Vi dGVzdCAic3VidGVzdDEiCisgICAgZ2NjLWRnLXJ1bnRlc3QgJHNyY2ZpbGUg IiIKKyAgICBzZXQgc3VidGVzdCAic3VidGVzdDIiCisgIH0gZWxzZWlmIHsg W3N0cmluZyBtYXRjaCAiKnJsaW1pdC1tbWFwLXRlc3QtMS5jIiAkc3JjZmls ZV0gfSB7CisgICAgc2V0IGFzYW5fdG9ydHVyZV9vcHRpb25zIFtsaXN0IHsg fV0KKyAgfQorCisgIHNldC10b3J0dXJlLW9wdGlvbnMgJGFzYW5fdG9ydHVy ZV9vcHRpb25zCisgIGdjYy1kZy1ydW50ZXN0ICRzcmNmaWxlICIiCisKKyAg aWYgeyBbc3RyaW5nIG1hdGNoICIqZGVlcC1zdGFjay11YWYtMS5DIiAkc3Jj ZmlsZV0gCisgICAgICAgfHwgW3N0cmluZyBtYXRjaCAiKnNsZWVwLWJlZm9y ZS1keWluZy0xLmMiICRzcmNmaWxlXQorICAgICAgIHx8IFtzdHJpbmcgbWF0 Y2ggIipzdHJpcC1wYXRoLXByZWZpeC0xLmMiICRzcmNmaWxlXSB9IHsKKyAg ICB1bnNldGVudiBBU0FOX09QVElPTlMKKyAgfQorfQogCiAjIEFsbCBkb25l LgogYXNhbl9maW5pc2gKSW5kZXg6IGdjYy90ZXN0c3VpdGUvZysrLmRnL2Fz YW4vaW5pdGlhbGl6YXRpb24tbm9idWctMS5DCj09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT0KLS0tIGdjYy90ZXN0c3VpdGUvZysrLmRnL2FzYW4vaW5pdGlhbGl6 YXRpb24tbm9idWctMS5DCShyZXZpc2lvbiAwKQorKysgZ2NjL3Rlc3RzdWl0 ZS9nKysuZGcvYXNhbi9pbml0aWFsaXphdGlvbi1ub2J1Zy0xLkMJKHJldmlz aW9uIDApCkBAIC0wLDAgKzEsNTEgQEAKKy8vIEEgY29sbGVjdGlvbiBvZiB2 YXJpb3VzIGluaXRpYWxpemVycyB3aGljaCBzaG91bGRuJ3QgdHJpcCB1cCBp bml0aWFsaXphdGlvbgorLy8gb3JkZXIgY2hlY2tpbmcuICBJZiBzdWNjZXNz ZnVsLCB0aGlzIHdpbGwganVzdCByZXR1cm4gMC4KKworLyogeyBkZy1kbyBy dW4gfSAqLworLyogeyBkZy1vcHRpb25zICItLXN0ZD1jKysxMSAtYXNhbi1p bml0aWFsaXphdGlvbi1vcmRlciIgfSAqLworCisvLyBTaW1wbGUgYWNjZXNz OgorLy8gTWFrZSBzdXJlIHRoYXQgYWNjZXNzaW5nIGEgZ2xvYmFsIGluIHRo ZSBzYW1lIFRVIGlzIHNhZmUKKworYm9vbCBjb25kaXRpb24gPSB0cnVlOwor aW50IGluaXRpYWxpemVTYW1lVFUoKSB7CisgIHJldHVybiBjb25kaXRpb24g PyAweDJhIDogMDUyOworfQoraW50IHNhbWVUVSA9IGluaXRpYWxpemVTYW1l VFUoKTsKKworLy8gTGlua2VyIGluaXRpYWxpemVkOgorLy8gQ2hlY2sgdGhh dCBhY2Nlc3MgdG8gbGlua2VyIGluaXRpYWxpemVkIGdsb2JhbHMgb3JpZ2lu YXRpbmcgZnJvbSBhIGRpZmZlcmVudAorLy8gVFUncyBpbml0aWFsaXplciBp cyBzYWZlLgorCitpbnQgQSA9ICgxIDw8IDEpICsgKDEgPDwgMykgKyAoMSA8 PCA1KSwgQjsKK2ludCBnZXRBQigpIHsKKyAgcmV0dXJuIEEgKiBCOworfQor CisvLyBGdW5jdGlvbiBsb2NhbCBzdGF0aWNzOgorLy8gQ2hlY2sgdGhhdCBh Y2Nlc3MgdG8gZnVuY3Rpb24gbG9jYWwgc3RhdGljcyBvcmlnaW5hdGluZyBm cm9tIGEgZGlmZmVyZW50CisvLyBUVSdzIGluaXRpYWxpemVyIGlzIHNhZmUu CisKK2ludCBjb3VudENhbGxzKCkgeworICBzdGF0aWMgaW50IGNhbGxzOwor ICByZXR1cm4gKytjYWxsczsKK30KKworLy8gQ29uc3RleHByOgorLy8gV2Ug bmVlZCB0byBjaGVjayB0aGF0IGEgZ2xvYmFsIHZhcmlhYmxlIGluaXRpYWxp emVkIHdpdGggYSBjb25zdGV4cHIKKy8vIGNvbnN0cnVjdG9yIGNhbiBiZSBh Y2Nlc3NlZCBkdXJpbmcgZHluYW1pYyBpbml0aWFsaXphdGlvbiAoYXMgYSBj b25zdGV4cHIKKy8vIGNvbnN0cnVjdG9yIGltcGxpZXMgdGhhdCBpdCB3YXMg aW5pdGlhbGl6ZWQgZHVyaW5nIGNvbnN0YW50IGluaXRpYWxpemF0aW9uLAor Ly8gbm90IGR5bmFtaWMgaW5pdGlhbGl6YXRpb24pLgorCitjbGFzcyBJbnRl Z2VyIHsKKyAgcHJpdmF0ZToKKyAgaW50IHZhbHVlOworCisgIHB1YmxpYzoK KyAgY29uc3RleHByIEludGVnZXIoaW50IHggPSAwKSA6IHZhbHVlKHgpIHt9 CisgIGludCBnZXRWYWx1ZSgpIHtyZXR1cm4gdmFsdWU7fQorfTsKK0ludGVn ZXIgY29vbGVzdEludGVnZXIoNDIpOworaW50IGdldENvb2xlc3RJbnRlZ2Vy KCkgeyByZXR1cm4gY29vbGVzdEludGVnZXIuZ2V0VmFsdWUoKTsgfQorCitp bnQgbWFpbigpIHsgcmV0dXJuIDA7IH0KSW5kZXg6IGdjYy90ZXN0c3VpdGUv ZysrLmRnL2FzYW4vbGFyZ2UtZnVuYy10ZXN0LTEuQwo9PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09Ci0tLSBnY2MvdGVzdHN1aXRlL2crKy5kZy9hc2FuL2xhcmdl LWZ1bmMtdGVzdC0xLkMJKHJldmlzaW9uIDApCisrKyBnY2MvdGVzdHN1aXRl L2crKy5kZy9hc2FuL2xhcmdlLWZ1bmMtdGVzdC0xLkMJKHJldmlzaW9uIDAp CkBAIC0wLDAgKzEsNDYgQEAKKy8qIHsgZGctZG8gcnVuIH0gKi8KKy8qIHsg ZGctc2hvdWxkZmFpbCAiYXNhbiIgfSAqLworCisjaW5jbHVkZSA8c3RkbGli Lmg+CitfX2F0dHJpYnV0ZV9fKChub2lubGluZSkpCitzdGF0aWMgdm9pZCBM YXJnZUZ1bmN0aW9uKGludCAqeCwgaW50IHplcm8pIHsKKyAgeFswXSsrOwor ICB4WzFdKys7CisgIHhbMl0rKzsKKyAgeFszXSsrOworICB4WzRdKys7Cisg IHhbNV0rKzsKKyAgeFs2XSsrOworICB4WzddKys7CisgIHhbOF0rKzsKKyAg eFs5XSsrOworCisgIHhbemVybyArIDExMV0rKzsgIC8vIHdlIHNob3VsZCBy ZXBvcnQgdGhpcyBleGFjdCBsaW5lCisKKyAgeFsxMF0rKzsKKyAgeFsxMV0r KzsKKyAgeFsxMl0rKzsKKyAgeFsxM10rKzsKKyAgeFsxNF0rKzsKKyAgeFsx NV0rKzsKKyAgeFsxNl0rKzsKKyAgeFsxN10rKzsKKyAgeFsxOF0rKzsKKyAg eFsxOV0rKzsKK30KKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2 KSB7CisgIGludCAqeCA9IG5ldyBpbnRbMTAwXTsKKyAgTGFyZ2VGdW5jdGlv bih4LCBhcmdjIC0gMSk7CisgIGRlbGV0ZSB4OworfQorCisvKiB7IGRnLW91 dHB1dCAiRVJST1I6IEFkZHJlc3NTYW5pdGl6ZXIgaGVhcC1idWZmZXItb3Zl cmZsb3cgb24gYWRkcmVzc1xbXlxuXHJdKiIgfSAqLworLyogeyBkZy1vdXRw dXQgIjB4XFswLTlhLWZcXSsgYXQgcGMgMHhcWzAtOWEtZlxdKyBicCAweFxb MC05YS1mXF0rIHNwIDB4XFswLTlhLWZcXStcW15cblxyXSooXG58XHJcbnxc cikiIH0gKi8KKy8qIHsgZGctb3V0cHV0ICJSRUFEIG9mIHNpemUgNCBhdCAw eFxbMC05YS1mXF0rIHRocmVhZCBUMFxbXlxuXHJdKihcbnxcclxufFxyKSIg fSAqLworLyogeyBkZy1vdXRwdXQgIiAgICAjMCAweFxbMC05YS1mXF0rIChp biBcW15cblxyXSpMYXJnZUZ1bmN0aW9uXFteXG5ccl0qKGxhcmdlLWZ1bmMt dGVzdC0xLkM6MTh8XFs/XF1cWz9cXTowKXxcWyhcXSkuKihcbnxcclxufFxy KSIgfSAqLworLyogeyBkZy1vdXRwdXQgIjB4XFswLTlhLWZcXSsgaXMgbG9j YXRlZCA0NCBieXRlcyB0byB0aGUgcmlnaHQgb2YgNDAwLWJ5dGUgcmVnaW9u LiooXG58XHJcbnxccikiIH0gKi8KKy8qIHsgZGctb3V0cHV0ICJhbGxvY2F0 ZWQgYnkgdGhyZWFkIFQwIGhlcmU6XFteXG5ccl0qKFxufFxyXG58XHIpIiB9 ICovCisvKiB7IGRnLW91dHB1dCAiICAgICMwIDB4XFswLTlhLWZcXSsgKGlu IF8qKGludGVyY2VwdG9yX3wpbWFsbG9jfFxbKFxdKVxbXlxuXHJdKihcbnxc clxufFxyKSIgfSAqLworLyogeyBkZy1vdXRwdXQgIiAgICAjMSAweFxbMC05 YS1mXF0rIChpbiAob3BlcmF0b3IgbmV3fF9abndtKXxcWyhcXSlcW15cblxy XSooXG58XHJcbnxccikiIH0gKi8KKy8qIHsgZGctb3V0cHV0ICIgICAgIzIg MHhcWzAtOWEtZlxdKyAoaW4gXyptYWluXFteXG5ccl0qKGxhcmdlLWZ1bmMt dGVzdC0xLkM6MzN8XFs/XF1cWz9cXTowKXxcWyhcXSlcW15cblxyXSooXG58 XHJcbnxccikiIH0gKi8KSW5kZXg6IGdjYy90ZXN0c3VpdGUvZysrLmRnL2Fz YW4vU2hhcmVkTGlicy9kbGNsb3NlLXRlc3QtMS1zby5DCj09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT0KLS0tIGdjYy90ZXN0c3VpdGUvZysrLmRnL2FzYW4vU2hh cmVkTGlicy9kbGNsb3NlLXRlc3QtMS1zby5DCShyZXZpc2lvbiAwKQorKysg Z2NjL3Rlc3RzdWl0ZS9nKysuZGcvYXNhbi9TaGFyZWRMaWJzL2RsY2xvc2Ut dGVzdC0xLXNvLkMJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzMgQEAKKy8v PT09LS0tLS0tLS0tLS0gZGxjbG9zZS10ZXN0LXNvLmNjIC0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tKi0gQysrIC0qLT09PS8vCisvLworLy8gICAg ICAgICAgICAgICAgICAgICBUaGUgTExWTSBDb21waWxlciBJbmZyYXN0cnVj dHVyZQorLy8KKy8vIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0 aGUgVW5pdmVyc2l0eSBvZiBJbGxpbm9pcyBPcGVuIFNvdXJjZQorLy8gTGlj ZW5zZS4gU2VlIExJQ0VOU0UuVFhUIGZvciBkZXRhaWxzLgorLy8KKy8vPT09 LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PS8vCisvLworLy8gVGhpcyBm aWxlIGlzIGEgcGFydCBvZiBBZGRyZXNzU2FuaXRpemVyLCBhbiBhZGRyZXNz IHNhbml0eSBjaGVja2VyLgorLy8KKy8vIFJlZ3Jlc3Npb24gdGVzdCBmb3IK Ky8vIGh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC9hZGRyZXNzLXNhbml0aXpl ci9pc3N1ZXMvZGV0YWlsP2lkPTE5CisvLz09PS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS09PT0vLworI2luY2x1ZGUgPHN0ZGlvLmg+CisKK3N0YXRpYyBp bnQgcGFkMTsKK3N0YXRpYyBpbnQgc3RhdGljX3ZhcjsKK3N0YXRpYyBpbnQg cGFkMjsKKworZXh0ZXJuICJDIgoraW50ICpnZXRfYWRkcmVzc19vZl9zdGF0 aWNfdmFyKCkgeworICByZXR1cm4gJnN0YXRpY192YXI7Cit9CisKK19fYXR0 cmlidXRlX18oKGNvbnN0cnVjdG9yKSkKK3ZvaWQgYXRfZGxvcGVuKCkgewor ICBwcmludGYoIiVzOiBJIGFtIGJlaW5nIGRsb3BlbmVkXG4iLCBfX0ZJTEVf Xyk7Cit9CitfX2F0dHJpYnV0ZV9fKChkZXN0cnVjdG9yKSkKK3ZvaWQgYXRf ZGxjbG9zZSgpIHsKKyAgcHJpbnRmKCIlczogSSBhbSBiZWluZyBkbGNsb3Nl ZFxuIiwgX19GSUxFX18pOworfQpJbmRleDogZ2NjL3Rlc3RzdWl0ZS9nKysu ZGcvYXNhbi9TaGFyZWRMaWJzL3NoYXJlZC1saWItdGVzdC0xLXNvLkMKPT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PQotLS0gZ2NjL3Rlc3RzdWl0ZS9nKysuZGcv YXNhbi9TaGFyZWRMaWJzL3NoYXJlZC1saWItdGVzdC0xLXNvLkMJKHJldmlz aW9uIDApCisrKyBnY2MvdGVzdHN1aXRlL2crKy5kZy9hc2FuL1NoYXJlZExp YnMvc2hhcmVkLWxpYi10ZXN0LTEtc28uQwkocmV2aXNpb24gMCkKQEAgLTAs MCArMSwyMSBAQAorLy89PT0tLS0tLS0tLS0tLSBzaGFyZWQtbGliLXRlc3Qt c28uY2MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLSBDKysgLSotPT09 Ly8KKy8vCisvLyAgICAgICAgICAgICAgICAgICAgIFRoZSBMTFZNIENvbXBp bGVyIEluZnJhc3RydWN0dXJlCisvLworLy8gVGhpcyBmaWxlIGlzIGRpc3Ry aWJ1dGVkIHVuZGVyIHRoZSBVbml2ZXJzaXR5IG9mIElsbGlub2lzIE9wZW4g U291cmNlCisvLyBMaWNlbnNlLiBTZWUgTElDRU5TRS5UWFQgZm9yIGRldGFp bHMuCisvLworLy89PT0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09Ly8K Ky8vCisvLyBUaGlzIGZpbGUgaXMgYSBwYXJ0IG9mIEFkZHJlc3NTYW5pdGl6 ZXIsIGFuIGFkZHJlc3Mgc2FuaXR5IGNoZWNrZXIuCisvLworLy89PT0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09Ly8KKyNpbmNsdWRlIDxzdGRpby5o PgorCitpbnQgcGFkWzEwXTsKK2ludCBHTE9CWzEwXSA9IHswLCAwLCAwLCAw LCAwLCAwLCAwLCAwLCAwLCAwfTsKKworZXh0ZXJuICJDIgordm9pZCBpbmMo aW50IGluZGV4KSB7CisgIEdMT0JbaW5kZXhdKys7Cit9CkluZGV4OiBnY2Mv dGVzdHN1aXRlL2crKy5kZy9hc2FuL2RsY2xvc2UtdGVzdC0xLkMKPT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PQotLS0gZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvYXNh bi9kbGNsb3NlLXRlc3QtMS5DCShyZXZpc2lvbiAwKQorKysgZ2NjL3Rlc3Rz dWl0ZS9nKysuZGcvYXNhbi9kbGNsb3NlLXRlc3QtMS5DCShyZXZpc2lvbiAw KQpAQCAtMCwwICsxLDY3IEBACisvLyBSZWdyZXNzaW9uIHRlc3QgZm9yCisv LyBodHRwOi8vY29kZS5nb29nbGUuY29tL3AvYWRkcmVzcy1zYW5pdGl6ZXIv aXNzdWVzL2RldGFpbD9pZD0xOQorLy8gQnVnIGRlc2NyaXB0aW9uOgorLy8g MS4gYXBwbGljYXRpb24gZGxvcGVucyBmb28uc28KKy8vIDIuIGFzYW4gcmVn aXN0ZXJzIGFsbCBnbG9iYWxzIGZyb20gZm9vLnNvCisvLyAzLiBhcHBsaWNh dGlvbiBkbGNsb3NlcyBmb28uc28KKy8vIDQuIGFwcGxpY2F0aW9uIG1tYXBz IHNvbWUgbWVtb3J5IHRvIHRoZSBsb2NhdGlvbiB3aGVyZSBmb28uc28gd2Fz IGJlZm9yZQorLy8gNS4gYXBwbGljYXRpb24gc3RhcnRzIHVzaW5nIHRoaXMg bW1hcGVkIG1lbW9yeSwgYnV0IGFzYW4gc3RpbGwgdGhpbmtzIHRoZXJlCisv LyBhcmUgZ2xvYmFscy4KKy8vIDYuIEJPT00KKworLyogeyBkZy1kbyBydW4g fSAqLworCisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisjaW5jbHVkZSA8ZGxmY24u aD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgor I2luY2x1ZGUgPHN5cy9tbWFuLmg+CisKKyNpbmNsdWRlIDxzdHJpbmc+CisK K3VzaW5nIHN0ZDo6c3RyaW5nOworCitzdGF0aWMgY29uc3QgaW50IGtQYWdl U2l6ZSA9IDQwOTY7CisKK3R5cGVkZWYgaW50ICooZnVuX3QpKCk7CisKK2lu dCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pIHsKKyAgc3RyaW5nIHBh dGggPSBzdHJpbmcoYXJndlswXSkgKyAiLXNvLnNvIjsKKyAgcHJpbnRmKCJv cGVuaW5nICVzIC4uLiBcbiIsIHBhdGguY19zdHIoKSk7CisgIHZvaWQgKmxp YiA9IGRsb3BlbihwYXRoLmNfc3RyKCksIFJUTERfTk9XKTsKKyAgaWYgKCFs aWIpIHsKKyAgICBwcmludGYoImVycm9yIGluIGRsb3BlbigpOiAlc1xuIiwg ZGxlcnJvcigpKTsKKyAgICByZXR1cm4gMTsKKyAgfQorICBmdW5fdCAqZ2V0 ID0gKGZ1bl90KilkbHN5bShsaWIsICJnZXRfYWRkcmVzc19vZl9zdGF0aWNf dmFyIik7CisgIGlmICghZ2V0KSB7CisgICAgcHJpbnRmKCJmYWlsZWQgZGxz eW1cbiIpOworICAgIHJldHVybiAxOworICB9CisgIGludCAqYWRkciA9IGdl dCgpOworICAvL2Fzc2VydCgoKHNpemVfdClhZGRyICUgMzIpID09IDApOyAg Ly8gc2hvdWxkIGJlIDMyLWJ5dGUgYWxpZ25lZC4KKyAgcHJpbnRmKCJhZGRy OiAlcFxuIiwgYWRkcik7CisgIGFkZHJbMF0gPSAxOyAgLy8gbWFrZSBzdXJl IHdlIGNhbiB3cml0ZSB0aGVyZS4KKworICAvLyBOb3cgZGxjbG9zZSB0aGUg c2hhcmVkIGxpYnJhcnkuCisgIHByaW50ZigiYXR0ZW1wdGluZyB0byBkbGNs b3NlXG4iKTsKKyAgaWYgKGRsY2xvc2UobGliKSkgeworICAgIHByaW50Zigi ZmFpbGVkIHRvIGRsY2xvc2VcbiIpOworICAgIHJldHVybiAxOworICB9Cisg IC8vIE5vdywgdGhlIHBhZ2Ugd2hlcmUgJ2FkZHInIGlzIHVubWFwcGVkLiBN YXAgaXQuCisgIHNpemVfdCBwYWdlX2JlZyA9ICgoc2l6ZV90KWFkZHIpICYg fihrUGFnZVNpemUgLSAxKTsKKyAgdm9pZCAqcmVzID0gbW1hcCgodm9pZCop KHBhZ2VfYmVnKSwga1BhZ2VTaXplLAorICAgICAgICAgICAgICAgICAgIFBS T1RfUkVBRCB8IFBST1RfV1JJVEUsCisgICAgICAgICAgICAgICAgICAgTUFQ X1BSSVZBVEUgfCBNQVBfQU5PTiB8IE1BUF9GSVhFRCB8IE1BUF9OT1JFU0VS VkUsIDAsIDApOworICBpZiAocmVzID09IChjaGFyKiktMUwpIHsKKyAgICBw cmludGYoImZhaWxlZCB0byBtbWFwXG4iKTsKKyAgICByZXR1cm4gMTsKKyAg fQorICBhZGRyWzFdID0gMjsgIC8vIEJPT00gKGlmIHRoZSBidWcgaXMgbm90 IGZpeGVkKS4KKyAgcHJpbnRmKCJQQVNTXG4iKTsKKyAgLy8gQ0hFQ0s6IFBB U1MKKyAgcmV0dXJuIDA7Cit9CisKKy8qIHsgZGctb3V0cHV0ICJQQVNTIiB9 ICovCkluZGV4OiBnY2MvdGVzdHN1aXRlL2crKy5kZy9hc2FuL21hbGxvYy1o b29rLTEuQwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBnY2MvdGVzdHN1 aXRlL2crKy5kZy9hc2FuL21hbGxvYy1ob29rLTEuQwkocmV2aXNpb24gMCkK KysrIGdjYy90ZXN0c3VpdGUvZysrLmRnL2FzYW4vbWFsbG9jLWhvb2stMS5D CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDI0IEBACisvKiB7IGRnLWRvIHJ1 biB9ICovCisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8dW5pc3Rk Lmg+CisKK2V4dGVybiAiQyIgeworLy8gTm90ZTogYXZvaWQgY2FsbGluZyBm dW5jdGlvbnMgdGhhdCBhbGxvY2F0ZSBtZW1vcnkgaW4gbWFsbG9jL2ZyZWUK Ky8vIHRvIGF2b2lkIGluZmluaXRlIHJlY3Vyc2lvbi4KK3ZvaWQgX19hc2Fu X21hbGxvY19ob29rKHZvaWQgKnB0ciwgc2l6ZV90IHN6KSB7CisgIHdyaXRl KDEsICJNYWxsb2NIb29rXG4iLCBzaXplb2YoIk1hbGxvY0hvb2tcbiIpKTsK K30KK3ZvaWQgX19hc2FuX2ZyZWVfaG9vayh2b2lkICpwdHIpIHsKKyAgd3Jp dGUoMSwgIkZyZWVIb29rXG4iLCBzaXplb2YoIkZyZWVIb29rXG4iKSk7Cit9 Cit9ICAvLyBleHRlcm4gIkMiCisKK2ludCBtYWluKCkgeworICB2b2xhdGls ZSBpbnQgKnggPSBuZXcgaW50OworICAqeCA9IDA7CisgIGRlbGV0ZSB4Owor ICByZXR1cm4gMDsKK30KKworLyogeyBkZy1vdXRwdXQgIk1hbGxvY0hvb2so XG58XHJcbnxccikiIH0gKi8KKy8qIHsgZGctb3V0cHV0ICJGcmVlSG9vayhc bnxcclxufFxyKSIgfSAqLwpJbmRleDogZ2NjL3Rlc3RzdWl0ZS9nKysuZGcv YXNhbi9zeW1ib2xpemUtY2FsbGJhY2stMS5DCj09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT0KLS0tIGdjYy90ZXN0c3VpdGUvZysrLmRnL2FzYW4vc3ltYm9saXpl LWNhbGxiYWNrLTEuQwkocmV2aXNpb24gMCkKKysrIGdjYy90ZXN0c3VpdGUv ZysrLmRnL2FzYW4vc3ltYm9saXplLWNhbGxiYWNrLTEuQwkocmV2aXNpb24g MCkKQEAgLTAsMCArMSwxOSBAQAorLyogeyBkZy1kbyBydW4gfSAqLworLyog eyBkZy1zaG91bGRmYWlsICJhc2FuIiB9ICovCisKKyNpbmNsdWRlIDxzdGRp by5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorCitleHRlcm4gIkMiCitib29s IF9fYXNhbl9zeW1ib2xpemUoY29uc3Qgdm9pZCAqcGMsIGNoYXIgKm91dF9i dWZmZXIsIGludCBvdXRfc2l6ZSkgeworICBzbnByaW50ZihvdXRfYnVmZmVy LCBvdXRfc2l6ZSwgIk15U3ltYm9saXplciIpOworICByZXR1cm4gdHJ1ZTsK K30KKworaW50IG1haW4oKSB7CisgIGNoYXIgKnggPSAoY2hhciopbWFsbG9j KDEwICogc2l6ZW9mKGNoYXIpKTsKKyAgZnJlZSh4KTsKKyAgcmV0dXJuIHhb NV07Cit9CisKKy8qIHsgZGctb3V0cHV0ICJNeVN5bWJvbGl6ZXIiIH0gKi8K SW5kZXg6IGdjYy90ZXN0c3VpdGUvZysrLmRnL2FzYW4vZGVmYXVsdC1vcHRp b25zLTEuQwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBnY2MvdGVzdHN1 aXRlL2crKy5kZy9hc2FuL2RlZmF1bHQtb3B0aW9ucy0xLkMJKHJldmlzaW9u IDApCisrKyBnY2MvdGVzdHN1aXRlL2crKy5kZy9hc2FuL2RlZmF1bHQtb3B0 aW9ucy0xLkMJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTYgQEAKKy8qIHsg ZGctZG8gcnVuIH0gKi8KKy8qIHsgZGctc2hvdWxkZmFpbCAiYXNhbiIgfSAq LworCitjb25zdCBjaGFyICprQXNhbkRlZmF1bHRPcHRpb25zPSJ2ZXJib3Np dHk9MSBmb289YmFyIjsKKworZXh0ZXJuICJDIgorX19hdHRyaWJ1dGVfXygo bm9fYWRkcmVzc19zYWZldHlfYW5hbHlzaXMpKQorY29uc3QgY2hhciAqX19h c2FuX2RlZmF1bHRfb3B0aW9ucygpIHsKKyAgcmV0dXJuIGtBc2FuRGVmYXVs dE9wdGlvbnM7Cit9CisKK2ludCBtYWluKCkgeworICByZXR1cm4gMDsKK30K KworLyogeyBkZy1vdXRwdXQgIlVzaW5nIHRoZSBkZWZhdWx0cyBmcm9tIF9f YXNhbl9kZWZhdWx0X29wdGlvbnM6LiogZm9vPWJhci4qKFxufFxyXG58XHIp IiB9ICovCkluZGV4OiBnY2MvdGVzdHN1aXRlL2crKy5kZy9hc2FuL2RlZXAt dGFpbC1jYWxsLTEuQwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBnY2Mv dGVzdHN1aXRlL2crKy5kZy9hc2FuL2RlZXAtdGFpbC1jYWxsLTEuQwkocmV2 aXNpb24gMCkKKysrIGdjYy90ZXN0c3VpdGUvZysrLmRnL2FzYW4vZGVlcC10 YWlsLWNhbGwtMS5DCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDIwIEBACisv KiB7IGRnLWRvIHJ1biB9ICovCisvKiB7IGRnLW9wdGlvbnMgIi1tbm8tb21p dC1sZWFmLWZyYW1lLXBvaW50ZXIgLWZuby1vbWl0LWZyYW1lLXBvaW50ZXIg LWZuby1vcHRpbWl6ZS1zaWJsaW5nLWNhbGxzIiB9ICovCisvKiB7IGRnLXNo b3VsZGZhaWwgImFzYW4iIH0gKi8KKworaW50IGdsb2JhbFsxMF07Cit2b2lk IF9fYXR0cmlidXRlX18oKG5vaW5saW5lKSkgY2FsbDQoaW50IGkpIHsgZ2xv YmFsW2krMTBdKys7IH0KK3ZvaWQgX19hdHRyaWJ1dGVfXygobm9pbmxpbmUp KSBjYWxsMyhpbnQgaSkgeyBjYWxsNChpKTsgfQordm9pZCBfX2F0dHJpYnV0 ZV9fKChub2lubGluZSkpIGNhbGwyKGludCBpKSB7IGNhbGwzKGkpOyB9Cit2 b2lkIF9fYXR0cmlidXRlX18oKG5vaW5saW5lKSkgY2FsbDEoaW50IGkpIHsg Y2FsbDIoaSk7IH0KK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikg eworICBjYWxsMShhcmdjKTsKKyAgcmV0dXJuIGdsb2JhbFswXTsKK30KKwor LyogeyBkZy1vdXRwdXQgIkFkZHJlc3NTYW5pdGl6ZXIgZ2xvYmFsLWJ1ZmZl ci1vdmVyZmxvdy4qKFxufFxyXG58XHIpIiB9ICovCisvKiB7IGRnLW91dHB1 dCAiICAgICMwIDB4XFswLTlhLWZcXSsgKGluIFxbXlxuXHJdKmNhbGw0XFte XG5ccl0qfFxbKFxdKVxbXlxuXHJdKihcbnxcclxufFxyKSIgfSAqLworLyog eyBkZy1vdXRwdXQgIiAgICAjMSAweFxbMC05YS1mXF0rIChpbiBcW15cblxy XSpjYWxsM1xbXlxuXHJdKnxcWyhcXSlcW15cblxyXSooXG58XHJcbnxcciki IH0gKi8KKy8qIHsgZGctb3V0cHV0ICIgICAgIzIgMHhcWzAtOWEtZlxdKyAo aW4gXFteXG5ccl0qY2FsbDJcW15cblxyXSp8XFsoXF0pXFteXG5ccl0qKFxu fFxyXG58XHIpIiB9ICovCisvKiB7IGRnLW91dHB1dCAiICAgICMzIDB4XFsw LTlhLWZcXSsgKGluIFxbXlxuXHJdKmNhbGwxXFteXG5ccl0qfFxbKFxdKVxb XlxuXHJdKihcbnxcclxufFxyKSIgfSAqLworLyogeyBkZy1vdXRwdXQgIiAg ICAjNCAweFxbMC05YS1mXF0rIChpbiBcW15cblxyXSptYWluXFteXG5ccl0q fFxbKFxdKVxbXlxuXHJdKihcbnxcclxufFxyKSIgfSAqLwpJbmRleDogZ2Nj L3Rlc3RzdWl0ZS9nKysuZGcvYXNhbi9saW51eC9pbnRlcmNlcHRpb24tdGVz dC0xLkMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gZ2NjL3Rlc3RzdWl0 ZS9nKysuZGcvYXNhbi9saW51eC9pbnRlcmNlcHRpb24tdGVzdC0xLkMJKHJl dmlzaW9uIDApCisrKyBnY2MvdGVzdHN1aXRlL2crKy5kZy9hc2FuL2xpbnV4 L2ludGVyY2VwdGlvbi10ZXN0LTEuQwkocmV2aXNpb24gMCkKQEAgLTAsMCAr MSwyMiBAQAorLy8gQVNhbiBpbnRlcmNlcHRvciBjYW4gYmUgYWNjZXNzZWQg d2l0aCBfX2ludGVyY2VwdG9yXyBwcmVmaXguCisKKy8qIHsgZGctZG8gcnVu IH0gKi8KKy8qIHsgZGctc2hvdWxkZmFpbCAiYXNhbiIgfSAqLworCisjaW5j bHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKworZXh0ZXJu ICJDIiBsb25nIF9faW50ZXJjZXB0b3Jfc3RydG9sKGNvbnN0IGNoYXIgKm5w dHIsIGNoYXIgKiplbmRwdHIsIGludCBiYXNlKTsKK2V4dGVybiAiQyIgbG9u ZyBzdHJ0b2woY29uc3QgY2hhciAqbnB0ciwgY2hhciAqKmVuZHB0ciwgaW50 IGJhc2UpIHsKKyAgZnByaW50ZihzdGRlcnIsICJteV9zdHJ0b2xfaW50ZXJj ZXB0b3JcbiIpOworICByZXR1cm4gX19pbnRlcmNlcHRvcl9zdHJ0b2wobnB0 ciwgZW5kcHRyLCBiYXNlKTsKK30KKworaW50IG1haW4oKSB7CisgIGNoYXIg KnggPSAoY2hhciopbWFsbG9jKDEwICogc2l6ZW9mKGNoYXIpKTsKKyAgZnJl ZSh4KTsKKyAgcmV0dXJuIChpbnQpc3RydG9sKHgsIDAsIDEwKTsKK30KKwor LyogeyBkZy1vdXRwdXQgIm15X3N0cnRvbF9pbnRlcmNlcHRvci4qKFxufFxy XG58XHIpIiB9ICovCisvKiB7IGRnLW91dHB1dCAiXFteXG5ccl0qaGVhcC11 c2UtYWZ0ZXItZnJlZSIgfSAqLwpJbmRleDogZ2NjL3Rlc3RzdWl0ZS9nKysu ZGcvYXNhbi9saW51eC9pbnRlcmNlcHRpb24tZmFpbHVyZS10ZXN0LTEuQwo9 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09Ci0tLSBnY2MvdGVzdHN1aXRlL2crKy5k Zy9hc2FuL2xpbnV4L2ludGVyY2VwdGlvbi1mYWlsdXJlLXRlc3QtMS5DCShy ZXZpc2lvbiAwKQorKysgZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvYXNhbi9saW51 eC9pbnRlcmNlcHRpb24tZmFpbHVyZS10ZXN0LTEuQwkocmV2aXNpb24gMCkK QEAgLTAsMCArMSwyMSBAQAorLy8gSWYgdXNlciBwcm92aWRlcyBoaXMgb3du IGxpYmMgZnVuY3Rpb25zLCBBU2FuIGRvZXNuJ3QKKy8vIGludGVyY2VwdCB0 aGVzZSBmdW5jdGlvbnMuCisKKy8qIHsgZGctZG8gcnVuIH0gKi8KKworI2lu Y2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisKK2V4dGVy biAiQyIgbG9uZyBzdHJ0b2woY29uc3QgY2hhciAqbnB0ciwgY2hhciAqKmVu ZHB0ciwgaW50IGJhc2UpIHsKKyAgZnByaW50ZihzdGRlcnIsICJteV9zdHJ0 b2xfaW50ZXJjZXB0b3JcbiIpOworICByZXR1cm4gMDsKK30KKworaW50IG1h aW4oKSB7CisgIGNoYXIgKnggPSAoY2hhciopbWFsbG9jKDEwICogc2l6ZW9m KGNoYXIpKTsKKyAgZnJlZSh4KTsKKyAgcmV0dXJuIChpbnQpc3RydG9sKHgs IDAsIDEwKTsKKyAgLy8gQ0hFQ0s6IG15X3N0cnRvbF9pbnRlcmNlcHRvcgor fQorCisvKiB7IGRnLW91dHB1dCAibXlfc3RydG9sX2ludGVyY2VwdG9yIiB9 ICovCkluZGV4OiBnY2MvdGVzdHN1aXRlL2crKy5kZy9hc2FuL2xpbnV4L2lu dGVyY2VwdGlvbi1tYWxsb2MtdGVzdC0xLkMKPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PQotLS0gZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvYXNhbi9saW51eC9pbnRl cmNlcHRpb24tbWFsbG9jLXRlc3QtMS5DCShyZXZpc2lvbiAwKQorKysgZ2Nj L3Rlc3RzdWl0ZS9nKysuZGcvYXNhbi9saW51eC9pbnRlcmNlcHRpb24tbWFs bG9jLXRlc3QtMS5DCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDIzIEBACisv LyBBU2FuIGludGVyY2VwdG9yIGNhbiBiZSBhY2Nlc3NlZCB3aXRoIF9faW50 ZXJjZXB0b3JfIHByZWZpeC4KKworLyogeyBkZy1kbyBydW4gfSAqLworLyog eyBkZy1zaG91bGRmYWlsICJhc2FuIiB9ICovCisKKyNpbmNsdWRlIDxzdGRs aWIuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHVuaXN0ZC5o PgorCitleHRlcm4gIkMiIHZvaWQgKl9faW50ZXJjZXB0b3JfbWFsbG9jKHNp emVfdCBzaXplKTsKK2V4dGVybiAiQyIgdm9pZCAqbWFsbG9jKHNpemVfdCBz aXplKSB7CisgIHdyaXRlKDIsICJtYWxsb2MgY2FsbFxuIiwgc2l6ZW9mKCJt YWxsb2MgY2FsbFxuIikgLSAxKTsKKyAgcmV0dXJuIF9faW50ZXJjZXB0b3Jf bWFsbG9jKHNpemUpOworfQorCitpbnQgbWFpbigpIHsKKyAgY2hhciAqeCA9 IChjaGFyKiltYWxsb2MoMTAgKiBzaXplb2YoY2hhcikpOworICBmcmVlKHgp OworICByZXR1cm4gKGludClzdHJ0b2woeCwgMCwgMTApOworfQorCisvKiB7 IGRnLW91dHB1dCAibWFsbG9jIGNhbGwuKihcbnxcclxufFxyKSIgfSAqLwor LyogeyBkZy1vdXRwdXQgIlxbXlxuXHJdKmhlYXAtdXNlLWFmdGVyLWZyZWUi IH0gKi8KSW5kZXg6IGdjYy90ZXN0c3VpdGUvbGliL2FzYW4tZGcuZXhwCj09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT0KLS0tIGdjYy90ZXN0c3VpdGUvbGliL2Fz YW4tZGcuZXhwCShyZXZpc2lvbiAxOTM4ODEpCisrKyBnY2MvdGVzdHN1aXRl L2xpYi9hc2FuLWRnLmV4cAkod29ya2luZyBjb3B5KQpAQCAtNzUsNiArNzUs NyBAQCBwcm9jIGFzYW5faW5pdCB7IGFyZ3MgfSB7CiAJICAgIHNldCBsaW5r X2ZsYWdzICJbYXNhbl9saW5rX2ZsYWdzIFtnZXRfbXVsdGlsaWJzICR7VE9P TF9PUFRJT05TfV1dIgogCX0gZWxzZSB7CiAJICAgIHNldCBsaW5rX2ZsYWdz ICJbYXNhbl9saW5rX2ZsYWdzIFtnZXRfbXVsdGlsaWJzXV0iCisJICAgIHNl dCBsaW5rX2ZsYWdzICJbYXNhbl9saW5rX2ZsYWdzIFtnZXRfbXVsdGlsaWJz IC1tMzJdXSAkbGlua19mbGFncyIKIAl9CiAgICAgfQogCkluZGV4OiBnY2Mv dGVzdHN1aXRlL2MtYysrLWNvbW1vbi9hc2FuL2ludGVyZmFjZS1zeW1ib2xz LTEuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBnY2MvdGVzdHN1aXRl L2MtYysrLWNvbW1vbi9hc2FuL2ludGVyZmFjZS1zeW1ib2xzLTEuYwkocmV2 aXNpb24gMCkKKysrIGdjYy90ZXN0c3VpdGUvYy1jKystY29tbW9uL2FzYW4v aW50ZXJmYWNlLXN5bWJvbHMtMS5jCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx LDI0IEBACisvLyBDaGVjayB0aGUgcHJlc2Vuc2Ugb2YgaW50ZXJmYWNlIHN5 bWJvbHMgaW4gY29tcGlsZWQgZmlsZS4KKworLy8gUlVOOiAlY2xhbmcgLWZz YW5pdGl6ZT1hZGRyZXNzIC1kZWFkX3N0cmlwIC1PMiAlcyAtbyAldC5leGUK Ky8vIFJVTjogbm0gJXQuZXhlIHwgZWdyZXAgIiBbVFddICIgfCBzZWQgInMv LiogVCAvLyIgfCBzZWQgInMvLiogVyAvLyIgXAorLy8gUlVOOiAgICB8IGdy ZXAgIl9fYXNhbl8iIHwgc2VkICJzL19fX2FzYW5fL19fYXNhbl8vIiA+ICV0 LnN5bWJvbHMKKy8vIFJVTjogY2F0ICVwLy4uLy4uLy4uL2luY2x1ZGUvc2Fu aXRpemVyL2FzYW5faW50ZXJmYWNlLmggXAorLy8gUlVOOiAgICB8IHNlZCAi cy9cL1wvLiovLyIgfCBzZWQgInMvdHlwZWRlZi4qLy8iIFwKKy8vIFJVTjog ICAgfCBncmVwICJfX2FzYW5fLiooIiB8IHNlZCAicy8uKiBfX2FzYW5fL19f YXNhbl8vO3MvKC4qLy8iIFwKKy8vIFJVTjogICAgPiAldC5pbnRlcmZhY2UK Ky8vIFJVTjogZWNobyBfX2FzYW5fcmVwb3J0X2xvYWQxID4+ICV0LmludGVy ZmFjZQorLy8gUlVOOiBlY2hvIF9fYXNhbl9yZXBvcnRfbG9hZDIgPj4gJXQu aW50ZXJmYWNlCisvLyBSVU46IGVjaG8gX19hc2FuX3JlcG9ydF9sb2FkNCA+ PiAldC5pbnRlcmZhY2UKKy8vIFJVTjogZWNobyBfX2FzYW5fcmVwb3J0X2xv YWQ4ID4+ICV0LmludGVyZmFjZQorLy8gUlVOOiBlY2hvIF9fYXNhbl9yZXBv cnRfbG9hZDE2ID4+ICV0LmludGVyZmFjZQorLy8gUlVOOiBlY2hvIF9fYXNh bl9yZXBvcnRfc3RvcmUxID4+ICV0LmludGVyZmFjZQorLy8gUlVOOiBlY2hv IF9fYXNhbl9yZXBvcnRfc3RvcmUyID4+ICV0LmludGVyZmFjZQorLy8gUlVO OiBlY2hvIF9fYXNhbl9yZXBvcnRfc3RvcmU0ID4+ICV0LmludGVyZmFjZQor Ly8gUlVOOiBlY2hvIF9fYXNhbl9yZXBvcnRfc3RvcmU4ID4+ICV0LmludGVy ZmFjZQorLy8gUlVOOiBlY2hvIF9fYXNhbl9yZXBvcnRfc3RvcmUxNiA+PiAl dC5pbnRlcmZhY2UKKy8vIFJVTjogY2F0ICV0LmludGVyZmFjZSB8IHNvcnQg LXUgfCBkaWZmICV0LnN5bWJvbHMgLQorCisvKiB7IGRnLW9wdGlvbnMgIi1z dGF0aWMtbGliYXNhbiAtbHB0aHJlYWQgLWxkbCIgfSAqLworCitpbnQgbWFp bigpIHsgcmV0dXJuIDA7IH0KSW5kZXg6IGdjYy90ZXN0c3VpdGUvYy1jKyst Y29tbW9uL2FzYW4vc3RyaXAtcGF0aC1wcmVmaXgtMS5jCj09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT0KLS0tIGdjYy90ZXN0c3VpdGUvYy1jKystY29tbW9uL2Fz YW4vc3RyaXAtcGF0aC1wcmVmaXgtMS5jCShyZXZpc2lvbiAwKQorKysgZ2Nj L3Rlc3RzdWl0ZS9jLWMrKy1jb21tb24vYXNhbi9zdHJpcC1wYXRoLXByZWZp eC0xLmMJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTIgQEAKKy8qIHsgZGct ZG8gcnVuIH0gKi8KKy8qIHsgZGctc2hvdWxkZmFpbCAiYXNhbiIgfSAqLwor CisjaW5jbHVkZSA8c3RkbGliLmg+CitpbnQgbWFpbigpIHsKKyAgY2hhciAq eCA9IChjaGFyKiltYWxsb2MoMTAgKiBzaXplb2YoY2hhcikpOworICBmcmVl KHgpOworICByZXR1cm4geFs1XTsKK30KKworLyogeyBkZy1vdXRwdXQgImhl YXAtdXNlLWFmdGVyLWZyZWUuKihcbnxcclxufFxyKSIgfSAqLworLyogeyBk Zy1vdXRwdXQgIiAgICAjMCAweFxbMC05YS1mXF0rIFxbKFxdXFteL1xdXFte XG5ccl0qKFxufFxyXG58XHIpIiB9ICovCkluZGV4OiBnY2MvdGVzdHN1aXRl L2MtYysrLWNvbW1vbi9hc2FuL2ZvcmNlLWlubGluZS1vcHQwLTEuYwo9PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09Ci0tLSBnY2MvdGVzdHN1aXRlL2MtYysrLWNv bW1vbi9hc2FuL2ZvcmNlLWlubGluZS1vcHQwLTEuYwkocmV2aXNpb24gMCkK KysrIGdjYy90ZXN0c3VpdGUvYy1jKystY29tbW9uL2FzYW4vZm9yY2UtaW5s aW5lLW9wdDAtMS5jCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE1IEBACisv LyBUaGlzIHRlc3QgY2hlY2tzIHRoYXQgd2UgYXJlIG5vIGluc3RydW1lbnRp bmcgYSBtZW1vcnkgYWNjZXNzIHR3aWNlCisvLyAoYmVmb3JlIGFuZCBhZnRl ciBpbmxpbmluZykKKworLyogeyBkZy1kbyBydW4gfSAqLworLyogeyBkZy1v cHRpb25zICItV25vLWF0dHJpYnV0ZXMiIH0gKi8KK19fYXR0cmlidXRlX18o KGFsd2F5c19pbmxpbmUpKQordm9pZCBmb28oaW50ICp4KSB7CisgICp4ID0g MDsKK30KKworaW50IG1haW4oKSB7CisgIGludCB4OworICBmb28oJngpOwor ICByZXR1cm4geDsKK30KSW5kZXg6IGdjYy90ZXN0c3VpdGUvYy1jKystY29t bW9uL2FzYW4vbnVsbC1kZXJlZi0xLmMKPT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PQotLS0gZ2NjL3Rlc3RzdWl0ZS9jLWMrKy1jb21tb24vYXNhbi9udWxsLWRl cmVmLTEuYwkocmV2aXNpb24gMCkKKysrIGdjYy90ZXN0c3VpdGUvYy1jKyst Y29tbW9uL2FzYW4vbnVsbC1kZXJlZi0xLmMJKHJldmlzaW9uIDApCkBAIC0w LDAgKzEsMTYgQEAKKy8qIHsgZGctZG8gcnVuIH0gKi8KKy8qIHsgZGctc2hv dWxkZmFpbCAiYXNhbiIgfSAqLworCitfX2F0dHJpYnV0ZV9fKChub2lubGlu ZSkpCitzdGF0aWMgdm9pZCBOdWxsRGVyZWYoaW50ICpwdHIpIHsKKyAgcHRy WzEwXSsrOworfQoraW50IG1haW4oKSB7CisgIE51bGxEZXJlZigoaW50Kikw KTsKK30KKworLyogeyBkZy1vdXRwdXQgIkVSUk9SOiBBZGRyZXNzU2FuaXRp emVyIGNyYXNoZWQgb24gdW5rbm93biBhZGRyZXNzLioiIH0gKi8KKy8qIHsg ZGctb3V0cHV0ICIweFxbMC05YS1mXF0rIC4qcGMgMHhcWzAtOWEtZlxdK1xb XlxuXHJdKihcbnxcclxufFxyKSIgfSAqLworLyogeyBkZy1vdXRwdXQgIkFk ZHJlc3NTYW5pdGl6ZXIgY2FuIG5vdCBwcm92aWRlIGFkZGl0aW9uYWwgaW5m by4qKFxufFxyXG58XHIpIiB9ICovCisvKiB7IGRnLW91dHB1dCAiICAgICMw IDB4XFswLTlhLWZcXSsgKGluIFxbXlxuXHJdKk51bGxEZXJlZlxbXlxuXHJd KihudWxsX2RlcmVmLmNjOjZ8XFs/XF1cWz9cXTowKXxcWyhcXSlcW15cblxy XSooXG58XHJcbnxccikiIH0gKi8KKy8qIHsgZGctb3V0cHV0ICIgICAgIzEg MHhcWzAtOWEtZlxdKyAoaW4gXFteXG5ccl0qbWFpblxbXlxuXHJdKihudWxs X2RlcmVmLmNjOjl8XFs/XF1cWz9cXTowKXxcWyhcXSlcW15cblxyXSooXG58 XHJcbnxccikiIH0gKi8KSW5kZXg6IGdjYy90ZXN0c3VpdGUvYy1jKystY29t bW9uL2FzYW4vZ2xvYmFsLW92ZXJmbG93LTEuYwo9PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09Ci0tLSBnY2MvdGVzdHN1aXRlL2MtYysrLWNvbW1vbi9hc2FuL2ds b2JhbC1vdmVyZmxvdy0xLmMJKHJldmlzaW9uIDApCisrKyBnY2MvdGVzdHN1 aXRlL2MtYysrLWNvbW1vbi9hc2FuL2dsb2JhbC1vdmVyZmxvdy0xLmMJKHJl dmlzaW9uIDApCkBAIC0wLDAgKzEsMjAgQEAKKy8qIHsgZGctZG8gcnVuIH0g Ki8KKy8qIHsgZGctc2hvdWxkZmFpbCAiYXNhbiIgfSAqLworCisjaW5jbHVk ZSA8c3RyaW5nLmg+CitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3Yp IHsKKyAgc3RhdGljIGNoYXIgWFhYWzEwXTsKKyAgc3RhdGljIGNoYXIgWVlZ WzEwXTsKKyAgc3RhdGljIGNoYXIgWlpaWzEwXTsKKyAgbWVtc2V0KFhYWCwg MCwgMTApOworICBtZW1zZXQoWVlZLCAwLCAxMCk7CisgIG1lbXNldChaWlos IDAsIDEwKTsKKyAgaW50IHJlcyA9IFlZWVthcmdjICogMTBdOyAgLy8gQk9P T00KKyAgcmVzICs9IFhYWFthcmdjXSArIFpaWlthcmdjXTsKKyAgcmV0dXJu IHJlczsKK30KKworLyogeyBkZy1vdXRwdXQgIlJFQUQgb2Ygc2l6ZSAxIGF0 IDB4XFswLTlhLWZcXSsgdGhyZWFkIFQwLiooXG58XHJcbnxccikiIH0gKi8K Ky8qIHsgZGctb3V0cHV0ICIgICAgIzAgMHhcWzAtOWEtZlxdKyAoaW4gXypt YWluIC4qZ2xvYmFsLW92ZXJmbG93LmNjOjE4fFxbKFxdKVxbXlxuXHJdKihc bnxcclxufFxyKSIgfSAqLworLyogeyBkZy1vdXRwdXQgIjB4XFswLTlhLWZc XSsgaXMgbG9jYXRlZCAwIGJ5dGVzIHRvIHRoZSByaWdodCBvZiBnbG9iYWwg dmFyaWFibGUuKihcbnxcclxufFxyKSIgfSAqLworLyogeyBkZy1vdXRwdXQg Ii4qWVlZLiogb2Ygc2l6ZSAxMC4qKFxufFxyXG58XHIpIiB9ICovCkluZGV4 OiBnY2MvdGVzdHN1aXRlL2MtYysrLWNvbW1vbi9hc2FuL2luaXRpYWxpemF0 aW9uLWJ1Zy0xLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gZ2NjL3Rl c3RzdWl0ZS9jLWMrKy1jb21tb24vYXNhbi9pbml0aWFsaXphdGlvbi1idWct MS5jCShyZXZpc2lvbiAwKQorKysgZ2NjL3Rlc3RzdWl0ZS9jLWMrKy1jb21t b24vYXNhbi9pbml0aWFsaXphdGlvbi1idWctMS5jCShyZXZpc2lvbiAwKQpA QCAtMCwwICsxLDUwIEBACisvLyBUZXN0IHRvIG1ha2Ugc3VyZSBiYXNpYyBp bml0aWFsaXphdGlvbiBvcmRlciBlcnJvcnMgYXJlIGNhdWdodC4KKworLy8g UlVOOiAlY2xhbmd4eF9hc2FuIC1tNjQgLU8wICVzICVwL0hlbHBlcnMvaW5p dGlhbGl6YXRpb24tYnVnLWV4dHJhMi5jY1wKKy8vIFJVTjogICAtbWxsdm0g LWFzYW4taW5pdGlhbGl6YXRpb24tb3JkZXIgLW8gJXQgJiYgJXQgMj4mMSBc CisvLyBSVU46ICAgIHwgJXN5bWJvbGl6ZSB8IEZpbGVDaGVjayAlcworLy8g UlVOOiAlY2xhbmd4eF9hc2FuIC1tMzIgLU8wICVzICVwL0hlbHBlcnMvaW5p dGlhbGl6YXRpb24tYnVnLWV4dHJhMi5jY1wKKy8vIFJVTjogICAtbWxsdm0g LWFzYW4taW5pdGlhbGl6YXRpb24tb3JkZXIgLW8gJXQgJiYgJXQgMj4mMSBc CisvLyBSVU46ICAgICB8ICVzeW1ib2xpemUgfCBGaWxlQ2hlY2sgJXMKKwor LyogeyBkZy1kbyBydW4gfSAqLworLyogeyBkZy1zaG91bGRmYWlsICJhc2Fu IiB9ICovCisvKiB7IGRnLW9wdGlvbnMgIi1hc2FuLWluaXRpYWxpemF0aW9u LW9yZGVyIiB9ICovCisvKiB7IGRnLWFkZGl0aW9uYWwtc291cmNlcyAiSGVs cGVycy9pbml0aWFsaXphdGlvbi1idWctZXh0cmEtMS5jIiB9ICovCisKKy8v IERvIG5vdCB0ZXN0IHdpdGggb3B0aW1pemF0aW9uIC0tIHRoZSBlcnJvciBt YXkgYmUgb3B0aW1pemVkIGF3YXkuCisKKyNpbmNsdWRlIDxjc3RkaW8+CisK Ky8vIFRoZSBzdHJ1Y3R1cmUgb2YgdGhlIHRlc3QgaXM6CisvLyAieCIsICJ5 IiwgInoiIGFyZSBkeW5hbWljYWxseSBpbml0aWFsaXplZCBnbG9iYWxzLgor Ly8gVmFsdWUgb2YgIngiIGRlcGVuZHMgb24gInkiLCB2YWx1ZSBvZiAieSIg ZGVwZW5kcyBvbiAieiIuCisvLyAieCIgYW5kICJ6IiBhcmUgZGVmaW5lZCBp biB0aGlzIFRVLCAieSIgaXMgZGVmaW5lZCBpbiBhbm90aGVyIG9uZS4KKy8v IFRodXMgd2Ugc2hvdWQgc3RhYmx5IHJlcG9ydCBpbml0aWFsaXphdGlvbiBv cmRlciBmaWFzY28gaW5kZXBlbmRlbnRseSBvZgorLy8gdGhlIHRyYW5zbGF0 aW9uIHVuaXQgb3JkZXIuCisKK2ludCBpbml0WigpIHsKKyAgcmV0dXJuIDU7 Cit9CitpbnQgeiA9IGluaXRaKCk7CisKKy8vICd5JyBpcyBhIGR5bmFtaWNh bGx5IGluaXRpYWxpemVkIGdsb2JhbCByZXNpZGluZyBpbiBhIGRpZmZlcmVu dCBUVS4gIFRoaXMKKy8vIGR5bmFtaWMgaW5pdGlhbGl6ZXIgd2lsbCByZWFk IHRoZSB2YWx1ZSBvZiAneScgYmVmb3JlIG1haW4gc3RhcnRzLiAgVGhlCisv LyByZXN1bHQgaXMgdW5kZWZpbmVkIGJlaGF2aW9yLCB3aGljaCBzaG91bGQg YmUgY2F1Z2h0IGJ5IGluaXRpYWxpemF0aW9uIG9yZGVyCisvLyBjaGVja2lu Zy4KK2V4dGVybiBpbnQgeTsKK2ludCBfX2F0dHJpYnV0ZV9fKChub2lubGlu ZSkpIGluaXRYKCkgeworICByZXR1cm4geSArIDE7Cit9CisKKy8vIFRoaXMg aW5pdGlhbGl6ZXIgYmVnaW5zIG91ciBpbml0aWFsaXphdGlvbiBvcmRlciBw cm9ibGVtcy4KK3N0YXRpYyBpbnQgeCA9IGluaXRYKCk7CisKK2ludCBtYWlu KCkgeworICAvLyBBU2FuIHNob3VsZCBoYXZlIGNhdXNlZCBhbiBleGl0IGJl Zm9yZSBtYWluIHJ1bnMuCisgIHJldHVybiAwOworfQorCisvKiB7IGRnLW91 dHB1dCAiQWRkcmVzc1Nhbml0aXplcjogaW5pdGlhbGl6YXRpb24tb3JkZXIt Zmlhc2NvLiooXG58XHJcbnxccikiIH0gKi8KKy8qIHsgZGctb3V0cHV0ICJS RUFEIG9mIHNpemUgLiogYXQgMHhcWzAtOWEtZlxdKyB0aHJlYWQgVDAuKihc bnxcclxufFxyKSIgfSAqLworLyogeyBkZy1vdXRwdXQgIjB4XFswLTlhLWZc XSsgaXMgbG9jYXRlZCAwIGJ5dGVzIGluc2lkZSBvZiBnbG9iYWwgdmFyaWFi bGUgLiooeXx6KS4qKFxufFxyXG58XHIpIiB9ICovCkluZGV4OiBnY2MvdGVz dHN1aXRlL2MtYysrLWNvbW1vbi9hc2FuL3N0cm5jcHktb3ZlcmZsb3ctMS5j Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGdjYy90ZXN0c3VpdGUvYy1j KystY29tbW9uL2FzYW4vc3RybmNweS1vdmVyZmxvdy0xLmMJKHJldmlzaW9u IDApCisrKyBnY2MvdGVzdHN1aXRlL2MtYysrLWNvbW1vbi9hc2FuL3N0cm5j cHktb3ZlcmZsb3ctMS5jCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDIyIEBA CisvKiB7IGRnLWRvIHJ1biB9ICovCisvKiB7IGRnLXNob3VsZGZhaWwgImFz YW4iIH0gKi8KKworI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHN0 ZGxpYi5oPgoraW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KSB7Cisg IGNoYXIgKmhlbGxvID0gKGNoYXIqKW1hbGxvYyg2KTsKKyAgc3RyY3B5KGhl bGxvLCAiaGVsbG8iKTsKKyAgY2hhciAqc2hvcnRfYnVmZmVyID0gKGNoYXIq KW1hbGxvYyg5KTsKKyAgc3RybmNweShzaG9ydF9idWZmZXIsIGhlbGxvLCAx MCk7ICAvLyBCT09NCisgIHJldHVybiBzaG9ydF9idWZmZXJbOF07Cit9CisK Ky8qIHsgZGctb3V0cHV0ICJXUklURSBvZiBzaXplIDEgYXQgMHhcWzAtOWEt ZlxdKyB0aHJlYWQgVDBcW15cblxyXSooXG58XHJcbnxccikiIH0gKi8KKy8q IHsgZGctb3V0cHV0ICIgICAgIzAgMHhcWzAtOWEtZlxdKyAoaW4gXyooaW50 ZXJjZXB0b3JffClzdHJuY3B5fFxbKFxdKVxbXlxuXHJdKihcbnxcclxufFxy KSIgfSAqLworLyogeyBkZy1vdXRwdXQgIiAgICAjMSAweFxbMC05YS1mXF0r IChpbiBfKm1haW4gXFteXG5ccl0qKHN0cm5jcHktb3ZlcmZsb3ctMS5jOjEw fFxbP11cWz9dOjApfFxbKFxdKS4qKFxufFxyXG58XHIpIiB9ICovCisvKiB7 IGRnLW91dHB1dCAiMHhcWzAtOWEtZlxdKyBpcyBsb2NhdGVkIDAgYnl0ZXMg dG8gdGhlIHJpZ2h0IG9mIDktYnl0ZSByZWdpb25cW15cblxyXSooXG58XHJc bnxccikiIH0gKi8KKy8qIHsgZGctb3V0cHV0ICJhbGxvY2F0ZWQgYnkgdGhy ZWFkIFQwIGhlcmU6XFteXG5ccl0qKFxufFxyXG58XHIpIiB9ICovCisvKiB7 IGRnLW91dHB1dCAiICAgICMwIDB4XFswLTlhLWZcXSsgKGluIF8qKGludGVy Y2VwdG9yX3wpbWFsbG9jfFxbKFxdKVxbXlxuXHJdKihcbnxcclxufFxyKSIg fSAqLworLyogeyBkZy1vdXRwdXQgIiAgICAjMSAweFxbMC05YS1mXF0rIChp biBfKm1haW4gXFteXG5ccl0qKHN0cm5jcHktb3ZlcmZsb3ctMS5jOjl8XFs/ XVxbP106MCl8XFsoXF0pXFteXG5ccl0qKFxufFxyXG58XHIpIiB9ICovCisK KwpJbmRleDogZ2NjL3Rlc3RzdWl0ZS9jLWMrKy1jb21tb24vYXNhbi9zdGFj ay1vdmVyZmxvdy0xLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gZ2Nj L3Rlc3RzdWl0ZS9jLWMrKy1jb21tb24vYXNhbi9zdGFjay1vdmVyZmxvdy0x LmMJKHJldmlzaW9uIDApCisrKyBnY2MvdGVzdHN1aXRlL2MtYysrLWNvbW1v bi9hc2FuL3N0YWNrLW92ZXJmbG93LTEuYwkocmV2aXNpb24gMCkKQEAgLTAs MCArMSwxNCBAQAorLyogeyBkZy1kbyBydW4gfSAqLworLyogeyBkZy1zaG91 bGRmYWlsICJhc2FuIiB9ICovCisKKyNpbmNsdWRlIDxzdHJpbmcuaD4KK2lu dCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikgeworICBjaGFyIHhbMTBd OworICBtZW1zZXQoeCwgMCwgMTApOworICBpbnQgcmVzID0geFthcmdjICog MTBdOyAgLy8gQk9PT00KKyAgcmV0dXJuIHJlczsKK30KKworLyogeyBkZy1v dXRwdXQgIlJFQUQgb2Ygc2l6ZSAxIGF0IDB4XFswLTlhLWZcXSsgdGhyZWFk IFQwXFteXG5ccl0qKFxufFxyXG58XHIpIiB9ICovCisvKiB7IGRnLW91dHB1 dCAiICAgICMwIDB4XFswLTlhLWZcXSsgKGluIF8qbWFpbiBcW15cblxyXSoo c3RhY2stb3ZlcmZsb3ctMS5jOjh8XFs/XF1cWz9cXTowKXxcWyhcXSkuKihc bnxcclxufFxyKSIgfSAqLworLyogeyBkZy1vdXRwdXQgIkFkZHJlc3MgMHhc WzAtOWEtZlxdKyBpc1xbXlxuXHJdKmZyYW1lIDxtYWluPiIgfSAqLwpJbmRl eDogZ2NjL3Rlc3RzdWl0ZS9jLWMrKy1jb21tb24vYXNhbi9ibGFja2xpc3Qt MS5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGdjYy90ZXN0c3VpdGUv Yy1jKystY29tbW9uL2FzYW4vYmxhY2tsaXN0LTEuYwkocmV2aXNpb24gMCkK KysrIGdjYy90ZXN0c3VpdGUvYy1jKystY29tbW9uL2FzYW4vYmxhY2tsaXN0 LTEuYwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyNyBAQAorLy8gVGVzdCB0 aGUgYmxhY2tsaXN0IGZ1bmN0aW9uYWxpdHkgb2YgQVNhbgorCisvKiB7IGRn LWRvIHJ1biB9ICovCisvKiB7IGRnLWFkZGl0aW9uYWwtc291cmNlcyAiSGVs cGVycy9ibGFja2xpc3QtZXh0cmEtMS5jIiB9ICovCisKKy8vIGJhZEdsb2Jh bCBpcyBhY2Nlc3NlZCBpbXByb3Blcmx5LCBidXQgd2UgYmxhY2tsaXN0ZWQg aXQuCitpbnQgYmFkR2xvYmFsOworaW50IHJlYWRCYWRHbG9iYWwoKSB7Cisg IHJldHVybiAoJmJhZEdsb2JhbClbMV07Cit9CisKKy8vIEEgZnVuY3Rpb24g d2hpY2ggaXMgYnJva2VuLCBidXQgZXhjbHVkZWQgaW4gdGhlIGJsYWNrbGlz dC4KK2ludCBicm9rZW5GdW5jdGlvbihpbnQgYXJnYykgeworICBjaGFyIHhb MTBdID0gezB9OworICByZXR1cm4geFthcmdjICogMTBdOyAgLy8gQk9PTQor fQorCisvLyBUaGlzIGZ1bmN0aW9uIGlzIGRlZmluZWQgaW4gSGVscGVycy9i bGFja2xpc3QtZXh0cmEtMS5jLCBhIHNvdXJjZSBmaWxlIHdoaWNoCisvLyBp cyBibGFja2xpc3RlZCBieSBuYW1lCitpbnQgZXh0ZXJuYWxCcm9rZW5GdW5j dGlvbihpbnQgeCk7CisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJn dikgeworICBicm9rZW5GdW5jdGlvbihhcmdjKTsKKyAgaW50IHggPSByZWFk QmFkR2xvYmFsKCk7CisgIGV4dGVybmFsQnJva2VuRnVuY3Rpb24oYXJnYyk7 CisgIHJldHVybiAwOworfQpJbmRleDogZ2NjL3Rlc3RzdWl0ZS9jLWMrKy1j b21tb24vYXNhbi91c2UtYWZ0ZXItZnJlZS0xLmMKPT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PQotLS0gZ2NjL3Rlc3RzdWl0ZS9jLWMrKy1jb21tb24vYXNhbi91 c2UtYWZ0ZXItZnJlZS0xLmMJKHJldmlzaW9uIDApCisrKyBnY2MvdGVzdHN1 aXRlL2MtYysrLWNvbW1vbi9hc2FuL3VzZS1hZnRlci1mcmVlLTEuYwkocmV2 aXNpb24gMCkKQEAgLTAsMCArMSwyMSBAQAorLyogeyBkZy1kbyBydW4gfSAq LworLyogeyBkZy1zaG91bGRmYWlsICJhc2FuIiB9ICovCisKKyNpbmNsdWRl IDxzdGRsaWIuaD4KK2ludCBtYWluKCkgeworICBjaGFyICp4ID0gKGNoYXIq KW1hbGxvYygxMCAqIHNpemVvZihjaGFyKSk7CisgIGZyZWUoeCk7CisgIHJl dHVybiB4WzVdOworfQorCisvKiB7IGRnLW91dHB1dCAiRVJST1I6IEFkZHJl c3NTYW5pdGl6ZXIgaGVhcC11c2UtYWZ0ZXItZnJlZSBvbiBhZGRyZXNzXFte XG5ccl0qIiB9ICovCisvKiB7IGRnLW91dHB1dCAiMHhcWzAtOWEtZlxdKyBh dCBwYyAweFxbMC05YS1mXF0rIGJwIDB4XFswLTlhLWZcXSsgc3AgMHhcWzAt OWEtZlxdK1xbXlxuXHJdKihcbnxcclxufFxyKSIgfSAqLworLyogeyBkZy1v dXRwdXQgIlJFQUQgb2Ygc2l6ZSAxIGF0IDB4XFswLTlhLWZcXSsgdGhyZWFk IFQwXFteXG5ccl0qKFxufFxyXG58XHIpIiB9ICovCisvKiB7IGRnLW91dHB1 dCAiICAgICMwIDB4XFswLTlhLWZcXSsgKGluIF8qbWFpbiBcW15cblxyXSoo dXNlLWFmdGVyLWZyZWUtMS5jOjh8XFs/XVxbP106MCl8XFsoXF0pLiooXG58 XHJcbnxccikiIH0gKi8KKy8qIHsgZGctb3V0cHV0ICIweFxbMC05YS1mXF0r IGlzIGxvY2F0ZWQgNSBieXRlcyBpbnNpZGUgb2YgMTAtYnl0ZSByZWdpb24g LjB4XFswLTlhLWZcXSssMHhcWzAtOWEtZlxdK1xbXlxuXHJdKihcbnxcclxu fFxyKSIgfSAqLworLyogeyBkZy1vdXRwdXQgImZyZWVkIGJ5IHRocmVhZCBU MCBoZXJlOlxbXlxuXHJdKihcbnxcclxufFxyKSIgfSAqLworLyogeyBkZy1v dXRwdXQgIiAgICAjMCAweFxbMC05YS1mXF0rIGluIFxbXlxuXHJdKmZyZWVc W15cblxyXSooXG58XHJcbnxccikiIH0gKi8KKy8qIHsgZGctb3V0cHV0ICIg ICAgIzEgMHhcWzAtOWEtZlxdKyAoaW4gXFteXG5ccl0qbWFpbiBcW15cblxy XSoodXNlLWFmdGVyLWZyZWUtMS5jOjd8XFs/XVxbP106MCl8XFsoXF0pLioo XG58XHJcbnxccikiIH0gKi8KKy8qIHsgZGctb3V0cHV0ICJwcmV2aW91c2x5 IGFsbG9jYXRlZCBieSB0aHJlYWQgVDAgaGVyZTpcW15cblxyXSooXG58XHJc bnxccikiIH0gKi8KKy8qIHsgZGctb3V0cHV0ICIgICAgIzAgMHhcWzAtOWEt ZlxdKyBpbiBcW15cblxyXSptYWxsb2NcW15cblxyXSooXG58XHJcbnxcciki IH0gKi8KKy8qIHsgZGctb3V0cHV0ICIgICAgIzEgMHhcWzAtOWEtZlxdKyAo aW4gXFteXG5ccl0qbWFpbiBcW15cblxyXSoodXNlLWFmdGVyLWZyZWUtMS5j OjZ8XFs/XVxbP106MCl8XFsoXF0pXFteXG5ccl0qKFxufFxyXG58XHIpIiB9 ICovCkluZGV4OiBnY2MvdGVzdHN1aXRlL2MtYysrLWNvbW1vbi9hc2FuL3Nh bml0eS1jaGVjay1wdXJlLWMtMS5jCj09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K LS0tIGdjYy90ZXN0c3VpdGUvYy1jKystY29tbW9uL2FzYW4vc2FuaXR5LWNo ZWNrLXB1cmUtYy0xLmMJKHJldmlzaW9uIDApCisrKyBnY2MvdGVzdHN1aXRl L2MtYysrLWNvbW1vbi9hc2FuL3Nhbml0eS1jaGVjay1wdXJlLWMtMS5jCShy ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE2IEBACisvKiB7IGRnLWRvIHJ1biB9 ICovCisvKiB7IGRnLXNob3VsZGZhaWwgImFzYW4iIH0gKi8KKworI2luY2x1 ZGUgPHN0ZGxpYi5oPgoraW50IG1haW4oKSB7CisgIGNoYXIgKnggPSAoY2hh ciopbWFsbG9jKDEwICogc2l6ZW9mKGNoYXIpKTsKKyAgZnJlZSh4KTsKKyAg cmV0dXJuIHhbNV07Cit9CisKKy8qIHsgZGctb3V0cHV0ICJoZWFwLXVzZS1h ZnRlci1mcmVlLiooXG58XHJcbnxccikiIH0gKi8KKy8qIHsgZGctb3V0cHV0 ICIgICAgIzAgXFteXG5ccl0qZnJlZVxbXlxuXHJdKihcbnxcclxufFxyKSIg fSAqLworLyogeyBkZy1vdXRwdXQgIiAgICAjMSBcW15cblxyXSooaW4gbWFp blxbXlxuXHJdKihzYW5pdHktY2hlY2stcHVyZS1jLTEuYzo3fFxbP1xdXFs/ XF06MCl8XFsoXF0pLiooXG58XHJcbnxccikiIH0gKi8KKy8qIHsgZGctb3V0 cHV0ICIgICAgIzAgXFteXG5ccl0qKGludGVyY2VwdG9yX3wpbWFsbG9jXFte XG5ccl0qKFxufFxyXG58XHIpIiB9ICovCisvKiB7IGRnLW91dHB1dCAiICAg ICMxIFxbXlxuXHJdKihpbiBtYWluXFteXG5ccl0qKHNhbml0eS1jaGVjay1w dXJlLWMtMS5jOjZ8XFs/XF1cWz9cXTowKXxcWyhcXSlcW15cblxyXSooXG58 XHJcbnxccikiIH0gKi8KKwpJbmRleDogZ2NjL3Rlc3RzdWl0ZS9jLWMrKy1j b21tb24vYXNhbi9zdGFjay11c2UtYWZ0ZXItcmV0dXJuLTEuYwo9PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09Ci0tLSBnY2MvdGVzdHN1aXRlL2MtYysrLWNvbW1v bi9hc2FuL3N0YWNrLXVzZS1hZnRlci1yZXR1cm4tMS5jCShyZXZpc2lvbiAw KQorKysgZ2NjL3Rlc3RzdWl0ZS9jLWMrKy1jb21tb24vYXNhbi9zdGFjay11 c2UtYWZ0ZXItcmV0dXJuLTEuYwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwz MSBAQAorLyogeyBkZy1kbyBydW4gfSAqLworLyogeyBkZy1zaG91bGRmYWls ICJhc2FuIiB9ICovCisjaW5jbHVkZSA8c3RkaW8uaD4KKworX19hdHRyaWJ1 dGVfXygobm9pbmxpbmUpKQorY2hhciAqSWRlbnQoY2hhciAqeCkgeworICBm cHJpbnRmKHN0ZGVyciwgIjE6ICVwXG4iLCB4KTsKKyAgcmV0dXJuIHg7Cit9 CisKK19fYXR0cmlidXRlX18oKG5vaW5saW5lKSkKK2NoYXIgKkZ1bmMxKCkg eworICBjaGFyIGxvY2FsOworICByZXR1cm4gSWRlbnQoJmxvY2FsKTsKK30K KworX19hdHRyaWJ1dGVfXygobm9pbmxpbmUpKQordm9pZCBGdW5jMihjaGFy ICp4KSB7CisgIGZwcmludGYoc3RkZXJyLCAiMjogJXBcbiIsIHgpOworICAq eCA9IDE7Cit9CisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikg eworICBGdW5jMihGdW5jMSgpKTsKKyAgcmV0dXJuIDA7Cit9CisKKy8qIHsg ZGctb3V0cHV0ICJXUklURSBvZiBzaXplIDEgXFteXG5ccl0qIHRocmVhZCBU MCIgfSAqLworLyogeyBkZy1vdXRwdXQgIiAgICAjMFxbXlxuXHJdKkZ1bmMy XFteXG5ccl0qKHN0YWNrLXVzZS1hZnRlci1yZXR1cm4uY2M6Mjh8XFs/XF1c Wz9cXTopIiB9ICovCisvKiB7IGRnLW91dHB1dCAiaXMgbG9jYXRlZCBpbiBm cmFtZSA8XFteXG5ccl0qRnVuYzFcW15cblxyXSo+IG9mIFQwJ3Mgc3RhY2si IH0gKi8KKwpJbmRleDogZ2NjL3Rlc3RzdWl0ZS9jLWMrKy1jb21tb24vYXNh bi9oZWFwLW92ZXJmbG93LTEuYwo9PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t LSBnY2MvdGVzdHN1aXRlL2MtYysrLWNvbW1vbi9hc2FuL2hlYXAtb3ZlcmZs b3ctMS5jCShyZXZpc2lvbiAwKQorKysgZ2NjL3Rlc3RzdWl0ZS9jLWMrKy1j b21tb24vYXNhbi9oZWFwLW92ZXJmbG93LTEuYwkocmV2aXNpb24gMCkKQEAg LTAsMCArMSwyMCBAQAorLyogeyBkZy1kbyBydW4gfSAqLworLyogeyBkZy1z aG91bGRmYWlsICJhc2FuIiB9ICovCisKKyNpbmNsdWRlIDxzdGRsaWIuaD4K KyNpbmNsdWRlIDxzdHJpbmcuaD4KK2ludCBtYWluKGludCBhcmdjLCBjaGFy ICoqYXJndikgeworICBjaGFyICp4ID0gKGNoYXIqKW1hbGxvYygxMCAqIHNp emVvZihjaGFyKSk7CisgIG1lbXNldCh4LCAwLCAxMCk7CisgIGludCByZXMg PSB4W2FyZ2MgKiAxMF07ICAvLyBCT09PTQorICBmcmVlKHgpOworICByZXR1 cm4gcmVzOworfQorCisvKiB7IGRnLW91dHB1dCAiUkVBRCBvZiBzaXplIDEg YXQgMHhcWzAtOWEtZlxdKyB0aHJlYWQgVDAuKihcbnxcclxufFxyKSIgfSAq LworLyogeyBkZy1vdXRwdXQgIiAgICAjMCAweFxbMC05YS1mXF0rIChpbiBf Km1haW4gLiooaGVhcC1vdmVyZmxvdy0xLmM6OXxcWz9cXVxbP1xdOjApfFxb KFxdKS4qKFxufFxyXG58XHIpIiB9ICovCisvKiB7IGRnLW91dHB1dCAiMHhc WzAtOWEtZlxdKyBpcyBsb2NhdGVkIDAgYnl0ZXMgdG8gdGhlIHJpZ2h0IG9m IDEwLWJ5dGUgcmVnaW9uXFteXG5ccl0qKFxufFxyXG58XHIpIiB9ICovCisv KiB7IGRnLW91dHB1dCAiYWxsb2NhdGVkIGJ5IHRocmVhZCBUMCBoZXJlOlxb XlxuXHJdKihcbnxcclxufFxyKSIgfSAqLworLyogeyBkZy1vdXRwdXQgIiAg ICAjMCAweFxbMC05YS1mXF0rIChpbiAuKm1hbGxvY3xcWyhcXSlcW15cblxy XSooXG58XHJcbnxccikiIH0gKi8KKy8qIHsgZGctb3V0cHV0ICIgICAgIzEg MHhcWzAtOWEtZlxdKyAoaW4gXyptYWluIC4qKGhlYXAtb3ZlcmZsb3ctMS5j Ojd8XFs/XF1cWz9cXTowKXxcWyhcXSlcW15cblxyXSooXG58XHJcbnxcciki IH0gKi8KKwpJbmRleDogZ2NjL3Rlc3RzdWl0ZS9jLWMrKy1jb21tb24vYXNh bi9saW51eC9pbml0aWFsaXphdGlvbi1idWctYW55LW9yZGVyLTEuYwo9PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09Ci0tLSBnY2MvdGVzdHN1aXRlL2MtYysrLWNv bW1vbi9hc2FuL2xpbnV4L2luaXRpYWxpemF0aW9uLWJ1Zy1hbnktb3JkZXIt MS5jCShyZXZpc2lvbiAwKQorKysgZ2NjL3Rlc3RzdWl0ZS9jLWMrKy1jb21t b24vYXNhbi9saW51eC9pbml0aWFsaXphdGlvbi1idWctYW55LW9yZGVyLTEu YwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzOCBAQAorLy8gVGVzdCB0byBt YWtlIHN1cmUgYmFzaWMgaW5pdGlhbGl6YXRpb24gb3JkZXIgZXJyb3JzIGFy ZSBjYXVnaHQuCisvLyBDaGVjayB0aGF0IG9uIExpbnV4IGluaXRpYWxpemF0 aW9uIG9yZGVyIGJ1Z3MgYXJlIGNhdWdodAorLy8gaW5kZXBlbmRlbnRseSBv biBvcmRlciBpbiB3aGljaCB3ZSBsaXN0IHNvdXJjZSBmaWxlcy4KKworLy8g RG8gbm90IHRlc3Qgd2l0aCBvcHRpbWl6YXRpb24gLS0gdGhlIGVycm9yIG1h eSBiZSBvcHRpbWl6ZWQgYXdheS4KKworLyogeyBkZy1kbyBydW4gfSAqLwor LyogeyBvcHRpb25zICItYXNhbi1pbml0aWFsaXphdGlvbi1vcmRlciIgfSAq LworLyogeyBkZy1zaG91bGRmYWlsICJhc2FuIiB9ICovCisKKyNpbmNsdWRl IDxjc3RkaW8+CisKK2ludCBpbml0WigpIHsKKyAgcmV0dXJuIDU7Cit9Citp bnQgeiA9IGluaXRaKCk7CisKKy8vICd5JyBpcyBhIGR5bmFtaWNhbGx5IGlu aXRpYWxpemVkIGdsb2JhbCByZXNpZGluZyBpbiBhIGRpZmZlcmVudCBUVS4g IFRoaXMKKy8vIGR5bmFtaWMgaW5pdGlhbGl6ZXIgd2lsbCByZWFkIHRoZSB2 YWx1ZSBvZiAneScgYmVmb3JlIG1haW4gc3RhcnRzLiAgVGhlCisvLyByZXN1 bHQgaXMgdW5kZWZpbmVkIGJlaGF2aW9yLCB3aGljaCBzaG91bGQgYmUgY2F1 Z2h0IGJ5IGluaXRpYWxpemF0aW9uIG9yZGVyCisvLyBjaGVja2luZy4KK2V4 dGVybiBpbnQgeTsKK2ludCBfX2F0dHJpYnV0ZV9fKChub2lubGluZSkpIGlu aXRYKCkgeworICByZXR1cm4geSArIDE7Cit9CisKKy8vIFRoaXMgaW5pdGlh bGl6ZXIgYmVnaW5zIG91ciBpbml0aWFsaXphdGlvbiBvcmRlciBwcm9ibGVt cy4KK3N0YXRpYyBpbnQgeCA9IGluaXRYKCk7CisKK2ludCBtYWluKCkgewor ICAvLyBBU2FuIHNob3VsZCBoYXZlIGNhdXNlZCBhbiBleGl0IGJlZm9yZSBt YWluIHJ1bnMuCisgIHJldHVybiAwOworfQorCisvKiB7IGRnLW91dHB1dCAi QWRkcmVzc1Nhbml0aXplciBpbml0aWFsaXphdGlvbi1vcmRlci1maWFzY29c W15cblxyXSooXG58XHJcbnxccikiIH0gKi8KKy8qIHsgZGctb3V0cHV0ICJS RUFEIG9mIHNpemUgXFteXG5ccl0qIGF0IDB4XFswLTlhLWZcXSsgdGhyZWFk IFQwXFteXG5ccl0qKFxufFxyXG58XHIpIiB9ICovCisvKiB7IGRnLW91dHB1 dCAiICAgICMwIDB4XFswLTlhLWZcXSsgKGluIFxbXlxuXHJdKmluaXRYXFte XG5ccl0qKGluaXRpYWxpemF0aW9uLWJ1Zy1hbnktb3JkZXItMS5jOjMxfFxb P1xdXFs/XF06KXxcWyhcXSlcW15cblxyXSooXG58XHJcbnxccikiIH0gKi8K Ky8qIHsgZGctb3V0cHV0ICIweFxbMC05YS1mXF0rIGlzIGxvY2F0ZWQgMCBi eXRlcyBpbnNpZGUgb2YgZ2xvYmFsIHZhcmlhYmxlIFxbXlxuXHJdKnlcW15c blxyXSoiIH0gKi8KSW5kZXg6IGdjYy90ZXN0c3VpdGUvYy1jKystY29tbW9u L2FzYW4vbGludXgvcmxpbWl0LW1tYXAtdGVzdC0xLmMKPT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PQotLS0gZ2NjL3Rlc3RzdWl0ZS9jLWMrKy1jb21tb24vYXNh bi9saW51eC9ybGltaXQtbW1hcC10ZXN0LTEuYwkocmV2aXNpb24gMCkKKysr IGdjYy90ZXN0c3VpdGUvYy1jKystY29tbW9uL2FzYW4vbGludXgvcmxpbWl0 LW1tYXAtdGVzdC0xLmMJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjEgQEAK Ky8vIENoZWNrIHRoYXQgd2UgcHJvcGVybHkgcmVwb3J0IG1tYXAgZmFpbHVy ZS4KKy8vIFJVTjogJWNsYW5neHhfYXNhbiAlcyAtbyAldCAmJiAldCAyPiYx IHwgRmlsZUNoZWNrICVzCisKKy8qIHsgZGctZG8gcnVuIH0gKi8KKy8qIHsg ZGctc2hvdWxkZmFpbCAiYXNhbiIgfSAqLworCisjaW5jbHVkZSA8c3RkbGli Lmg+CisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisjaW5jbHVkZSA8c3lzL3RpbWUu aD4KKyNpbmNsdWRlIDxzeXMvcmVzb3VyY2UuaD4KKworc3RhdGljIHZvbGF0 aWxlIHZvaWQgKng7CisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJn dikgeworICBzdHJ1Y3QgcmxpbWl0IG1tYXBfcmVzb3VyY2VfbGltaXQgPSB7 IDAsIDAgfTsKKyAgYXNzZXJ0KDAgPT0gc2V0cmxpbWl0KFJMSU1JVF9BUywg Jm1tYXBfcmVzb3VyY2VfbGltaXQpKTsKKyAgeCA9IG1hbGxvYygxMDAwMDAw MCk7CisgIHJldHVybiAwOworfQorCisvKiB7IGRnLW91dHB1dCAiQWRkcmVz c1Nhbml0aXplciBpcyB1bmFibGUgdG8gbW1hcCIgfSAqLwpJbmRleDogZ2Nj L3Rlc3RzdWl0ZS9jLWMrKy1jb21tb24vYXNhbi9saW51eC9zd2FwY29udGV4 dC10ZXN0LTEuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBnY2MvdGVz dHN1aXRlL2MtYysrLWNvbW1vbi9hc2FuL2xpbnV4L3N3YXBjb250ZXh0LXRl c3QtMS5jCShyZXZpc2lvbiAwKQorKysgZ2NjL3Rlc3RzdWl0ZS9jLWMrKy1j b21tb24vYXNhbi9saW51eC9zd2FwY29udGV4dC10ZXN0LTEuYwkocmV2aXNp b24gMCkKQEAgLTAsMCArMSw2MSBAQAorLy8gQ2hlY2sgdGhhdCBBU2FuIHBs YXlzIHdlbGwgd2l0aCBlYXN5IGNhc2VzIG9mIG1ha2Vjb250ZXh0L3N3YXBj b250ZXh0LgorCisvKiB7IGRnLWRvIHJ1biB9ICovCisKKyNpbmNsdWRlIDxz dGRpby5oPgorI2luY2x1ZGUgPHVjb250ZXh0Lmg+CisjaW5jbHVkZSA8dW5p c3RkLmg+CisKK3Vjb250ZXh0X3Qgb3JpZ19jb250ZXh0OwordWNvbnRleHRf dCBjaGlsZF9jb250ZXh0OworCit2b2lkIENoaWxkKGludCBtb2RlKSB7Cisg IGNoYXIgeFszMl0gPSB7MH07ICAvLyBTdGFjayBnZXRzIHBvaXNvbmVkLgor ICBwcmludGYoIkNoaWxkOiAlcFxuIiwgeCk7CisgIC8vIChhKSBEbyBub3Ro aW5nLCBqdXN0IHJldHVybiB0byBwYXJlbnQgZnVuY3Rpb24uCisgIC8vIChi KSBKdW1wIGludG8gdGhlIG9yaWdpbmFsIGZ1bmN0aW9uLiBTdGFjayByZW1h aW5zIHBvaXNvbmVkIHVubGVzcyB3ZSBkbworICAvLyAgICAgc29tZXRoaW5n LgorICBpZiAobW9kZSA9PSAxKSB7CisgICAgaWYgKHN3YXBjb250ZXh0KCZj aGlsZF9jb250ZXh0LCAmb3JpZ19jb250ZXh0KSA8IDApIHsKKyAgICAgIHBl cnJvcigic3dhcGNvbnRleHQiKTsKKyAgICAgIF9leGl0KDApOworICAgIH0K KyAgfQorfQorCitpbnQgUnVuKGludCBhcmcsIGludCBtb2RlKSB7CisgIGlu dCBpOworICBjb25zdCBpbnQga1N0YWNrU2l6ZSA9IDEgPDwgMjA7CisgIGNo YXIgY2hpbGRfc3RhY2tba1N0YWNrU2l6ZSArIDFdOworICBwcmludGYoIkNo aWxkIHN0YWNrOiAlcFxuIiwgY2hpbGRfc3RhY2spOworICAvLyBTZXR1cCBj aGlsZCBjb250ZXh0LgorICBnZXRjb250ZXh0KCZjaGlsZF9jb250ZXh0KTsK KyAgY2hpbGRfY29udGV4dC51Y19zdGFjay5zc19zcCA9IGNoaWxkX3N0YWNr OworICBjaGlsZF9jb250ZXh0LnVjX3N0YWNrLnNzX3NpemUgPSBrU3RhY2tT aXplIC8gMjsKKyAgaWYgKG1vZGUgPT0gMCkgeworICAgIGNoaWxkX2NvbnRl eHQudWNfbGluayA9ICZvcmlnX2NvbnRleHQ7CisgIH0KKyAgbWFrZWNvbnRl eHQoJmNoaWxkX2NvbnRleHQsICh2b2lkICgqKSgpKUNoaWxkLCAxLCBtb2Rl KTsKKyAgaWYgKHN3YXBjb250ZXh0KCZvcmlnX2NvbnRleHQsICZjaGlsZF9j b250ZXh0KSA8IDApIHsKKyAgICBwZXJyb3IoInN3YXBjb250ZXh0Iik7Cisg ICAgcmV0dXJuIDA7CisgIH0KKyAgLy8gVG91Y2ggY2hpbGRzJ3Mgc3RhY2sg dG8gbWFrZSBzdXJlIGl0J3MgdW5wb2lzb25lZC4KKyAgZm9yIChpID0gMDsg aSA8IGtTdGFja1NpemU7IGkrKykgeworICAgIGNoaWxkX3N0YWNrW2ldID0g aTsKKyAgfQorICByZXR1cm4gY2hpbGRfc3RhY2tbYXJnXTsKK30KKworaW50 IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KSB7CisgIGludCByZXQgPSAw OworICByZXQgKz0gUnVuKGFyZ2MgLSAxLCAwKTsKKyAgcHJpbnRmKCJUZXN0 MSBwYXNzZWRcbiIpOworICByZXQgKz0gUnVuKGFyZ2MgLSAxLCAxKTsKKyAg cHJpbnRmKCJUZXN0MiBwYXNzZWRcbiIpOworICByZXR1cm4gcmV0OworfQor CisvKiB7IGRnLW91dHB1dCAiV0FSTklORzogQVNhbiBkb2Vzbid0IGZ1bGx5 IHN1cHBvcnQgbWFrZWNvbnRleHQvc3dhcGNvbnRleHQuKiIgfSAqLworLyog eyBkZy1vdXRwdXQgIlRlc3QxIHBhc3NlZC4qIiB9ICovCisvKiB7IGRnLW91 dHB1dCAiVGVzdDIgcGFzc2VkLioiIH0gKi8KSW5kZXg6IGdjYy90ZXN0c3Vp dGUvYy1jKystY29tbW9uL2FzYW4vbGludXgvY2xvbmUtdGVzdC0xLmMKPT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PQotLS0gZ2NjL3Rlc3RzdWl0ZS9jLWMrKy1j b21tb24vYXNhbi9saW51eC9jbG9uZS10ZXN0LTEuYwkocmV2aXNpb24gMCkK KysrIGdjYy90ZXN0c3VpdGUvYy1jKystY29tbW9uL2FzYW4vbGludXgvY2xv bmUtdGVzdC0xLmMJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDYgQEAKKy8v IFJlZ3Jlc3Npb24gdGVzdCBmb3I6CisvLyBodHRwOi8vY29kZS5nb29nbGUu Y29tL3AvYWRkcmVzcy1zYW5pdGl6ZXIvaXNzdWVzL2RldGFpbD9pZD0zNwor CisvKiB7IGRnLWRvIHJ1biB9ICovCisvKiB7IGRnLW9wdGlvbnMgIi1EX0dO VV9TT1VSQ0UiIH0gKi8KKy8qIHsgZGctc2hvdWxkZmFpbCAiYXNhbiIgfSAq LworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4K KyNpbmNsdWRlIDxzY2hlZC5oPgorI2luY2x1ZGUgPHN5cy9zeXNjYWxsLmg+ CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3dhaXQu aD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKworaW50IENoaWxkKHZvaWQgKmFy ZykgeworICBjaGFyIHhbMzJdID0gezB9OyAgLy8gU3RhY2sgZ2V0cyBwb2lz b25lZC4KKyAgcHJpbnRmKCJDaGlsZDogICVwXG4iLCB4KTsKKyAgX2V4aXQo MSk7ICAvLyBOb1JldHVybiwgc3RhY2sgd2lsbCByZW1haW4gdW5wb2lzb25l ZCB1bmxlc3Mgd2UgZG8gc29tZXRoaW5nLgorfQorCitpbnQgbWFpbihpbnQg YXJnYywgY2hhciAqKmFyZ3YpIHsKKyAgaW50IGk7CisgIGNvbnN0IGludCBr U3RhY2tTaXplID0gMSA8PCAyMDsKKyAgY2hhciBjaGlsZF9zdGFja1trU3Rh Y2tTaXplICsgMV07CisgIGNoYXIgKnNwID0gY2hpbGRfc3RhY2sgKyBrU3Rh Y2tTaXplOyAgLy8gU3RhY2sgZ3Jvd3MgZG93bi4KKyAgcHJpbnRmKCJQYXJl bnQ6ICVwXG4iLCBzcCk7CisgIHBpZF90IGNsb25lX3BpZCA9IGNsb25lKENo aWxkLCBzcCwgQ0xPTkVfRklMRVMgfCBDTE9ORV9WTSwgTlVMTCwgMCwgMCwg MCk7CisgIGludCBzdGF0dXM7CisgIHBpZF90IHdhaXRfcmVzdWx0ID0gd2Fp dHBpZChjbG9uZV9waWQsICZzdGF0dXMsIF9fV0NMT05FKTsKKyAgaWYgKHdh aXRfcmVzdWx0IDwgMCkgeworICAgIHBlcnJvcigid2FpdHBpZCIpOworICAg IHJldHVybiAwOworICB9CisgIGlmICh3YWl0X3Jlc3VsdCA9PSBjbG9uZV9w aWQgJiYgV0lGRVhJVEVEKHN0YXR1cykpIHsKKyAgICAvLyBNYWtlIHN1cmUg dGhlIGNoaWxkIHN0YWNrIHdhcyBpbmRlZWQgdW5wb2lzb25lZC4KKyAgICBm b3IgKGkgPSAwOyBpIDwga1N0YWNrU2l6ZTsgaSsrKQorICAgICAgY2hpbGRf c3RhY2tbaV0gPSBpOworICAgIGludCByZXQgPSBjaGlsZF9zdGFja1thcmdj IC0gMV07CisgICAgcHJpbnRmKCJQQVNTRURcbiIpOworICAgIHJldHVybiBy ZXQ7CisgIH0KKyAgcmV0dXJuIDA7Cit9CisKKy8qIHsgZGctb3V0cHV0ICJQ QVNTRUQiIH0gKi8KSW5kZXg6IGdjYy90ZXN0c3VpdGUvYy1jKystY29tbW9u L2FzYW4vc2xlZXAtYmVmb3JlLWR5aW5nLTEuYwo9PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09Ci0tLSBnY2MvdGVzdHN1aXRlL2MtYysrLWNvbW1vbi9hc2FuL3Ns ZWVwLWJlZm9yZS1keWluZy0xLmMJKHJldmlzaW9uIDApCisrKyBnY2MvdGVz dHN1aXRlL2MtYysrLWNvbW1vbi9hc2FuL3NsZWVwLWJlZm9yZS1keWluZy0x LmMJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTEgQEAKKy8qIHsgZGctZG8g cnVuIH0gKi8KKy8qIHsgZGctc2hvdWxkZmFpbCAiYXNhbiIgfSAqLworCisj aW5jbHVkZSA8c3RkbGliLmg+CitpbnQgbWFpbigpIHsKKyAgY2hhciAqeCA9 IChjaGFyKiltYWxsb2MoMTAgKiBzaXplb2YoY2hhcikpOworICBmcmVlKHgp OworICByZXR1cm4geFs1XTsKK30KKworLyogeyBkZy1vdXRwdXQgIlNsZWVw aW5nIGZvciAxIHNlY29uZCIgfSAqLwpJbmRleDogZ2NjL3Rlc3RzdWl0ZS9j LWMrKy1jb21tb24vYXNhbi9IZWxwZXJzL2ludGVyZmFjZV9zeW1ib2xzLnNo Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGdjYy90ZXN0c3VpdGUvYy1j KystY29tbW9uL2FzYW4vSGVscGVycy9pbnRlcmZhY2Vfc3ltYm9scy5zaAko cmV2aXNpb24gMCkKKysrIGdjYy90ZXN0c3VpdGUvYy1jKystY29tbW9uL2Fz YW4vSGVscGVycy9pbnRlcmZhY2Vfc3ltYm9scy5zaAkocmV2aXNpb24gMCkK QEAgLTAsMCArMSwxNiBAQAorbm0gJDEgfCBlZ3JlcCAiIFtUV10gIiB8IHNl ZCAicy8uKiBUIC8vIiB8IHNlZCAicy8uKiBXIC8vIiBcCisgICB8IGdyZXAg Il9fYXNhbl8iIHwgc2VkICJzL19fX2FzYW5fL19fYXNhbl8vIiA+IDEudAor Y2F0ICQyIHwgc2VkICJzL1wvXC8uKi8vIiB8IHNlZCAicy90eXBlZGVmLiov LyIgXAorfCBncmVwICJfX2FzYW5fLiooIiB8IHNlZCAicy8uKiBfX2FzYW5f L19fYXNhbl8vO3MvKC4qLy8iID4gMi50CitlY2hvIF9fYXNhbl9yZXBvcnRf bG9hZDEgPj4gMi50CitlY2hvIF9fYXNhbl9yZXBvcnRfbG9hZDIgPj4gMi50 CitlY2hvIF9fYXNhbl9yZXBvcnRfbG9hZDQgPj4gMi50CitlY2hvIF9fYXNh bl9yZXBvcnRfbG9hZDggPj4gMi50CitlY2hvIF9fYXNhbl9yZXBvcnRfbG9h ZDE2ID4+IDIudAorZWNobyBfX2FzYW5fcmVwb3J0X3N0b3JlMSA+PiAyLnQK K2VjaG8gX19hc2FuX3JlcG9ydF9zdG9yZTIgPj4gMi50CitlY2hvIF9fYXNh bl9yZXBvcnRfc3RvcmU0ID4+IDIudAorZWNobyBfX2FzYW5fcmVwb3J0X3N0 b3JlOCA+PiAyLnQKK2VjaG8gX19hc2FuX3JlcG9ydF9zdG9yZTE2ID4+IDIu dAorY2F0IDIudCB8IHNvcnQgLXUgfCBkaWZmIDEudCAtCitybSAxLnQgMi50 CgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBnY2MvdGVzdHN1aXRlL2MtYysrLWNv bW1vbi9hc2FuL0hlbHBlcnMvaW50ZXJmYWNlX3N5bWJvbHMuc2gKX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmV4ZWN1dGFibGUKICAgKyAq CgpJbmRleDogZ2NjL3Rlc3RzdWl0ZS9jLWMrKy1jb21tb24vYXNhbi9IZWxw ZXJzL2luaXRpYWxpemF0aW9uLWJ1Zy1leHRyYS0xLmMKPT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PQotLS0gZ2NjL3Rlc3RzdWl0ZS9jLWMrKy1jb21tb24vYXNh bi9IZWxwZXJzL2luaXRpYWxpemF0aW9uLWJ1Zy1leHRyYS0xLmMJKHJldmlz aW9uIDApCisrKyBnY2MvdGVzdHN1aXRlL2MtYysrLWNvbW1vbi9hc2FuL0hl bHBlcnMvaW5pdGlhbGl6YXRpb24tYnVnLWV4dHJhLTEuYwkocmV2aXNpb24g MCkKQEAgLTAsMCArMSw2IEBACisvLyAneicgaXMgZHluYW1pY2FsbHkgaW5p dGlhbGl6ZWQgZ2xvYmFsIGZyb20gZGlmZmVyZW50IFRVLgorZXh0ZXJuIGlu dCB6OworaW50IF9fYXR0cmlidXRlX18oKG5vaW5saW5lKSkgaW5pdFkoKSB7 CisgIHJldHVybiB6ICsgMTsKK30KK2ludCB5ID0gaW5pdFkoKTsKSW5kZXg6 IGdjYy90ZXN0c3VpdGUvYy1jKystY29tbW9uL2FzYW4vSGVscGVycy9ibGFj a2xpc3QtMS50bXAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gZ2NjL3Rl c3RzdWl0ZS9jLWMrKy1jb21tb24vYXNhbi9IZWxwZXJzL2JsYWNrbGlzdC0x LnRtcAkocmV2aXNpb24gMCkKKysrIGdjYy90ZXN0c3VpdGUvYy1jKystY29t bW9uL2FzYW4vSGVscGVycy9ibGFja2xpc3QtMS50bXAJKHJldmlzaW9uIDAp CkBAIC0wLDAgKzEsMyBAQAorZnVuOipicm9rZW5GdW5jdGlvbioKK2dsb2Jh bDoqYmFkR2xvYmFsKgorc3JjOipibGFja2xpc3QtZXh0cmEtMS5jCkluZGV4 OiBnY2MvdGVzdHN1aXRlL2MtYysrLWNvbW1vbi9hc2FuL0hlbHBlcnMvYmxh Y2tsaXN0LWV4dHJhLTEuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBn Y2MvdGVzdHN1aXRlL2MtYysrLWNvbW1vbi9hc2FuL0hlbHBlcnMvYmxhY2ts aXN0LWV4dHJhLTEuYwkocmV2aXNpb24gMCkKKysrIGdjYy90ZXN0c3VpdGUv Yy1jKystY29tbW9uL2FzYW4vSGVscGVycy9ibGFja2xpc3QtZXh0cmEtMS5j CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDUgQEAKKy8vIFRoaXMgZnVuY3Rp b24gaXMgYnJva2VuLCBidXQgdGhpcyBmaWxlIGlzIGJsYWNrbGlzdGVkCitp bnQgZXh0ZXJuYWxCcm9rZW5GdW5jdGlvbihpbnQgYXJnYykgeworICBjaGFy IHhbMTBdID0gezB9OworICByZXR1cm4geFthcmdjICogMTBdOyAgLy8gQk9P TQorfQo= --00235429e0f0074a3e04cf8a9b83--