From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 26065 invoked by alias); 18 Jun 2010 07:31:13 -0000 Received: (qmail 26041 invoked by uid 22791); 18 Jun 2010 07:31:07 -0000 X-SWARE-Spam-Status: No, hits=-0.9 required=5.0 tests=AWL,BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FROM,KAM_STOCKGEN,RCVD_IN_DNSWL_NONE,TW_CP,TW_EG,TW_VC X-Spam-Check-By: sourceware.org Received: from mail-pw0-f41.google.com (HELO mail-pw0-f41.google.com) (209.85.160.41) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Fri, 18 Jun 2010 07:31:00 +0000 Received: by pwi7 with SMTP id 7so839789pwi.0 for ; Fri, 18 Jun 2010 00:30:57 -0700 (PDT) Received: by 10.142.208.15 with SMTP id f15mr450964wfg.310.1276846257298; Fri, 18 Jun 2010 00:30:57 -0700 (PDT) MIME-Version: 1.0 Received: by 10.143.33.14 with HTTP; Fri, 18 Jun 2010 00:30:37 -0700 (PDT) In-Reply-To: References: <4C181DF2.7030604@vmware.com> From: Hui Zhu Date: Fri, 18 Jun 2010 07:31:00 -0000 Message-ID: Subject: Re: [PATCH] record.c: make prec can save the execution log to a pic file To: gdb-patches ml Cc: Michael Snyder Content-Type: multipart/mixed; boundary=000e0cd32c3a995cef048948ef45 X-IsSubscribed: yes Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org X-SW-Source: 2010-06/txt/msg00397.txt.bz2 --000e0cd32c3a995cef048948ef45 Content-Type: text/plain; charset=ISO-8859-1 Content-length: 5485 This is the new patch that just did some small words change. Following is a vcg file that got from record pic: graph: {title: "GDB process record" node: {title: "[BEGIN]"} node: {title: "1.c:21 main 0x80483c1 c:1"} node: {title: "main 22 0x80483c8 c:1"} node: {title: "main 25 0x80483cf c:1"} node: {title: "main 26 0x80483f3 c:2"} node: {title: "1.c:9 cool 0x8048391 c:1"} node: {title: "cool 10 0x8048397 c:1"} node: {title: "cool 13 0x80483a4 c:1"} node: {title: "1.c:4 cool2 0x8048374 c:1"} node: {title: "cool2 5 0x804837a c:1"} node: {title: "cool2 6 0x804838f c:1"} node: {title: "1.c:15 cool 0x80483a9 c:1"} node: {title: "cool 16 0x80483ae c:1"} node: {title: "main 27 0x80483fb c:1"} node: {title: "main 30 0x804841f c:1"} node: {title: "main 31 0x8048423 c:1"} node: {title: "main 32 0x8048447 c:1"} node: {title: "main 33 0x8048454 c:1"} node: {title: "main 34 0x8048478 c:1"} node: {title: "main 35 0x804847d c:1"} node: {title: "/build/buildd/glibc-2.7/build-tree/i386-libc/csu/crti.S:41 _fini 0x804852c c:1"} node: {title: "_fini 42 0x804852d c:1"} node: {title: "_fini 43 0x804852f c:1"} node: {title: "_fini 44 0x8048530 c:1"} node: {title: "_fini 45 0x8048533 c:1"} node: {title: "_fini 47 0x8048538 c:1"} node: {title: "_fini 48 0x8048539 c:1"} node: {title: "_fini 21 0x8048544 c:1"} node: {title: "_fini 22 0x8048545 c:1"} node: {title: "_fini 23 0x8048546 c:1"} node: {title: "_fini 24 0x8048547 c:1"} nearedge: {color:red sourcename: "[BEGIN]" targetname: "1.c:21 main 0x80483c1 c:1"} nearedge: {sourcename: "1.c:21 main 0x80483c1 c:1" targetname: "main 22 0x80483c8 c:1" label: "c:1"} nearedge: {sourcename: "main 22 0x80483c8 c:1" targetname: "main 25 0x80483cf c:1" label: "c:1"} nearedge: {sourcename: "main 25 0x80483cf c:1" targetname: "main 26 0x80483f3 c:2" label: "c:1"} edge: {color:red sourcename: "main 26 0x80483f3 c:2" targetname: "1.c:9 cool 0x8048391 c:1" label: "c:1"} nearedge: {sourcename: "1.c:9 cool 0x8048391 c:1" targetname: "cool 10 0x8048397 c:1" label: "c:1"} nearedge: {sourcename: "cool 10 0x8048397 c:1" targetname: "cool 13 0x80483a4 c:1" label: "c:1"} edge: {color:red sourcename: "cool 13 0x80483a4 c:1" targetname: "1.c:4 cool2 0x8048374 c:1" label: "c:1"} nearedge: {sourcename: "1.c:4 cool2 0x8048374 c:1" targetname: "cool2 5 0x804837a c:1" label: "c:1"} nearedge: {sourcename: "cool2 5 0x804837a c:1" targetname: "cool2 6 0x804838f c:1" label: "c:1"} edge: {color:blue sourcename: "cool2 6 0x804838f c:1" targetname: "1.c:15 cool 0x80483a9 c:1" label: "c:1"} nearedge: {sourcename: "1.c:15 cool 0x80483a9 c:1" targetname: "cool 16 0x80483ae c:1" label: "c:1"} edge: {color:blue sourcename: "cool 16 0x80483ae c:1" targetname: "main 26 0x80483f3 c:2" label: "c:1"} nearedge: {sourcename: "main 26 0x80483f3 c:2" targetname: "main 27 0x80483fb c:1" label: "c:1"} nearedge: {sourcename: "main 27 0x80483fb c:1" targetname: "main 30 0x804841f c:1" label: "c:1"} nearedge: {sourcename: "main 30 0x804841f c:1" targetname: "main 31 0x8048423 c:1" label: "c:1"} nearedge: {sourcename: "main 31 0x8048423 c:1" targetname: "main 32 0x8048447 c:1" label: "c:1"} nearedge: {sourcename: "main 32 0x8048447 c:1" targetname: "main 33 0x8048454 c:1" label: "c:1"} nearedge: {sourcename: "main 33 0x8048454 c:1" targetname: "main 34 0x8048478 c:1" label: "c:1"} nearedge: {sourcename: "main 34 0x8048478 c:1" targetname: "main 35 0x804847d c:1" label: "c:1"} edge: {color:red sourcename: "main 35 0x804847d c:1" targetname: "/build/buildd/glibc-2.7/build-tree/i386-libc/csu/crti.S:41 _fini 0x804852c c:1" label: "c:1"} nearedge: {sourcename: "/build/buildd/glibc-2.7/build-tree/i386-libc/csu/crti.S:41 _fini 0x804852c c:1" targetname: "_fini 42 0x804852d c:1" label: "c:1"} nearedge: {sourcename: "_fini 42 0x804852d c:1" targetname: "_fini 43 0x804852f c:1" label: "c:1"} nearedge: {sourcename: "_fini 43 0x804852f c:1" targetname: "_fini 44 0x8048530 c:1" label: "c:1"} nearedge: {sourcename: "_fini 44 0x8048530 c:1" targetname: "_fini 45 0x8048533 c:1" label: "c:1"} nearedge: {sourcename: "_fini 45 0x8048533 c:1" targetname: "_fini 47 0x8048538 c:1" label: "c:1"} nearedge: {sourcename: "_fini 47 0x8048538 c:1" targetname: "_fini 48 0x8048539 c:1" label: "c:1"} nearedge: {sourcename: "_fini 48 0x8048539 c:1" targetname: "_fini 21 0x8048544 c:1" label: "c:1"} nearedge: {sourcename: "_fini 21 0x8048544 c:1" targetname: "_fini 22 0x8048545 c:1" label: "c:1"} nearedge: {sourcename: "_fini 22 0x8048545 c:1" targetname: "_fini 23 0x8048546 c:1" label: "c:1"} nearedge: {sourcename: "_fini 23 0x8048546 c:1" targetname: "_fini 24 0x8048547 c:1" label: "c:1"} node: {title: "[END]"} nearedge: {color:red sourcename: "_fini 23 0x8048546 c:1" targetname: "[END]" } } Thanks, Hui 2010-06-18 Hui Zhu * record.c (set_record_pic_cmdlist, show_record_pic_cmdlist): New variables. (set_record_pic_command, show_record_pic_command): New functions. (record_pic_function, record_pic_line, record_pic_enum, set_record_pic_type, record_pic_hide_nofunction, record_pic_hide_nosource, record_pic_hide_same): New variables. (record_pic_fputs): New function. (node_list, edge_list): New struct. (node_list, edge_list): New variables. (record_pic_cleanups, record_pic_node, record_pic_edge, cmd_record_pic): New functions. (_initialize_record): Add new commands for record pic. 2010-06-18 Hui Zhu * gdb.texinfo: (Process Record and Replay): Add documentation for command "record pic". --000e0cd32c3a995cef048948ef45 Content-Type: text/plain; charset=US-ASCII; name="prec-pic.txt" Content-Disposition: attachment; filename="prec-pic.txt" Content-Transfer-Encoding: base64 X-Attachment-Id: f_gakptczb0 Content-length: 24787 LS0tCiByZWNvcmQuYyB8ICA1NDIgKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiAxIGZp bGUgY2hhbmdlZCwgNTQyIGluc2VydGlvbnMoKykKCi0tLSBhL3JlY29yZC5j CisrKyBiL3JlY29yZC5jCkBAIC0yNTQ1LDYgKzI1NDUsNDg3IEBAIGNtZF9y ZWNvcmRfc2F2ZSAoY2hhciAqYXJncywgaW50IGZyb21fdHQKIAkJICAgcmVj ZmlsZW5hbWUpOwogfQogCisvKiBGb3IgInJlY29yZCBwaWMiIGNvbW1hbmQu ICAqLworCitzdGF0aWMgc3RydWN0IGNtZF9saXN0X2VsZW1lbnQgKnNldF9y ZWNvcmRfcGljX2NtZGxpc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKnNob3dfcmVjb3JkX3BpY19jbWRsaXN0OworCitzdGF0aWMgdm9p ZAorc2V0X3JlY29yZF9waWNfY29tbWFuZCAoY2hhciAqYXJncywgaW50IGZy b21fdHR5KQoreworICBwcmludGZfdW5maWx0ZXJlZCAoXygiXAorXCJzZXQg cmVjb3JkIHBpY1wiIG11c3QgYmUgZm9sbG93ZWQgYnkgYW4gYXBwb3Jwcmlh dGUgc3ViY29tbWFuZC5cbiIpKTsKKyAgaGVscF9saXN0IChzZXRfcmVjb3Jk X2NtZGxpc3QsICJzZXQgcmVjb3JkIHBpYyAiLCBhbGxfY29tbWFuZHMsIGdk Yl9zdGRvdXQpOworfQorCitzdGF0aWMgdm9pZAorc2hvd19yZWNvcmRfcGlj X2NvbW1hbmQgKGNoYXIgKmFyZ3MsIGludCBmcm9tX3R0eSkKK3sKKyAgY21k X3Nob3dfbGlzdCAoc2hvd19yZWNvcmRfcGljX2NtZGxpc3QsIGZyb21fdHR5 LCAiIik7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyIHJlY29yZF9waWNfZnVu Y3Rpb25bXSA9ICJmdW5jdGlvbiI7CitzdGF0aWMgY29uc3QgY2hhciByZWNv cmRfcGljX2xpbmVbXSA9ICJsaW5lIjsKK3N0YXRpYyBjb25zdCBjaGFyICpy ZWNvcmRfcGljX2VudW1bXSA9Cit7CisgIHJlY29yZF9waWNfZnVuY3Rpb24s CisgIHJlY29yZF9waWNfbGluZSwKKyAgTlVMTCwKK307CitzdGF0aWMgY29u c3QgY2hhciAqc2V0X3JlY29yZF9waWNfdHlwZSA9IHJlY29yZF9waWNfbGlu ZTsKKworc3RhdGljIGludCByZWNvcmRfcGljX2hpZGVfbm9mdW5jdGlvbiA9 IDE7CitzdGF0aWMgaW50IHJlY29yZF9waWNfaGlkZV9ub3NvdXJjZSA9IDE7 CitzdGF0aWMgaW50ICByZWNvcmRfcGljX2hpZGVfc2FtZSA9IDE7CisKK3N0 YXRpYyB2b2lkCityZWNvcmRfcGljX2ZwdXRzIChGSUxFICpmcCwgY29uc3Qg Y2hhciAqYnVmKQoreworICBpZiAoZnB1dHMgKGJ1ZiwgZnApID09IEVPRikK KyAgICBlcnJvciAoXygiV3JpdGUgdG8gZmlsZSBlcnJvci4iKSk7Cit9CisK K3N0cnVjdCBub2RlX2xpc3QKK3sKKyAgc3RydWN0IG5vZGVfbGlzdCAqbmV4 dDsKKyAgaW50IGNvdW50OworICBDT1JFX0FERFIgYWRkcjsKKyAgaW50IHNo b3dhbGw7CisgIHN0cnVjdCBzeW10YWIgKnN5bXRhYjsKKyAgaW50IGxpbmU7 CisgIHN0cnVjdCBtaW5pbWFsX3N5bWJvbCAqZnVuY3Rpb247Cit9Oworc3Ry dWN0IGVkZ2VfbGlzdAoreworICBzdHJ1Y3QgZWRnZV9saXN0ICpuZXh0Owor ICBpbnQgY291bnQ7CisgIHN0cnVjdCBub2RlX2xpc3QgKnM7CisgIHN0cnVj dCBub2RlX2xpc3QgKnQ7CisgIGludCBmcmFtZV9kaWZmOworICBpbnQgaXNf cmV0dXJuOworfTsKK3N0cnVjdCBub2RlX2xpc3QgKm5vZGVfbGlzdCA9IE5V TEw7CitzdHJ1Y3QgZWRnZV9saXN0ICplZGdlX2xpc3QgPSBOVUxMOworCitz dGF0aWMgdm9pZAorcmVjb3JkX3BpY19jbGVhbnVwcyAodm9pZCAqZGF0YSkK K3sKKyAgRklMRSAqZnAgPSBkYXRhOworICBzdHJ1Y3Qgbm9kZV9saXN0ICpu bCwgKm5sMjsKKyAgc3RydWN0IGVkZ2VfbGlzdCAqZWwsICplbDI7CisKKyAg bmwgPSBub2RlX2xpc3Q7CisgIHdoaWxlIChubCkKKyAgICB7CisgICAgICBu bDIgPSBubDsKKyAgICAgIG5sID0gbmwtPm5leHQ7CisgICAgICB4ZnJlZSAo bmwyKTsKKyAgICB9CisgIG5vZGVfbGlzdCA9IE5VTEw7CisKKyAgZWwgPSBl ZGdlX2xpc3Q7CisgIHdoaWxlIChlbCkKKyAgICB7CisgICAgICBlbDIgPSBl bDsKKyAgICAgIGVsID0gZWwtPm5leHQ7CisgICAgICB4ZnJlZSAoZWwyKTsK KyAgICB9CisgIGVkZ2VfbGlzdCA9IE5VTEw7CisKKyAgZmNsb3NlIChmcCk7 Cit9CisKK3N0YXRpYyB2b2lkCityZWNvcmRfcGljX25vZGUgKGNoYXIgKmJ1 ZiwgaW50IGJ1Zl9tYXgsIHN0cnVjdCBnZGJhcmNoICpnZGJhcmNoLAorICAg ICAgICAgICAgICAgICBjb25zdCBjaGFyICp0eXBlLCBzdHJ1Y3Qgbm9kZV9s aXN0ICpubHApCit7CisgIGlmICh0eXBlID09IHJlY29yZF9waWNfZnVuY3Rp b24pCisgICAgeworICAgICAgc25wcmludGYgKGJ1ZiwgYnVmX21heCwgIiVz ICVzICVzIiwKKwkJKG5scC0+c3ltdGFiKSA/IG5scC0+c3ltdGFiLT5maWxl bmFtZSA6ICIiLAorICAgICAgICAgICAgICAgIChubHAtPmZ1bmN0aW9uKSA/ IFNZTUJPTF9MSU5LQUdFX05BTUUgKG5scC0+ZnVuY3Rpb24pIDogIiIsCisg ICAgICAgICAgICAgICAgKCFubHAtPmZ1bmN0aW9uKSA/IHBhZGRyZXNzIChn ZGJhcmNoLCBubHAtPmFkZHIpIDogIiIpOworICAgIH0KKyAgZWxzZQorICAg IHsKKyAgICAgIGlmIChubHAtPnNob3dhbGwpCisgICAgICAgIHsKKwkgIHNu cHJpbnRmIChidWYsIGJ1Zl9tYXgsICIlczolZCAlcyAlcyIsIG5scC0+c3lt dGFiLT5maWxlbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgbmxwLT5saW5l LAorICAgICAgICAgICAgICAgICAgICAobmxwLT5mdW5jdGlvbikgPyBTWU1C T0xfTElOS0FHRV9OQU1FIChubHAtPmZ1bmN0aW9uKSA6ICIiLAorICAgICAg ICAgICAgICAgICAgICBwYWRkcmVzcyAoZ2RiYXJjaCwgbmxwLT5hZGRyKSk7 CisgICAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAg IGlmIChubHAtPnN5bXRhYikKKwkgICAgc25wcmludGYgKGJ1ZiwgYnVmX21h eCwgIiVzICVkICVzIiwKKyAgICAgICAgICAgICAgICAgICAgICAobmxwLT5m dW5jdGlvbikgPyBTWU1CT0xfTElOS0FHRV9OQU1FIChubHAtPmZ1bmN0aW9u KSA6ICIiLAorICAgICAgICAgICAgICAgICAgICAgIG5scC0+bGluZSwgcGFk ZHJlc3MgKGdkYmFyY2gsIG5scC0+YWRkcikpOworICAgICAgICAgIGVsc2UK KyAgICAgICAgICAgIHNucHJpbnRmIChidWYsIGJ1Zl9tYXgsICIlcyAlcyIs CisgICAgICAgICAgICAgICAgICAgICAgKG5scC0+ZnVuY3Rpb24pID8gU1lN Qk9MX0xJTktBR0VfTkFNRSAobmxwLT5mdW5jdGlvbikgOiAiIiwKKyAgICAg ICAgICAgICAgICAgICAgICBwYWRkcmVzcyAoZ2RiYXJjaCwgbmxwLT5hZGRy KSk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkCityZWNv cmRfcGljX2VkZ2UgKGNoYXIgKmJ1ZiwgaW50IGJ1Zl9tYXgsIHN0cnVjdCBl ZGdlX2xpc3QgKmVscCwKKwkJIGNoYXIgKm5vZGUsIGNoYXIgKnByZXZfbm9k ZSkKK3sKKyAgaWYgKGVscC0+ZnJhbWVfZGlmZikKKyAgICB7CisgICAgICBp ZiAoZWxwLT5pc19yZXR1cm4pCisgICAgICAgIHNucHJpbnRmIChidWYsIGJ1 Zl9tYXgsICJlZGdlOiB7Y29sb3I6Ymx1ZSBzb3VyY2VuYW1lOiBcIiVzXCIg IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGFyZ2V0bmFt ZTogXCIlc1wiIiwKKwkJICBwcmV2X25vZGUsIG5vZGUpOworICAgICAgZWxz ZQorICAgICAgICBzbnByaW50ZiAoYnVmLCBidWZfbWF4LCAiZWRnZToge2Nv bG9yOnJlZCBzb3VyY2VuYW1lOiBcIiVzXCIgIgorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAidGFyZ2V0bmFtZTogXCIlc1wiIiwKKwkJICBw cmV2X25vZGUsIG5vZGUpOworICAgIH0KKyAgZWxzZQorICAgIHNucHJpbnRm IChidWYsIGJ1Zl9tYXgsCisgICAgICAgICAgICAgICJuZWFyZWRnZToge3Nv dXJjZW5hbWU6IFwiJXNcIiB0YXJnZXRuYW1lOiBcIiVzXCIiLAorICAgICAg ICAgICAgICBwcmV2X25vZGUsIG5vZGUpOworfQorCisvKiBTYXZlIHRoZSBl eGVjdXRpb24gbG9nIHRvIGEgdmNnIGZpbGUuICAqLworCitzdGF0aWMgdm9p ZAorY21kX3JlY29yZF9waWMgKGNoYXIgKmFyZ3MsIGludCBmcm9tX3R0eSkK K3sKKyAgY2hhciAqcmVjZmlsZW5hbWUsIHJlY2ZpbGVuYW1lX2J1ZmZlcls0 MF07CisgIEZJTEUgKmZwOworICBzdHJ1Y3QgY2xlYW51cCAqb2xkX2NsZWFu dXBzLCAqc2V0X2NsZWFudXBzOworICBzdHJ1Y3QgcmVnY2FjaGUgKnJlZ2Nh Y2hlOworICBzdHJ1Y3QgZ2RiYXJjaCAqZ2RiYXJjaDsKKyAgc3RydWN0IHJl Y29yZF9lbnRyeSAqY3VyX3JlY29yZF9saXN0OworICBjaGFyIHByZXZfbm9k ZVsyNTZdLCBsaW5lWzI1Nl07CisgIENPUkVfQUREUiBwcmV2X2FkZHI7Cisg IHN0cnVjdCBmcmFtZV9pZCBmaSwgY2FsbGVyX2ZpLCBwcmV2X2ZpLCBwcmV2 X2NhbGxlcl9maTsKKyAgc3RydWN0IGVkZ2VfbGlzdCAqZWRnZV9saXN0X3Rh aWwgPSBOVUxMOworICBzdHJ1Y3Qgbm9kZV9saXN0ICpub2RlX2xpc3RfdGFp bCA9IE5VTEw7CisgIHN0cnVjdCBzeW10YWJfYW5kX2xpbmUgc2FsLCBwcmV2 X3NhbDsKKyAgc3RydWN0IG5vZGVfbGlzdCAqcHJldl9ubHA7CisgIHN0cnVj dCBub2RlX2xpc3QgcHJldl9ubHBfcmVhbDsKKworICAvKiBDaGVjayBpZiBy ZWNvcmQgdGFyZ2V0IGlzIHJ1bm5pbmcuICAqLworICBpZiAoY3VycmVudF90 YXJnZXQudG9fc3RyYXR1bSAhPSByZWNvcmRfc3RyYXR1bSkKKyAgICBlcnJv ciAoXygiVGhpcyBjb21tYW5kIGNhbiBvbmx5IGJlIHVzZWQgd2l0aCB0YXJn ZXQgJ3JlY29yZCcgXAorb3IgdGFyZ2V0ICdyZWNvcmQtY29yZScuIikpOwor CisgIGlmIChhcmdzICYmICphcmdzKQorICAgIHJlY2ZpbGVuYW1lID0gYXJn czsKKyAgZWxzZQorICAgIHsKKyAgICAgIC8qIERlZmF1bHQgcmVjZmlsZSBu YW1lIGlzICJnZGJfcmVjb3JkX1BJRC52Y2ciLiAgKi8KKyAgICAgIHNucHJp bnRmIChyZWNmaWxlbmFtZV9idWZmZXIsIHNpemVvZiAocmVjZmlsZW5hbWVf YnVmZmVyKSwKKyAgICAgICAgICAgICAgICAiZ2RiX3JlY29yZF8lZC52Y2ci LCBQSURHRVQgKGluZmVyaW9yX3B0aWQpKTsKKyAgICAgIHJlY2ZpbGVuYW1l ID0gcmVjZmlsZW5hbWVfYnVmZmVyOworICAgIH0KKworICAvKiBPcGVuIHRo ZSBvdXRwdXQgZmlsZS4gICovCisgIGZwID0gZm9wZW4gKHJlY2ZpbGVuYW1l LCAid2IiKTsKKyAgaWYgKCFmcCkKKyAgICBlcnJvciAoXygiVW5hYmxlIHRv IG9wZW4gZmlsZSAnJXMnIiksIHJlY2ZpbGVuYW1lKTsKKworICBvbGRfY2xl YW51cHMgPSBtYWtlX2NsZWFudXAgKHJlY29yZF9waWNfY2xlYW51cHMsIGZw KTsKKworICAvKiBTYXZlIHRoZSBjdXJyZW50IHJlY29yZCBlbnRyeSB0byAi Y3VyX3JlY29yZF9saXN0Ii4gICovCisgIGN1cl9yZWNvcmRfbGlzdCA9IHJl Y29yZF9saXN0OworCisgIC8qIEdldCB0aGUgdmFsdWVzIG9mIHJlZ2NhY2hl IGFuZCBnZGJhcmNoLiAgKi8KKyAgcmVnY2FjaGUgPSBnZXRfY3VycmVudF9y ZWdjYWNoZSAoKTsKKyAgZ2RiYXJjaCA9IGdldF9yZWdjYWNoZV9hcmNoIChy ZWdjYWNoZSk7CisKKyAgLyogRGlzYWJsZSB0aGUgR0RCIG9wZXJhdGlvbiBy ZWNvcmQuICAqLworICBzZXRfY2xlYW51cHMgPSByZWNvcmRfZ2RiX29wZXJh dGlvbl9kaXNhYmxlX3NldCAoKTsKKworICAvKiBSZXZlcnNlIGV4ZWN1dGUg dG8gdGhlIGJlZ2luIG9mIHJlY29yZCBsaXN0LiAgKi8KKyAgd2hpbGUgKDEp CisgICAgeworICAgICAgLyogQ2hlY2sgZm9yIGJlZ2lubmluZyBhbmQgZW5k IG9mIGxvZy4gICovCisgICAgICBpZiAocmVjb3JkX2xpc3QgPT0gJnJlY29y ZF9maXJzdCkKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIHJlY29yZF9leGVj X2luc24gKHJlZ2NhY2hlLCBnZGJhcmNoLCByZWNvcmRfbGlzdCk7CisKKyAg ICAgIGlmIChyZWNvcmRfbGlzdC0+cHJldikKKyAgICAgICAgcmVjb3JkX2xp c3QgPSByZWNvcmRfbGlzdC0+cHJldjsKKyAgICB9CisKKyAgLyogV3JpdGUg b3V0IHRoZSByZWNvcmQgbG9nLiAgKi8KKyAgLyogV3JpdGUgdGhlIGhlYWQu ICAqLworICByZWNvcmRfcGljX2ZwdXRzIChmcCwgImdyYXBoOiB7dGl0bGU6 IFwiR0RCIHByb2Nlc3MgcmVjb3JkXCJcbiIpOworCisgIC8qIFdyaXRlIHRo ZSBmaXJzdCBub2RlLiAgKi8KKyAgcmVjb3JkX3BpY19mcHV0cyAoZnAsICJu b2RlOiB7dGl0bGU6IFwiW0JFR0lOXVwifVxuIik7CisKKyAgLyogSW5pdGlh bGl6YXRpb24uICAqLworICBzbnByaW50ZiAocHJldl9ub2RlLCAyNTYsICJb QkVHSU5dIik7CisgIHByZXZfZmkgPSBudWxsX2ZyYW1lX2lkOworICBwcmV2 X2NhbGxlcl9maSA9IG51bGxfZnJhbWVfaWQ7CisgIHByZXZfYWRkciA9IDA7 CisgIHByZXZfc2FsLnN5bXRhYiA9IE5VTEw7CisgIHByZXZfbmxwX3JlYWwu YWRkciA9IDA7CisgIHByZXZfbmxwID0gJnByZXZfbmxwX3JlYWw7CisKKyAg LyogU2F2ZSB0aGUgZW50cmllcyB0byBmcCBhbmQgZm9yd2FyZCBleGVjdXRl IHRvIHRoZSBlbmQgb2YKKyAgICAgcmVjb3JkIGxpc3QuICAqLworICByZWNv cmRfbGlzdCA9ICZyZWNvcmRfZmlyc3Q7CisgIHdoaWxlICgxKQorICAgIHsK KyAgICAgIGlmIChyZWNvcmRfbGlzdC0+dHlwZSA9PSByZWNvcmRfZW5kKQor ICAgICAgICB7CisgICAgICAgICAgaW50IGZyYW1lX2RpZmYgPSAwOworICAg ICAgICAgIENPUkVfQUREUiBhZGRyID0gcmVnY2FjaGVfcmVhZF9wYyAocmVn Y2FjaGUpOworCisgICAgICAgICAgLyogQ2hlY2sgaWYgdGhlIEFERFIgaXMg c3RpbCBpbiB0aGUgc2FtZSBsaW5lIHdpdGggdGhlCisgICAgICAgICAgICAg cHJldiBjeWNsZS4gICovCisgICAgICAgICAgaWYgKHByZXZfc2FsLnN5bXRh YgorICAgICAgICAgICAgICAmJiBhZGRyID49IHByZXZfc2FsLnBjICYmIGFk ZHIgPCBwcmV2X3NhbC5lbmQpCisgICAgICAgICAgICBnb3RvIGV4ZWM7Cisg ICAgICAgICAgc2FsID0gZmluZF9wY19saW5lIChhZGRyLCAwKTsKKworICAg ICAgICAgIGlmIChyZWNvcmRfcGljX2hpZGVfbm9zb3VyY2UgJiYgIXNhbC5z eW10YWIpCisgICAgICAgICAgICBnb3RvIGV4ZWM7CisKKyAgICAgICAgICAv KiBDaGVjayBpZiB0aGUgaW5mZXJpb3IgaXMgaW4gc2FtZSBmcmFtZSB3aXRo IHByZXYgY3ljbGUuCisgICAgICAgICAgICAgQ2hlY2sgYm90aCB0aGUgY3Vy cmVudCBmaSBhbmQgY2FsbGVyIGZpIGJlY2F1c2UgdGhlIGxhc3QKKyAgICAg ICAgICAgICBhZGRyIG9mIGZ1bmN0aW9uIGlzIGRpZmZlcmVudCB3aXRoIGN1 cnJlbnQgZnVuY3Rpb24uICAqLworICAgICAgICAgIHJlaW5pdF9mcmFtZV9j YWNoZSAoKTsKKyAgICAgICAgICBmaSA9IGdldF9mcmFtZV9pZCAoZ2V0X2N1 cnJlbnRfZnJhbWUgKCkpOworICAgICAgICAgIGNhbGxlcl9maSA9IGZyYW1l X3Vud2luZF9jYWxsZXJfaWQgKGdldF9jdXJyZW50X2ZyYW1lICgpKTsKKyAg ICAgICAgICBpZiAoIWZyYW1lX2lkX2VxIChwcmV2X2ZpLCBmaSkKKyAgICAg ICAgICAgICAgJiYgIWZyYW1lX2lkX2VxIChwcmV2X2NhbGxlcl9maSwgY2Fs bGVyX2ZpKSkKKyAgICAgICAgICAgIGZyYW1lX2RpZmYgPSAxOworCisgICAg ICAgICAgaWYgKHNldF9yZWNvcmRfcGljX3R5cGUgPT0gcmVjb3JkX3BpY19s aW5lIHx8IGZyYW1lX2RpZmYpCisgICAgICAgICAgICB7CisgICAgICAgICAg ICAgIGludCBpc19yZXR1cm4gPSAwOworICAgICAgICAgICAgICBzdHJ1Y3Qg bm9kZV9saXN0ICpubHAgPSBOVUxMOworICAgICAgICAgICAgICBzdHJ1Y3Qg ZWRnZV9saXN0ICplbHAgPSBOVUxMOworICAgICAgICAgICAgICBjaGFyIG5v ZGVbMjU2XTsKKyAgICAgICAgICAgICAgc3RydWN0IG1pbmltYWxfc3ltYm9s ICpmdW5jdGlvbjsKKworCSAgICAgIC8qIEdldCB0aGUgbm9kZSBhZGRyLiAg Ki8KKyAgICAgICAgICAgICAgaWYgKHNldF9yZWNvcmRfcGljX3R5cGUgPT0g cmVjb3JkX3BpY19mdW5jdGlvbikKKyAgICAgICAgICAgICAgICB7CisgICAg ICAgICAgICAgICAgICAvKiBHZXQgdGhlIHN0YXJ0IGFkZHIgb2YgZnVuY3Rp b24uICAqLworICAgICAgICAgICAgICAgICAgYWRkciA9IGdldF9wY19mdW5j dGlvbl9zdGFydCAoYWRkcik7CisgICAgICAgICAgICAgICAgICBpZiAoYWRk ciA9PSAwKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAg ICAgICAgICAgaWYgKHJlY29yZF9waWNfaGlkZV9ub2Z1bmN0aW9uKQorICAg ICAgICAgICAgICAgICAgICAgICAgZ290byBleGVjOworICAgICAgICAgICAg ICAgICAgICAgIGFkZHIgPSByZWdjYWNoZV9yZWFkX3BjIChyZWdjYWNoZSk7 CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9Cisg ICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAg ICAgICAgICAgICAvKiBHZXQgdGhlIHN0YXJ0IGFkZHIgb2YgbGluZS4gICov CisgICAgICAgICAgICAgICAgICBpZiAoc2FsLnN5bXRhYikKKyAgICAgICAg ICAgICAgICAgICAgYWRkciA9IHNhbC5wYzsKKyAgICAgICAgICAgICAgICB9 CisKKyAgICAgICAgICAgICAgZnVuY3Rpb24gPSBsb29rdXBfbWluaW1hbF9z eW1ib2xfYnlfcGMgKGFkZHIpOworICAgICAgICAgICAgICBpZiAoIWZ1bmN0 aW9uICYmIHJlY29yZF9waWNfaGlkZV9ub2Z1bmN0aW9uKQorICAgICAgICAg ICAgICAgIGdvdG8gZXhlYzsKKworICAgICAgICAgICAgICBpZiAoZnJhbWVf aWRfZXEgKGZpLCBwcmV2X2NhbGxlcl9maSkpCisgICAgICAgICAgICAgICAg aXNfcmV0dXJuID0gMTsKKworICAgICAgICAgICAgICBpZiAocmVjb3JkX3Bp Y19oaWRlX3NhbWUpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg ICAgICAgLyogQ2hlY2sgaWYgYWRkciBpbiBub2RlX2xpc3QuICAqLworICAg ICAgICAgICAgICAgICAgZm9yIChubHAgPSBub2RlX2xpc3Q7IG5scDsgbmxw ID0gbmxwLT5uZXh0KQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAg ICAgICAgICAgICAgICAgaWYgKG5scC0+YWRkciA9PSBhZGRyKQorICAgICAg ICAgICAgICAgICAgICAgICAgeworCQkJICBpZiAoIWlzX3JldHVybgorCQkJ ICAgICAgfHwgc2V0X3JlY29yZF9waWNfdHlwZSAhPSByZWNvcmRfcGljX2Z1 bmN0aW9uKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5scC0+Y291 bnQgKys7CisgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg ICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9 CisKKyAgICAgICAgICAgICAgICAgIC8qIENoZWNrIGlmIHByZXZfYWRkciBh bmQgYWRkciBpbiBlZGdlX2xpc3QuICAqLworCSAgICAgICAgICBpZiAobmxw KQorCSAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICBmb3Ig KGVscCA9IGVkZ2VfbGlzdDsgZWxwOyBlbHAgPSBlbHAtPm5leHQpCisgICAg ICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAg ICAgIGlmIChlbHAtPnMtPmFkZHIgPT0gcHJldl9hZGRyICYmIGVscC0+dC0+ YWRkciA9PSBhZGRyKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVscC0+Y291bnQgKys7 CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg ICAgICB9CisJCSAgICB9CisgICAgICAgICAgICAgICAgfQorCisgICAgICAg ICAgICAgIGlmICghbmxwKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAg ICAgICAgICAgIHN0cnVjdCBub2RlX2xpc3Qgbmw7CisKKyAgICAgICAgICAg ICAgICAgIG5sLmFkZHIgPSBhZGRyOworICAgICAgICAgICAgICAgICAgaWYg KGZyYW1lX2RpZmYgJiYgc2FsLnN5bXRhYikKKyAgICAgICAgICAgICAgICAg ICAgbmwuc2hvd2FsbCA9IDE7CisgICAgICAgICAgICAgICAgICBlbHNlCisg ICAgICAgICAgICAgICAgICAgIG5sLnNob3dhbGwgPSAwOworICAgICAgICAg ICAgICAgICAgbmwuc3ltdGFiID0gc2FsLnN5bXRhYjsKKyAgICAgICAgICAg ICAgICAgIG5sLmxpbmUgPSBzYWwubGluZTsKKyAgICAgICAgICAgICAgICAg IG5sLmZ1bmN0aW9uID0gZnVuY3Rpb247CisKKyAgICAgICAgICAgICAgICAg IGlmIChyZWNvcmRfcGljX2hpZGVfc2FtZSkKKyAgICAgICAgICAgICAgICAg ICAgeworICAgICAgICAgICAgICAgICAgICAgIG5scCA9IHhtYWxsb2MgKHNp emVvZiAoc3RydWN0IG5vZGVfbGlzdCkpOworICAgICAgICAgICAgICAgICAg ICAgICpubHAgPSBubDsKKyAgICAgICAgICAgICAgICAgICAgICBubHAtPmNv dW50ID0gMTsKKworICAgICAgICAgICAgICAgICAgICAgIC8qIEFkZCBub2Rl IHRvIG5vZGVfbGlzdC4gICovCisgICAgICAgICAgICAgICAgICAgICAgbmxw LT5uZXh0ID0gTlVMTDsKKwkJICAgICAgaWYgKG5vZGVfbGlzdF90YWlsKQor ICAgICAgICAgICAgICAgICAgICAgICAgbm9kZV9saXN0X3RhaWwtPm5leHQg PSBubHA7CisJCSAgICAgIGlmIChub2RlX2xpc3QgPT0gTlVMTCkKKwkJICAg ICAgICBub2RlX2xpc3QgPSBubHA7CisgICAgICAgICAgICAgICAgICAgICAg bm9kZV9saXN0X3RhaWwgPSBubHA7CisgICAgICAgICAgICAgICAgICAgIH0K KyAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAg eworICAgICAgICAgICAgICAgICAgICAgIC8qIERyYXcgdGhlIG5vZGUuICAq LworICAgICAgICAgICAgICAgICAgICAgIHJlY29yZF9waWNfbm9kZSAobm9k ZSwgMjU2LCBnZGJhcmNoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgc2V0X3JlY29yZF9waWNfdHlwZSwgJm5sKTsKKwkJICAg ICAgc25wcmludGYgKGxpbmUsIDI1NiwgIiVzIGk6JXMiLCBub2RlLAorCQkg ICAgICAgICAgICAgICAgcHVsb25nZXN0IChyZWNvcmRfbGlzdC0+dS5lbmQu aW5zbl9udW0pKTsKKwkJICAgICAgc3RyY3B5IChub2RlLCBsaW5lKTsKKyAg ICAgICAgICAgICAgICAgICAgICBzbnByaW50ZiAobGluZSwgMjU2LCAibm9k ZToge3RpdGxlOiBcIiVzXCJ9XG4iLCBub2RlKTsKKyAgICAgICAgICAgICAg ICAgICAgICByZWNvcmRfcGljX2ZwdXRzIChmcCwgbGluZSk7CisgICAgICAg ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAg ICAgICAgaWYgKCFlbHApCisgICAgICAgICAgICAgICAgeworICAgICAgICAg ICAgICAgICAgc3RydWN0IGVkZ2VfbGlzdCBlbDsKKworICAgICAgICAgICAg ICAgICAgZWwuaXNfcmV0dXJuID0gaXNfcmV0dXJuOworICAgICAgICAgICAg ICAgICAgZWwuZnJhbWVfZGlmZiA9IGZyYW1lX2RpZmY7CisKKyAgICAgICAg ICAgICAgICAgIGlmIChyZWNvcmRfcGljX2hpZGVfc2FtZSkKKyAgICAgICAg ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgIGVscCA9IHht YWxsb2MgKHNpemVvZiAoc3RydWN0IGVkZ2VfbGlzdCkpOworICAgICAgICAg ICAgICAgICAgICAgICplbHAgPSBlbDsKKwkJICAgICAgZWxwLT5zID0gcHJl dl9ubHA7CisgICAgICAgICAgICAgICAgICAgICAgZWxwLT50ID0gbmxwOwor ICAgICAgICAgICAgICAgICAgICAgIGVscC0+Y291bnQgPSAxOworCisgICAg ICAgICAgICAgICAgICAgICAgLyogQWRkIGVkZ2UgdG8gZWRnZV9saXN0LiAg Ki8KKyAgICAgICAgICAgICAgICAgICAgICBlbHAtPm5leHQgPSBOVUxMOwor CQkgICAgICBpZiAoZWRnZV9saXN0X3RhaWwpCisgICAgICAgICAgICAgICAg ICAgICAgICBlZGdlX2xpc3RfdGFpbC0+bmV4dCA9IGVscDsKKwkJICAgICAg aWYgKGVkZ2VfbGlzdCA9PSBOVUxMKQorCQkgICAgICAgIGVkZ2VfbGlzdCA9 IGVscDsKKyAgICAgICAgICAgICAgICAgICAgICBlZGdlX2xpc3RfdGFpbCA9 IGVscDsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg ICAgZWxzZQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAg ICAgICAgICAgLyogRHJhdyB0aGUgZWRnZS4gICovCisgICAgICAgICAgICAg ICAgICAgICAgcmVjb3JkX3BpY19lZGdlIChsaW5lLCAyNTYsICZlbCwgbm9k ZSwgcHJldl9ub2RlKTsKKyAgICAgICAgICAgICAgICAgICAgICByZWNvcmRf cGljX2ZwdXRzIChmcCwgbGluZSk7CisJCSAgICAgIHJlY29yZF9waWNfZnB1 dHMgKGZwLCAiIH1cbiIpOworICAgICAgICAgICAgICAgICAgICB9CisgICAg ICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgIGlmIChyZWNvcmRfcGlj X2hpZGVfc2FtZSkKKyAgICAgICAgICAgICAgICBwcmV2X25scCA9IG5scDsK KyAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHNucHJpbnRm IChwcmV2X25vZGUsIDI1NiwgIiVzIiwgbm9kZSk7CisgICAgICAgICAgICAg IHByZXZfYWRkciA9IGFkZHI7CisgICAgICAgICAgICB9CisKKyAgICAgICAg ICBwcmV2X3NhbCA9IHNhbDsKKyAgICAgICAgICBwcmV2X2ZpID0gZmk7Cisg ICAgICAgICAgcHJldl9jYWxsZXJfZmkgPSBjYWxsZXJfZmk7CisgICAgICAg IH0KKworZXhlYzoKKyAgICAgIC8qIEV4ZWN1dGUgZW50cnkuICAqLworICAg ICAgcmVjb3JkX2V4ZWNfaW5zbiAocmVnY2FjaGUsIGdkYmFyY2gsIHJlY29y ZF9saXN0KTsKKworICAgICAgaWYgKHJlY29yZF9saXN0LT5uZXh0KQorICAg ICAgICByZWNvcmRfbGlzdCA9IHJlY29yZF9saXN0LT5uZXh0OworICAgICAg ZWxzZQorICAgICAgICBicmVhazsKKyAgICB9CisKKyAgaWYgKHJlY29yZF9w aWNfaGlkZV9zYW1lKQorICAgIHsKKyAgICAgIHN0cnVjdCBub2RlX2xpc3Qg Km5scCA9IE5VTEw7CisgICAgICBzdHJ1Y3QgZWRnZV9saXN0ICplbHAgPSBO VUxMOworICAgICAgY2hhciBub2RlWzI1Nl07CisKKyAgICAgIGZvciAobmxw ID0gbm9kZV9saXN0OyBubHA7IG5scCA9IG5scC0+bmV4dCkKKyAgICAgICAg eworICAgICAgICAgIC8qIERyYXcgdGhlIG5vZGUuICAqLworICAgICAgICAg IHJlY29yZF9waWNfbm9kZSAobm9kZSwgMjU2LCBnZGJhcmNoLCBzZXRfcmVj b3JkX3BpY190eXBlLCBubHApOworICAgICAgICAgIHNucHJpbnRmIChsaW5l LCAyNTYsICJub2RlOiB7dGl0bGU6IFwiJXMgYzolZFwifVxuIiwgbm9kZSwK KwkJICAgIG5scC0+Y291bnQpOworICAgICAgICAgIHJlY29yZF9waWNfZnB1 dHMgKGZwLCBsaW5lKTsKKwl9CisKKyAgICAgIHJlY29yZF9waWNfbm9kZSAo bm9kZSwgMjU2LCBnZGJhcmNoLCBzZXRfcmVjb3JkX3BpY190eXBlLCBlZGdl X2xpc3QtPnQpOworICAgICAgc25wcmludGYgKGxpbmUsIDI1NiwKKwkgICAg ICAgICJuZWFyZWRnZToge2NvbG9yOnJlZCBzb3VyY2VuYW1lOiBcIltCRUdJ Tl1cIiB0YXJnZXRuYW1lOiBcIiVzIGM6JWRcIn1cbiIsCisJICAgICAgICBu b2RlLCBlZGdlX2xpc3QtPmNvdW50KTsKKyAgICAgIHJlY29yZF9waWNfZnB1 dHMgKGZwLCBsaW5lKTsKKyAgICAgIGZvciAoZWxwID0gZWRnZV9saXN0LT5u ZXh0OyBlbHA7IGVscCA9IGVscC0+bmV4dCkKKyAgICAgICAgeworICAgICAg ICAgIC8qIERyYXcgdGhlIGVkZ2UuICAqLworCSAgcmVjb3JkX3BpY19ub2Rl IChwcmV2X25vZGUsIDI1NiwgZ2RiYXJjaCwgc2V0X3JlY29yZF9waWNfdHlw ZSwKKwkJCSAgIGVscC0+cyk7CisJICBzbnByaW50ZiAobGluZSwgMjU2LCAi JXMgYzolZCIsIHByZXZfbm9kZSwgZWxwLT5zLT5jb3VudCk7CisJICBzdHJj cHkgKHByZXZfbm9kZSwgbGluZSk7CisJICByZWNvcmRfcGljX25vZGUgKG5v ZGUsIDI1NiwgZ2RiYXJjaCwgc2V0X3JlY29yZF9waWNfdHlwZSwKKwkJCSAg IGVscC0+dCk7CisJICBzbnByaW50ZiAobGluZSwgMjU2LCAiJXMgYzolZCIs IG5vZGUsIGVscC0+dC0+Y291bnQpOworCSAgc3RyY3B5IChub2RlLCBsaW5l KTsKKyAgICAgICAgICByZWNvcmRfcGljX2VkZ2UgKGxpbmUsIDI1NiwgZWxw LCBub2RlLCBwcmV2X25vZGUpOworICAgICAgICAgIHJlY29yZF9waWNfZnB1 dHMgKGZwLCBsaW5lKTsKKyAgICAgICAgICBzbnByaW50ZiAobGluZSwgMjU2 LCAiIGxhYmVsOiBcImM6JWRcIn1cbiIsIGVscC0+Y291bnQpOworCSAgcmVj b3JkX3BpY19mcHV0cyAoZnAsIGxpbmUpOworICAgICAgICB9CisgICAgfQor CisgIC8qIFdyaXRlIHRoZSBsYXN0IG5vZGUuICAqLworICByZWNvcmRfcGlj X2ZwdXRzIChmcCwgIm5vZGU6IHt0aXRsZTogXCJbRU5EXVwifVxuIik7Cisg IHNucHJpbnRmIChsaW5lLCAyNTYsCisJICAgICJuZWFyZWRnZToge2NvbG9y OnJlZCBzb3VyY2VuYW1lOiBcIiVzXCIgdGFyZ2V0bmFtZTogXCJbRU5EXVwi IH1cbiIsCisJICAgIHByZXZfbm9kZSk7CisgIHJlY29yZF9waWNfZnB1dHMg KGZwLCBsaW5lKTsKKworICAvKiBXcml0ZSB0aGUgdGFpbC4gICovCisgIHJl Y29yZF9waWNfZnB1dHMgKGZwLCAifVxuIik7CisKKyAgLyogUmV2ZXJzZSBl eGVjdXRlIHRvIGN1cl9yZWNvcmRfbGlzdC4gICovCisgIHdoaWxlICgxKQor ICAgIHsKKyAgICAgIC8qIENoZWNrIGZvciBiZWdpbm5pbmcgYW5kIGVuZCBv ZiBsb2cuICAqLworICAgICAgaWYgKHJlY29yZF9saXN0ID09IGN1cl9yZWNv cmRfbGlzdCkKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIHJlY29yZF9leGVj X2luc24gKHJlZ2NhY2hlLCBnZGJhcmNoLCByZWNvcmRfbGlzdCk7CisKKyAg ICAgIGlmIChyZWNvcmRfbGlzdC0+cHJldikKKyAgICAgICAgcmVjb3JkX2xp c3QgPSByZWNvcmRfbGlzdC0+cHJldjsKKyAgICB9CisKKyAgZG9fY2xlYW51 cHMgKHNldF9jbGVhbnVwcyk7CisgIGRvX2NsZWFudXBzIChvbGRfY2xlYW51 cHMpOworCisgIC8qIFN1Y2NlZWRlZC4gICovCisgIHByaW50Zl9maWx0ZXJl ZCAoXygiU2F2ZWQgZmlsZSAlcyB3aXRoIGV4ZWN1dGlvbiBsb2cuXG4iKSwK KwkJICAgcmVjZmlsZW5hbWUpOworfQorCiAvKiByZWNvcmRfZ290b19pbnNu IC0tIHJld2luZCB0aGUgcmVjb3JkIGxvZyAoZm9yd2FyZCBvciBiYWNrd2Fy ZCwKICAgIGRlcGVuZGluZyBvbiBESVIpIHRvIHRoZSBnaXZlbiBlbnRyeSwg Y2hhbmdpbmcgdGhlIHByb2dyYW0gc3RhdGUKICAgIGNvcnJlc3BvbmRpbmds eS4gICovCkBAIC0yNzMwLDQgKzMyMTEsNjUgQEAgcmVjb3JkL3JlcGxheSBi dWZmZXIuICBaZXJvIG1lYW5zIHVubGltaQogUmVzdG9yZSB0aGUgcHJvZ3Jh bSB0byBpdHMgc3RhdGUgYXQgaW5zdHJ1Y3Rpb24gbnVtYmVyIE4uXG5cCiBB cmd1bWVudCBpcyBpbnN0cnVjdGlvbiBudW1iZXIsIGFzIHNob3duIGJ5ICdp bmZvIHJlY29yZCcuIiksCiAJICAgJnJlY29yZF9jbWRsaXN0KTsKKworICAv KiBGb3IgInJlY29yZCBwaWMiIGNvbW1hbmQuICAqLworICBjID0gYWRkX2Nt ZCAoInBpYyIsIGNsYXNzX29ic2N1cmUsIGNtZF9yZWNvcmRfcGljLAorCSAg ICAgICBfKCJTYXZlIHRoZSBleGVjdXRpb24gbG9nIHRvIGEgdmNnIGZpbGUu XG5cCitBcmd1bWVudCBpcyBvcHRpb25hbCBmaWxlbmFtZS5cblwKK0RlZmF1 bHQgZmlsZW5hbWUgaXMgJ2dkYl9yZWNvcmRfPHByb2Nlc3NfaWQ+LnZjZycu IiksCisJICAgICAgICZyZWNvcmRfY21kbGlzdCk7CisgIHNldF9jbWRfY29t cGxldGVyIChjLCBmaWxlbmFtZV9jb21wbGV0ZXIpOworICBhZGRfcHJlZml4 X2NtZCAoInBpYyIsIGNsYXNzX3N1cHBvcnQsIHNldF9yZWNvcmRfcGljX2Nv bW1hbmQsCisJCSAgXygiU2V0IHJlY29yZCBwaWMgb3B0aW9ucyIpLCAmc2V0 X3JlY29yZF9waWNfY21kbGlzdCwKKwkJICAic2V0IHJlY29yZCBwaWMgIiwg MCwgJnNldF9yZWNvcmRfY21kbGlzdCk7CisgIGFkZF9wcmVmaXhfY21kICgi cGljIiwgY2xhc3Nfc3VwcG9ydCwgc2hvd19yZWNvcmRfcGljX2NvbW1hbmQs CisJCSAgXygiU2hvdyByZWNvcmQgcGljIG9wdGlvbnMiKSwgJnNob3dfcmVj b3JkX3BpY19jbWRsaXN0LAorCQkgICJzaG93IHJlY29yZCBwaWMgIiwgMCwg JnNob3dfcmVjb3JkX2NtZGxpc3QpOworICBhZGRfc2V0c2hvd19lbnVtX2Nt ZCAoInR5cGUiLCBub19jbGFzcywKKwkJCXJlY29yZF9waWNfZW51bSwgJnNl dF9yZWNvcmRfcGljX3R5cGUsIF8oIlwKK1NldCB0aGUgdHlwZSBvZiB0aGUg bm9kZXMgdGhhdCByZWNvcmQgcGljIGNvbW1hbmQgc2F2ZWQuIiksIF8oIlwK K1Nob3cgdGhlIHR5cGUgb2YgdGhlIG5vZGVzIHRoYXQgcmVjb3JkIHBpYyBj b21tYW5kIHNhdmVkLiIpLCBfKCJcCitXaGVuIExJTkUsIGVhY2ggbm9kZSBv ZiB2Y2cgZmlsZSB0aGF0IGNvbW1hbmQgcmVjb3JkIHBpYyBzYXZlZFxuXAor d2lsbCBiZSBhIGxpbmUgb2YgdGhlIGluZmVyaW9yLlxuXAorV2hlbiBGVU5D VElPTiwgZWFjaCBub2RlIG9mIHZjZyBmaWxlIHRoYXQgY29tbWFuZCByZWNv cmQgcGljIHNhdmVkXG5cCit3aWxsIGJlIGEgZnVuY3Rpb24gb2YgdGhlIGlu ZmVyaW9yLiIpLAorCQkJTlVMTCwgTlVMTCwKKwkJCSZzZXRfcmVjb3JkX3Bp Y19jbWRsaXN0LCAmc2hvd19yZWNvcmRfcGljX2NtZGxpc3QpOworICBhZGRf c2V0c2hvd19ib29sZWFuX2NtZCAoImhpZGUtbm9mdW5jdGlvbiIsIG5vX2Ns YXNzLAorCQkJICAgJnJlY29yZF9waWNfaGlkZV9ub2Z1bmN0aW9uLCBfKCJc CitTZXQgd2hldGhlciByZWNvcmQgcGljIGNvbW1hbmQgaGlkZSB0aGUgbm9k ZXMgdGhhdCBkb24ndCBoYXZlIHRoZSBmdW5jdGlvbiBuYW1lLiIpLCBfKCJc CitTaG93IHdoZXRoZXIgcmVjb3JkIHBpYyBjb21tYW5kIGhpZGUgdGhlIG5v ZGVzIHRoYXQgZG9uJ3QgaGF2ZSB0aGUgZnVuY3Rpb24gbmFtZS4iKSwgXygi XAorRGVmYXVsdCBpcyBPTi5cblwKK1doZW4gT04sIHJlY29yZCBwaWMgY29t bWFuZCB3aWxsIGhpZGUgdGhlIG5vZGVzIHRoYXQgZG9uJ3QgaGF2ZVxuXAor dGhlIGZ1bmN0aW9uIG5hbWUuXG5cCitXaGVuIE9GRiwgcmVjb3JkIHBpYyBj b21tYW5kIHdpbGwgc2hvdyB0aGUgbm9kZXMgdGhhdCBkb24ndCBoYXZlXG5c Cit0aGUgZnVuY3Rpb24gbmFtZS4iKSwKKwkJCSAgIE5VTEwsIE5VTEwsCisJ CQkgICAmc2V0X3JlY29yZF9waWNfY21kbGlzdCwgJnNob3dfcmVjb3JkX3Bp Y19jbWRsaXN0KTsKKyAgYWRkX3NldHNob3dfYm9vbGVhbl9jbWQgKCJoaWRl LW5vc291cmNlIiwgbm9fY2xhc3MsCisJCQkgICAmcmVjb3JkX3BpY19oaWRl X25vc291cmNlLCBfKCJcCitTZXQgd2hldGhlciByZWNvcmQgcGljIGNvbW1h bmQgaGlkZSB0aGUgbm9kZXMgdGhhdCBkb24ndCBoYXZlIHRoZSBzb3VyY2Ug bWVzc2FnZS4iKSwgXygiXAorU2hvdyB3aGV0aGVyIHJlY29yZCBwaWMgY29t bWFuZCBoaWRlIHRoZSBub2RlcyB0aGF0IGRvbid0IGhhdmUgdGhlIHNvdXJj ZSBtZXNzYWdlLiIpLCBfKCJcCitEZWZhdWx0IGlzIE9OLlxuXAorV2hlbiBP TiwgcmVjb3JkIHBpYyBjb21tYW5kIHdpbGwgaGlkZSB0aGUgbm9kZXMgdGhh dCBkb24ndCBoYXZlXG5cCit0aGUgc291cmNlIG1lc3NhZ2UuXG5cCitXaGVu IE9GRiwgcmVjb3JkIHBpYyBjb21tYW5kIHdpbGwgc2hvdyB0aGUgbm9kZXMg dGhhdCBkb24ndCBoYXZlXG5cCit0aGUgc291cmNlIG1lc3NhZ2UuIiksCisJ CQkgICBOVUxMLCBOVUxMLAorCQkJICAgJnNldF9yZWNvcmRfcGljX2NtZGxp c3QsICZzaG93X3JlY29yZF9waWNfY21kbGlzdCk7CisgIGFkZF9zZXRzaG93 X2Jvb2xlYW5fY21kICgiaGlkZS1zYW1lYWRkciIsIG5vX2NsYXNzLAorCQkJ ICAgJnJlY29yZF9waWNfaGlkZV9zYW1lLCBfKCJcCitTZXQgd2hldGhlciBy ZWNvcmQgcGljIGNvbW1hbmQgaGlkZSB0aGUgbm9kZXMgdGhhdCBoYXZlIHRo ZSBzYW1lIGFkZHJlc3Mgbm9kZSBpbiB2Y2cgZmlsZS4iKSwgXygiXAorU2hv dyB3aGV0aGVyIHJlY29yZCBwaWMgY29tbWFuZCBoaWRlIHRoZSBub2RlcyB0 aGF0IGhhdmUgdGhlIHNhbWUgYWRkcmVzcyBub2RlIGluIHZjZyBmaWxlLiIp LCBfKCJcCitEZWZhdWx0IGlzIE9OLlxuXAorV2hlbiBPTiwgcmVjb3JkIHBp YyBjb21tYW5kIHdpbGwgaGlkZSB0aGUgbm9kZXMgdGhhdCBoYXZlXG5cCit0 aGUgc2FtZSBhZGRyZXNzIG5vZGUgaW4gdmNnIGZpbGUuXG5cCitBbmQgcmVj b3JkIHBpYyB3aWxsIHNob3cgdGhlIGV4ZWN1dGUgY291bnQgbnVtYmVyIG9m IHRoaXMgbGluZVxuXAoraW4gZm9ybWF0IFwiYzpudW1iZXJcIi5cblwKK1do ZW4gT0ZGLCByZWNvcmQgcGljIGNvbW1hbmQgd2lsbCBzaG93IHRoZSBub2Rl cyB0aGF0IGhhdmVcblwKK3RoZSBzYW1lIGFkZHJlc3Mgbm9kZSBpbiB2Y2cg ZmlsZS5cblwKK0FuZCByZWNvcmQgcGljIHNob3cgdGhlIGluc3RydWN0aW9u IG51bWJlciBpbiBmb3JtYXQgXCJpOm51bWJlclwiXG5cCit0aGF0IFwicmVj b3JkIGdvdG9cIiBzdXBwb3J0LiIpLAorCQkJICAgTlVMTCwgTlVMTCwKKwkJ CSAgICZzZXRfcmVjb3JkX3BpY19jbWRsaXN0LCAmc2hvd19yZWNvcmRfcGlj X2NtZGxpc3QpOwogfQo= --000e0cd32c3a995cef048948ef45 Content-Type: text/plain; charset=US-ASCII; name="prec-pic-doc.txt" Content-Disposition: attachment; filename="prec-pic-doc.txt" Content-Transfer-Encoding: base64 X-Attachment-Id: f_gakptdww1 Content-length: 4771 LS0tCiBORVdTICAgICAgICAgICAgfCAgIDE4ICsrKysrKysrKysrKysrKysK IGRvYy9nZGIudGV4aW5mbyB8ICAgNjEgKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIDIgZmlsZXMg Y2hhbmdlZCwgNzkgaW5zZXJ0aW9ucygrKQoKLS0tIGEvTkVXUworKysgYi9O RVdTCkBAIC04NCw2ICs4NCwyNCBAQCBxUmVsb2NJbnNuCiAKICogTmV3IGNv bW1hbmRzCiAKK3JlY29yZCBwaWMgWzxGSUxFTkFNRT5dCisgIFNhdmUgdGhl IGV4ZWN1dGlvbiBsb2cgdG8gYSB2Y2cgZmlsZS4KKworc2V0IHJlY29yZCBw aWMgdHlwZSBsaW5lfGZ1bmN0aW9uCisgIFNldCBvciBzaG93IHRoZSB0eXBl IG9mIHRoZSBub2RlcyB0aGF0IGByZWNvcmQgcGljJyBzYXZlZC4KKworc2V0 IHJlY29yZCBwaWMgaGlkZS1ub2Z1bmN0aW9uIG9ufG9mZgorICBTZXQgb3Ig c2hvdyB3aGV0aGVyIGByZWNvcmQgcGljJyBoaWRlIHRoZSBub2RlcyB0aGF0 IGRvbid0IGhhdmUKKyAgdGhlIGZ1bmN0aW9uIG5hbWUuCisKK3NldCByZWNv cmQgcGljIGhpZGUtbm9zb3VyY2Ugb258b2ZmCisgIFNldCBvciBzaG93IHdo ZXRoZXIgYHJlY29yZCBwaWMnIGhpZGUgdGhlIG5vZGVzIHRoYXQgZG9uJ3Qg aGF2ZQorICB0aGUgc291cmNlIG1lc3NhZ2UuCisKK3NldCByZWNvcmQgcGlj IGhpZGUtc2FtZWFkZHIgb258b2ZmCisgIFNldCBvciBzaG93IHdoZXRoZXIg YHJlY29yZCBwaWMnIGhpZGUgdGhlIG5vZGVzIHRoYXQgaGF2ZSB0aGUKKyAg c2FtZSBhZGRyZXNzIG5vZGUgaW4gdmNnIGZpbGUuCisKIHNldCB0YXJnZXQt ZmlsZS1zeXN0ZW0ta2luZCB1bml4fGRvcy1iYXNlZHxhdXRvCiBzaG93IHRh cmdldC1maWxlLXN5c3RlbS1raW5kCiAgIFNldCBvciBzaG93IHRoZSBhc3N1 bWVkIGZpbGUgc3lzdGVtIGtpbmQgZm9yIHRhcmdldCByZXBvcnRlZCBmaWxl Ci0tLSBhL2RvYy9nZGIudGV4aW5mbworKysgYi9kb2MvZ2RiLnRleGluZm8K QEAgLTU2MzksNiArNTYzOSw2NyBAQCB1c3VhbCBgYGxpdmUnJyBkZWJ1Z2dp bmcgb2YgdGhlIHByb2Nlc3MgCiBXaGVuIHRoZSBpbmZlcmlvciBwcm9jZXNz IGV4aXRzLCBvciBAdmFsdWV7R0RCTn0gZGV0YWNoZXMgZnJvbSBpdCwKIHBy b2Nlc3MgcmVjb3JkIGFuZCByZXBsYXkgdGFyZ2V0IHdpbGwgYXV0b21hdGlj YWxseSBzdG9wIGl0c2VsZi4KIAorQGtpbmRleCByZWNvcmQgcGljCitAaXRl bSByZWNvcmQgcGljIEB2YXJ7ZmlsZW5hbWV9CitTYXZlIHRoZSBleGVjdXRp b24gbG9nIHRvIGEgdmNnIGZpbGUgQGZpbGV7QHZhcntmaWxlbmFtZX19Lgor RGVmYXVsdCBmaWxlbmFtZSBpcyAnZ2RiX3JlY29yZF88cHJvY2Vzc19pZD4u dmNnJy4KKworQGtpbmRleCBzZXQgcmVjb3JkIHBpYyB0eXBlCitAaXRlbSBz ZXQgcmVjb3JkIHBpYyB0eXBlIEB2YXJ7dHlwZX0KK1NldCB0aGUgdHlwZSBv ZiB0aGUgbm9kZXMgdGhhdCBAY29kZXtyZWNvcmQgcGljfSBzYXZlZC4KKwor V2hlbiBAdmFye3R5cGV9IGlzIHNldCB0byBAY29kZXtsaW5lfSAodGhlIGRl ZmF1bHQpLCBlYWNoIG5vZGUgb2YgdmNnCitmaWxlIHRoYXQgQGNvZGV7cmVj b3JkIHBpY30gc2F2ZWQgd2lsbCBiZSBhIGxpbmUgb2YgdGhlIGluZmVyaW9y LgorCitXaGVuIEB2YXJ7dHlwZX0gaXMgc2V0IHRvIEBjb2Rle2Z1bmN0aW9u fSwgZWFjaCBub2RlIG9mIHZjZyBmaWxlIHRoYXQKK0Bjb2Rle3JlY29yZCBw aWN9IHNhdmVkIHdpbGwgYmUgYSBmdW5jdGlvbiBvZiB0aGUgaW5mZXJpb3Iu CisKK0BraW5kZXggc2hvdyByZWNvcmQgcGljIHR5cGUKK0BpdGVtIHNob3cg cmVjb3JkIHBpYyB0eXBlCitTaG93IHRoZSBjdXJyZW50IHNldHRpbmcgb2Yg QGNvZGV7cGljIHR5cGV9LgorCitAa2luZGV4IHNldCByZWNvcmQgcGljIGhp ZGUtbm9mdW5jdGlvbgorQGl0ZW0gc2V0IHJlY29yZCBwaWMgaGlkZS1ub2Z1 bmN0aW9uCitTZXQgd2hldGhlciBAY29kZXtyZWNvcmQgcGljfSBoaWRlIHRo ZSBub2RlcyB0aGF0IGRvbid0IGhhdmUKK3RoZSBmdW5jdGlvbiBuYW1lLgor CitJZiBPTiAodGhlIGRlZmF1bHQpLCBAY29kZXtyZWNvcmQgcGljfSB3aWxs IGhpZGUgdGhlIG5vZGVzIHRoYXQgZG9uJ3QKK2hhdmUgdGhlIGZ1bmN0aW9u IG5hbWUuCisKK0BraW5kZXggc2hvdyByZWNvcmQgcGljIGhpZGUtbm9mdW5j dGlvbgorQGl0ZW0gc2hvdyByZWNvcmQgcGljIGhpZGUtbm9mdW5jdGlvbgor U2hvdyB0aGUgY3VycmVudCBzZXR0aW5nIG9mIEBjb2Rle3BpYyBoaWRlLW5v ZnVuY3Rpb259LgorCitAa2luZGV4IHNldCByZWNvcmQgcGljIGhpZGUtbm9z b3VyY2UKK0BpdGVtIHNldCByZWNvcmQgcGljIGhpZGUtbm9zb3VyY2UKK1Nl dCB3aGV0aGVyIEBjb2Rle3JlY29yZCBwaWN9IGhpZGUgdGhlIG5vZGVzIHRo YXQgZG9uJ3QgaGF2ZQordGhlIHNvdXJjZSBtZXNzYWdlLgorCitJZiBPTiAo dGhlIGRlZmF1bHQpLCBAY29kZXtyZWNvcmQgcGljfSB3aWxsIGhpZGUgdGhl IG5vZGVzIHRoYXQKK2Rvbid0IGhhdmUgdGhlIHNvdXJjZSBtZXNzYWdlLgor CitAa2luZGV4IHNob3cgcmVjb3JkIHBpYyBoaWRlLW5vc291cmNlCitAaXRl bSBzaG93IHJlY29yZCBwaWMgaGlkZS1ub3NvdXJjZQorU2hvdyB0aGUgY3Vy cmVudCBzZXR0aW5nIG9mIEBjb2Rle3BpYyBoaWRlLW5vc291cmNlfS4KKwor QGtpbmRleCBzZXQgcmVjb3JkIHBpYyBoaWRlLXNhbWVhZGRyCitAaXRlbSBz ZXQgcmVjb3JkIHBpYyBoaWRlLXNhbWVhZGRyCitTZXQgd2hldGhlciBAY29k ZXtyZWNvcmQgcGljfSBoaWRlIHRoZSBub2RlcyB0aGF0IGhhdmUgdGhlIHNh bWUKK2FkZHJlc3Mgbm9kZSBpbiB2Y2cgZmlsZS4KKworSWYgT04gKHRoZSBk ZWZhdWx0KSwgQGNvZGV7cmVjb3JkIHBpY30gd2lsbCBoaWRlIHRoZSBub2Rl cyB0aGF0IGhhdmUKK3RoZSBzYW1lIGFkZHJlc3Mgbm9kZSBpbiB2Y2cgZmls ZS4gIEFuZCBAY29kZXtyZWNvcmQgcGljfSB3aWxsIHNob3cKK3RoZSBleGVj dXRlIGNvdW50IG51bWJlciBvZiB0aGlzIG5vZGUgaW4gZm9ybWF0IEBjb2Rl e2M6bnVtYmVyfQorCitJZiBPRkYsIEBjb2Rle3JlY29yZCBwaWN9IHdpbGwg c2hvdyB0aGUgbm9kZXMgdGhhdCBoYXZlIHRoZSBzYW1lCithZGRyZXNzIG5v ZGUgaW4gdmNnIGZpbGUuICBBbmQgQGNvZGV7cmVjb3JkIHBpY30gd2lsbCBz aG93IHRoZQoraW5zdHJ1Y3Rpb24gbnVtYmVyIGluIGZvcm1hdCBAY29kZXtp Om51bWJlcn0gdGhhdAorQHZhbHVle3JlY29yZCBnb3RvfSBzdXBwb3J0Lgor CitAa2luZGV4IHNob3cgcmVjb3JkIHBpYyBoaWRlLXNhbWUKK0BpdGVtIHNo b3cgcmVjb3JkIHBpYyBoaWRlLXNhbWUKK1Nob3cgdGhlIGN1cnJlbnQgc2V0 dGluZyBvZiBAY29kZXtwaWMgaGlkZS1zYW1lfS4KKwogQGtpbmRleCBzZXQg cmVjb3JkIGluc24tbnVtYmVyLW1heAogQGl0ZW0gc2V0IHJlY29yZCBpbnNu LW51bWJlci1tYXggQHZhcntsaW1pdH0KIFNldCB0aGUgbGltaXQgb2YgaW5z dHJ1Y3Rpb25zIHRvIGJlIHJlY29yZGVkLiAgRGVmYXVsdCB2YWx1ZSBpcyAy MDAwMDAuCg== --000e0cd32c3a995cef048948ef45--