Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vS1rO-00FLnj-2e for pgsql-hackers@arkaria.postgresql.org; Sat, 06 Dec 2025 23:38:43 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vS1rN-00Cdvc-1T for pgsql-hackers@arkaria.postgresql.org; Sat, 06 Dec 2025 23:38:41 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vS1rM-00CdvT-2w for pgsql-hackers@lists.postgresql.org; Sat, 06 Dec 2025 23:38:41 +0000 Received: from mail-lf1-x12e.google.com ([2a00:1450:4864:20::12e]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1vS1rK-003Vsn-1m for pgsql-hackers@lists.postgresql.org; Sat, 06 Dec 2025 23:38:40 +0000 Received: by mail-lf1-x12e.google.com with SMTP id 2adb3069b0e04-596ba07504dso4027187e87.1 for ; Sat, 06 Dec 2025 15:38:39 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1765064316; x=1765669116; darn=lists.postgresql.org; h=to:subject:message-id:date:from:mime-version:from:to:cc:subject :date:message-id:reply-to; bh=U8cr39Chxt3qNb0NWZlfJvuKV2LQp0UYTf1vsn9znvU=; b=Tf5qV+IMNQEJZYUoTwWUFs8iQDfIdr65e16fKa76nUVV+LKN88IthpyYPJkW74NIuP 3HT8GKEk9HxNP2jK0Jhx23G1sUHVDww9m40nSXbjsmc4UuvARrqtOLyiYoVDdYlB/MDy Hcokdm0frR3mQzkZdaQjJ4doa1V8jvwW4DcjcfkljuvNxTaxn25hVcrpti/tt08qc5WN Mz3pLOLVdjbEgOe0qYctMMILRZmKu4xK+2rKyn5jrJ9VHiwPPKLP5viFYXdXsnfshL7z 2L3bdXYeAJVoljVZzU1T3MOiqm6X8TZ7TBmrJkMxjhYTxdinbvmUfZOgR9HDThNHIHVs JPxA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1765064316; x=1765669116; h=to:subject:message-id:date:from:mime-version:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=U8cr39Chxt3qNb0NWZlfJvuKV2LQp0UYTf1vsn9znvU=; b=Hi448e0TRaGJgFtdOp1CRDvWHaTUpMxySfRa8pm2DNXe1+LPWfU4o0Y0vKj9JNNolE R2N3yoRo/16gFx1aukWYwqoCt9WVtCxrQWD+/fCZ7txQ2kQk7lpPAToF76tMbLQFbpGg 0fkQjrMzPeiBM3gaFF0bieQUcUUQYBcxQGR3C7ovdppjir7ZuzX2GA0i9tcDx3PWL0n5 +P6Gl8/yDacAAnR3x0LVphwH5gmyWNXr5qJsphO4/Z+XD4U0TZv8LekW3BKR+r5OnA7X 7Iwkcc9CPyx8rLNQVUV3o46QVhmY2Xl6jWMhNVIHmfvpM8w01DkBUAvknEk0T+W0tcIZ s7tQ== X-Gm-Message-State: AOJu0YzhUOyqTrtw0JlsNJoYYg0MvMvwekd2qWY5h+EZDlfYfvhA4deF pEg+H0NcWCWdlEMgmAM1YOAj/oYbFvseFqE7JWTanLZhGGXZmLedN6dVxsZqQRNcWVncO9EHL5K y5ipFaPIDzO8iBjHXl/5UUqo1kHlMzBxej4iQSYCIxQ== X-Gm-Gg: ASbGncuZtAzx+czbZ9Js0z0axhTg0oiqjoqgnOAP96G+JNDVcBw0hA1NaJahzv1GTid hsEzZeV9oGJndjvnhpPREH38bdnIXUde5+NAjJ1RIHIe4DLl5CMo+8KhAlttktRC74LcCpDHONU EoLgN/fr2wczwTSD60PqC+MYD1i4MBzm0+0vcXdmwMdjffFhzbBasstUODjQC6wg7iciiHW+Wn8 +vTonrGE1lkoD8WlnPitgTV4OQgID6o6jjVCHlCLtgxb/GL0B1QARyeZWjQEAXLz6bfRFT0tJkE RsyPiZ5eQ0vj5cWUFutUHrfsHI9i7t76rxUesJE= X-Google-Smtp-Source: AGHT+IFP79fQv7SDO0CdsrkTcCbFSo3RZTzgKQmKb9hH6UJCD9EQFioKOtqGnJqpIWPFBPdGTuYd2yfMqS0+jB4OWyM= X-Received: by 2002:a05:6512:3e1b:b0:594:34ae:1446 with SMTP id 2adb3069b0e04-598853d6fa1mr921657e87.41.1765064315977; Sat, 06 Dec 2025 15:38:35 -0800 (PST) MIME-Version: 1.0 From: Marcos Magueta Date: Sat, 6 Dec 2025 20:38:24 -0300 X-Gm-Features: AQt7F2pzU424dUSF6L3S5aqoS0hqLYMEukoPH9mo1STSl0w88IwZkpwblb805K0 Message-ID: Subject: WIP - xmlvalidate implementation from TODO list To: pgsql-hackers@lists.postgresql.org Content-Type: multipart/mixed; boundary="0000000000008f59d40645510f45" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000008f59d40645510f45 Content-Type: multipart/alternative; boundary="0000000000008f59d20645510f43" --0000000000008f59d20645510f43 Content-Type: text/plain; charset="UTF-8" Hello! I am likely one of the few people still using XML, but I noticed XSD schema validation is still a TODO on postgresql, which I have some personal use cases for. In this patch I attempt to implement XMLVALIDATE with the already in use libxml following a version I got my hands on of the SQL/XML standard of 2016. In short, I had to add the ACCORDING word to comply with it and completely ignored the version that was already in the src that fetches arbitrary schemas (it refers to validations of dtds, which is another more troublesome TODO). I had problems running the regression tests on my machine, so I could only test the feature by spawning a modified instance of postgresql and issuing queries through psql, therefore I am marking it as WIP. If anyone can assert the tests pass, I would be glad. Also, this is my first patch, so I might have not followed standard practices as best as I could, so please pay particular attention to that on review. Cheers, Marcos Magueta. --0000000000008f59d20645510f43 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Hello!

I am lik= ely one of the few people still using XML, but I noticed XSD schema validat= ion is still a TODO on postgresql, which I have some personal use cases for= .

In this patch I attempt to implement XMLVALIDATE with the al= ready in use libxml following a version I got my hands on of the SQL/XML st= andard of 2016.

In short, I had to add the ACCORDING word to c= omply with it and completely ignored the version that was already in the sr= c that fetches arbitrary schemas (it refers to validations of dtds, which i= s another more troublesome TODO).

I had problems running the regre= ssion tests on my machine, so I could only test the feature by spawning a m= odified instance of postgresql and issuing queries through psql, therefore = I am marking it as WIP. If anyone can assert the tests pass, I would be gla= d.

Also, this is my first patch, so I might have not followed standa= rd practices as=20 best as I could, so please pay particular attention to that on review.=C2= =A0

Cheers,
Marcos Magueta.
--0000000000008f59d20645510f43-- --0000000000008f59d40645510f45 Content-Type: application/octet-stream; name=xml-patch Content-Disposition: attachment; filename=xml-patch Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_miuxm42s0 ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNFeHBySW50ZXJwLmMgYi9zcmMv YmFja2VuZC9leGVjdXRvci9leGVjRXhwckludGVycC5jCmluZGV4IDVlN2JkOTMzYWZjLi5kYjFm MTlhZGU2ZSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0V4cHJJbnRlcnAu YworKysgYi9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjRXhwckludGVycC5jCkBAIC00NjI2LDYg KzQ2MjYsMzAgQEAgRXhlY0V2YWxYbWxFeHByKEV4cHJTdGF0ZSAqc3RhdGUsIEV4cHJFdmFsU3Rl cCAqb3ApCiAJCQl9CiAJCQlicmVhazsKIAorCQljYXNlIElTX1hNTFZBTElEQVRFOgorCQkJewor CQkJCURhdHVtCSAgICphcmd2YWx1ZSA9IG9wLT5kLnhtbGV4cHIuYXJndmFsdWU7CisJCQkJYm9v bAkgICAqYXJnbnVsbCA9IG9wLT5kLnhtbGV4cHIuYXJnbnVsbDsKKwkJCQl4bWx0eXBlICAgICpk YXRhOworCQkJCXRleHQJICAgKnNjaGVtYTsKKworCQkJCS8qIGFyZ3VtZW50cyBhcmUga25vd24g dG8gYmUgeG1sLCB0ZXh0ICovCisJCQkJQXNzZXJ0KGxpc3RfbGVuZ3RoKHhleHByLT5hcmdzKSA9 PSAyKTsKKworCQkJCWlmIChhcmdudWxsWzBdIHx8IGFyZ251bGxbMV0pCisJCQkJeworCQkJCQkq b3AtPnJlc251bGwgPSB0cnVlOworCQkJCQlyZXR1cm47CisJCQkJfQorCisJCQkJZGF0YSA9IERh dHVtR2V0WG1sUChhcmd2YWx1ZVswXSk7CisJCQkJc2NoZW1hID0gRGF0dW1HZXRUZXh0UFAoYXJn dmFsdWVbMV0pOworCisJCQkJKm9wLT5yZXN2YWx1ZSA9IEJvb2xHZXREYXR1bSh4bWx2YWxpZGF0 ZV9sb2NhbF9zY2hlbWEoZGF0YSwgc2NoZW1hKSk7CisJCQkJKm9wLT5yZXNudWxsID0gZmFsc2U7 CisJCQl9CisJCQlicmVhazsKKwogCQljYXNlIElTX0RPQ1VNRU5UOgogCQkJewogCQkJCURhdHVt CSAgICphcmd2YWx1ZSA9IG9wLT5kLnhtbGV4cHIuYXJndmFsdWU7CmRpZmYgLS1naXQgYS9zcmMv YmFja2VuZC9ub2Rlcy9ub2RlRnVuY3MuYyBiL3NyYy9iYWNrZW5kL25vZGVzL25vZGVGdW5jcy5j CmluZGV4IGQyMjgzMThkYzcyLi4wMzA1NjRhZTdmZCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv bm9kZXMvbm9kZUZ1bmNzLmMKKysrIGIvc3JjL2JhY2tlbmQvbm9kZXMvbm9kZUZ1bmNzLmMKQEAg LTIxOCw2ICsyMTgsOCBAQCBleHByVHlwZShjb25zdCBOb2RlICpleHByKQogCQljYXNlIFRfWG1s RXhwcjoKIAkJCWlmICgoKGNvbnN0IFhtbEV4cHIgKikgZXhwciktPm9wID09IElTX0RPQ1VNRU5U KQogCQkJCXR5cGUgPSBCT09MT0lEOworCQkJZWxzZSBpZiAoKChjb25zdCBYbWxFeHByICopIGV4 cHIpLT5vcCA9PSBJU19YTUxWQUxJREFURSkKKwkJCQl0eXBlID0gQk9PTE9JRDsKIAkJCWVsc2Ug aWYgKCgoY29uc3QgWG1sRXhwciAqKSBleHByKS0+b3AgPT0gSVNfWE1MU0VSSUFMSVpFKQogCQkJ CXR5cGUgPSBURVhUT0lEOwogCQkJZWxzZQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcGFyc2Vy L2dyYW0ueSBiL3NyYy9iYWNrZW5kL3BhcnNlci9ncmFtLnkKaW5kZXggYzNhMGEzNTRhOWMuLjQz ZjAzY2Q0MjRjIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9wYXJzZXIvZ3JhbS55CisrKyBiL3Ny Yy9iYWNrZW5kL3BhcnNlci9ncmFtLnkKQEAgLTcwNCw3ICs3MDQsNyBAQCBzdGF0aWMgTm9kZSAq bWFrZVJlY3Vyc2l2ZVZpZXdTZWxlY3QoY2hhciAqcmVsbmFtZSwgTGlzdCAqYWxpYXNlcywgTm9k ZSAqcXVlcnkpOwogICovCiAKIC8qIG9yZGluYXJ5IGtleSB3b3JkcyBpbiBhbHBoYWJldGljYWwg b3JkZXIgKi8KLSV0b2tlbiA8a2V5d29yZD4gQUJPUlRfUCBBQlNFTlQgQUJTT0xVVEVfUCBBQ0NF U1MgQUNUSU9OIEFERF9QIEFETUlOIEFGVEVSCisldG9rZW4gPGtleXdvcmQ+IEFCT1JUX1AgQUJT RU5UIEFCU09MVVRFX1AgQUNDRVNTIEFDQ09SRElORyBBQ1RJT04gQUREX1AgQURNSU4gQUZURVIK IAlBR0dSRUdBVEUgQUxMIEFMU08gQUxURVIgQUxXQVlTIEFOQUxZU0UgQU5BTFlaRSBBTkQgQU5Z IEFSUkFZIEFTIEFTQwogCUFTRU5TSVRJVkUgQVNTRVJUSU9OIEFTU0lHTk1FTlQgQVNZTU1FVFJJ QyBBVE9NSUMgQVQgQVRUQUNIIEFUVFJJQlVURSBBVVRIT1JJWkFUSU9OCiAKQEAgLTc5NSw3ICs3 OTUsNyBAQCBzdGF0aWMgTm9kZSAqbWFrZVJlY3Vyc2l2ZVZpZXdTZWxlY3QoY2hhciAqcmVsbmFt ZSwgTGlzdCAqYWxpYXNlcywgTm9kZSAqcXVlcnkpOwogCVdBSVQgV0hFTiBXSEVSRSBXSElURVNQ QUNFX1AgV0lORE9XIFdJVEggV0lUSElOIFdJVEhPVVQgV09SSyBXUkFQUEVSIFdSSVRFCiAKIAlY TUxfUCBYTUxBVFRSSUJVVEVTIFhNTENPTkNBVCBYTUxFTEVNRU5UIFhNTEVYSVNUUyBYTUxGT1JF U1QgWE1MTkFNRVNQQUNFUwotCVhNTFBBUlNFIFhNTFBJIFhNTFJPT1QgWE1MU0VSSUFMSVpFIFhN TFRBQkxFCisJWE1MUEFSU0UgWE1MUEkgWE1MUk9PVCBYTUxTQ0hFTUEgWE1MU0VSSUFMSVpFIFhN TFRBQkxFIFhNTFZBTElEQVRFCiAKIAlZRUFSX1AgWUVTX1AKIApAQCAtMTYyMzEsNiArMTYyMzEs MTYgQEAgZnVuY19leHByX2NvbW1vbl9zdWJleHByOgogCQkJCQluLT5sb2NhdGlvbiA9IEAxOwog CQkJCQkkJCA9IChOb2RlICopIG47CiAJCQkJfQorCQkJfCBYTUxWQUxJREFURSAnKCcgZG9jdW1l bnRfb3JfY29udGVudCBhX2V4cHIgQUNDT1JESU5HIFRPIFhNTFNDSEVNQSBhX2V4cHIgJyknCisJ CQkJeworCQkJCQlYbWxFeHByICp4ID0gKFhtbEV4cHIgKikKKwkJCQkJCW1ha2VYbWxFeHByKElT X1hNTFZBTElEQVRFLCBOVUxMLCBOSUwsCisJCQkJCQkJCQlsaXN0X21ha2UyKCQ0LCAkOCksCisJ CQkJCQkJCQlAMSk7CisKKwkJCQkJeC0+eG1sb3B0aW9uID0gJDM7CisJCQkJCSQkID0gKE5vZGUg KikgeDsKKwkJCQl9CiAJCQl8IEpTT05fT0JKRUNUICcoJyBmdW5jX2FyZ19saXN0ICcpJwogCQkJ CXsKIAkJCQkJLyogU3VwcG9ydCBmb3IgbGVnYWN5IChub24tc3RhbmRhcmQpIGpzb25fb2JqZWN0 KCkgKi8KQEAgLTE3ODQxLDYgKzE3ODUxLDcgQEAgdW5yZXNlcnZlZF9rZXl3b3JkOgogCQkJfCBB QlNFTlQKIAkJCXwgQUJTT0xVVEVfUAogCQkJfCBBQ0NFU1MKKwkJCXwgQUNDT1JESU5HCiAJCQl8 IEFDVElPTgogCQkJfCBBRERfUAogCQkJfCBBRE1JTgpAQCAtMTgxNjgsNiArMTgxNzksNyBAQCB1 bnJlc2VydmVkX2tleXdvcmQ6CiAJCQl8IFdSQVBQRVIKIAkJCXwgV1JJVEUKIAkJCXwgWE1MX1AK KwkJCXwgWE1MU0NIRU1BCiAJCQl8IFlFQVJfUAogCQkJfCBZRVNfUAogCQkJfCBaT05FCkBAIC0x ODI0Nyw2ICsxODI1OSw3IEBAIGNvbF9uYW1lX2tleXdvcmQ6CiAJCQl8IFhNTFJPT1QKIAkJCXwg WE1MU0VSSUFMSVpFCiAJCQl8IFhNTFRBQkxFCisJCQl8IFhNTFZBTElEQVRFCiAJCTsKIAogLyog VHlwZS9mdW5jdGlvbiBpZGVudGlmaWVyIC0tLSBrZXl3b3JkcyB0aGF0IGNhbiBiZSB0eXBlIG9y IGZ1bmN0aW9uIG5hbWVzLgpAQCAtMTgzODYsNiArMTgzOTksNyBAQCBiYXJlX2xhYmVsX2tleXdv cmQ6CiAJCQl8IEFCU0VOVAogCQkJfCBBQlNPTFVURV9QCiAJCQl8IEFDQ0VTUworCQkJfCBBQ0NP UkRJTkcKIAkJCXwgQUNUSU9OCiAJCQl8IEFERF9QCiAJCQl8IEFETUlOCkBAIC0xODgzNSw4ICsx ODg0OSwxMCBAQCBiYXJlX2xhYmVsX2tleXdvcmQ6CiAJCQl8IFhNTFBBUlNFCiAJCQl8IFhNTFBJ CiAJCQl8IFhNTFJPT1QKKwkJCXwgWE1MU0NIRU1BCiAJCQl8IFhNTFNFUklBTElaRQogCQkJfCBY TUxUQUJMRQorCQkJfCBYTUxWQUxJREFURQogCQkJfCBZRVNfUAogCQkJfCBaT05FCiAJCTsKZGlm ZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3BhcnNlci9wYXJzZV9leHByLmMgYi9zcmMvYmFja2VuZC9w YXJzZXIvcGFyc2VfZXhwci5jCmluZGV4IDQ1MjRlNDljMzI2Li5iYjRkYjZmMzAzZCAxMDA2NDQK LS0tIGEvc3JjL2JhY2tlbmQvcGFyc2VyL3BhcnNlX2V4cHIuYworKysgYi9zcmMvYmFja2VuZC9w YXJzZXIvcGFyc2VfZXhwci5jCkBAIC0yNDcxLDYgKzI0NzEsMTQgQEAgdHJhbnNmb3JtWG1sRXhw cihQYXJzZVN0YXRlICpwc3RhdGUsIFhtbEV4cHIgKngpCiAJCQkJLyogbm90IGhhbmRsZWQgaGVy ZSAqLwogCQkJCUFzc2VydChmYWxzZSk7CiAJCQkJYnJlYWs7CisJCQljYXNlIElTX1hNTFZBTElE QVRFOgorCQkJCWlmIChpID09IDApCisJCQkJCW5ld2UgPSBjb2VyY2VfdG9fc3BlY2lmaWNfdHlw ZShwc3RhdGUsIG5ld2UsIFhNTE9JRCwKKwkJCQkJCQkJCQkJCSAgICJYTUxWQUxJREFURSIpOwor CQkJCWVsc2UKKwkJCQkJbmV3ZSA9IGNvZXJjZV90b19zcGVjaWZpY190eXBlKHBzdGF0ZSwgbmV3 ZSwgVEVYVE9JRCwKKwkJCQkJCQkJCQkJCSAgICJYTUxWQUxJREFURSIpOworCQkJCWJyZWFrOwog CQkJY2FzZSBJU19ET0NVTUVOVDoKIAkJCQluZXdlID0gY29lcmNlX3RvX3NwZWNpZmljX3R5cGUo cHN0YXRlLCBuZXdlLCBYTUxPSUQsCiAJCQkJCQkJCQkJCSAgICJJUyBET0NVTUVOVCIpOwpkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvcGFyc2VyL3BhcnNlX3RhcmdldC5jIGIvc3JjL2JhY2tlbmQv cGFyc2VyL3BhcnNlX3RhcmdldC5jCmluZGV4IDkwNWM5NzVkODNiLi45MzFkZjFlNThiOSAxMDA2 NDQKLS0tIGEvc3JjL2JhY2tlbmQvcGFyc2VyL3BhcnNlX3RhcmdldC5jCisrKyBiL3NyYy9iYWNr ZW5kL3BhcnNlci9wYXJzZV90YXJnZXQuYwpAQCAtMTk3Niw2ICsxOTc2LDkgQEAgRmlndXJlQ29s bmFtZUludGVybmFsKE5vZGUgKm5vZGUsIGNoYXIgKipuYW1lKQogCQkJCWNhc2UgSVNfWE1MU0VS SUFMSVpFOgogCQkJCQkqbmFtZSA9ICJ4bWxzZXJpYWxpemUiOwogCQkJCQlyZXR1cm4gMjsKKwkJ CQljYXNlIElTX1hNTFZBTElEQVRFOgorCQkJCQkqbmFtZSA9ICJ4bWx2YWxpZGF0ZSI7CisJCQkJ CXJldHVybiAyOwogCQkJCWNhc2UgSVNfRE9DVU1FTlQ6CiAJCQkJCS8qIG5vdGhpbmcgKi8KIAkJ CQkJYnJlYWs7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9hZHQvcnVsZXV0aWxzLmMg Yi9zcmMvYmFja2VuZC91dGlscy9hZHQvcnVsZXV0aWxzLmMKaW5kZXggNmNmOTBiZTQwYmIuLjFi ZTgxNDI5OWJkIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9hZHQvcnVsZXV0aWxzLmMK KysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3J1bGV1dGlscy5jCkBAIC0xMDExOSwxMCArMTAx MTksMTMgQEAgZ2V0X3J1bGVfZXhwcihOb2RlICpub2RlLCBkZXBhcnNlX2NvbnRleHQgKmNvbnRl eHQsCiAJCQkJCWNhc2UgSVNfWE1MU0VSSUFMSVpFOgogCQkJCQkJYXBwZW5kU3RyaW5nSW5mb1N0 cmluZyhidWYsICJYTUxTRVJJQUxJWkUoIik7CiAJCQkJCQlicmVhazsKKwkJCQkJY2FzZSBJU19Y TUxWQUxJREFURToKKwkJCQkJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoYnVmLCAiWE1MVkFMSURB VEUoIik7CisJCQkJCQlicmVhazsKIAkJCQkJY2FzZSBJU19ET0NVTUVOVDoKIAkJCQkJCWJyZWFr OwogCQkJCX0KLQkJCQlpZiAoeGV4cHItPm9wID09IElTX1hNTFBBUlNFIHx8IHhleHByLT5vcCA9 PSBJU19YTUxTRVJJQUxJWkUpCisJCQkJaWYgKHhleHByLT5vcCA9PSBJU19YTUxQQVJTRSB8fCB4 ZXhwci0+b3AgPT0gSVNfWE1MU0VSSUFMSVpFIHx8IHhleHByLT5vcCA9PSBJU19YTUxWQUxJREFU RSkKIAkJCQl7CiAJCQkJCWlmICh4ZXhwci0+eG1sb3B0aW9uID09IFhNTE9QVElPTl9ET0NVTUVO VCkKIAkJCQkJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoYnVmLCAiRE9DVU1FTlQgIik7CkBAIC0x MDIyNiw2ICsxMDIyOSwxNyBAQCBnZXRfcnVsZV9leHByKE5vZGUgKm5vZGUsIGRlcGFyc2VfY29u dGV4dCAqY29udGV4dCwKIAkJCQkJCQkJfQogCQkJCQkJCX0KIAkJCQkJCQlicmVhazsKKwkJCQkJ CWNhc2UgSVNfWE1MVkFMSURBVEU6CisJCQkJCQkJQXNzZXJ0KGxpc3RfbGVuZ3RoKHhleHByLT5h cmdzKSA9PSAyKTsKKworCQkJCQkJCWdldF9ydWxlX2V4cHIoKE5vZGUgKikgbGluaXRpYWwoeGV4 cHItPmFyZ3MpLAorCQkJCQkJCQkJCSAgY29udGV4dCwgdHJ1ZSk7CisKKwkJCQkJCQlhcHBlbmRT dHJpbmdJbmZvU3RyaW5nKGJ1ZiwgIiBBQ0NPUkRJTkcgVE8gWE1MU0NIRU1BICIpOworCisJCQkJ CQkJZ2V0X3J1bGVfZXhwcigoTm9kZSAqKSBsc2Vjb25kKHhleHByLT5hcmdzKSwKKwkJCQkJCQkJ CQkgIGNvbnRleHQsIHRydWUpOworCQkJCQkJCWJyZWFrOwogCQkJCQkJY2FzZSBJU19ET0NVTUVO VDoKIAkJCQkJCQlnZXRfcnVsZV9leHByX3BhcmVuKChOb2RlICopIHhleHByLT5hcmdzLCBjb250 ZXh0LCBmYWxzZSwgbm9kZSk7CiAJCQkJCQkJYnJlYWs7CmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC91dGlscy9hZHQveG1sLmMgYi9zcmMvYmFja2VuZC91dGlscy9hZHQveG1sLmMKaW5kZXggNDFl Nzc1NTcwZWMuLmY3NmFkZTJkODNkIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9hZHQv eG1sLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3htbC5jCkBAIC01OCw2ICs1OCw3IEBA CiAjaW5jbHVkZSA8bGlieG1sL3htbHdyaXRlci5oPgogI2luY2x1ZGUgPGxpYnhtbC94cGF0aC5o PgogI2luY2x1ZGUgPGxpYnhtbC94cGF0aEludGVybmFscy5oPgorI2luY2x1ZGUgPGxpYnhtbC94 bWxzY2hlbWFzLmg+CiAKIC8qCiAgKiBXZSB1c2VkIHRvIGNoZWNrIGZvciB4bWxTdHJ1Y3R1cmVk RXJyb3JDb250ZXh0IHZpYSBhIGNvbmZpZ3VyZSB0ZXN0OyBidXQKQEAgLTExNTgsMTAgKzExNTks MTE1IEBAIHhtbHZhbGlkYXRlKFBHX0ZVTkNUSU9OX0FSR1MpCiB7CiAJZXJlcG9ydChFUlJPUiwK IAkJCShlcnJjb2RlKEVSUkNPREVfRkVBVFVSRV9OT1RfU1VQUE9SVEVEKSwKLQkJCSBlcnJtc2co InhtbHZhbGlkYXRlIGlzIG5vdCBpbXBsZW1lbnRlZCIpKSk7CisJCQkgZXJybXNnKCJ4bWx2YWxp ZGF0ZSBhZ2FpbnN0IERURCBpcyBub3QgaW1wbGVtZW50ZWQiKSkpOwogCXJldHVybiAwOwogfQog CisvKgorICogeG1sdmFsaWRhdGUgLSB2YWxpZGF0ZSBYTUwgYWdhaW5zdCBhbiBYTUwgcHJvdmlk ZWQgU2NoZW1hIChYU0QpCisgKgorICogUmV0dXJucyB0cnVlIGlmIHRoZSBYTUwgaXMgdmFsaWQg YWNjb3JkaW5nIHRvIHRoZSB4bWwgc2NoZW1hLAorICogZmFsc2UgaWYgaXQgZG9lc24ndCBhbmQg TlVMTCBpZiBhbnkgKHhtbCBzY2hlbWEgb3IgeG1sKSBhcmUgTlVMTC4KKyAqIFRoaXMgaW1wbGVt ZW50cyB0aGUgU1FMOjIwMDggWE1MVkFMSURBVEUgZnVuY3Rpb24gdGhhdCBsb29rcyBmb3IgbG9j YWwKKyAqIFhNTCBzY2hlbWFzLCB0aGVyZWZvcmUgbm8gYXJiaXRyYXJ5IHJlYWRzIGFyZSBtYWRl IG92ZXIgZXh0ZXJuYWwgZmlsZXMuCisgKi8KK2Jvb2wKK3htbHZhbGlkYXRlX2xvY2FsX3NjaGVt YSh4bWx0eXBlICpkYXRhLCB0ZXh0ICpzY2hlbWEpCit7CisjaWZkZWYgVVNFX0xJQlhNTAorCXht bERvY1B0cglkb2MgPSBOVUxMOworCXhtbFNjaGVtYVBhcnNlckN0eHRQdHIgc2NoZW1hX3BhcnNl cl9jdHh0ID0gTlVMTDsKKwl4bWxTY2hlbWFQdHIgc2NoZW1hX3B0ciA9IE5VTEw7CisJeG1sU2No ZW1hVmFsaWRDdHh0UHRyIHZhbGlkX2N0eHQgPSBOVUxMOworCWNoYXIJICAgKmRhdGFzdHI7CisJ Y2hhcgkgICAqc2NoZW1hc3RyOworCWludAkJCXJlc3VsdDsKKwlQZ1htbEVycm9yQ29udGV4dCAq eG1sZXJyY3h0OworCisJZGF0YXN0ciA9IHRleHRfdG9fY3N0cmluZygodGV4dCAqKSBkYXRhKTsK KwlzY2hlbWFzdHIgPSB0ZXh0X3RvX2NzdHJpbmcoc2NoZW1hKTsKKwl4bWxlcnJjeHQgPSBwZ194 bWxfaW5pdChQR19YTUxfU1RSSUNUTkVTU19XRUxMRk9STUVEKTsKKworCVBHX1RSWSgpOworCXsK KwkJZG9jID0geG1sUmVhZE1lbW9yeShkYXRhc3RyLCBzdHJsZW4oZGF0YXN0ciksIE5VTEwsIE5V TEwsIDApOworCQlpZiAoZG9jID09IE5VTEwpCisJCXsKKwkJCXhtbF9lcmVwb3J0KHhtbGVycmN4 dCwgRVJST1IsIEVSUkNPREVfSU5WQUxJRF9YTUxfRE9DVU1FTlQsCisJCQkJCQkiaW52YWxpZCBY TUwgZG9jdW1lbnQiKTsKKwkJfQorCisJCXNjaGVtYV9wYXJzZXJfY3R4dCA9IHhtbFNjaGVtYU5l d01lbVBhcnNlckN0eHQoc2NoZW1hc3RyLCBzdHJsZW4oc2NoZW1hc3RyKSk7CisJCWlmIChzY2hl bWFfcGFyc2VyX2N0eHQgPT0gTlVMTCkKKwkJeworCQkJeG1sX2VyZXBvcnQoeG1sZXJyY3h0LCBF UlJPUiwgRVJSQ09ERV9JTlZBTElEX1hNTF9ET0NVTUVOVCwKKwkJCQkJCSJmYWlsZWQgdG8gY3Jl YXRlIHNjaGVtYSBwYXJzZXIgY29udGV4dCIpOworCQl9CisKKwkJc2NoZW1hX3B0ciA9IHhtbFNj aGVtYVBhcnNlKHNjaGVtYV9wYXJzZXJfY3R4dCk7CisJCWlmIChzY2hlbWFfcHRyID09IE5VTEwp CisJCXsKKwkJCXhtbF9lcmVwb3J0KHhtbGVycmN4dCwgRVJST1IsIEVSUkNPREVfSU5WQUxJRF9Y TUxfRE9DVU1FTlQsCisJCQkJCQkiZmFpbGVkIHRvIHBhcnNlIFhNTCBzY2hlbWEiKTsKKwkJfQor CisJCXZhbGlkX2N0eHQgPSB4bWxTY2hlbWFOZXdWYWxpZEN0eHQoc2NoZW1hX3B0cik7CisJCWlm ICh2YWxpZF9jdHh0ID09IE5VTEwpCisJCXsKKwkJCXhtbF9lcmVwb3J0KHhtbGVycmN4dCwgRVJS T1IsIEVSUkNPREVfT1VUX09GX01FTU9SWSwKKwkJCQkJCSJmYWlsZWQgdG8gY3JlYXRlIHNjaGVt YSB2YWxpZGF0aW9uIGNvbnRleHQiKTsKKwkJfQorCisJCS8qIFZhbGlkYXRlIHRoZSBkb2N1bWVu dCAtIHJldHVybnMgMCBpZiB2YWxpZCwKKwkJICAgZ3JlYXRlciB0aGFuIDAgaWYgaW52YWxpZCBh bmQgPCAwIGlmIGVycm9yICovCisJCXJlc3VsdCA9IHhtbFNjaGVtYVZhbGlkYXRlRG9jKHZhbGlk X2N0eHQsIGRvYyk7CisJCWlmIChyZXN1bHQgPCAwKQorCQl7CisJCQl4bWxfZXJlcG9ydCh4bWxl cnJjeHQsIEVSUk9SLCBFUlJDT0RFX0lOVEVSTkFMX0VSUk9SLAorCQkJCQkJImludGVybmFsIGVy cm9yIGR1cmluZyBzY2hlbWEgdmFsaWRhdGlvbiIpOworCQl9IGVsc2UgaWYgKHJlc3VsdCA9PSAw KSB7CisJCQlyZXR1cm4gdHJ1ZTsKKwkJfSBlbHNlIHsKKwkJCXJldHVybiBmYWxzZTsKKwkJfQor CX0KKwlQR19DQVRDSCgpOworCXsKKwkJaWYgKHZhbGlkX2N0eHQpCisJCQl4bWxTY2hlbWFGcmVl VmFsaWRDdHh0KHZhbGlkX2N0eHQpOworCQlpZiAoc2NoZW1hX3B0cikKKwkJCXhtbFNjaGVtYUZy ZWUoc2NoZW1hX3B0cik7CisJCWlmIChzY2hlbWFfcGFyc2VyX2N0eHQpCisJCQl4bWxTY2hlbWFG cmVlUGFyc2VyQ3R4dChzY2hlbWFfcGFyc2VyX2N0eHQpOworCQlpZiAoZG9jKQorCQkJeG1sRnJl ZURvYyhkb2MpOworCQlwZ194bWxfZG9uZSh4bWxlcnJjeHQsIHRydWUpOworCQlwZnJlZShkYXRh c3RyKTsKKwkJcGZyZWUoc2NoZW1hc3RyKTsKKwkJUEdfUkVfVEhST1coKTsKKwl9CisJUEdfRU5E X1RSWSgpOworCWlmICh2YWxpZF9jdHh0KQorCQl4bWxTY2hlbWFGcmVlVmFsaWRDdHh0KHZhbGlk X2N0eHQpOworCWlmIChzY2hlbWFfcHRyKQorCQl4bWxTY2hlbWFGcmVlKHNjaGVtYV9wdHIpOwor CWlmIChzY2hlbWFfcGFyc2VyX2N0eHQpCisJCXhtbFNjaGVtYUZyZWVQYXJzZXJDdHh0KHNjaGVt YV9wYXJzZXJfY3R4dCk7CisJaWYgKGRvYykKKwkJeG1sRnJlZURvYyhkb2MpOworCisJcGdfeG1s X2RvbmUoeG1sZXJyY3h0LCBmYWxzZSk7CisKKwlwZnJlZShkYXRhc3RyKTsKKwlwZnJlZShzY2hl bWFzdHIpOworCS8vIERlZmF1bHQgY2FzZSBzaW5jZSBub3RoaW5nIGdvdCByZXR1cm5lZAorCS8v IG91dCBvZiB0aGUgbm9ybWFsIHBhdGggZm9yIHZhbGlkYXRpb24gY2FsbHMgdG8gbGlieG1sCisJ cmV0dXJuIGZhbHNlOworI2Vsc2UKKwlOT19YTUxfU1VQUE9SVCgpOworCXJldHVybiBOVUxMOwor I2VuZGlmCit9CiAKIGJvb2wKIHhtbF9pc19kb2N1bWVudCh4bWx0eXBlICphcmcpCmRpZmYgLS1n aXQgYS9zcmMvaW5jbHVkZS9ub2Rlcy9wcmltbm9kZXMuaCBiL3NyYy9pbmNsdWRlL25vZGVzL3By aW1ub2Rlcy5oCmluZGV4IDFiNDQzNmYyZmY2Li41MzY1YTAwMTJjMSAxMDA2NDQKLS0tIGEvc3Jj L2luY2x1ZGUvbm9kZXMvcHJpbW5vZGVzLmgKKysrIGIvc3JjL2luY2x1ZGUvbm9kZXMvcHJpbW5v ZGVzLmgKQEAgLTE2MTAsNiArMTYxMCw3IEBAIHR5cGVkZWYgZW51bSBYbWxFeHByT3AKIAlJU19Y TUxST09ULAkJCQkJLyogWE1MUk9PVCh4bWwsIHZlcnNpb24sIHN0YW5kYWxvbmUpICovCiAJSVNf WE1MU0VSSUFMSVpFLAkJCS8qIFhNTFNFUklBTElaRShpc19kb2N1bWVudCwgeG1sdmFsLCBpbmRl bnQpICovCiAJSVNfRE9DVU1FTlQsCQkJCS8qIHhtbHZhbCBJUyBET0NVTUVOVCAqLworCUlTX1hN TFZBTElEQVRFLAkJCQkvKiBYTUxWQUxJREFURSh4bWx2YWwsIHNjaGVtYV90ZXh0KSAqLwogfSBY bWxFeHByT3A7CiAKIHR5cGVkZWYgZW51bSBYbWxPcHRpb25UeXBlCmRpZmYgLS1naXQgYS9zcmMv aW5jbHVkZS9wYXJzZXIva3dsaXN0LmggYi9zcmMvaW5jbHVkZS9wYXJzZXIva3dsaXN0LmgKaW5k ZXggNWQ0ZmUyN2VmOTYuLmJlN2U4YmFiM2Y2IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9wYXJz ZXIva3dsaXN0LmgKKysrIGIvc3JjL2luY2x1ZGUvcGFyc2VyL2t3bGlzdC5oCkBAIC0yOSw2ICsy OSw3IEBAIFBHX0tFWVdPUkQoImFib3J0IiwgQUJPUlRfUCwgVU5SRVNFUlZFRF9LRVlXT1JELCBC QVJFX0xBQkVMKQogUEdfS0VZV09SRCgiYWJzZW50IiwgQUJTRU5ULCBVTlJFU0VSVkVEX0tFWVdP UkQsIEJBUkVfTEFCRUwpCiBQR19LRVlXT1JEKCJhYnNvbHV0ZSIsIEFCU09MVVRFX1AsIFVOUkVT RVJWRURfS0VZV09SRCwgQkFSRV9MQUJFTCkKIFBHX0tFWVdPUkQoImFjY2VzcyIsIEFDQ0VTUywg VU5SRVNFUlZFRF9LRVlXT1JELCBCQVJFX0xBQkVMKQorUEdfS0VZV09SRCgiYWNjb3JkaW5nIiwg QUNDT1JESU5HLCBVTlJFU0VSVkVEX0tFWVdPUkQsIEJBUkVfTEFCRUwpCiBQR19LRVlXT1JEKCJh Y3Rpb24iLCBBQ1RJT04sIFVOUkVTRVJWRURfS0VZV09SRCwgQkFSRV9MQUJFTCkKIFBHX0tFWVdP UkQoImFkZCIsIEFERF9QLCBVTlJFU0VSVkVEX0tFWVdPUkQsIEJBUkVfTEFCRUwpCiBQR19LRVlX T1JEKCJhZG1pbiIsIEFETUlOLCBVTlJFU0VSVkVEX0tFWVdPUkQsIEJBUkVfTEFCRUwpCkBAIC01 MTgsOCArNTE5LDEwIEBAIFBHX0tFWVdPUkQoInhtbG5hbWVzcGFjZXMiLCBYTUxOQU1FU1BBQ0VT LCBDT0xfTkFNRV9LRVlXT1JELCBCQVJFX0xBQkVMKQogUEdfS0VZV09SRCgieG1scGFyc2UiLCBY TUxQQVJTRSwgQ09MX05BTUVfS0VZV09SRCwgQkFSRV9MQUJFTCkKIFBHX0tFWVdPUkQoInhtbHBp IiwgWE1MUEksIENPTF9OQU1FX0tFWVdPUkQsIEJBUkVfTEFCRUwpCiBQR19LRVlXT1JEKCJ4bWxy b290IiwgWE1MUk9PVCwgQ09MX05BTUVfS0VZV09SRCwgQkFSRV9MQUJFTCkKK1BHX0tFWVdPUkQo InhtbHNjaGVtYSIsIFhNTFNDSEVNQSwgVU5SRVNFUlZFRF9LRVlXT1JELCBCQVJFX0xBQkVMKQog UEdfS0VZV09SRCgieG1sc2VyaWFsaXplIiwgWE1MU0VSSUFMSVpFLCBDT0xfTkFNRV9LRVlXT1JE LCBCQVJFX0xBQkVMKQogUEdfS0VZV09SRCgieG1sdGFibGUiLCBYTUxUQUJMRSwgQ09MX05BTUVf S0VZV09SRCwgQkFSRV9MQUJFTCkKK1BHX0tFWVdPUkQoInhtbHZhbGlkYXRlIiwgWE1MVkFMSURB VEUsIENPTF9OQU1FX0tFWVdPUkQsIEJBUkVfTEFCRUwpCiBQR19LRVlXT1JEKCJ5ZWFyIiwgWUVB Ul9QLCBVTlJFU0VSVkVEX0tFWVdPUkQsIEFTX0xBQkVMKQogUEdfS0VZV09SRCgieWVzIiwgWUVT X1AsIFVOUkVTRVJWRURfS0VZV09SRCwgQkFSRV9MQUJFTCkKIFBHX0tFWVdPUkQoInpvbmUiLCBa T05FLCBVTlJFU0VSVkVEX0tFWVdPUkQsIEJBUkVfTEFCRUwpCmRpZmYgLS1naXQgYS9zcmMvaW5j bHVkZS91dGlscy94bWwuaCBiL3NyYy9pbmNsdWRlL3V0aWxzL3htbC5oCmluZGV4IDczMmRhYzQ3 YmM0Li4wNWNhZDc1ZTM4ZCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvdXRpbHMveG1sLmgKKysr IGIvc3JjL2luY2x1ZGUvdXRpbHMveG1sLmgKQEAgLTc2LDYgKzc2LDcgQEAgZXh0ZXJuIHhtbHR5 cGUgKnhtbGVsZW1lbnQoWG1sRXhwciAqeGV4cHIsCiBleHRlcm4geG1sdHlwZSAqeG1scGFyc2Uo dGV4dCAqZGF0YSwgWG1sT3B0aW9uVHlwZSB4bWxvcHRpb25fYXJnLCBib29sIHByZXNlcnZlX3do aXRlc3BhY2UpOwogZXh0ZXJuIHhtbHR5cGUgKnhtbHBpKGNvbnN0IGNoYXIgKnRhcmdldCwgdGV4 dCAqYXJnLCBib29sIGFyZ19pc19udWxsLCBib29sICpyZXN1bHRfaXNfbnVsbCk7CiBleHRlcm4g eG1sdHlwZSAqeG1scm9vdCh4bWx0eXBlICpkYXRhLCB0ZXh0ICp2ZXJzaW9uLCBpbnQgc3RhbmRh bG9uZSk7CitleHRlcm4gYm9vbCB4bWx2YWxpZGF0ZV9sb2NhbF9zY2hlbWEoeG1sdHlwZSAqZGF0 YSwgdGV4dCAqc2NoZW1hKTsKIGV4dGVybiBib29sIHhtbF9pc19kb2N1bWVudCh4bWx0eXBlICph cmcpOwogZXh0ZXJuIHRleHQgKnhtbHRvdGV4dF93aXRoX29wdGlvbnMoeG1sdHlwZSAqZGF0YSwg WG1sT3B0aW9uVHlwZSB4bWxvcHRpb25fYXJnLAogCQkJCQkJCQkJYm9vbCBpbmRlbnQpOwpkaWZm IC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC94bWwub3V0IGIvc3JjL3Rlc3QvcmVn cmVzcy9leHBlY3RlZC94bWwub3V0CmluZGV4IDEwM2EyMmEzYjFkLi4zYjI5Yjk2NDAzNiAxMDA2 NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC94bWwub3V0CisrKyBiL3NyYy90ZXN0 L3JlZ3Jlc3MvZXhwZWN0ZWQveG1sLm91dApAQCAtMTg4MSwzICsxODgxLDIxNCBAQCBTRUxFQ1Qg eG1sdGV4dCgneCd8fCAnPFA+NzM8L1A+Jzo6eG1sIHx8IC40MiB8fCB0cnVlIHx8ICdqJzo6Y2hh cik7CiAgeCZsdDtQJmd0OzczJmx0Oy9QJmd0OzAuNDJ0cnVlagogKDEgcm93KQogCitTRUxFQ1Qg eG1sdmFsaWRhdGUoRE9DVU1FTlQgJzxwZXJzb24+PG5hbWU+Sm9objwvbmFtZT48YWdlPjMwPC9h Z2U+PC9wZXJzb24+JworICBBQ0NPUkRJTkcgVE8gWE1MU0NIRU1BICc8P3htbCB2ZXJzaW9uPSIx LjAiPz4KKzx4czpzY2hlbWEgeG1sbnM6eHM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2No ZW1hIj4KKyAgPHhzOmVsZW1lbnQgbmFtZT0icGVyc29uIj4KKyAgICA8eHM6Y29tcGxleFR5cGU+ CisgICAgICA8eHM6c2VxdWVuY2U+CisgICAgICAgIDx4czplbGVtZW50IG5hbWU9Im5hbWUiIHR5 cGU9InhzOnN0cmluZyIvPgorICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJhZ2UiIHR5cGU9Inhz OmludGVnZXIiLz4KKyAgICAgIDwveHM6c2VxdWVuY2U+CisgICAgPC94czpjb21wbGV4VHlwZT4K KyAgPC94czplbGVtZW50PgorPC94czpzY2hlbWE+Jyk7CisgeG1sdmFsaWRhdGUgCistLS0tLS0t LS0tLS0tCisgdAorKDEgcm93KQorCitTRUxFQ1QgeG1sdmFsaWRhdGUoRE9DVU1FTlQgJzxwZXJz b24+PG5hbWU+Sm9objwvbmFtZT48L3BlcnNvbj4nCisgIEFDQ09SRElORyBUTyBYTUxTQ0hFTUEg Jzw/eG1sIHZlcnNpb249IjEuMCI/PgorPHhzOnNjaGVtYSB4bWxuczp4cz0iaHR0cDovL3d3dy53 My5vcmcvMjAwMS9YTUxTY2hlbWEiPgorICA8eHM6ZWxlbWVudCBuYW1lPSJwZXJzb24iPgorICAg IDx4czpjb21wbGV4VHlwZT4KKyAgICAgIDx4czpzZXF1ZW5jZT4KKyAgICAgICAgPHhzOmVsZW1l bnQgbmFtZT0ibmFtZSIgdHlwZT0ieHM6c3RyaW5nIi8+CisgICAgICAgIDx4czplbGVtZW50IG5h bWU9ImFnZSIgdHlwZT0ieHM6aW50ZWdlciIvPgorICAgICAgPC94czpzZXF1ZW5jZT4KKyAgICA8 L3hzOmNvbXBsZXhUeXBlPgorICA8L3hzOmVsZW1lbnQ+Cis8L3hzOnNjaGVtYT4nKTsKKyB4bWx2 YWxpZGF0ZSAKKy0tLS0tLS0tLS0tLS0KKyBmCisoMSByb3cpCisKK1NFTEVDVCB4bWx2YWxpZGF0 ZShET0NVTUVOVCAnPHBlcnNvbj48bmFtZT5Kb2huPC9uYW1lPjxhZ2U+bm90LWEtbnVtYmVyPC9h Z2U+PC9wZXJzb24+JworICBBQ0NPUkRJTkcgVE8gWE1MU0NIRU1BICc8P3htbCB2ZXJzaW9uPSIx LjAiPz4KKzx4czpzY2hlbWEgeG1sbnM6eHM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2No ZW1hIj4KKyAgPHhzOmVsZW1lbnQgbmFtZT0icGVyc29uIj4KKyAgICA8eHM6Y29tcGxleFR5cGU+ CisgICAgICA8eHM6c2VxdWVuY2U+CisgICAgICAgIDx4czplbGVtZW50IG5hbWU9Im5hbWUiIHR5 cGU9InhzOnN0cmluZyIvPgorICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJhZ2UiIHR5cGU9Inhz OmludGVnZXIiLz4KKyAgICAgIDwveHM6c2VxdWVuY2U+CisgICAgPC94czpjb21wbGV4VHlwZT4K KyAgPC94czplbGVtZW50PgorPC94czpzY2hlbWE+Jyk7CisgeG1sdmFsaWRhdGUgCistLS0tLS0t LS0tLS0tCisgZgorKDEgcm93KQorCitTRUxFQ1QgeG1sdmFsaWRhdGUoQ09OVEVOVCAnPGJvb2s+ PHRpdGxlPlBvc3RncmVTUUwgSW50ZXJuYWxzPC90aXRsZT48L2Jvb2s+JworICBBQ0NPUkRJTkcg VE8gWE1MU0NIRU1BICc8P3htbCB2ZXJzaW9uPSIxLjAiPz4KKzx4czpzY2hlbWEgeG1sbnM6eHM9 Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIj4KKyAgPHhzOmVsZW1lbnQgbmFtZT0i Ym9vayI+CisgICAgPHhzOmNvbXBsZXhUeXBlPgorICAgICAgPHhzOnNlcXVlbmNlPgorICAgICAg ICA8eHM6ZWxlbWVudCBuYW1lPSJ0aXRsZSIgdHlwZT0ieHM6c3RyaW5nIi8+CisgICAgICA8L3hz OnNlcXVlbmNlPgorICAgIDwveHM6Y29tcGxleFR5cGU+CisgIDwveHM6ZWxlbWVudD4KKzwveHM6 c2NoZW1hPicpOworIHhtbHZhbGlkYXRlIAorLS0tLS0tLS0tLS0tLQorIHQKKygxIHJvdykKKwor U0VMRUNUIHhtbHZhbGlkYXRlKERPQ1VNRU5UIE5VTEwKKyAgQUNDT1JESU5HIFRPIFhNTFNDSEVN QSAnPD94bWwgdmVyc2lvbj0iMS4wIj8+Cis8eHM6c2NoZW1hIHhtbG5zOnhzPSJodHRwOi8vd3d3 LnczLm9yZy8yMDAxL1hNTFNjaGVtYSI+CisgIDx4czplbGVtZW50IG5hbWU9InRlc3QiIHR5cGU9 InhzOnN0cmluZyIvPgorPC94czpzY2hlbWE+Jyk7CisgeG1sdmFsaWRhdGUgCistLS0tLS0tLS0t LS0tCisgCisoMSByb3cpCisKK1NFTEVDVCB4bWx2YWxpZGF0ZShET0NVTUVOVCAnPHRlc3Q+dmFs dWU8L3Rlc3Q+JworICBBQ0NPUkRJTkcgVE8gWE1MU0NIRU1BIE5VTEwpOworIHhtbHZhbGlkYXRl IAorLS0tLS0tLS0tLS0tLQorIAorKDEgcm93KQorCitTRUxFQ1QgeG1sdmFsaWRhdGUoRE9DVU1F TlQgTlVMTCBBQ0NPUkRJTkcgVE8gWE1MU0NIRU1BIE5VTEwpOworIHhtbHZhbGlkYXRlIAorLS0t LS0tLS0tLS0tLQorIAorKDEgcm93KQorCitTRUxFQ1QgeG1sdmFsaWRhdGUoRE9DVU1FTlQgJzxw cm9kdWN0IGlkPSIxMjMiPjxuYW1lPldpZGdldDwvbmFtZT48cHJpY2U+OS45OTwvcHJpY2U+PC9w cm9kdWN0PicKKyAgQUNDT1JESU5HIFRPIFhNTFNDSEVNQSAnPD94bWwgdmVyc2lvbj0iMS4wIj8+ Cis8eHM6c2NoZW1hIHhtbG5zOnhzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSI+ CisgIDx4czplbGVtZW50IG5hbWU9InByb2R1Y3QiPgorICAgIDx4czpjb21wbGV4VHlwZT4KKyAg ICAgIDx4czpzZXF1ZW5jZT4KKyAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0ibmFtZSIgdHlwZT0i eHM6c3RyaW5nIi8+CisgICAgICAgIDx4czplbGVtZW50IG5hbWU9InByaWNlIiB0eXBlPSJ4czpk ZWNpbWFsIi8+CisgICAgICA8L3hzOnNlcXVlbmNlPgorICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1l PSJpZCIgdHlwZT0ieHM6c3RyaW5nIiB1c2U9InJlcXVpcmVkIi8+CisgICAgPC94czpjb21wbGV4 VHlwZT4KKyAgPC94czplbGVtZW50PgorPC94czpzY2hlbWE+Jyk7CisgeG1sdmFsaWRhdGUgCist LS0tLS0tLS0tLS0tCisgdAorKDEgcm93KQorCitTRUxFQ1QgeG1sdmFsaWRhdGUoRE9DVU1FTlQg Jzxwcm9kdWN0PjxuYW1lPldpZGdldDwvbmFtZT48cHJpY2U+OS45OTwvcHJpY2U+PC9wcm9kdWN0 PicKKyAgQUNDT1JESU5HIFRPIFhNTFNDSEVNQSAnPD94bWwgdmVyc2lvbj0iMS4wIj8+Cis8eHM6 c2NoZW1hIHhtbG5zOnhzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSI+CisgIDx4 czplbGVtZW50IG5hbWU9InByb2R1Y3QiPgorICAgIDx4czpjb21wbGV4VHlwZT4KKyAgICAgIDx4 czpzZXF1ZW5jZT4KKyAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0ibmFtZSIgdHlwZT0ieHM6c3Ry aW5nIi8+CisgICAgICAgIDx4czplbGVtZW50IG5hbWU9InByaWNlIiB0eXBlPSJ4czpkZWNpbWFs Ii8+CisgICAgICA8L3hzOnNlcXVlbmNlPgorICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJpZCIg dHlwZT0ieHM6c3RyaW5nIiB1c2U9InJlcXVpcmVkIi8+CisgICAgPC94czpjb21wbGV4VHlwZT4K KyAgPC94czplbGVtZW50PgorPC94czpzY2hlbWE+Jyk7CisgeG1sdmFsaWRhdGUgCistLS0tLS0t LS0tLS0tCisgZgorKDEgcm93KQorCitTRUxFQ1QgeG1sdmFsaWRhdGUoRE9DVU1FTlQKKyAgJzxj b21wYW55PgorICAgIDxlbXBsb3llZT4KKyAgICAgIDxuYW1lPkFsaWNlPC9uYW1lPgorICAgICAg PHBvc2l0aW9uPkRldmVsb3BlcjwvcG9zaXRpb24+CisgICAgICA8c2FsYXJ5Pjc1MDAwPC9zYWxh cnk+CisgICAgPC9lbXBsb3llZT4KKyAgPC9jb21wYW55PicKKyAgQUNDT1JESU5HIFRPIFhNTFND SEVNQSAnPD94bWwgdmVyc2lvbj0iMS4wIj8+Cis8eHM6c2NoZW1hIHhtbG5zOnhzPSJodHRwOi8v d3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSI+CisgIDx4czplbGVtZW50IG5hbWU9ImNvbXBhbnki PgorICAgIDx4czpjb21wbGV4VHlwZT4KKyAgICAgIDx4czpzZXF1ZW5jZT4KKyAgICAgICAgPHhz OmVsZW1lbnQgbmFtZT0iZW1wbG95ZWUiIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KKyAgICAgICAg ICA8eHM6Y29tcGxleFR5cGU+CisgICAgICAgICAgICA8eHM6c2VxdWVuY2U+CisgICAgICAgICAg ICAgIDx4czplbGVtZW50IG5hbWU9Im5hbWUiIHR5cGU9InhzOnN0cmluZyIvPgorICAgICAgICAg ICAgICA8eHM6ZWxlbWVudCBuYW1lPSJwb3NpdGlvbiIgdHlwZT0ieHM6c3RyaW5nIi8+CisgICAg ICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9InNhbGFyeSIgdHlwZT0ieHM6ZGVjaW1hbCIvPgor ICAgICAgICAgICAgPC94czpzZXF1ZW5jZT4KKyAgICAgICAgICA8L3hzOmNvbXBsZXhUeXBlPgor ICAgICAgICA8L3hzOmVsZW1lbnQ+CisgICAgICA8L3hzOnNlcXVlbmNlPgorICAgIDwveHM6Y29t cGxleFR5cGU+CisgIDwveHM6ZWxlbWVudD4KKzwveHM6c2NoZW1hPicpOworIHhtbHZhbGlkYXRl IAorLS0tLS0tLS0tLS0tLQorIHQKKygxIHJvdykKKworQ1JFQVRFIFRBQkxFIHhtbF92YWxpZGF0 aW9uX3Rlc3QgKAorICB4bWxfZGF0YSB4bWwsCisgIHhzZF9zY2hlbWEgdGV4dAorKTsKK0NSRUFU RSBUQUJMRQorCitJTlNFUlQgSU5UTyB4bWxfdmFsaWRhdGlvbl90ZXN0IFZBTFVFUworICAoJzxu dW1iZXI+NDI8L251bWJlcj4nLAorICAgJzw/eG1sIHZlcnNpb249IjEuMCI/PgorPHhzOnNjaGVt YSB4bWxuczp4cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiPgorICA8eHM6ZWxl bWVudCBuYW1lPSJudW1iZXIiIHR5cGU9InhzOmludGVnZXIiLz4KKzwveHM6c2NoZW1hPicpLAor ICAoJzxudW1iZXI+bm90LWEtbnVtYmVyPC9udW1iZXI+JywKKyAgICc8P3htbCB2ZXJzaW9uPSIx LjAiPz4KKzx4czpzY2hlbWEgeG1sbnM6eHM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2No ZW1hIj4KKyAgPHhzOmVsZW1lbnQgbmFtZT0ibnVtYmVyIiB0eXBlPSJ4czppbnRlZ2VyIi8+Cis8 L3hzOnNjaGVtYT4nKSwKKyAgKCc8dGV4dD5IZWxsbyBXb3JsZDwvdGV4dD4nLAorICAgJzw/eG1s IHZlcnNpb249IjEuMCI/PgorPHhzOnNjaGVtYSB4bWxuczp4cz0iaHR0cDovL3d3dy53My5vcmcv MjAwMS9YTUxTY2hlbWEiPgorICA8eHM6ZWxlbWVudCBuYW1lPSJ0ZXh0IiB0eXBlPSJ4czpzdHJp bmciLz4KKzwveHM6c2NoZW1hPicpOworSU5TRVJUIDAgMworCitTRUxFQ1QgeG1sdmFsaWRhdGUo RE9DVU1FTlQgeG1sX2RhdGEgQUNDT1JESU5HIFRPIFhNTFNDSEVNQSB4c2Rfc2NoZW1hKSBBUyBp c192YWxpZAorRlJPTSB4bWxfdmFsaWRhdGlvbl90ZXN0OworIGlzX3ZhbGlkIAorLS0tLS0tLS0t LQorIHQKKyBmCisgdAorKDMgcm93cykKKworRFJPUCBUQUJMRSB4bWxfdmFsaWRhdGlvbl90ZXN0 OworRFJPUCBUQUJMRQorCitTRUxFQ1QgeG1sdmFsaWRhdGUoRE9DVU1FTlQgJzx0ZXN0PnZhbHVl PC90ZXN0PicKKyAgQUNDT1JESU5HIFRPIFhNTFNDSEVNQSAnPHRoaXMtaXMtbm90LXZhbGlkLXhz ZD4nKTsKK0VSUk9SOiAgZmFpbGVkIHRvIHBhcnNlIFhNTCBzY2hlbWEKK0RFVEFJTDogIGxpbmUg MTogUHJlbWF0dXJlIGVuZCBvZiBkYXRhIGluIHRhZyB0aGlzLWlzLW5vdC12YWxpZC14c2QgbGlu ZSAxCis8dGhpcy1pcy1ub3QtdmFsaWQteHNkPgorICAgICAgICAgICAgICAgICAgICAgICBeCisK K1NFTEVDVCB4bWx2YWxpZGF0ZShET0NVTUVOVCAnPHVuY2xvc2VkLXRhZz4nCisgIEFDQ09SRElO RyBUTyBYTUxTQ0hFTUEgJzw/eG1sIHZlcnNpb249IjEuMCI/PgorPHhzOnNjaGVtYSB4bWxuczp4 cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiPgorICA8eHM6ZWxlbWVudCBuYW1l PSJ0ZXN0IiB0eXBlPSJ4czpzdHJpbmciLz4KKzwveHM6c2NoZW1hPicpOworRVJST1I6ICBpbnZh bGlkIFhNTCBjb250ZW50CitMSU5FIDE6IFNFTEVDVCB4bWx2YWxpZGF0ZShET0NVTUVOVCAnPHVu Y2xvc2VkLXRhZz4nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeCitERVRB SUw6ICBsaW5lIDE6IFByZW1hdHVyZSBlbmQgb2YgZGF0YSBpbiB0YWcgdW5jbG9zZWQtdGFnIGxp bmUgMQorPHVuY2xvc2VkLXRhZz4KKyAgICAgICAgICAgICAgXgpcIE5vIG5ld2xpbmUgYXQgZW5k IG9mIGZpbGUKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3htbC5zcWwgYi9zcmMv dGVzdC9yZWdyZXNzL3NxbC94bWwuc3FsCmluZGV4IDBlYTRmNTA4ODM3Li4yN2E0ZTY0MmIyNCAx MDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwveG1sLnNxbAorKysgYi9zcmMvdGVzdC9y ZWdyZXNzL3NxbC94bWwuc3FsCkBAIC02NzksMyArNjc5LDE1NiBAQCBTRUxFQ1QgeG1sdGV4dCgn ICAnKTsKIFNFTEVDVCB4bWx0ZXh0KCdmb28gYCRfLSs/PSpeJSF8L1woKVtde30nKTsKIFNFTEVD VCB4bWx0ZXh0KCdmb28gJiA8ImJhciI+Jyk7CiBTRUxFQ1QgeG1sdGV4dCgneCd8fCAnPFA+NzM8 L1A+Jzo6eG1sIHx8IC40MiB8fCB0cnVlIHx8ICdqJzo6Y2hhcik7CisKK1NFTEVDVCB4bWx2YWxp ZGF0ZShET0NVTUVOVCAnPHBlcnNvbj48bmFtZT5Kb2huPC9uYW1lPjxhZ2U+MzA8L2FnZT48L3Bl cnNvbj4nCisgIEFDQ09SRElORyBUTyBYTUxTQ0hFTUEgJzw/eG1sIHZlcnNpb249IjEuMCI/Pgor PHhzOnNjaGVtYSB4bWxuczp4cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiPgor ICA8eHM6ZWxlbWVudCBuYW1lPSJwZXJzb24iPgorICAgIDx4czpjb21wbGV4VHlwZT4KKyAgICAg IDx4czpzZXF1ZW5jZT4KKyAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0ibmFtZSIgdHlwZT0ieHM6 c3RyaW5nIi8+CisgICAgICAgIDx4czplbGVtZW50IG5hbWU9ImFnZSIgdHlwZT0ieHM6aW50ZWdl ciIvPgorICAgICAgPC94czpzZXF1ZW5jZT4KKyAgICA8L3hzOmNvbXBsZXhUeXBlPgorICA8L3hz OmVsZW1lbnQ+Cis8L3hzOnNjaGVtYT4nKTsKKworU0VMRUNUIHhtbHZhbGlkYXRlKERPQ1VNRU5U ICc8cGVyc29uPjxuYW1lPkpvaG48L25hbWU+PC9wZXJzb24+JworICBBQ0NPUkRJTkcgVE8gWE1M U0NIRU1BICc8P3htbCB2ZXJzaW9uPSIxLjAiPz4KKzx4czpzY2hlbWEgeG1sbnM6eHM9Imh0dHA6 Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIj4KKyAgPHhzOmVsZW1lbnQgbmFtZT0icGVyc29u Ij4KKyAgICA8eHM6Y29tcGxleFR5cGU+CisgICAgICA8eHM6c2VxdWVuY2U+CisgICAgICAgIDx4 czplbGVtZW50IG5hbWU9Im5hbWUiIHR5cGU9InhzOnN0cmluZyIvPgorICAgICAgICA8eHM6ZWxl bWVudCBuYW1lPSJhZ2UiIHR5cGU9InhzOmludGVnZXIiLz4KKyAgICAgIDwveHM6c2VxdWVuY2U+ CisgICAgPC94czpjb21wbGV4VHlwZT4KKyAgPC94czplbGVtZW50PgorPC94czpzY2hlbWE+Jyk7 CisKK1NFTEVDVCB4bWx2YWxpZGF0ZShET0NVTUVOVCAnPHBlcnNvbj48bmFtZT5Kb2huPC9uYW1l PjxhZ2U+bm90LWEtbnVtYmVyPC9hZ2U+PC9wZXJzb24+JworICBBQ0NPUkRJTkcgVE8gWE1MU0NI RU1BICc8P3htbCB2ZXJzaW9uPSIxLjAiPz4KKzx4czpzY2hlbWEgeG1sbnM6eHM9Imh0dHA6Ly93 d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIj4KKyAgPHhzOmVsZW1lbnQgbmFtZT0icGVyc29uIj4K KyAgICA8eHM6Y29tcGxleFR5cGU+CisgICAgICA8eHM6c2VxdWVuY2U+CisgICAgICAgIDx4czpl bGVtZW50IG5hbWU9Im5hbWUiIHR5cGU9InhzOnN0cmluZyIvPgorICAgICAgICA8eHM6ZWxlbWVu dCBuYW1lPSJhZ2UiIHR5cGU9InhzOmludGVnZXIiLz4KKyAgICAgIDwveHM6c2VxdWVuY2U+Cisg ICAgPC94czpjb21wbGV4VHlwZT4KKyAgPC94czplbGVtZW50PgorPC94czpzY2hlbWE+Jyk7CisK K1NFTEVDVCB4bWx2YWxpZGF0ZShDT05URU5UICc8Ym9vaz48dGl0bGU+UG9zdGdyZVNRTCBJbnRl cm5hbHM8L3RpdGxlPjwvYm9vaz4nCisgIEFDQ09SRElORyBUTyBYTUxTQ0hFTUEgJzw/eG1sIHZl cnNpb249IjEuMCI/PgorPHhzOnNjaGVtYSB4bWxuczp4cz0iaHR0cDovL3d3dy53My5vcmcvMjAw MS9YTUxTY2hlbWEiPgorICA8eHM6ZWxlbWVudCBuYW1lPSJib29rIj4KKyAgICA8eHM6Y29tcGxl eFR5cGU+CisgICAgICA8eHM6c2VxdWVuY2U+CisgICAgICAgIDx4czplbGVtZW50IG5hbWU9InRp dGxlIiB0eXBlPSJ4czpzdHJpbmciLz4KKyAgICAgIDwveHM6c2VxdWVuY2U+CisgICAgPC94czpj b21wbGV4VHlwZT4KKyAgPC94czplbGVtZW50PgorPC94czpzY2hlbWE+Jyk7CisKK1NFTEVDVCB4 bWx2YWxpZGF0ZShET0NVTUVOVCBOVUxMCisgIEFDQ09SRElORyBUTyBYTUxTQ0hFTUEgJzw/eG1s IHZlcnNpb249IjEuMCI/PgorPHhzOnNjaGVtYSB4bWxuczp4cz0iaHR0cDovL3d3dy53My5vcmcv MjAwMS9YTUxTY2hlbWEiPgorICA8eHM6ZWxlbWVudCBuYW1lPSJ0ZXN0IiB0eXBlPSJ4czpzdHJp bmciLz4KKzwveHM6c2NoZW1hPicpOworCitTRUxFQ1QgeG1sdmFsaWRhdGUoRE9DVU1FTlQgJzx0 ZXN0PnZhbHVlPC90ZXN0PicKKyAgQUNDT1JESU5HIFRPIFhNTFNDSEVNQSBOVUxMKTsKKworU0VM RUNUIHhtbHZhbGlkYXRlKERPQ1VNRU5UIE5VTEwgQUNDT1JESU5HIFRPIFhNTFNDSEVNQSBOVUxM KTsKKworU0VMRUNUIHhtbHZhbGlkYXRlKERPQ1VNRU5UICc8cHJvZHVjdCBpZD0iMTIzIj48bmFt ZT5XaWRnZXQ8L25hbWU+PHByaWNlPjkuOTk8L3ByaWNlPjwvcHJvZHVjdD4nCisgIEFDQ09SRElO RyBUTyBYTUxTQ0hFTUEgJzw/eG1sIHZlcnNpb249IjEuMCI/PgorPHhzOnNjaGVtYSB4bWxuczp4 cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiPgorICA8eHM6ZWxlbWVudCBuYW1l PSJwcm9kdWN0Ij4KKyAgICA8eHM6Y29tcGxleFR5cGU+CisgICAgICA8eHM6c2VxdWVuY2U+Cisg ICAgICAgIDx4czplbGVtZW50IG5hbWU9Im5hbWUiIHR5cGU9InhzOnN0cmluZyIvPgorICAgICAg ICA8eHM6ZWxlbWVudCBuYW1lPSJwcmljZSIgdHlwZT0ieHM6ZGVjaW1hbCIvPgorICAgICAgPC94 czpzZXF1ZW5jZT4KKyAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iaWQiIHR5cGU9InhzOnN0cmlu ZyIgdXNlPSJyZXF1aXJlZCIvPgorICAgIDwveHM6Y29tcGxleFR5cGU+CisgIDwveHM6ZWxlbWVu dD4KKzwveHM6c2NoZW1hPicpOworCitTRUxFQ1QgeG1sdmFsaWRhdGUoRE9DVU1FTlQgJzxwcm9k dWN0PjxuYW1lPldpZGdldDwvbmFtZT48cHJpY2U+OS45OTwvcHJpY2U+PC9wcm9kdWN0PicKKyAg QUNDT1JESU5HIFRPIFhNTFNDSEVNQSAnPD94bWwgdmVyc2lvbj0iMS4wIj8+Cis8eHM6c2NoZW1h IHhtbG5zOnhzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSI+CisgIDx4czplbGVt ZW50IG5hbWU9InByb2R1Y3QiPgorICAgIDx4czpjb21wbGV4VHlwZT4KKyAgICAgIDx4czpzZXF1 ZW5jZT4KKyAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0ibmFtZSIgdHlwZT0ieHM6c3RyaW5nIi8+ CisgICAgICAgIDx4czplbGVtZW50IG5hbWU9InByaWNlIiB0eXBlPSJ4czpkZWNpbWFsIi8+Cisg ICAgICA8L3hzOnNlcXVlbmNlPgorICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJpZCIgdHlwZT0i eHM6c3RyaW5nIiB1c2U9InJlcXVpcmVkIi8+CisgICAgPC94czpjb21wbGV4VHlwZT4KKyAgPC94 czplbGVtZW50PgorPC94czpzY2hlbWE+Jyk7CisKK1NFTEVDVCB4bWx2YWxpZGF0ZShET0NVTUVO VAorICAnPGNvbXBhbnk+CisgICAgPGVtcGxveWVlPgorICAgICAgPG5hbWU+QWxpY2U8L25hbWU+ CisgICAgICA8cG9zaXRpb24+RGV2ZWxvcGVyPC9wb3NpdGlvbj4KKyAgICAgIDxzYWxhcnk+NzUw MDA8L3NhbGFyeT4KKyAgICA8L2VtcGxveWVlPgorICA8L2NvbXBhbnk+JworICBBQ0NPUkRJTkcg VE8gWE1MU0NIRU1BICc8P3htbCB2ZXJzaW9uPSIxLjAiPz4KKzx4czpzY2hlbWEgeG1sbnM6eHM9 Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIj4KKyAgPHhzOmVsZW1lbnQgbmFtZT0i Y29tcGFueSI+CisgICAgPHhzOmNvbXBsZXhUeXBlPgorICAgICAgPHhzOnNlcXVlbmNlPgorICAg ICAgICA8eHM6ZWxlbWVudCBuYW1lPSJlbXBsb3llZSIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiPgor ICAgICAgICAgIDx4czpjb21wbGV4VHlwZT4KKyAgICAgICAgICAgIDx4czpzZXF1ZW5jZT4KKyAg ICAgICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0ibmFtZSIgdHlwZT0ieHM6c3RyaW5nIi8+Cisg ICAgICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9InBvc2l0aW9uIiB0eXBlPSJ4czpzdHJpbmci Lz4KKyAgICAgICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0ic2FsYXJ5IiB0eXBlPSJ4czpkZWNp bWFsIi8+CisgICAgICAgICAgICA8L3hzOnNlcXVlbmNlPgorICAgICAgICAgIDwveHM6Y29tcGxl eFR5cGU+CisgICAgICAgIDwveHM6ZWxlbWVudD4KKyAgICAgIDwveHM6c2VxdWVuY2U+CisgICAg PC94czpjb21wbGV4VHlwZT4KKyAgPC94czplbGVtZW50PgorPC94czpzY2hlbWE+Jyk7CisKK0NS RUFURSBUQUJMRSB4bWxfdmFsaWRhdGlvbl90ZXN0ICgKKyAgeG1sX2RhdGEgeG1sLAorICB4c2Rf c2NoZW1hIHRleHQKKyk7CisKK0lOU0VSVCBJTlRPIHhtbF92YWxpZGF0aW9uX3Rlc3QgVkFMVUVT CisgICgnPG51bWJlcj40MjwvbnVtYmVyPicsCisgICAnPD94bWwgdmVyc2lvbj0iMS4wIj8+Cis8 eHM6c2NoZW1hIHhtbG5zOnhzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSI+Cisg IDx4czplbGVtZW50IG5hbWU9Im51bWJlciIgdHlwZT0ieHM6aW50ZWdlciIvPgorPC94czpzY2hl bWE+JyksCisgICgnPG51bWJlcj5ub3QtYS1udW1iZXI8L251bWJlcj4nLAorICAgJzw/eG1sIHZl cnNpb249IjEuMCI/PgorPHhzOnNjaGVtYSB4bWxuczp4cz0iaHR0cDovL3d3dy53My5vcmcvMjAw MS9YTUxTY2hlbWEiPgorICA8eHM6ZWxlbWVudCBuYW1lPSJudW1iZXIiIHR5cGU9InhzOmludGVn ZXIiLz4KKzwveHM6c2NoZW1hPicpLAorICAoJzx0ZXh0PkhlbGxvIFdvcmxkPC90ZXh0PicsCisg ICAnPD94bWwgdmVyc2lvbj0iMS4wIj8+Cis8eHM6c2NoZW1hIHhtbG5zOnhzPSJodHRwOi8vd3d3 LnczLm9yZy8yMDAxL1hNTFNjaGVtYSI+CisgIDx4czplbGVtZW50IG5hbWU9InRleHQiIHR5cGU9 InhzOnN0cmluZyIvPgorPC94czpzY2hlbWE+Jyk7CisKK1NFTEVDVCB4bWx2YWxpZGF0ZShET0NV TUVOVCB4bWxfZGF0YSBBQ0NPUkRJTkcgVE8gWE1MU0NIRU1BIHhzZF9zY2hlbWEpIEFTIGlzX3Zh bGlkCitGUk9NIHhtbF92YWxpZGF0aW9uX3Rlc3Q7CisKK0RST1AgVEFCTEUgeG1sX3ZhbGlkYXRp b25fdGVzdDsKKworU0VMRUNUIHhtbHZhbGlkYXRlKERPQ1VNRU5UICc8dGVzdD52YWx1ZTwvdGVz dD4nCisgIEFDQ09SRElORyBUTyBYTUxTQ0hFTUEgJzx0aGlzLWlzLW5vdC12YWxpZC14c2Q+Jyk7 CisKK1NFTEVDVCB4bWx2YWxpZGF0ZShET0NVTUVOVCAnPHVuY2xvc2VkLXRhZz4nCisgIEFDQ09S RElORyBUTyBYTUxTQ0hFTUEgJzw/eG1sIHZlcnNpb249IjEuMCI/PgorPHhzOnNjaGVtYSB4bWxu czp4cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiPgorICA8eHM6ZWxlbWVudCBu YW1lPSJ0ZXN0IiB0eXBlPSJ4czpzdHJpbmciLz4KKzwveHM6c2NoZW1hPicpOwo= --0000000000008f59d40645510f45--